diff --git a/misc/auto-completion/bash/nnn-completion.bash b/misc/auto-completion/bash/nnn-completion.bash index b6e370da..64dff7a6 100644 --- a/misc/auto-completion/bash/nnn-completion.bash +++ b/misc/auto-completion/bash/nnn-completion.bash @@ -31,6 +31,7 @@ _nnn () -s -S -t + -T -v -V -x @@ -46,6 +47,9 @@ _nnn () COMPREPLY=( $(cd "$sessions_dir" && compgen -f -d -- "$cur") ) elif [[ $prev == -t ]]; then return 1 + elif [[ $prev == -T ]]; then + local keys=$(echo "a d e r s t v" | awk -v RS=' ' '{print $0}') + COMPREPLY=( $(compgen -W "$keys" -- "$cur") ) elif [[ $cur == -* ]]; then COMPREPLY=( $(compgen -W "${opts[*]}" -- "$cur") ) else diff --git a/misc/auto-completion/fish/nnn.fish b/misc/auto-completion/fish/nnn.fish index 99c857aa..6bc3e0e0 100644 --- a/misc/auto-completion/fish/nnn.fish +++ b/misc/auto-completion/fish/nnn.fish @@ -30,6 +30,7 @@ complete -c nnn -s R -d 'disable rollover at edges' complete -c nnn -s s -r -d 'load session by name' -x -a '@\t"last session" (ls $sessions_dir)' complete -c nnn -s S -d 'start in disk usage analyzer mode' complete -c nnn -s t -r -d 'timeout in seconds to lock' +complete -c nnn -s T -r -d 'a d e r s t v' complete -c nnn -s v -d 'use version compare to sort files' complete -c nnn -s V -d 'show program version and exit' complete -c nnn -s x -d 'notis, sel to system clipboard' diff --git a/misc/auto-completion/zsh/_nnn b/misc/auto-completion/zsh/_nnn index bd6e926e..f355263b 100644 --- a/misc/auto-completion/zsh/_nnn +++ b/misc/auto-completion/zsh/_nnn @@ -28,6 +28,7 @@ args=( '(-s)-s[load session]:session name' '(-S)-S[start in disk usage analyzer mode]' '(-t)-t[timeout to lock]:seconds' + '(-T)-T[a d e r s t v]:key' '(-v)-v[use version compare to sort files]' '(-V)-V[show program version and exit]' '(-x)-x[notis, sel to system clipboard]' diff --git a/nnn.1 b/nnn.1 index 307a508a..0b5310ab 100644 --- a/nnn.1 +++ b/nnn.1 @@ -24,6 +24,7 @@ .Op Ar -s name .Op Ar -S .Op Ar -t secs +.Op Ar -T key .Op Ar -v .Op Ar -V .Op Ar -x @@ -110,6 +111,10 @@ supports the following options: .Fl "t secs" idle timeout in seconds to lock terminal .Pp +.Fl "T key" + sort order + keys: 'a'u / 'd'u / 'e'xtension / 'r'everse / 's'ize / 't'ime / 'v'ersion +.Pp .Fl v use case-insensitive version compare to sort files .Pp diff --git a/src/nnn.c b/src/nnn.c index da9ddddf..6e2113e4 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -4664,10 +4664,8 @@ static int handle_context_switch(enum action sel, char *newpath) return r; } -static bool set_sort_flags(void) +static bool set_sort_flags(int r) { - int r = get_input(messages[MSG_ORDER]); - switch (r) { case 'a': /* Apparent du */ cfg.apparentsz ^= 1; @@ -5559,7 +5557,7 @@ nochange: cfg.blkorder = 0; continue; default: /* SEL_SORT */ - if (!set_sort_flags()) { + if (!set_sort_flags(get_input(messages[MSG_ORDER]))) { if (cfg.filtermode) presel = FILTER; printwait(messages[MSG_INVALID_KEY], &presel); @@ -6491,6 +6489,7 @@ static void usage(void) " -s name load session by name\n" " -S du mode\n" " -t secs timeout to lock\n" + " -T key sort order [a/d/e/r/s/t/v]\n" " -v version sort\n" " -V show version\n" " -x notis, sel to system clipboard\n" @@ -6626,7 +6625,7 @@ int main(int argc, char *argv[]) { char *arg = NULL; char *session = NULL; - int opt; + int opt, sort = 0; #ifndef NOMOUSE mmask_t mask; char *middle_click_env = xgetenv(env_cfg[NNN_MCLICK], "\0"); @@ -6640,7 +6639,7 @@ int main(int argc, char *argv[]) while ((opt = (env_opts_id > 0 ? env_opts[--env_opts_id] - : getopt(argc, argv, "aAb:cdeEgHKnop:QrRs:St:vVxh"))) != -1) { + : getopt(argc, argv, "aAb:cdeEgHKnop:QrRs:St:T:vVxh"))) != -1) { switch (opt) { case 'a': cfg.mtime = 0; @@ -6724,6 +6723,10 @@ int main(int argc, char *argv[]) if (env_opts_id < 0) idletimeout = atoi(optarg); break; + case 'T': + if (env_opts_id < 0) + sort = optarg[0]; + break; case 'v': namecmpfn = &xstrverscasecmp; break; @@ -6938,6 +6941,9 @@ int main(int argc, char *argv[]) #endif return _FAILURE; + if (sort) + set_sort_flags(sort); + opt = browse(initpath, session); #ifndef NOMOUSE