@@ -19,6 +19,7 @@ _nnn () | |||||
-E | -E | ||||
-g | -g | ||||
-H | -H | ||||
-i | |||||
-K | -K | ||||
-n | -n | ||||
-o | -o | ||||
@@ -30,7 +31,6 @@ _nnn () | |||||
-S | -S | ||||
-t | -t | ||||
-v | -v | ||||
-V | |||||
-x | -x | ||||
-h | -h | ||||
) | ) | ||||
@@ -18,8 +18,9 @@ complete -c nnn -s d -d 'start in detail mode' | |||||
complete -c nnn -s E -d 'use EDITOR for undetached edits' | complete -c nnn -s E -d 'use EDITOR for undetached edits' | ||||
complete -c nnn -s g -d 'regex filters' | complete -c nnn -s g -d 'regex filters' | ||||
complete -c nnn -s H -d 'show hidden files' | complete -c nnn -s H -d 'show hidden files' | ||||
complete -c nnn -s i -d 'start in navigate-as-you-type mode' | |||||
complete -c nnn -s K -d 'detect key collision' | complete -c nnn -s K -d 'detect key collision' | ||||
complete -c nnn -s n -d 'start in navigate-as-you-type mode' | |||||
complete -c nnn -s n -d 'use version compare to sort files' | |||||
complete -c nnn -s o -d 'open files only on Enter' | complete -c nnn -s o -d 'open files only on Enter' | ||||
complete -c nnn -s p -r -d 'copy selection to file' -a '-\tstdout' | complete -c nnn -s p -r -d 'copy selection to file' -a '-\tstdout' | ||||
complete -c nnn -s Q -d 'disable quit confirmation' | complete -c nnn -s Q -d 'disable quit confirmation' | ||||
@@ -29,6 +30,5 @@ complete -c nnn -s s -r -d 'load session by name' -x -a '@\t"last session" (ls $ | |||||
complete -c nnn -s S -d 'start in disk usage analyzer mode' | complete -c nnn -s S -d 'start in disk usage analyzer mode' | ||||
complete -c nnn -s t -d 'disable dir auto-select' | complete -c nnn -s t -d 'disable dir auto-select' | ||||
complete -c nnn -s v -d 'show program version and exit' | complete -c nnn -s v -d 'show program version and exit' | ||||
complete -c nnn -s V -d 'use version compare to sort files' | |||||
complete -c nnn -s x -d 'notis, sel to system clipboard' | complete -c nnn -s x -d 'notis, sel to system clipboard' | ||||
complete -c nnn -s h -d 'show program help' | complete -c nnn -s h -d 'show program help' |
@@ -16,8 +16,9 @@ args=( | |||||
'(-E)-E[use EDITOR for undetached edits]' | '(-E)-E[use EDITOR for undetached edits]' | ||||
'(-g)-g[regex filters]' | '(-g)-g[regex filters]' | ||||
'(-H)-H[show hidden files]' | '(-H)-H[show hidden files]' | ||||
'(-i)-i[start in navigate-as-you-type mode]' | |||||
'(-K)-K[detect key collision]' | '(-K)-K[detect key collision]' | ||||
'(-n)-n[start in navigate-as-you-type mode]' | |||||
'(-n)-n[use version compare to sort files]' | |||||
'(-o)-o[open files only on Enter]' | '(-o)-o[open files only on Enter]' | ||||
'(-p)-p[copy selection to file]:file name' | '(-p)-p[copy selection to file]:file name' | ||||
'(-Q)-Q[disable quit confirmation]' | '(-Q)-Q[disable quit confirmation]' | ||||
@@ -27,7 +28,6 @@ args=( | |||||
'(-S)-S[start in disk usage analyzer mode]' | '(-S)-S[start in disk usage analyzer mode]' | ||||
'(-t)-t[disable dir auto-select]' | '(-t)-t[disable dir auto-select]' | ||||
'(-v)-v[show program version and exit]' | '(-v)-v[show program version and exit]' | ||||
'(-V)-V[use version compare to sort files]' | |||||
'(-x)-x[notis, sel to system clipboard]' | '(-x)-x[notis, sel to system clipboard]' | ||||
'(-h)-h[show program help]' | '(-h)-h[show program help]' | ||||
'*:filename:_files' | '*:filename:_files' | ||||
@@ -13,6 +13,7 @@ | |||||
.Op Ar -E | .Op Ar -E | ||||
.Op Ar -g | .Op Ar -g | ||||
.Op Ar -H | .Op Ar -H | ||||
.Op Ar -i | |||||
.Op Ar -K | .Op Ar -K | ||||
.Op Ar -n | .Op Ar -n | ||||
.Op Ar -p file | .Op Ar -p file | ||||
@@ -22,7 +23,6 @@ | |||||
.Op Ar -s name | .Op Ar -s name | ||||
.Op Ar -S | .Op Ar -S | ||||
.Op Ar -v | .Op Ar -v | ||||
.Op Ar -V | |||||
.Op Ar -x | .Op Ar -x | ||||
.Op Ar -h | .Op Ar -h | ||||
.Op Ar PATH | .Op Ar PATH | ||||
@@ -65,11 +65,14 @@ supports the following options: | |||||
.Fl H | .Fl H | ||||
show hidden files | show hidden files | ||||
.Pp | .Pp | ||||
.Fl i | |||||
start in navigate-as-you-type mode | |||||
.Pp | |||||
.Fl K | .Fl K | ||||
test for keybind collision | test for keybind collision | ||||
.Pp | .Pp | ||||
.Fl n | .Fl n | ||||
start in navigate-as-you-type mode | |||||
use case-insensitive version compare to sort files | |||||
.Pp | .Pp | ||||
.Fl o | .Fl o | ||||
open files only on Enter key | open files only on Enter key | ||||
@@ -98,9 +101,6 @@ supports the following options: | |||||
.Fl v | .Fl v | ||||
show version and exit | show version and exit | ||||
.Pp | .Pp | ||||
.Fl V | |||||
use case-insensitive version compare to sort files | |||||
.Pp | |||||
.Fl x | .Fl x | ||||
show notis on selection cp, mv, rm completion; copy path to system clipboard on select | show notis on selection cp, mv, rm completion; copy path to system clipboard on select | ||||
.Pp | .Pp | ||||
@@ -3473,13 +3473,14 @@ static void show_help(const char *path) | |||||
"7Left h Parent%-12c~ ` @ - HOME, /, start, last\n" | "7Left h Parent%-12c~ ` @ - HOME, /, start, last\n" | ||||
"9g ^A Top%-11cRet Right l Open\n" | "9g ^A Top%-11cRet Right l Open\n" | ||||
"9G ^E End%-21c' First file\n" | "9G ^E End%-21c' First file\n" | ||||
"c, Pin CWD%-17c. Toggle hidden\n" | |||||
"9b ^B Go to bookmark%-10cd Detail view toggle\n" | |||||
"cb Pin CWD%-16c^B Go to pinned dir\n" | |||||
"9, ^/ Go to bookmark%-10cd Detail view toggle\n" | |||||
"6(Sh)Tab Cycle context%-11cN Context N\n" | "6(Sh)Tab Cycle context%-11cN Context N\n" | ||||
"c/ Filter%-14c^/ ^N Nav-as-you-type toggle\n" | |||||
"c/ Filter%-13cIns ^N Nav-as-you-type toggle\n" | |||||
"aEsc Exit prompt%-9c^L F5 Redraw/clear prompt\n" | "aEsc Exit prompt%-9c^L F5 Redraw/clear prompt\n" | ||||
"b^G QuitCD%-18c? Help, conf\n" | |||||
"c. Toggle hidden%-11c? Help, conf\n" | |||||
"9Q ^Q Quit%-20cq Quit context\n" | "9Q ^Q Quit%-20cq Quit context\n" | ||||
"b^G QuitCD%-1c\n" | |||||
"1FILES\n" | "1FILES\n" | ||||
"b^O Open with...%-12cn Create new/link\n" | "b^O Open with...%-12cn Create new/link\n" | ||||
"cD File details%-8c^R F2 Rename/duplicate\n" | "cD File details%-8c^R F2 Rename/duplicate\n" | ||||
@@ -4542,7 +4543,8 @@ nochange: | |||||
case SEL_CDHOME: // fallthrough | case SEL_CDHOME: // fallthrough | ||||
case SEL_CDBEGIN: // fallthrough | case SEL_CDBEGIN: // fallthrough | ||||
case SEL_CDLAST: // fallthrough | case SEL_CDLAST: // fallthrough | ||||
case SEL_CDROOT: | |||||
case SEL_CDROOT: // fallthrough | |||||
case SEL_VISIT: | |||||
switch (sel) { | switch (sel) { | ||||
case SEL_CDHOME: | case SEL_CDHOME: | ||||
dir = home; | dir = home; | ||||
@@ -4553,9 +4555,12 @@ nochange: | |||||
case SEL_CDLAST: | case SEL_CDLAST: | ||||
dir = lastdir; | dir = lastdir; | ||||
break; | break; | ||||
default: /* SEL_CDROOT */ | |||||
case SEL_CDROOT: | |||||
dir = "/"; | dir = "/"; | ||||
break; | break; | ||||
default: /* case SEL_VISIT */ | |||||
dir = mark; | |||||
break; | |||||
} | } | ||||
if (dir[0] == '\0') { | if (dir[0] == '\0') { | ||||
@@ -4634,19 +4639,13 @@ nochange: | |||||
xstrlcpy(g_buf, messages[MSG_BOOKMARK_KEYS], CMD_LEN_MAX); | xstrlcpy(g_buf, messages[MSG_BOOKMARK_KEYS], CMD_LEN_MAX); | ||||
printkeys(bookmark, g_buf + strlen(g_buf), BM_MAX); | printkeys(bookmark, g_buf + strlen(g_buf), BM_MAX); | ||||
printprompt(g_buf); | printprompt(g_buf); | ||||
r = get_input(NULL); | |||||
fd = get_input(NULL); | |||||
if (!get_kv_val(bookmark, newpath, r, BM_MAX, TRUE)) { | |||||
if (r == ',' && mark[0]) | |||||
xstrlcpy(newpath, mark, PATH_MAX); | |||||
else { | |||||
printwait(messages[MSG_INVALID_KEY], &presel);; | |||||
goto nochange; | |||||
} | |||||
if (!get_kv_val(bookmark, newpath, fd, BM_MAX, TRUE)) { | |||||
printwait(messages[MSG_INVALID_KEY], &presel);; | |||||
goto nochange; | |||||
} | } | ||||
if (!xdiraccess(newpath)) { | if (!xdiraccess(newpath)) { | ||||
printwait(messages[MSG_ACCESS], &presel); | printwait(messages[MSG_ACCESS], &presel); | ||||
goto nochange; | goto nochange; | ||||
@@ -5467,8 +5466,9 @@ static void usage(void) | |||||
" -E use EDITOR for undetached edits\n" | " -E use EDITOR for undetached edits\n" | ||||
" -g regex filters [default: string]\n" | " -g regex filters [default: string]\n" | ||||
" -H show hidden files\n" | " -H show hidden files\n" | ||||
" -i nav-as-you-type mode\n" | |||||
" -K detect key collision\n" | " -K detect key collision\n" | ||||
" -n nav-as-you-type mode\n" | |||||
" -n version sort\n" | |||||
" -o open files on Enter\n" | " -o open files on Enter\n" | ||||
" -p file selection file [stdout if '-']\n" | " -p file selection file [stdout if '-']\n" | ||||
" -Q no quit confirmation\n" | " -Q no quit confirmation\n" | ||||
@@ -5478,7 +5478,6 @@ static void usage(void) | |||||
" -S du mode\n" | " -S du mode\n" | ||||
" -t no dir auto-select\n" | " -t no dir auto-select\n" | ||||
" -v show version\n" | " -v show version\n" | ||||
" -V version sort\n" | |||||
" -x notis, sel to system clipboard\n" | " -x notis, sel to system clipboard\n" | ||||
" -h show help\n\n" | " -h show help\n\n" | ||||
"v%s\n%s\n", __func__, VERSION, GENERAL_INFO); | "v%s\n%s\n", __func__, VERSION, GENERAL_INFO); | ||||
@@ -5622,7 +5621,7 @@ int main(int argc, char *argv[]) | |||||
bool progress = FALSE; | bool progress = FALSE; | ||||
#endif | #endif | ||||
while ((opt = getopt(argc, argv, "HSKab:cdEgnop:QrRs:tvVxh")) != -1) { | |||||
while ((opt = getopt(argc, argv, "HSKiab:cdEgnop:QrRs:tvxh")) != -1) { | |||||
switch (opt) { | switch (opt) { | ||||
case 'S': | case 'S': | ||||
cfg.blkorder = 1; | cfg.blkorder = 1; | ||||
@@ -5632,6 +5631,9 @@ int main(int argc, char *argv[]) | |||||
cfg.showdetail = 1; | cfg.showdetail = 1; | ||||
printptr = &printent_long; | printptr = &printent_long; | ||||
break; | break; | ||||
case 'i': | |||||
cfg.filtermode = 1; | |||||
break; | |||||
case 'a': | case 'a': | ||||
cfg.mtime = 0; | cfg.mtime = 0; | ||||
break; | break; | ||||
@@ -5652,7 +5654,7 @@ int main(int argc, char *argv[]) | |||||
cfg.showhidden = 1; | cfg.showhidden = 1; | ||||
break; | break; | ||||
case 'n': | case 'n': | ||||
cfg.filtermode = 1; | |||||
cmpfn = &xstrverscasecmp; | |||||
break; | break; | ||||
case 'o': | case 'o': | ||||
cfg.nonavopen = 1; | cfg.nonavopen = 1; | ||||
@@ -5697,9 +5699,6 @@ int main(int argc, char *argv[]) | |||||
case 'v': | case 'v': | ||||
fprintf(stdout, "%s\n", VERSION); | fprintf(stdout, "%s\n", VERSION); | ||||
return _SUCCESS; | return _SUCCESS; | ||||
case 'V': | |||||
cmpfn = &xstrverscasecmp; | |||||
break; | |||||
case 'x': | case 'x': | ||||
cfg.x11 = 1; | cfg.x11 = 1; | ||||
break; | break; | ||||
@@ -52,6 +52,7 @@ enum action { | |||||
SEL_CDBEGIN, | SEL_CDBEGIN, | ||||
SEL_CDLAST, | SEL_CDLAST, | ||||
SEL_CDROOT, | SEL_CDROOT, | ||||
SEL_VISIT, | |||||
SEL_CYCLE, | SEL_CYCLE, | ||||
SEL_CYCLER, | SEL_CYCLER, | ||||
SEL_CTX1, | SEL_CTX1, | ||||
@@ -154,6 +155,8 @@ static struct key bindings[] = { | |||||
{ '-', SEL_CDLAST }, | { '-', SEL_CDLAST }, | ||||
/* Go to / */ | /* Go to / */ | ||||
{ '`', SEL_CDROOT }, | { '`', SEL_CDROOT }, | ||||
/* Visit marked directory */ | |||||
{ CONTROL('B'), SEL_VISIT }, | |||||
/* Cycle contexts in forward direction */ | /* Cycle contexts in forward direction */ | ||||
{ '\t', SEL_CYCLE }, | { '\t', SEL_CYCLE }, | ||||
/* Cycle contexts in reverse direction */ | /* Cycle contexts in reverse direction */ | ||||
@@ -164,15 +167,15 @@ static struct key bindings[] = { | |||||
{ '3', SEL_CTX3 }, | { '3', SEL_CTX3 }, | ||||
{ '4', SEL_CTX4 }, | { '4', SEL_CTX4 }, | ||||
/* Bookmark key */ | /* Bookmark key */ | ||||
{ 'b', SEL_BOOKMARK }, | |||||
{ CONTROL('B'), SEL_BOOKMARK }, | |||||
{ CONTROL('_'), SEL_BOOKMARK }, | |||||
{ ',', SEL_BOOKMARK }, | |||||
/* Mark a path to visit later */ | /* Mark a path to visit later */ | ||||
{ ',', SEL_PIN }, | |||||
{ 'b', SEL_PIN }, | |||||
/* Filter */ | /* Filter */ | ||||
{ '/', SEL_FLTR }, | { '/', SEL_FLTR }, | ||||
/* Toggle filter mode */ | /* Toggle filter mode */ | ||||
{ KEY_IC, SEL_MFLTR }, | { KEY_IC, SEL_MFLTR }, | ||||
{ CONTROL('_'), SEL_MFLTR }, | |||||
{ CONTROL('N'), SEL_MFLTR }, | |||||
/* Toggle hide .dot files */ | /* Toggle hide .dot files */ | ||||
{ '.', SEL_TOGGLEDOT }, | { '.', SEL_TOGGLEDOT }, | ||||
/* Detailed listing */ | /* Detailed listing */ | ||||