diff options
author | Arun Prakash Jana <engineerarun@gmail.com> | 2020-11-13 12:40:57 +0530 |
---|---|---|
committer | Arun Prakash Jana <engineerarun@gmail.com> | 2020-11-13 12:40:57 +0530 |
commit | 74cd15c232ffbe5f77be547abef4ab6ff6b33fcf (patch) | |
tree | 4ea4adbf8236e542dd89030a45ba0535bb74041f | |
parent | b09adb4654ea68e27b91a96b8e2bfd96a1378971 (diff) | |
download | nnn-74cd15c232ffbe5f77be547abef4ab6ff6b33fcf.tar.gz |
Q - error & quit if no selection, else pick & quit
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | src/nnn.c | 16 | ||||
-rw-r--r-- | src/nnn.h | 4 |
3 files changed, 16 insertions, 5 deletions
@@ -37,6 +37,7 @@ It runs smoothly on the Pi, [Termux](https://www.youtube.com/embed/AbaauM7gUJw) <details><summary><i><b>Expand</b></i> for some nnn magic! :dark_sunglasses:</summary><br><ul> <li>Instantly load, sort, filter thousands of files</li> <li>Type to navigate with automatic dir selection</li> + <li>List input stream and pick entries to stdout or file</li> <li>find/fd/grep/ripgrep/fzf from nnn and list in nnn</li> <li> Never lose context - start where you quit</li> <li>Mount any cloud storage service in a few keypresses</li> @@ -4602,6 +4602,7 @@ static void show_help(const char *path) "aEsc Send to FIFO%-11c^L Redraw\n" "c? Help, conf%-13c^G QuitCD\n" "cq Quit context%-6c^Q 2Esc Quit\n" + "cQ Pick sel/err & quit\n" "1FILTER & PROMPT\n" "c/ Filter%-12cAlt+Esc Clear filter & redraw\n" "aEsc Exit prompt%-12c^L Clear prompt/last filter\n" @@ -7036,7 +7037,7 @@ nochange: case SEL_QUITCTX: // fallthrough case SEL_QUITCD: // fallthrough case SEL_QUIT: - case SEL_QUITFAIL: + case SEL_QUITERR: if (sel == SEL_QUITCTX) { int ctx = cfg.curctx; for (r = (ctx + 1) & ~CTX_MAX; @@ -7086,7 +7087,16 @@ nochange: if (g_state.picker) selbufpos = 0; } - return sel == SEL_QUITFAIL ? EXIT_FAILURE : EXIT_SUCCESS; + + if (sel != SEL_QUITERR) + return EXIT_SUCCESS; + + if (selbufpos && !g_state.picker) { + g_state.pickraw = 1; + return EXIT_SUCCESS; + } + + return EXIT_FAILURE; default: if (xlines != LINES || xcols != COLS) continue; @@ -7926,7 +7936,7 @@ int main(int argc, char *argv[]) if (g_state.pickraw || g_state.picker) { if (selbufpos) { - fd = g_state.pickraw ? 1 : open(selpath, O_WRONLY | O_CREAT, 0600); + fd = g_state.pickraw ? STDOUT_FILENO : open(selpath, O_WRONLY | O_CREAT, 0600); if ((fd == -1) || (seltofile(fd, NULL) != (size_t)(selbufpos))) xerror(); @@ -111,7 +111,7 @@ enum action { SEL_QUITCTX, SEL_QUITCD, SEL_QUIT, - SEL_QUITFAIL, + SEL_QUITERR, #ifndef NOMOUSE SEL_CLICK, #endif @@ -270,7 +270,7 @@ static struct key bindings[] = { /* Quit */ { CONTROL('Q'), SEL_QUIT }, /* Quit with an error code */ - { 'Q', SEL_QUITFAIL }, + { 'Q', SEL_QUITERR }, #ifndef NOMOUSE { KEY_MOUSE, SEL_CLICK }, #endif |