misc/auto-completion/bash/nnn-completion.bash | 4 ++++ misc/auto-completion/fish/nnn.fish | 1 + misc/auto-completion/zsh/_nnn | 1 + nnn.1 | 5 +++++ src/nnn.c | 18 ++++++++++++------ diff --git a/misc/auto-completion/bash/nnn-completion.bash b/misc/auto-completion/bash/nnn-completion.bash index b6e370da932cb5c23f8a83ffb5c40763a635d3de..64dff7a640aee73c930f9ddcbba796ed2d1320cf 100644 --- a/misc/auto-completion/bash/nnn-completion.bash +++ b/misc/auto-completion/bash/nnn-completion.bash @@ -31,6 +31,7 @@ -R -s -S -t + -T -v -V -x @@ -46,6 +47,9 @@ local sessions_dir=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/sessions 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 99c857aa22a911e7bf56de85b73c12c338ec1dda..6bc3e0e0e1c02ffea5f13a86451c02324ce41e73 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 bd6e926ec370db482f085dd5104a6f4728a3cd49..f355263bd58885d692f7c389f37157ad3eeaa995 100644 --- a/misc/auto-completion/zsh/_nnn +++ b/misc/auto-completion/zsh/_nnn @@ -28,6 +28,7 @@ '(-R)-R[disable rollover at edges]' '(-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 307a508aa9c4a92cf5e73cf1b2b875b17825c8b6..0b5310abb91ba69cda4923a94cc01debfe0d6ae2 100644 --- a/nnn.1 +++ b/nnn.1 @@ -24,6 +24,7 @@ .Op Ar -R .Op Ar -s name .Op Ar -S .Op Ar -t secs +.Op Ar -T key .Op Ar -v .Op Ar -V .Op Ar -x @@ -109,6 +110,10 @@ start in disk usage analyzer mode .Pp .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 diff --git a/src/nnn.c b/src/nnn.c index da9ddddf53675a6dc0786d83ff5b06e73b7da1b3..6e2113e4e70ab9ec312f3db515dad37a248be649 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -4664,10 +4664,8 @@ 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 @@ cfg.showdetail ? (printptr = &printent_long) : (printptr = &printent); 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 @@ " -R no rollover at edges\n" " -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 env_opts_id = env_opts ? (int)strlen(env_opts) : -1; 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; @@ -6723,6 +6722,10 @@ break; case 't': if (env_opts_id < 0) idletimeout = atoi(optarg); + break; + case 'T': + if (env_opts_id < 0) + sort = optarg[0]; break; case 'v': namecmpfn = &xstrverscasecmp; @@ -6937,6 +6940,9 @@ #else if (!initcurses(NULL)) #endif return _FAILURE; + + if (sort) + set_sort_flags(sort); opt = browse(initpath, session);