README.md | 1 + nnn.1 | 3 +++ src/nnn.c | 17 ++++++++++++----- diff --git a/README.md b/README.md index f5e5d3dbb6f27e5410fce791a53b72bfa95a1662..ae6dfbc020d40773aa728c1369bd3926c82fcf04 100644 --- a/README.md +++ b/README.md @@ -168,6 +168,7 @@ optional args: -a use access time -b key open bookmark key + -c cli-only opener -d detail mode -f run filter as cmd on prompt key -H show hidden files diff --git a/nnn.1 b/nnn.1 index 3ff179556a9522e2465972dd3268eb7334df85ea..577243ff93dd3075ec83077f5d2c18c4c306862b 100644 --- a/nnn.1 +++ b/nnn.1 @@ -44,6 +44,9 @@ .Pp .Fl "b key" specify bookmark key to open .Pp +.Fl c + opener opens files in cli utilities only +.Pp .Fl d detail mode .Pp diff --git a/src/nnn.c b/src/nnn.c index 9344d9933919cd66205f2b8a9312acbc608be084..af0dd8df5a5d705e9ef0bfa2aa6f4296632b28d2 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -218,7 +218,7 @@ uint showhidden : 1; /* Set to show hidden files */ uint selmode : 1; /* Set when selecting files */ uint showdetail : 1; /* Clear to show fewer file info */ uint ctxactive : 1; /* Context active or not */ - uint reserved : 6; + uint reserved : 5; /* The following settings are global */ uint curctx : 2; /* Current context number */ uint dircolor : 1; /* Current status of dir color */ @@ -234,6 +234,7 @@ uint filter_re : 1; /* Use regex filters */ uint filtercmd : 1; /* Run filter as command on no match */ uint trash : 1; /* Move removed files to trash */ uint mtime : 1; /* Use modification time (else access time) */ + uint cliopener : 1; /* All-CLI app opener */ } settings; /* Contexts or workspaces */ @@ -275,6 +276,7 @@ 1, /* filter_re */ 0, /* filtercmd */ 0, /* trash */ 1, /* mtime */ + 0, /* cliopener */ }; static context g_ctx[CTX_MAX] __attribute__ ((aligned)); @@ -3406,6 +3408,7 @@ char newpath[PATH_MAX] __attribute__ ((aligned)); char mark[PATH_MAX] __attribute__ ((aligned)); char rundir[PATH_MAX] __attribute__ ((aligned)); char runfile[NAME_MAX + 1] __attribute__ ((aligned)); + uchar opener_flags = (cfg.cliopener ? F_CLI : (F_NOTRACE | F_NOWAIT)); int r = -1, fd, presel, selstartid = 0, selendid = 0, onscreen; enum action sel; bool dir_changed = FALSE, rangesel = FALSE; @@ -3694,7 +3697,7 @@ goto nochange; } /* Invoke desktop opener as last resort */ - spawn(opener, newpath, NULL, NULL, F_NOTRACE | F_NOWAIT); + spawn(opener, newpath, NULL, NULL, opener_flags); continue; } default: @@ -4608,6 +4611,7 @@ " PATH start dir [default: .]\n\n" "optional args:\n" " -a use access time\n" " -b key open bookmark key\n" + " -c cli-only opener\n" " -d detail mode\n" " -f run filter as cmd on prompt key\n" " -H show hidden files\n" @@ -4754,7 +4758,7 @@ #ifdef __linux__ bool progress = FALSE; #endif - while ((opt = getopt(argc, argv, "HSiab:dfnop:rstvh")) != -1) { + while ((opt = getopt(argc, argv, "HSiab:cdfnop:rstvh")) != -1) { switch (opt) { case 'S': cfg.blkorder = 1; @@ -4773,6 +4777,9 @@ break; case 'b': arg = optarg; break; + case 'c': + cfg.cliopener = 1; + break; case 'f': cfg.filtercmd = 1; break; @@ -4920,8 +4927,8 @@ return _SUCCESS; } } - /* Edit text in EDITOR, if opted */ - if (xgetenv_set(env_cfg[NNN_USE_EDITOR])) + /* Edit text in EDITOR if opted (and opener is not all-CLI) */ + if (!cfg.cliopener && xgetenv_set(env_cfg[NNN_USE_EDITOR])) cfg.useeditor = 1; /* Get VISUAL/EDITOR */