mirror of
https://github.com/jarun/nnn.git
synced 2024-12-01 02:49:44 +00:00
Support mark a directory
In certain workflows you know you would have revisit a directory. Mark it!
This commit is contained in:
parent
29961f060c
commit
3d89b3f945
|
@ -203,6 +203,8 @@ Home, g, ^, ^A | Jump to first entry
|
||||||
^/ | Open desktop search tool
|
^/ | Open desktop search tool
|
||||||
. | Toggle hide .dot files
|
. | Toggle hide .dot files
|
||||||
b | Show bookmark key prompt
|
b | Show bookmark key prompt
|
||||||
|
^B | Mark current dir
|
||||||
|
^V | Visit marked dir
|
||||||
c | Show change dir prompt
|
c | Show change dir prompt
|
||||||
d | Toggle detail view
|
d | Toggle detail view
|
||||||
D | Show current file details
|
D | Show current file details
|
||||||
|
|
7
config.h
7
config.h
|
@ -21,6 +21,8 @@ enum action {
|
||||||
SEL_CDBEGIN,
|
SEL_CDBEGIN,
|
||||||
SEL_CDLAST,
|
SEL_CDLAST,
|
||||||
SEL_CDBM,
|
SEL_CDBM,
|
||||||
|
SEL_MARK,
|
||||||
|
SEL_VISIT,
|
||||||
SEL_TOGGLEDOT,
|
SEL_TOGGLEDOT,
|
||||||
SEL_DETAIL,
|
SEL_DETAIL,
|
||||||
SEL_STATS,
|
SEL_STATS,
|
||||||
|
@ -111,6 +113,10 @@ static struct key bindings[] = {
|
||||||
{ '-', SEL_CDLAST, "", "" },
|
{ '-', SEL_CDLAST, "", "" },
|
||||||
/* Change dir using bookmark */
|
/* Change dir using bookmark */
|
||||||
{ 'b', SEL_CDBM, "", "" },
|
{ 'b', SEL_CDBM, "", "" },
|
||||||
|
/* Mark a path to visit later */
|
||||||
|
{ CONTROL('B'), SEL_MARK, "", "" },
|
||||||
|
/* Visit marked directory */
|
||||||
|
{ CONTROL('V'), SEL_VISIT, "", "" },
|
||||||
/* Toggle hide .dot files */
|
/* Toggle hide .dot files */
|
||||||
{ '.', SEL_TOGGLEDOT, "", "" },
|
{ '.', SEL_TOGGLEDOT, "", "" },
|
||||||
/* Detailed listing */
|
/* Detailed listing */
|
||||||
|
@ -129,6 +135,7 @@ static struct key bindings[] = {
|
||||||
{ 'S', SEL_BSIZE, "", "" },
|
{ 'S', SEL_BSIZE, "", "" },
|
||||||
/* Toggle sort by time */
|
/* Toggle sort by time */
|
||||||
{ 't', SEL_MTIME, "", "" },
|
{ 't', SEL_MTIME, "", "" },
|
||||||
|
/* Redraw window */
|
||||||
{ CONTROL('L'), SEL_REDRAW, "", "" },
|
{ CONTROL('L'), SEL_REDRAW, "", "" },
|
||||||
{ KEY_F(2), SEL_REDRAW, "", "" },
|
{ KEY_F(2), SEL_REDRAW, "", "" },
|
||||||
/* Copy currently selected file path */
|
/* Copy currently selected file path */
|
||||||
|
|
4
nnn.1
4
nnn.1
|
@ -61,6 +61,10 @@ Search directory in desktop search tool
|
||||||
Toggle hide .dot files
|
Toggle hide .dot files
|
||||||
.It Ic b
|
.It Ic b
|
||||||
Show bookmark key prompt
|
Show bookmark key prompt
|
||||||
|
.It Ic ^B
|
||||||
|
Mark current dir
|
||||||
|
.It Ic ^V
|
||||||
|
Visit marked dir
|
||||||
.It Ic c
|
.It Ic c
|
||||||
Show change dir prompt
|
Show change dir prompt
|
||||||
.It Ic d
|
.It Ic d
|
||||||
|
|
38
nnn.c
38
nnn.c
|
@ -1500,6 +1500,8 @@ Home, g, ^, ^A | Jump to first entry\n\
|
||||||
^/ | Open desktop search tool\n\
|
^/ | Open desktop search tool\n\
|
||||||
. | Toggle hide .dot files\n\
|
. | Toggle hide .dot files\n\
|
||||||
b | Show bookmark key prompt\n\
|
b | Show bookmark key prompt\n\
|
||||||
|
^B | Mark current dir\n\
|
||||||
|
^V | Visit marked dir\n\
|
||||||
c | Show change dir prompt\n\
|
c | Show change dir prompt\n\
|
||||||
d | Toggle detail view\n\
|
d | Toggle detail view\n\
|
||||||
D | Show current file details\n\
|
D | Show current file details\n\
|
||||||
|
@ -1854,9 +1856,8 @@ redraw(char *path)
|
||||||
static void
|
static void
|
||||||
browse(char *ipath, char *ifilter)
|
browse(char *ipath, char *ifilter)
|
||||||
{
|
{
|
||||||
char path[PATH_MAX], oldpath[PATH_MAX], newpath[PATH_MAX];
|
static char path[PATH_MAX], oldpath[PATH_MAX], newpath[PATH_MAX], lastdir[PATH_MAX], mark[PATH_MAX];
|
||||||
char lastdir[PATH_MAX];
|
static char fltr[LINE_MAX];
|
||||||
char fltr[LINE_MAX];
|
|
||||||
char *dir, *tmp, *run, *env, *tgt = NULL;
|
char *dir, *tmp, *run, *env, *tgt = NULL;
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
int r, fd, presel;
|
int r, fd, presel;
|
||||||
|
@ -1864,9 +1865,7 @@ browse(char *ipath, char *ifilter)
|
||||||
|
|
||||||
xstrlcpy(path, ipath, PATH_MAX);
|
xstrlcpy(path, ipath, PATH_MAX);
|
||||||
xstrlcpy(fltr, ifilter, LINE_MAX);
|
xstrlcpy(fltr, ifilter, LINE_MAX);
|
||||||
oldpath[0] = '\0';
|
oldpath[0] = newpath[0] = lastdir[0] = mark[0] = '\0';
|
||||||
newpath[0] = '\0';
|
|
||||||
lastdir[0] = '\0'; /* Can't move back from initial directory */
|
|
||||||
|
|
||||||
if (cfg.filtermode)
|
if (cfg.filtermode)
|
||||||
presel = FILTER;
|
presel = FILTER;
|
||||||
|
@ -2228,18 +2227,27 @@ nochange:
|
||||||
presel = FILTER;
|
presel = FILTER;
|
||||||
tgt = NULL;
|
tgt = NULL;
|
||||||
goto begin;
|
goto begin;
|
||||||
case SEL_CDLAST:
|
case SEL_CDLAST: // fallthrough
|
||||||
if (lastdir[0] == '\0') {
|
case SEL_VISIT:
|
||||||
printmsg("Hit end of history...");
|
if (sel == SEL_VISIT) {
|
||||||
|
if (xstrcmp(mark, path) == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
tmp = mark;
|
||||||
|
} else
|
||||||
|
tmp = lastdir;
|
||||||
|
|
||||||
|
if (tmp[0] == '\0') {
|
||||||
|
printmsg("Not set...");
|
||||||
goto nochange;
|
goto nochange;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (access(lastdir, R_OK) == -1) {
|
if (access(tmp, R_OK) == -1) {
|
||||||
printwarn();
|
printwarn();
|
||||||
goto nochange;
|
goto nochange;
|
||||||
}
|
}
|
||||||
|
|
||||||
xstrlcpy(newpath, lastdir, PATH_MAX);
|
xstrlcpy(newpath, tmp, PATH_MAX);
|
||||||
xstrlcpy(lastdir, path, PATH_MAX);
|
xstrlcpy(lastdir, path, PATH_MAX);
|
||||||
xstrlcpy(path, newpath, PATH_MAX);
|
xstrlcpy(path, newpath, PATH_MAX);
|
||||||
oldpath[0] = '\0';
|
oldpath[0] = '\0';
|
||||||
|
@ -2309,6 +2317,10 @@ nochange:
|
||||||
if (cfg.filtermode)
|
if (cfg.filtermode)
|
||||||
presel = FILTER;
|
presel = FILTER;
|
||||||
goto begin;
|
goto begin;
|
||||||
|
case SEL_MARK:
|
||||||
|
xstrlcpy(mark, path, PATH_MAX);
|
||||||
|
printmsg(mark);
|
||||||
|
goto nochange;
|
||||||
case SEL_TOGGLEDOT:
|
case SEL_TOGGLEDOT:
|
||||||
cfg.showhidden ^= 1;
|
cfg.showhidden ^= 1;
|
||||||
initfilter(cfg.showhidden, &ifilter);
|
initfilter(cfg.showhidden, &ifilter);
|
||||||
|
@ -2468,8 +2480,8 @@ Webpage: https://github.com/jarun/nnn\n", VERSION);
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char cwd[PATH_MAX], *ipath;
|
static char cwd[PATH_MAX];
|
||||||
char *ifilter, *bmstr;
|
char *ipath, *ifilter, *bmstr;
|
||||||
int opt;
|
int opt;
|
||||||
|
|
||||||
/* Confirm we are in a terminal */
|
/* Confirm we are in a terminal */
|
||||||
|
|
Loading…
Reference in a new issue