aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-10-11 23:19:25 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-10-11 23:19:25 +0530
commitd1d491c102f5da1bf6a2c8c21fa71530e74f90d3 (patch)
tree191129298cc38228a3313f850656604722c84548
parentc99a47d68898700160bec9f9ef3547cc39b49ecf (diff)
downloadnnn-d1d491c102f5da1bf6a2c8c21fa71530e74f90d3.tar.gz
Fix #350: cd on quit if NNN_TMPFILE is set
-rw-r--r--misc/quitcd/quitcd.bash2
-rw-r--r--misc/quitcd/quitcd.csh4
-rw-r--r--misc/quitcd/quitcd.fish2
-rw-r--r--misc/quitcd/quitcd.zsh2
-rw-r--r--nnn.15
-rw-r--r--src/nnn.c68
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 "$@"
diff --git a/nnn.1 b/nnn.1
index bdbe570..24b5eae 100644
--- a/nnn.1
+++ b/nnn.1
@@ -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:
diff --git a/src/nnn.c b/src/nnn.c
index 78e4029..afbda1f 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -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;