aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-03-12 16:19:34 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-03-12 16:23:00 +0530
commit69aeeb51d249736c37ea6aa095be4ffb020731d8 (patch)
tree3e08ffa91eaef27b07d8249678c598dbaf718d08
parent99c1bdd2b7985483d097ddcb15e167e8a67bdb0f (diff)
downloadnnn-69aeeb51d249736c37ea6aa095be4ffb020731d8.tar.gz
GUI app launcher with drop-down menu
`nlauncher` is POSIX compliant. It needs `fzy`.
-rw-r--r--README.md4
-rw-r--r--nnn.12
-rw-r--r--src/nnn.c12
-rw-r--r--src/nnn.h3
-rwxr-xr-xuser-scripts/nlaunch17
5 files changed, 34 insertions, 4 deletions
diff --git a/README.md b/README.md
index 31ff896..3cc7dad 100644
--- a/README.md
+++ b/README.md
@@ -254,7 +254,7 @@ Press <kbd>?</kbd> in `nnn` to see the list anytime.
MISC
! ^] Spawn SHELL C Execute entry
R ^V Run/pick script L Lock terminal
- ^P Prompt ^N Note
+ ^P Prompt ^N Note = Launcher
```
Help & settings, file details, media info and archive listing are shown in the PAGER. Use the PAGER-specific keys in these screens.
@@ -393,7 +393,6 @@ To lookup keyboard shortcuts at runtime, press <kbd>?</kbd>.
export NNN_USE_EDITOR=1
4. Run `n`.
5. Don't memorize keys. Arrows, <kbd>/</kbd> and <kbd>q</kbd> suffice. Press <kbd>?</kbd> for help on keyboard shortcuts anytime.
-6. The prompt can be used as a launcher and to run commands.
- For additional functionality [setup custom scripts](https://github.com/jarun/nnn/wiki/How-to#run-custom-scripts).
- Visit the [How to](https://github.com/jarun/nnn/wiki/How-to) for many more specific usecases.
@@ -408,6 +407,7 @@ The following [user-scripts](https://github.com/jarun/nnn/tree/master/user-scrip
| edit.sh | Fuzzy find a file in directory subtree with fzy and edit in vim |
| fzy.sh | Fuzzy find a file in directory subtree with fzy and open using xdg-open |
| imgur.sh | Upload an image file to imgur |
+| nlaunch | drop-down app launcher (needs fzy), drop in `$PATH`; fallback regular prompt |
| picker.sh | Pick files and pipe the newline-separated list to another utility |
| sxiv.sh | Open images in current directory in sxiv |
| upgrade.sh | Check and update to latest version of nnn manually on Debian 9 Stretch |
diff --git a/nnn.1 b/nnn.1
index 8193c34..34bfefb 100644
--- a/nnn.1
+++ b/nnn.1
@@ -159,6 +159,8 @@ Lock terminal
Show command prompt
.It Ic ^N
Take note
+.It Ic =
+Launcher
.El
.Pp
Backing up one directory level will set the cursor position at the
diff --git a/src/nnn.c b/src/nnn.c
index 1eed781..b5b4e08 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -394,7 +394,8 @@ static struct timespec gtimeout;
#define APACK 4
#define VIDIR 5
#define LOCKER 6
-#define UNKNOWN 7
+#define NLAUNCH 7
+#define UNKNOWN 8
/* Utilities to open files, run actions */
static char * const utils[] = {
@@ -417,6 +418,7 @@ static char * const utils[] = {
#else
"vlock",
#endif
+ "nlaunch",
"UNKNOWN"
};
@@ -2385,7 +2387,7 @@ static bool show_help(const char *path)
"1MISC\n"
"9! ^] Spawn SHELL C Execute entry\n"
"9R ^V Run/pick script L Lock terminal\n"
- "b^P Prompt ^N Note\n"};
+ "b^P Prompt ^N Note = Launcher\n"};
if (g_tmpfpath[0])
xstrlcpy(g_tmpfpath + g_tmpfplen - 1, messages[STR_TMPFILE],
@@ -3741,6 +3743,7 @@ nochange:
case SEL_EXEC: // fallthrough
case SEL_SHELL: // fallthrough
case SEL_SCRIPT: // fallthrough
+ case SEL_LAUNCH: // fallthrough
case SEL_RUNCMD:
switch (sel) {
case SEL_EXEC:
@@ -3817,6 +3820,11 @@ nochange:
lastname[0] = '\0';
setdirwatch();
goto begin;
+ case SEL_LAUNCH:
+ if (getutil(utils[NLAUNCH])) {
+ spawn(utils[NLAUNCH], NULL, NULL, path, F_NORMAL);
+ break;
+ } // fallthrough
default: /* SEL_RUNCMD */
#ifndef NORL
if (cfg.picker) {
diff --git a/src/nnn.h b/src/nnn.h
index a2a858b..dadbde6 100644
--- a/src/nnn.h
+++ b/src/nnn.h
@@ -88,6 +88,7 @@ enum action {
SEL_EXEC,
SEL_SHELL,
SEL_SCRIPT,
+ SEL_LAUNCH,
SEL_RUNCMD,
SEL_RUNEDIT,
SEL_RUNPAGE,
@@ -224,6 +225,8 @@ static struct key bindings[] = {
/* Run a custom script */
{ 'R', SEL_SCRIPT },
{ CONTROL('V'), SEL_SCRIPT },
+ /* Launcher */
+ { '=', SEL_LAUNCH },
/* Run a command */
{ CONTROL('P'), SEL_RUNCMD },
/* Open in EDITOR or PAGER */
diff --git a/user-scripts/nlaunch b/user-scripts/nlaunch
new file mode 100755
index 0000000..79540c8
--- /dev/null
+++ b/user-scripts/nlaunch
@@ -0,0 +1,17 @@
+#!/usr/bin/env sh
+
+# Description: Fuzzy find executables in $PATH and launch an application
+# stdin, stdout, stderr are suppressed so CLI utilities exit silently
+#
+# Shell: POSIX compliant
+# Author: Arun Prakash Jana
+
+IFS=':'
+
+get_selection() {
+ ls -H $PATH | sort | fzy
+}
+
+if selection=$( get_selection ); then
+ "$selection" 2>&1 >/dev/null &
+fi