xaizek / vifm (License: GPLv2+) (since 2018-12-07)
Vifm is a file manager with curses interface, which provides Vi[m]-like environment for managing objects within file systems, extended with some useful ideas from mutt.
Commit c8ca37b49499db50d63d83bf081454cf3a264786

Add <a-.>, <m-.>, <a-,> and <m-,> notation
Thanks to fugue.

See <https://q2a.vifm.info/2467/how-to-bind-a-and-a>.
Author: xaizek
Author date (UTC): 2026-07-11 12:47
Committer name: xaizek
Committer date (UTC): 2026-07-11 12:49
Parent(s): 0ff0bffa8744db52ec998bd0f8a39abdc3ae8dcf
Signing key: 99DC5E4DB05F6BE2
Tree: 8cb38324569accb6c52dfec645db03954e8f5248
File Lines added Lines deleted
ChangeLog 3 0
data/man/vifm.1 2 2
data/vim/doc/app/vifm-app.txt 2 2
data/vim/syntax/vifm.vim 2 2
src/bracket_notation.c 8 0
tests/test-data/syntax-highlight/syntax.vifm 4 0
File ChangeLog changed (mode: 100644) (index 0916f3744..6ce96b425)
48 48 Added 'keepsel' option to retain selection across mode switches. Patch by Added 'keepsel' option to retain selection across mode switches. Patch by
49 49 cairo55. cairo55.
50 50
51 Added angle-bracket notation for combinations Alt with comma and period.
52 Thanks to fugue.
53
51 54 Updated utf8proc to v2.11.3. Updated utf8proc to v2.11.3.
52 55
53 56 Made documentation on which :commands can have comments a bit more Made documentation on which :commands can have comments a bit more
File data/man/vifm.1 changed (mode: 100644) (index 8d87847cf..755599a82)
... ... Control + some key (see key conflict description below).
5910 5910 .br .br
5911 5911 Control + Space. Control + Space.
5912 5912 .TP .TP
5913 .BI "<a-a>,<a-b>,...,<a-z>"
5913 .BI "<a-a>,<a-b>,...,<a-z>,<a-.>,<a-,>"
5914 5914 .RE .RE
5915 .BI "<m-a>,<m-b>,...,<m-z>"
5915 .BI "<m-a>,<m-b>,...,<m-z>,<a-.>,<a-,>"
5916 5916 .br .br
5917 5917 .BI "<a-0>,<a-1>,...,<a-9>" "" " {only for *nix}" .BI "<a-0>,<a-1>,...,<a-9>" "" " {only for *nix}"
5918 5918 .br .br
File data/vim/doc/app/vifm-app.txt changed (mode: 100644) (index 1db6cfa02..c7f429a12)
... ... sequences that can be used in place of them. They are:
5008 5008 Control + some key (see key conflict description below). Control + some key (see key conflict description below).
5009 5009 <c-@> {only for *nix} <c-@> {only for *nix}
5010 5010 Control + Space. Control + Space.
5011 <a-a>,<a-b>,...,<a-z>
5012 <m-a>,<m-b>,...,<m-z>
5011 <a-a>,<a-b>,...,<a-z>,<a-.>,<a-,>
5012 <m-a>,<m-b>,...,<m-z>,<m-.>,<m-,>
5013 5013 <a-0>,<a-1>,...,<a-9> {only for *nix} <a-0>,<a-1>,...,<a-9> {only for *nix}
5014 5014 <m-0>,<m-1>,...,<m-9> {only for *nix} <m-0>,<m-1>,...,<m-9> {only for *nix}
5015 5015 Alt + some key. Alt + some key.
File data/vim/syntax/vifm.vim changed (mode: 100644) (index 7f4cfa70b..f62a8927b)
1 1 " vifm syntax file " vifm syntax file
2 2 " Maintainer: xaizek <xaizek@posteo.net> " Maintainer: xaizek <xaizek@posteo.net>
3 " Last Change: May 5, 2026
3 " Last Change: July 11, 2026
4 4 " Inspired By: Vim syntax file by Dr. Charles E. Campbell, Jr. " Inspired By: Vim syntax file by Dr. Charles E. Campbell, Jr.
5 5
6 6 if exists('b:current_syntax') if exists('b:current_syntax')
 
