aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/nnn.c46
-rw-r--r--src/nnn.h6
2 files changed, 19 insertions, 33 deletions
diff --git a/src/nnn.c b/src/nnn.c
index 65f6c43..4c8351c 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -2826,14 +2826,21 @@ nochange:
cur = ndents - 1;
break;
case SEL_CDHOME:
- dir = getenv("HOME");
- if (dir == NULL) {
- clearprompt();
- goto nochange;
- } // fallthrough
+ dir = xgetenv("HOME", path); // fallthrough
case SEL_CDBEGIN:
if (sel == SEL_CDBEGIN)
- dir = ipath;
+ dir = ipath; // fallthrough
+ case SEL_CDLAST:
+ if (sel == SEL_CDLAST)
+ dir = lastdir; // fallthrough
+ case SEL_VISIT:
+ if (sel == SEL_VISIT)
+ dir = mark;
+
+ if (dir[0] == '\0') {
+ printmsg("not set");
+ goto nochange;
+ }
if (!xdiraccess(dir))
goto nochange;
@@ -2841,33 +2848,12 @@ nochange:
if (strcmp(path, dir) == 0)
break;
+ /* SEL_CDLAST: dir pointing to lastdir */
+ xstrlcpy(newpath, dir, PATH_MAX);
+
/* Save last working directory */
xstrlcpy(lastdir, path, PATH_MAX);
- xstrlcpy(path, dir, PATH_MAX);
- lastname[0] = '\0';
- DPRINTF_S(path);
- setdirwatch();
- goto begin;
- case SEL_CDLAST: // fallthrough
- case SEL_VISIT:
- if (sel == SEL_VISIT) {
- if (strcmp(mark, path) == 0)
- break;
-
- tmp = mark;
- } else
- tmp = lastdir;
-
- if (tmp[0] == '\0') {
- printmsg("not set");
- goto nochange;
- }
- if (!xdiraccess(tmp))
- goto nochange;
-
- xstrlcpy(newpath, tmp, PATH_MAX);
- xstrlcpy(lastdir, path, PATH_MAX);
xstrlcpy(path, newpath, PATH_MAX);
lastname[0] = '\0';
DPRINTF_S(path);
diff --git a/src/nnn.h b/src/nnn.h
index 9a2930f..adccfc6 100644
--- a/src/nnn.h
+++ b/src/nnn.h
@@ -48,6 +48,7 @@ enum action {
SEL_CDHOME,
SEL_CDBEGIN,
SEL_CDLAST,
+ SEL_VISIT,
SEL_LEADER,
SEL_CYCLE,
SEL_CTX1,
@@ -55,7 +56,6 @@ enum action {
SEL_CTX3,
SEL_CTX4,
SEL_PIN,
- SEL_VISIT,
SEL_FLTR,
SEL_MFLTR,
SEL_TOGGLEDOT,
@@ -141,6 +141,8 @@ static struct key bindings[] = {
{ '&', SEL_CDBEGIN },
/* Last visited dir */
{ '-', SEL_CDLAST },
+ /* Visit marked directory */
+ { CONTROL('W'), SEL_VISIT },
/* Leader key */
{ CONTROL('_'), SEL_LEADER },
{ '`', SEL_LEADER },
@@ -154,8 +156,6 @@ static struct key bindings[] = {
{ '4', SEL_CTX4 },
/* Mark a path to visit later */
{ 'b', SEL_PIN },
- /* Visit marked directory */
- { CONTROL('W'), SEL_VISIT },
/* Filter */
{ '/', SEL_FLTR },
/* Toggle filter mode */