From b4166192e6f51e786ddece67245c95827a837a15 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Mon, 24 Apr 2017 02:36:49 +0530 Subject: [PATCH] Support jump to initial directory This change remaps the & key. However, / is more relevant for filter and & makes more sense wrt. address. --- README.md | 3 ++- config.def.h | 7 ++++--- nlay | 3 ++- nnn.1 | 4 +++- nnn.c | 18 +++++++++++++++++- 5 files changed, 28 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index bcb6a635..02639f48 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 28771bf8..1b53f6b7 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 fd06307a..0106125d 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 4fefe86b..ac785dd1 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 37a1938c..cafed203 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));