Browse Source

Fix #350: cd on quit if NNN_TMPFILE is set

master
Arun Prakash Jana 5 years ago
parent
commit
d1d491c102
No known key found for this signature in database GPG Key ID: A75979F35C080412
6 changed files with 45 additions and 38 deletions
  1. +2
    -0
      misc/quitcd/quitcd.bash
  2. +4
    -0
      misc/quitcd/quitcd.csh
  3. +2
    -0
      misc/quitcd/quitcd.fish
  4. +2
    -0
      misc/quitcd/quitcd.zsh
  5. +0
    -5
      nnn.1
  6. +35
    -33
      src/nnn.c

+ 2
- 0
misc/quitcd/quitcd.bash View File

@@ -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 "$@"


+ 4
- 0
misc/quitcd/quitcd.csh View File

@@ -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"'

+ 2
- 0
misc/quitcd/quitcd.fish View File

@@ -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


+ 2
- 0
misc/quitcd/quitcd.zsh View File

@@ -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 "$@"


+ 0
- 5
nnn.1 View File

@@ -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:


+ 35
- 33
src/nnn.c View File

@@ -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;


Loading…
Cancel
Save