diff options
author | Arun Prakash Jana <engineerarun@gmail.com> | 2019-10-11 23:19:25 +0530 |
---|---|---|
committer | Arun Prakash Jana <engineerarun@gmail.com> | 2019-10-11 23:19:25 +0530 |
commit | d1d491c102f5da1bf6a2c8c21fa71530e74f90d3 (patch) | |
tree | 191129298cc38228a3313f850656604722c84548 | |
parent | c99a47d68898700160bec9f9ef3547cc39b49ecf (diff) | |
download | nnn-d1d491c102f5da1bf6a2c8c21fa71530e74f90d3.tar.gz |
Fix #350: cd on quit if NNN_TMPFILE is set
-rw-r--r-- | misc/quitcd/quitcd.bash | 2 | ||||
-rw-r--r-- | misc/quitcd/quitcd.csh | 4 | ||||
-rw-r--r-- | misc/quitcd/quitcd.fish | 2 | ||||
-rw-r--r-- | misc/quitcd/quitcd.zsh | 2 | ||||
-rw-r--r-- | nnn.1 | 5 | ||||
-rw-r--r-- | src/nnn.c | 68 |
6 files changed, 45 insertions, 38 deletions
diff --git a/misc/quitcd/quitcd.bash b/misc/quitcd/quitcd.bash index e303b4c..a26395d 100644 --- a/misc/quitcd/quitcd.bash +++ b/misc/quitcd/quitcd.bash @@ -1,5 +1,7 @@ n() { + # The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set) + # To cd on quit only on ^G, export NNN_TMPFILE after the call to nnn export NNN_TMPFILE=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd nnn "$@" diff --git a/misc/quitcd/quitcd.csh b/misc/quitcd/quitcd.csh index 9ea952d..206e620 100644 --- a/misc/quitcd/quitcd.csh +++ b/misc/quitcd/quitcd.csh @@ -1,3 +1,7 @@ # NOTE: set NNN_TMPFILE correctly if you use 'XDG_CONFIG_HOME' + +# The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set) +# To cd on quit only on ^G, export NNN_TMPFILE after the call to nnn set NNN_TMPFILE=~/.config/nnn/.lastd + alias n 'nnn; source "$NNN_TMPFILE"; rm "$NNN_TMPFILE"' diff --git a/misc/quitcd/quitcd.fish b/misc/quitcd/quitcd.fish index f2a54e8..4117cc5 100644 --- a/misc/quitcd/quitcd.fish +++ b/misc/quitcd/quitcd.fish @@ -3,6 +3,8 @@ # or, add the lines to the 'config.fish' file. function n --description 'support nnn quit and change directory' + # The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set) + # To cd on quit only on ^G, export NNN_TMPFILE after the call to nnn if test -n "$XDG_CONFIG_HOME" set -x NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd" else diff --git a/misc/quitcd/quitcd.zsh b/misc/quitcd/quitcd.zsh index c55b321..9259e4a 100644 --- a/misc/quitcd/quitcd.zsh +++ b/misc/quitcd/quitcd.zsh @@ -1,5 +1,7 @@ n() { + # The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set) + # To cd on quit only on ^G, export NNN_TMPFILE after the call to nnn export NNN_TMPFILE=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd nnn "$@" @@ -95,11 +95,6 @@ supports the following options: uses \fIxdg-open\fR (on Linux) and \fIopen(1)\fR (on macOS) as the desktop opener. .Pp There is no configuration file. Associated files are stored in \fB${XDG_CONFIG_HOME:-$HOME/.config}/nnn/\fR. Settings work on environment variables. See ENVIRONMENT section below. -.Pp -Configuring -.Nm -to change to the last visited directory on quit requires shell integration in a -few easy steps. Look up NNN_TMPFILE in the ENVIRONMENT section below. .Sh CONTEXTS Contexts serve the purpose of exploring multiple directories simultaneously. 4 contexts are available. The status of the contexts are shown in the top left corner: @@ -4603,9 +4603,42 @@ nochange: } if (!(r == CTX_MAX || r == '\r')) - break; + break; // fallthrough + case SEL_QUITCTX: + if (sel == SEL_QUITCTX) { + fd = cfg.curctx; /* fd used as tmp var */ + for (r = (fd + 1) & ~CTX_MAX; + (r != fd) && !g_ctx[r].c_cfg.ctxactive; + r = ((r + 1) & ~CTX_MAX)) { + }; + + if (r != fd) { + bool selmode = cfg.selmode ? TRUE : FALSE; + + g_ctx[fd].c_cfg.ctxactive = 0; + + /* Switch to next active context */ + path = g_ctx[r].c_path; + lastdir = g_ctx[r].c_last; + lastname = g_ctx[r].c_name; + + /* Switch light/detail mode */ + if (cfg.showdetail != g_ctx[r].c_cfg.showdetail) + /* Set the reverse */ + printptr = cfg.showdetail ? + &printent : &printent_long; + + cfg = g_ctx[r].c_cfg; + + /* Continue selection mode */ + cfg.selmode = selmode; + cfg.curctx = r; + setdirwatch(); + goto begin; + } + } - if (sel == SEL_QUITCD) { + if (sel == SEL_QUITCD || getenv("NNN_TMPFILE")) { /* In vim picker mode, clear selection and exit */ if (cfg.picker) { /* Picker mode: reset buffer or clear file */ @@ -4617,37 +4650,6 @@ nochange: } } return; - case SEL_QUITCTX: - fd = cfg.curctx; /* fd used as tmp var */ - for (r = (fd + 1) & ~CTX_MAX; - (r != fd) && !g_ctx[r].c_cfg.ctxactive; - r = ((r + 1) & ~CTX_MAX)) { - }; - - if (r != fd) { - bool selmode = cfg.selmode ? TRUE : FALSE; - - g_ctx[fd].c_cfg.ctxactive = 0; - - /* Switch to next active context */ - path = g_ctx[r].c_path; - lastdir = g_ctx[r].c_last; - lastname = g_ctx[r].c_name; - - /* Switch light/detail mode */ - if (cfg.showdetail != g_ctx[r].c_cfg.showdetail) - /* Set the reverse */ - printptr = cfg.showdetail ? &printent : &printent_long; - - cfg = g_ctx[r].c_cfg; - - /* Continue selection mode */ - cfg.selmode = selmode; - cfg.curctx = r; - setdirwatch(); - goto begin; - } - return; default: if (xlines != LINES || xcols != COLS) { idle = 0; |