... ... syntax match vifmMapArgList '\(<\(help\|silent\|wait\)>\s*\)*' contained
453 453
454 454 " Ange-bracket notation " Ange-bracket notation
455 455 syntax case ignore syntax case ignore
456 syntax match vifmNotation '<\(esc\|cr\|space\|del\|nop\|\%(s-\)\?tab\|\%(s-\)\?home\|\%(s-\)\?end\|\%(s-\)\?left\|\%(s-\)\?right\|\%(s-\)\?up\|\%(s-\)\?down\|bs\|\%(s-\)\?delete\|\%(s-\)\?insert\|\%(s-\)\?pageup\|\%(s-\)\?pagedown\|\([acms]-\)\?f\d\{1,2\}\|c-s-[a-z[\]^_]\|s-c-[a-z[\]^_]\|c-[a-z[\]^_@]\|[am]-c-[a-z]\|c-[am]-[a-z]\|[am]-[0-9a-z]\|[am]-s-[a-z]\|s-[am]-[a-z]\)>'
456 syntax match vifmNotation '<\(esc\|cr\|space\|del\|nop\|\%(s-\)\?tab\|\%(s-\)\?home\|\%(s-\)\?end\|\%(s-\)\?left\|\%(s-\)\?right\|\%(s-\)\?up\|\%(s-\)\?down\|bs\|\%(s-\)\?delete\|\%(s-\)\?insert\|\%(s-\)\?pageup\|\%(s-\)\?pagedown\|\([acms]-\)\?f\d\{1,2\}\|c-s-[a-z[\]^_]\|s-c-[a-z[\]^_]\|c-[a-z[\]^_@]\|[am]-c-[a-z]\|c-[am]-[a-z]\|[am]-[0-9a-z.,]\|[am]-s-[a-z]\|s-[am]-[a-z]\)>'
457 457 syntax case match syntax case match
458 458
459 459 " Whole line comment " Whole line comment
File src/bracket_notation.c changed (mode: 100644) (index 60fb34432..f79247d26)
... ... static key_pair_t key_pairs[] = {
193 193 { L"<a-x>", L"\033"L"x" }, { L"<a-x>", L"\033"L"x" },
194 194 { L"<a-y>", L"\033"L"y" }, { L"<a-y>", L"\033"L"y" },
195 195 { L"<a-z>", L"\033"L"z" }, { L"<a-z>", L"\033"L"z" },
196 { L"<a-.>", L"\033"L"." },
197 { L"<a-,>", L"\033"L"," },
196 198 { L"<m-0>", L"\033"L"0" }, { L"<m-0>", L"\033"L"0" },
197 199 { L"<m-1>", L"\033"L"1" }, { L"<m-1>", L"\033"L"1" },
198 200 { L"<m-2>", L"\033"L"2" }, { L"<m-2>", L"\033"L"2" },
 
... ... static key_pair_t key_pairs[] = {
229 231 { L"<m-x>", L"\033"L"x" }, { L"<m-x>", L"\033"L"x" },
230 232 { L"<m-y>", L"\033"L"y" }, { L"<m-y>", L"\033"L"y" },
231 233 { L"<m-z>", L"\033"L"z" }, { L"<m-z>", L"\033"L"z" },
234 { L"<m-.>", L"\033"L"." },
235 { L"<m-,>", L"\033"L"," },
232 236 { L"<a-c-a>", L"\033"L"\x01" }, { L"<a-c-a>", L"\033"L"\x01" },
233 237 { L"<a-c-b>", L"\033"L"\x02" }, { L"<a-c-b>", L"\033"L"\x02" },
234 238 { L"<a-c-c>", L"\033"L"\x03" }, { L"<a-c-c>", L"\033"L"\x03" },
 
... ... static key_pair_t key_pairs[] = {
464 468 { L"<a-x>", { K(ALT_X) } }, { L"<a-x>", { K(ALT_X) } },
465 469 { L"<a-y>", { K(ALT_Y) } }, { L"<a-y>", { K(ALT_Y) } },
466 470 { L"<a-z>", { K(ALT_Z) } }, { L"<a-z>", { K(ALT_Z) } },
471 { L"<a-.>", { K(ALT_PERIOD) } },
472 { L"<a-,>", { K(ALT_COMMA) } },
467 473 { L"<m-a>", { K(ALT_A) } }, { L"<m-a>", { K(ALT_A) } },
468 474 { L"<m-b>", { K(ALT_B) } }, { L"<m-b>", { K(ALT_B) } },
469 475 { L"<m-c>", { K(ALT_C) } }, { L"<m-c>", { K(ALT_C) } },
 
... ... static key_pair_t key_pairs[] = {
490 496 { L"<m-x>", { K(ALT_X) } }, { L"<m-x>", { K(ALT_X) } },
491 497 { L"<m-y>", { K(ALT_Y) } }, { L"<m-y>", { K(ALT_Y) } },
492 498 { L"<m-z>", { K(ALT_Z) } }, { L"<m-z>", { K(ALT_Z) } },
499 { L"<m-.>", { K(ALT_PERIOD) } },
500 { L"<m-,>", { K(ALT_COMMA) } },
493 501 #endif #endif
494 502 { L"<del>", L"\177" }, { L"<del>", L"\177" },
495 503 #ifdef ENABLE_EXTENDED_KEYS #ifdef ENABLE_EXTENDED_KEYS
File tests/test-data/syntax-highlight/syntax.vifm changed (mode: 100644) (index 23b05f884..16d864030)
... ... cnoremap <s-delete> sdel
203 203 cnoremap <s-insert> sins cnoremap <s-insert> sins
204 204 cnoremap <s-pageup> spu cnoremap <s-pageup> spu
205 205 cnoremap <s-pagedown> spd cnoremap <s-pagedown> spd
206 cnoremap <a-.> adot
207 cnoremap <m-.> mdot
208 cnoremap <a-,> acomma
209 cnoremap <m-,> mcomma
206 210
207 211 " "windo" and "normal" should be highlighted as :command " "windo" and "normal" should be highlighted as :command
208 212 " "<cr>" should NOT be highlighted as bracket notation " "<cr>" should NOT be highlighted as bracket notation
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/vifm

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/vifm

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master