aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2017-04-24 02:36:49 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2017-04-24 02:36:49 +0530
commitb4166192e6f51e786ddece67245c95827a837a15 (patch)
tree34c48086675ec3d61f7e730f654c0e918b0fe83d
parentc9dafb297b7e0b72d527f4c1c8e57bf0f51b7eeb (diff)
downloadnnn-b4166192e6f51e786ddece67245c95827a837a15.tar.gz
Support jump to initial directory
This change remaps the & key. However, / is more relevant for filter and & makes more sense wrt. address.
-rw-r--r--README.md3
-rw-r--r--config.def.h7
-rwxr-xr-xnlay3
-rw-r--r--nnn.14
-rw-r--r--nnn.c18
5 files changed, 28 insertions, 7 deletions
diff --git a/README.md b/README.md
index bcb6a63..02639f4 100644
--- a/README.md
+++ b/README.md
@@ -139,9 +139,10 @@ nnn needs libreadline, libncursesw (on Linux or ncurses on OS X) and standard li
| `Right`, `Enter`, `l`, `^M` | Open file or enter dir |
| `Left`, `Backspace`, `h`, `^H` | Go to parent dir |
| `~` | Jump to HOME dir |
+| `&` | Jump to initial dir |
| `-` | Jump to last visited dir |
| `o` | Open dir in `NNN_DE_FILE_MANAGER` |
-| `/`, `&` | Filter dir contents |
+| `/` | Filter dir contents |
| `c` | Show change dir prompt |
| `d` | Toggle detail view |
| `D` | Toggle current file details screen |
diff --git a/config.def.h b/config.def.h
index 28771bf..1b53f6b 100644
--- a/config.def.h
+++ b/config.def.h
@@ -35,7 +35,6 @@ static struct key bindings[] = {
{ 'l', SEL_GOIN, "", "" },
/* Filter */
{ '/', SEL_FLTR, "", "" },
- { '&', SEL_FLTR, "", "" },
/* Next */
{ 'j', SEL_NEXT, "", "" },
{ KEY_DOWN, SEL_NEXT, "", "" },
@@ -50,12 +49,12 @@ static struct key bindings[] = {
/* Page up */
{ KEY_PPAGE, SEL_PGUP, "", "" },
{ CONTROL('U'), SEL_PGUP, "", "" },
- /* Home */
+ /* First entry */
{ KEY_HOME, SEL_HOME, "", "" },
{ 'g', SEL_HOME, "", "" },
{ CONTROL('A'), SEL_HOME, "", "" },
{ '^', SEL_HOME, "", "" },
- /* End */
+ /* Last entry */
{ KEY_END, SEL_END, "", "" },
{ 'G', SEL_END, "", "" },
{ CONTROL('E'), SEL_END, "", "" },
@@ -64,6 +63,8 @@ static struct key bindings[] = {
{ 'c', SEL_CD, "", "" },
/* HOME */
{ '~', SEL_CDHOME, "", "" },
+ /* Initial directory */
+ { '&', SEL_CDBEGIN, "", "" },
/* Last visited dir */
{ '-', SEL_LAST, "", "" },
/* Toggle hide .dot files */
diff --git a/nlay b/nlay
index fd06307..0106125 100755
--- a/nlay
+++ b/nlay
@@ -14,7 +14,8 @@
#
# The bg setting depends on personal preference and type of app, e.g.,
# I would start vim (CLI) in the foreground but Sublime Text (GUI) in the
-# background.
+# background. I also prefer mpv running in the background without disturbing
+# my ongoing activity in nnn by blocking navigation.
#
# Check (and TOGGLE as you wish) the default bg settings.
#
diff --git a/nnn.1 b/nnn.1
index 4fefe86..ac785dd 100644
--- a/nnn.1
+++ b/nnn.1
@@ -43,11 +43,13 @@ Open file or enter directory
Back up one directory level
.It Ic ~
Change to the HOME directory
+.It Ic &
+Change to initial directory
.It Ic -
Change to the last visited directory
.It Ic o
Open directory in NNN_DE_FILE_MANAGER
-.It Ic /, &
+.It Ic /
Change filter (more information below)
.It Ic c
Change into the given directory
diff --git a/nnn.c b/nnn.c
index 37a1938..cafed20 100644
--- a/nnn.c
+++ b/nnn.c
@@ -86,6 +86,7 @@ enum action {
SEL_END,
SEL_CD,
SEL_CDHOME,
+ SEL_CDBEGIN,
SEL_LAST,
SEL_TOGGLEDOT,
SEL_DETAIL,
@@ -946,9 +947,10 @@ show_help(void)
[Right], [Enter], l, ^M Open file or enter dir\n\
[Left], [Backspace], h, ^H Go to parent dir\n\
~ Jump to HOME dir\n\
+ & Jump to initial dir\n\
- Jump to last visited dir\n\
o Open dir in NNN_DE_FILE_MANAGER\n\
- /, & Filter dir contents\n\
+ / Filter dir contents\n\
c Show change dir prompt\n\
d Toggle detail view\n\
D Toggle current file details screen\n\
@@ -1554,6 +1556,20 @@ nochange:
xstrlcpy(fltr, ifilter, sizeof(fltr));
DPRINTF_S(path);
goto begin;
+ case SEL_CDBEGIN:
+ if (canopendir(ipath) == 0) {
+ printwarn();
+ goto nochange;
+ }
+
+ /* Save last working directory */
+ xstrlcpy(lastdir, path, sizeof(lastdir));
+
+ xstrlcpy(path, ipath, sizeof(path));
+ /* Reset filter */
+ xstrlcpy(fltr, ifilter, sizeof(fltr));
+ DPRINTF_S(path);
+ goto begin;
case SEL_LAST:
xstrlcpy(newpath, lastdir, sizeof(newpath));
xstrlcpy(lastdir, path, sizeof(lastdir));