]> Sergey Matveev's repositories - nnn.git/commitdiff
Option -P: specify plugin key to run on start
authorArun Prakash Jana <engineerarun@gmail.com>
Mon, 18 May 2020 03:35:19 +0000 (09:05 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Mon, 18 May 2020 03:35:19 +0000 (09:05 +0530)
misc/auto-completion/bash/nnn-completion.bash
misc/auto-completion/fish/nnn.fish
misc/auto-completion/zsh/_nnn
src/nnn.c

index eeb11568f319639eadb45bbf883a9a2e0b8d71cb..e8f2548c6642a5e9ed866eb7b195af9c6bd1db56 100644 (file)
@@ -27,6 +27,7 @@ _nnn ()
         -n
         -o
         -p
+        -P
         -Q
         -r
         -R
@@ -45,6 +46,9 @@ _nnn ()
         return 1
     elif [[ $prev == -p ]]; then
         COMPREPLY=( $(compgen -f -d -- "$cur") )
+    elif [[ $prev == -P ]]; then
+        local plugins=$(echo $NNN_PLUG | awk -F: -v RS=\; '{print $1}')
+        COMPREPLY=( $(compgen -W "$plugins" -- "$cur") )
     elif [[ $prev == -s ]]; then
         local sessions_dir=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/sessions
         COMPREPLY=( $(cd "$sessions_dir" && compgen -f -d -- "$cur") )
index 65ab0308b05bf56f03acf0a6f508ca42e5a512a2..1b6455b2aece8818e6586ad88111628434e3f958 100644 (file)
@@ -26,6 +26,7 @@ complete -c nnn -s l -r -d 'lines to move per scroll'
 complete -c nnn -s n    -d 'start in type-to-nav mode'
 complete -c nnn -s o    -d 'open files only on Enter'
 complete -c nnn -s p -r -d 'copy selection to file' -a '-\tstdout'
+complete -c nnn -s P -r -d 'plugin key to run' -x -a '(echo $NNN_PLUG | awk -F: -v RS=\; \'{print $1"\t"$2}\')'
 complete -c nnn -s Q    -d 'disable quit confirmation'
 complete -c nnn -s r    -d 'show cp, mv progress (Linux-only)'
 complete -c nnn -s R    -d 'disable rollover at edges'
index 4b403067d1e8804b805c8418c7e6b798a74471f5..441589acba4185d2eb6bcd08e14e2bdda98dfb5d 100644 (file)
@@ -24,6 +24,7 @@ args=(
     '(-n)-n[start in type-to-nav mode]'
     '(-o)-o[open files only on Enter]'
     '(-p)-p[copy selection to file]:file name'
+    '(-P)-P[plugin key to runn]:key char'
     '(-Q)-Q[disable quit confirmation]'
     '(-r)-r[show cp, mv progress (Linux-only)]'
     '(-R)-R[disable rollover at edges]'
index 7da974c092c3b190f0e2b43a5800be8cae165493..49127b84ea1933821035df858a4496b2af439dba 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -5227,7 +5227,7 @@ static bool cdprep(char *lastdir, char *lastname, char *path, char *newpath)
        return cfg.filtermode;
 }
 
-static bool browse(char *ipath, const char *session)
+static bool browse(char *ipath, const char *session, int pkey)
 {
        char newpath[PATH_MAX] __attribute__ ((aligned));
        char rundir[PATH_MAX] __attribute__ ((aligned));
@@ -5269,7 +5269,7 @@ static bool browse(char *ipath, const char *session)
 
        newpath[0] = rundir[0] = runfile[0] = '\0';
 
-       presel = cfg.filtermode ? FILTER : 0;
+       presel = pkey ? ';' : (cfg.filtermode ? FILTER : 0);
 
        dents = xrealloc(dents, total_dents * sizeof(struct entry));
        if (!dents)
@@ -6273,10 +6273,16 @@ nochange:
                                goto nochange;
                        }
 
-                       r = xstrsncpy(g_buf, messages[MSG_PLUGIN_KEYS], CMD_LEN_MAX);
-                       printkeys(plug, g_buf + r - 1, maxplug);
-                       printmsg(g_buf);
-                       r = get_input(NULL);
+                       if (!pkey) {
+                               r = xstrsncpy(g_buf, messages[MSG_PLUGIN_KEYS], CMD_LEN_MAX);
+                               printkeys(plug, g_buf + r - 1, maxplug);
+                               printmsg(g_buf);
+                               r = get_input(NULL);
+                       } else {
+                               r = pkey;
+                               pkey = '\0';
+                       }
+
                        if (r != '\r') {
                                endselection();
                                tmp = get_kv_val(plug, NULL, r, maxplug, NNN_PLUG);
@@ -6743,6 +6749,7 @@ static void usage(void)
                " -n      type-to-nav mode\n"
                " -o      open files only on Enter\n"
                " -p file selection file [stdout if '-']\n"
+               " -P key  run plugin key\n"
                " -Q      no quit confirmation\n"
                " -r      use advcpmv patched cp, mv\n"
                " -R      no rollover at edges\n"
@@ -6888,7 +6895,7 @@ int main(int argc, char *argv[])
 {
        char *arg = NULL;
        char *session = NULL;
-       int fd, opt, sort = 0;
+       int fd, opt, sort = 0, pkey = '\0'; /* Plugin key */
 #ifndef NOMOUSE
        mmask_t mask;
        char *middle_click_env = xgetenv(env_cfg[NNN_MCLICK], "\0");
@@ -6905,13 +6912,14 @@ int main(int argc, char *argv[])
 
        while ((opt = (env_opts_id > 0
                       ? env_opts[--env_opts_id]
-                      : getopt(argc, argv, "Ab:cdeEfFgHKl:nop:QrRs:St:T:Vxh"))) != -1) {
+                      : getopt(argc, argv, "Ab:cdeEfFgHKl:nop:P:QrRs:St:T:Vxh"))) != -1) {
                switch (opt) {
                case 'A':
                        cfg.autoselect = 0;
                        break;
                case 'b':
-                       arg = optarg;
+                       if (env_opts_id < 0)
+                               arg = optarg;
                        break;
                case 'c':
                        cfg.cliopener = 1;
@@ -6973,6 +6981,10 @@ int main(int argc, char *argv[])
                                unlink(selpath);
                        }
                        break;
+               case 'P':
+                       if (env_opts_id < 0 && !optarg[1])
+                               pkey = optarg[0];
+                       break;
                case 'Q':
                        g_states |= STATE_FORCEQUIT;
                        break;
@@ -7229,7 +7241,7 @@ int main(int argc, char *argv[])
        if (sort)
                set_sort_flags(sort);
 
-       opt = browse(initpath, session);
+       opt = browse(initpath, session, pkey);
 
 #ifndef NOMOUSE
        mousemask(mask, NULL);