mirror of
https://github.com/jarun/nnn.git
synced 2024-11-24 11:51:27 +00:00
Allow specifying output file in NNN_TMPFILE for cd on quit
This commit is contained in:
parent
f1dbb9622d
commit
f6856f61f7
|
@ -9,7 +9,6 @@ n ()
|
||||||
# The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set)
|
# The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set)
|
||||||
# To cd on quit only on ^G, remove the "export" as in:
|
# To cd on quit only on ^G, remove the "export" as in:
|
||||||
# NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"
|
# NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"
|
||||||
# NOTE: NNN_TMPFILE is fixed, should not be modified
|
|
||||||
export NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"
|
export NNN_TMPFILE="${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd"
|
||||||
|
|
||||||
# Unmask ^Q (, ^V etc.) (if required, see `stty -a`) to Quit nnn
|
# Unmask ^Q (, ^V etc.) (if required, see `stty -a`) to Quit nnn
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
|
|
||||||
# The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set)
|
# 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
|
# To cd on quit only on ^G, export NNN_TMPFILE after the call to nnn
|
||||||
# NOTE: NNN_TMPFILE is fixed, should not be modified
|
|
||||||
set NNN_TMPFILE=~/.config/nnn/.lastd
|
set NNN_TMPFILE=~/.config/nnn/.lastd
|
||||||
|
|
||||||
# Unmask ^Q (, ^V etc.) (if required, see `stty -a`) to Quit nnn
|
# Unmask ^Q (, ^V etc.) (if required, see `stty -a`) to Quit nnn
|
||||||
|
|
|
@ -14,7 +14,6 @@ function n --wraps nnn --description 'support nnn quit and change directory'
|
||||||
# The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set)
|
# The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set)
|
||||||
# To cd on quit only on ^G, remove the "-x" as in:
|
# To cd on quit only on ^G, remove the "-x" as in:
|
||||||
# set NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd"
|
# set NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd"
|
||||||
# NOTE: NNN_TMPFILE is fixed, should not be modified
|
|
||||||
if test -n "$XDG_CONFIG_HOME"
|
if test -n "$XDG_CONFIG_HOME"
|
||||||
set -x NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd"
|
set -x NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd"
|
||||||
else
|
else
|
||||||
|
|
5
nnn.1
5
nnn.1
|
@ -520,6 +520,11 @@ separated by \fI;\fR:
|
||||||
export NNN_LOCKER='cmatrix'
|
export NNN_LOCKER='cmatrix'
|
||||||
.Ed
|
.Ed
|
||||||
.Pp
|
.Pp
|
||||||
|
\fBNNN_TMPFILE:\fR \fIalways\fR cd on quit and write the command in the file specified.
|
||||||
|
.Bd -literal
|
||||||
|
export NNN_TMPFILE='/tmp/.lastd'
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
\fBNNN_HELP:\fR run a program and show the output on top of the program help page.
|
\fBNNN_HELP:\fR run a program and show the output on top of the program help page.
|
||||||
.Bd -literal
|
.Bd -literal
|
||||||
export NNN_HELP='fortune'
|
export NNN_HELP='fortune'
|
||||||
|
|
43
src/nnn.c
43
src/nnn.c
|
@ -1237,6 +1237,17 @@ static void reset_tilde_in_path(char *path)
|
||||||
home[homelen] = '\0';
|
home[homelen] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void convert_tilde(const char *path, char *buf)
|
||||||
|
{
|
||||||
|
if (path[0] == '~') {
|
||||||
|
ssize_t len = xstrlen(home);
|
||||||
|
ssize_t loclen = xstrlen(path);
|
||||||
|
|
||||||
|
xstrsncpy(buf, home, len + 1);
|
||||||
|
xstrsncpy(buf + len, path + 1, loclen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int create_tmp_file(void)
|
static int create_tmp_file(void)
|
||||||
{
|
{
|
||||||
xstrsncpy(g_tmpfpath + tmpfplen - 1, messages[STR_TMPFILE], TMP_LEN_MAX - tmpfplen);
|
xstrsncpy(g_tmpfpath + tmpfplen - 1, messages[STR_TMPFILE], TMP_LEN_MAX - tmpfplen);
|
||||||
|
@ -2676,21 +2687,21 @@ static void archive_selection(const char *cmd, const char *archive, const char *
|
||||||
free(buf);
|
free(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool write_lastdir(const char *curpath)
|
static void write_lastdir(const char *curpath, const char *outfile)
|
||||||
{
|
{
|
||||||
bool ret = FALSE;
|
if (!outfile)
|
||||||
size_t len = xstrlen(cfgpath);
|
xstrsncpy(cfgpath + xstrlen(cfgpath), "/.lastd", 8);
|
||||||
|
else
|
||||||
|
convert_tilde(outfile, g_buf);
|
||||||
|
|
||||||
xstrsncpy(cfgpath + len, "/.lastd", 8);
|
int fd = open(outfile
|
||||||
|
? (outfile[0] == '~' ? g_buf : outfile)
|
||||||
int fd = open(cfgpath, O_CREAT | O_WRONLY | O_TRUNC, 0666);
|
: cfgpath, O_CREAT | O_WRONLY | O_TRUNC, 0666);
|
||||||
|
|
||||||
if (fd != -1) {
|
if (fd != -1) {
|
||||||
dprintf(fd, "cd \"%s\"", curpath);
|
dprintf(fd, "cd \"%s\"", curpath);
|
||||||
close(fd);
|
close(fd);
|
||||||
ret = TRUE;
|
|
||||||
}
|
}
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3732,15 +3743,7 @@ static char *get_kv_val(kv *kvarr, char *buf, int key, uchar_t max, uchar_t id)
|
||||||
return pluginstr + kvarr[r].off;
|
return pluginstr + kvarr[r].off;
|
||||||
|
|
||||||
val = bmstr + kvarr[r].off;
|
val = bmstr + kvarr[r].off;
|
||||||
|
convert_tilde(val, g_buf);
|
||||||
if (val[0] == '~') {
|
|
||||||
ssize_t len = xstrlen(home);
|
|
||||||
ssize_t loclen = xstrlen(val);
|
|
||||||
|
|
||||||
xstrsncpy(g_buf, home, len + 1);
|
|
||||||
xstrsncpy(g_buf + len, val + 1, loclen);
|
|
||||||
}
|
|
||||||
|
|
||||||
return realpath(((val[0] == '~') ? g_buf : val), buf);
|
return realpath(((val[0] == '~') ? g_buf : val), buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7581,8 +7584,10 @@ nochange:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* CD on Quit */
|
/* CD on Quit */
|
||||||
if ((sel == SEL_QUITCD) || getenv("NNN_TMPFILE")) {
|
tmp = getenv("NNN_TMPFILE");
|
||||||
write_lastdir(path);
|
if ((sel == SEL_QUITCD) || tmp) {
|
||||||
|
write_lastdir(path, tmp);
|
||||||
|
/* ^G is a way to quit picker mode without picking anything */
|
||||||
if ((sel == SEL_QUITCD) && g_state.picker)
|
if ((sel == SEL_QUITCD) && g_state.picker)
|
||||||
selbufpos = 0;
|
selbufpos = 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue