]> Sergey Matveev's repositories - nnn.git/commitdiff
Run GUI app as plugin
authorArun Prakash Jana <engineerarun@gmail.com>
Thu, 30 Jan 2020 18:08:36 +0000 (23:38 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Thu, 30 Jan 2020 18:11:19 +0000 (23:41 +0530)
nnn.1
plugins/README.md
src/nnn.c

diff --git a/nnn.1 b/nnn.1
index e16d1521c50b81fa8cf750057d4064831d0602eb..e4f815d253b3db30156ad94d186b318d1cb04ea9 100644 (file)
--- a/nnn.1
+++ b/nnn.1
@@ -262,7 +262,7 @@ used. A single combination of arguments is supported for SHELL and PAGER.
 
     NOTES:
     1. To run a plugin directly, press \fI;\fR followed by the plugin key
-    2. To skip directory refresh after running a plugin,prefix with \fB-\fR
+    2. To skip directory refresh after running a plugin, prefix with \fB-\fR
 
     export NNN_PLUG='m:-mediainfo'
 .Ed
@@ -283,6 +283,10 @@ used. A single combination of arguments is supported for SHELL and PAGER.
 
     export NNN_PLUG='y:-_sync*'
 
+    6. To run a \fIGUI app as plugin\fR, add a \fB|\fR after \fB_\fR
+
+    export NNN_PLUG='m:-_|mousepad $nnn'
+
     EXAMPLES:
     ----------------------------------- + -------------------------------------------------
                 Key:Command             |                   Description
@@ -292,7 +296,7 @@ used. A single combination of arguments is supported for SHELL and PAGER.
     l:_git log                          | Show git log
     n:-_vi /home/user/Dropbox/dir/note* | Take quick notes in a synced file/dir of notes
     p:-_less -iR $nnn*                  | Page through hovered file in less
-    s:_smplayer -minigui $nnn*          | Play hovered media file, even unfinished download
+    s:-_|smplayer -minigui $nnn         | Play hovered media file, even unfinished download
     x:_chmod +x $nnn                    | Make the hovered file executable
     y:-_sync*                           | Flush cached writes
     ----------------------------------- + -------------------------------------------------
index 316b3add2910e841c73e926dc80285cfb793b224..d16745553e369f8814ffe29734b44893e4d86d1a 100644 (file)
@@ -101,6 +101,12 @@ Now <kbd>;x</kbd> can be used to make a file executable, <kbd>;g</kbd> can be us
 
 Now there will be no prompt after <kbd>;s</kbd> and <kbd>;n</kbd>.
 
+#### Run GUI app as plugin
+
+To run a GUI app as plugin, add a `|` after `_`. For example:
+
+    export NNN_PLUG='m:-_|mousepad $nnn'
+
 Notes:
 
 1. Use single quotes for `$NNN_PLUG` so `$nnn` is not interpreted
@@ -117,7 +123,7 @@ Notes:
 | `l:_git log` | Show git log |
 | `n:-_vi /home/user/Dropbox/dir/note*` | Take quick notes in a synced file/dir of notes |
 | `p:-_less -iR $nnn*` | Page through hovered file in less |
-| `s:_smplayer -minigui $nnn*` | Play hovered media file, even unfinished download |
+| `s:-_\|smplayer -minigui $nnn` | Play hovered media file, even unfinished download |
 | `x:_chmod +x $nnn` | Make the hovered file executable |
 | `y:-_sync*` | Flush cached writes |
 
index 407616c29f176140c34afc8c736b87e16cb73fba..53fad5c93f09c3e20e882cf3277f79e716057b6a 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -3843,12 +3843,21 @@ static bool run_cmd_as_plugin(const char *path, const char *file, char *newpath,
        if (!*file)
                return FALSE;
 
+       /* Check if GUI flags are to be used */
+       if (*file == '|') {
+               flags = F_NOTRACE | F_NOWAIT;
+               ++file;
+
+               if (!*file)
+                       return FALSE;
+       }
+
        xstrlcpy(newpath, file, PATH_MAX);
 
        len = strlen(newpath);
        if (len > 1 && newpath[len - 1] == '*') {
-               flags &= ~F_CONFIRM; /* GUI case */
-               newpath[len - 1] = '\0'; /* Get rid of trailing nowait symbol */
+               flags &= ~F_CONFIRM; /* Skip user confirmation */
+               newpath[len - 1] = '\0'; /* Get rid of trailing no confirmation symbol */
                --len;
        }