aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-03-11 21:49:35 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-03-11 23:56:18 +0530
commit99c1bdd2b7985483d097ddcb15e167e8a67bdb0f (patch)
treebef528b0927fa7bad7a3198713b4b82a1db57925
parent90f25bf7a82652741f8c8ac7804522b4eb5c28a2 (diff)
downloadnnn-99c1bdd2b7985483d097ddcb15e167e8a67bdb0f.tar.gz
Minor refactor
-rw-r--r--README.md4
-rw-r--r--nnn.12
-rw-r--r--src/nnn.c69
3 files changed, 17 insertions, 58 deletions
diff --git a/README.md b/README.md
index a2cbb6c..31ff896 100644
--- a/README.md
+++ b/README.md
@@ -145,7 +145,7 @@ It runs on Linux, macOS, Raspberry Pi, BSD, Cygwin, Linux subsystem for Windows
| advcpmv (Linux) ([integration](https://github.com/jarun/nnn/wiki/How-to#show-cp-mv-progress)) | copy, move progress |
| $EDITOR (overridden by $VISUAL, if defined) | edit files (fallback vi) |
| $PAGER (less, most) | page through files (fallback less) |
-| $SHELL (single coombined argument) | spawn a shell, run script (fallback sh) |
+| $SHELL | spawn a shell, run script (fallback sh) |
#### From a package manager
@@ -259,8 +259,6 @@ Press <kbd>?</kbd> in `nnn` to see the list anytime.
Help & settings, file details, media info and archive listing are shown in the PAGER. Use the PAGER-specific keys in these screens.
-The option `open with` supports a combined argument.
-
#### Leader key
The Leader key (<kbd>`</kbd> or <kbd>^/</kbd>) provides a powerful multi-functional navigation mechanism. It is case-sensitive and understands contexts, bookmarks and handy location shortcuts.
diff --git a/nnn.1 b/nnn.1
index 7ea9c3d..8193c34 100644
--- a/nnn.1
+++ b/nnn.1
@@ -90,7 +90,7 @@ FILES
.Pp
.Bl -tag -width "l, [Right], [Return] or C-mXXXX" -offset indent -compact
.It Ic ^O
-Open with an application (takes 1 combined argument)
+Open with an application
.It Ic n
Create a new file, directory or link(s) to selection
.It Ic D
diff --git a/src/nnn.c b/src/nnn.c
index 2fbd2c7..1eed781 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -54,7 +54,6 @@
#endif
#include <sys/wait.h>
-#include <ctype.h>
#ifdef __linux__ /* Fix failure due to mvaddnwstr() */
#ifndef NCURSES_WIDECHAR
#define NCURSES_WIDECHAR 1
@@ -168,6 +167,7 @@ disabledbg()
#undef MIN
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#define ISODD(x) ((x) & 1)
+#define ISBLANK(x) ((x) == ' ' || (x) == '\t')
#define TOUPPER(ch) \
(((ch) >= 'a' && (ch) <= 'z') ? ((ch) - 'a' + 'A') : (ch))
#define CMD_LEN_MAX (PATH_MAX + ((NAME_MAX + 1) << 1))
@@ -431,7 +431,6 @@ static char mv[] = "mvg -gi";
#define STR_INVBM_KEY 2
#define STR_DATE_ID 3
#define STR_TMPFILE 4
-#define STR_ARGLIMIT 5
static const char * const messages[] = {
"HOME not set",
@@ -439,7 +438,6 @@ static const char * const messages[] = {
"invalid key",
"%F %T %z",
"/.nnnXXXXXX",
- "one arg max",
};
/* Supported config env vars */
@@ -942,6 +940,8 @@ static void resetcpind(void)
/* Initialize curses mode */
static bool initcurses(void)
{
+ int i;
+
if (cfg.picker) {
if (!newterm(NULL, stderr, stdin)) {
fprintf(stderr, "newterm!\n");
@@ -960,17 +960,15 @@ static bool initcurses(void)
cbreak();
noecho();
nonl();
- intrflush(stdscr, FALSE);
+ //intrflush(stdscr, FALSE);
keypad(stdscr, TRUE);
curs_set(FALSE); /* Hide cursor */
start_color();
use_default_colors();
/* Initialize default colors */
- init_pair(1, g_ctx[0].color, -1);
- init_pair(2, g_ctx[1].color, -1);
- init_pair(3, g_ctx[2].color, -1);
- init_pair(4, g_ctx[3].color, -1);
+ for (i = 0; i < CTX_MAX; ++i)
+ init_pair(i + 1, g_ctx[i].color, -1);
settimeout(); /* One second */
set_escdelay(25);
@@ -985,7 +983,7 @@ static int parseargs(char *line, char **argv)
argv[count++] = line;
while (*line) { // NOLINT
- if (isblank(*line)) {
+ if (ISBLANK(*line)) {
*line++ = '\0';
if (!*line) // NOLINT
@@ -1083,10 +1081,8 @@ static void spawn(char *file, char *arg1, char *arg2, const char *dir, uchar fla
argv[2] = arg2;
}
- if (flag & F_NORMAL) {
+ if (flag & F_NORMAL)
exitcurses();
- fflush(stdout);
- }
pid = xfork(flag);
if (pid == 0) {
@@ -1120,42 +1116,11 @@ static void spawn(char *file, char *arg1, char *arg2, const char *dir, uchar fla
/* Get program name from env var, else return fallback program */
static char *xgetenv(const char *name, char *fallback)
{
- if (name == NULL)
- return fallback;
-
char *value = getenv(name);
return value && value[0] ? value : fallback;
}
-/*
- * Parse a string to get program and argument
- * NOTE: original string may be modified
- */
-static bool getprogarg(char *prog, char **arg)
-{
- const char *argptr;
-
- while (*prog && !isblank(*prog))
- ++prog;
-
- if (*prog) {
- *prog = '\0';
- *arg = ++prog;
- argptr = *arg;
-
- /* Make sure there are no more args */
- while (*argptr) {
- if (isblank(*argptr))
- return FALSE;
-
- ++argptr;
- }
- }
-
- return TRUE;
-}
-
/* Check if a dir exists, IS a dir and is readable */
static bool xdiraccess(const char *path)
{
@@ -1277,11 +1242,11 @@ static int xstricmp(const char * const s1, const char * const s2)
sign[1] = '+';
c1 = s1;
- while (isspace(*c1))
+ while (ISBLANK(*c1))
++c1;
c2 = s2;
- while (isspace(*c2))
+ while (ISBLANK(*c2))
++c2;
if (*c1 == '-' || *c1 == '+') {
@@ -1309,14 +1274,14 @@ static int xstricmp(const char * const s1, const char * const s2)
++count1;
++c1;
}
- while (isspace(*c1))
+ while (ISBLANK(*c1))
++c1;
while (xisdigit(*c2)) {
++count2;
++c2;
}
- while (isspace(*c2))
+ while (ISBLANK(*c2))
++c2;
if (*c1 && !*c2)
@@ -3659,7 +3624,8 @@ nochange:
/* Confirm if app is CLI or GUI */
if (sel == SEL_OPENWITH) {
r = get_input("cli mode? [y/Y]");
- (r == 'y' || r == 'Y') ? (r = F_NORMAL) : (r = F_NOWAIT | F_NOTRACE);
+ (r == 'y' || r == 'Y') ? (r = F_CLI)
+ : (r = F_NOWAIT | F_NOTRACE | F_MULTI);
}
switch (sel) {
@@ -3675,13 +3641,8 @@ nochange:
path, F_NORMAL);
break;
case SEL_OPENWITH:
- dir = NULL;
- if (!getprogarg(tmp, &dir)) { /* dir used as tmp var */
- printwait(messages[STR_ARGLIMIT], &presel);
- goto nochange;
- }
mkpath(path, dents[cur].name, newpath);
- spawn(tmp, dir, newpath, path, r);
+ spawn(tmp, newpath, NULL, path, r);
break;
case SEL_RENAME:
/* Skip renaming to same name */