mirror of
https://github.com/jarun/nnn.git
synced 2024-12-01 02:49:44 +00:00
Refactor code to get editor args
This commit is contained in:
parent
5ad89a8c51
commit
5cec8d9038
65
src/nnn.c
65
src/nnn.c
|
@ -260,12 +260,13 @@ typedef struct {
|
||||||
uint metaviewer : 1; /* Index of metadata viewer in utils[] */
|
uint metaviewer : 1; /* Index of metadata viewer in utils[] */
|
||||||
uint color : 3; /* Color code for directories */
|
uint color : 3; /* Color code for directories */
|
||||||
uint ctxactive : 1; /* Context active or not */
|
uint ctxactive : 1; /* Context active or not */
|
||||||
uint reserved : 11;
|
uint reserved : 10;
|
||||||
/* The following settings are global */
|
/* The following settings are global */
|
||||||
uint curctx : 2; /* Current context number */
|
uint curctx : 2; /* Current context number */
|
||||||
uint picker : 1; /* Write selection to user-specified file */
|
uint picker : 1; /* Write selection to user-specified file */
|
||||||
uint pickraw : 1; /* Write selection to sdtout before exit */
|
uint pickraw : 1; /* Write selection to sdtout before exit */
|
||||||
uint nonavopen : 1; /* Open file on right arrow or `l` */
|
uint nonavopen : 1; /* Open file on right arrow or `l` */
|
||||||
|
uint useeditor : 1; /* Use VISUAL to open text files */
|
||||||
} settings;
|
} settings;
|
||||||
|
|
||||||
/* Contexts or workspaces */
|
/* Contexts or workspaces */
|
||||||
|
@ -281,7 +282,7 @@ typedef struct {
|
||||||
/* GLOBALS */
|
/* GLOBALS */
|
||||||
|
|
||||||
/* Configuration, contexts */
|
/* Configuration, contexts */
|
||||||
static settings cfg = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 0, 0, 0, 0};
|
static settings cfg = {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0};
|
||||||
static context g_ctx[MAX_CTX] __attribute__ ((aligned));
|
static context g_ctx[MAX_CTX] __attribute__ ((aligned));
|
||||||
|
|
||||||
static struct entry *dents;
|
static struct entry *dents;
|
||||||
|
@ -862,6 +863,30 @@ static char *xgetenv(const char *name, char *fallback)
|
||||||
return value && value[0] ? value : fallback;
|
return value && value[0] ? value : fallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Parse a string to return program and argument */
|
||||||
|
static int getprogarg(char *prog, char **arg)
|
||||||
|
{
|
||||||
|
char *argptr;
|
||||||
|
|
||||||
|
while (*prog && *prog != ' ')
|
||||||
|
++prog;
|
||||||
|
|
||||||
|
if (*prog) {
|
||||||
|
*prog = '\0';
|
||||||
|
*arg = ++prog;
|
||||||
|
argptr = *arg;
|
||||||
|
|
||||||
|
/* Make sure there are no more args */
|
||||||
|
while (*argptr) {
|
||||||
|
if (*argptr == ' ')
|
||||||
|
return -1;
|
||||||
|
++argptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if a dir exists, IS a dir and is readable */
|
/* Check if a dir exists, IS a dir and is readable */
|
||||||
static bool xdiraccess(const char *path)
|
static bool xdiraccess(const char *path)
|
||||||
{
|
{
|
||||||
|
@ -2062,7 +2087,7 @@ static int show_help(char *path)
|
||||||
dprintf(fd, "\n");
|
dprintf(fd, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (editor)
|
if (cfg.useeditor)
|
||||||
dprintf(fd, "NNN_USE_EDITOR: %s\n", editor);
|
dprintf(fd, "NNN_USE_EDITOR: %s\n", editor);
|
||||||
if (idletimeout)
|
if (idletimeout)
|
||||||
dprintf(fd, "NNN_IDLE_TIMEOUT: %d secs\n", idletimeout);
|
dprintf(fd, "NNN_IDLE_TIMEOUT: %d secs\n", idletimeout);
|
||||||
|
@ -2665,7 +2690,7 @@ nochange:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* If NNN_USE_EDITOR is set, open text in EDITOR */
|
/* If NNN_USE_EDITOR is set, open text in EDITOR */
|
||||||
if (editor) {
|
if (cfg.useeditor) {
|
||||||
if (getmime(dents[cur].name)) {
|
if (getmime(dents[cur].name)) {
|
||||||
spawn(editor, newpath, editor_arg, path, F_NORMAL);
|
spawn(editor, newpath, editor_arg, path, F_NORMAL);
|
||||||
continue;
|
continue;
|
||||||
|
@ -3370,10 +3395,13 @@ nochange:
|
||||||
/* Repopulate as directory content may have changed */
|
/* Repopulate as directory content may have changed */
|
||||||
goto begin;
|
goto begin;
|
||||||
case SEL_RUNARG:
|
case SEL_RUNARG:
|
||||||
|
tmp = NULL;
|
||||||
run = xgetenv(env, run);
|
run = xgetenv(env, run);
|
||||||
if ((!run || !run[0]) && (strcmp("VISUAL", env) == 0))
|
if ((!run || !run[0]) && (strcmp("VISUAL", env) == 0)) {
|
||||||
run = editor ? editor : xgetenv("EDITOR", "vi");
|
run = editor;
|
||||||
spawn(run, dents[cur].name, NULL, path, F_NORMAL);
|
tmp = editor_arg;
|
||||||
|
}
|
||||||
|
spawn(run, dents[cur].name, tmp, path, F_NORMAL);
|
||||||
break;
|
break;
|
||||||
case SEL_LOCK:
|
case SEL_LOCK:
|
||||||
spawn(utils[LOCKER], NULL, NULL, NULL, F_NORMAL | F_SIGINT);
|
spawn(utils[LOCKER], NULL, NULL, NULL, F_NORMAL | F_SIGINT);
|
||||||
|
@ -3569,6 +3597,16 @@ int main(int argc, char *argv[])
|
||||||
if (getuid() == 0 || getenv("NNN_SHOW_HIDDEN"))
|
if (getuid() == 0 || getenv("NNN_SHOW_HIDDEN"))
|
||||||
cfg.showhidden = 1;
|
cfg.showhidden = 1;
|
||||||
|
|
||||||
|
editor = xgetenv("VISUAL", xgetenv("EDITOR", "vi"));
|
||||||
|
if (getprogarg(editor, &editor_arg) < 0) {
|
||||||
|
fprintf(stderr, "Too many editor args\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Edit text in EDITOR, if opted */
|
||||||
|
if (getenv("NNN_USE_EDITOR"))
|
||||||
|
cfg.useeditor = 1;
|
||||||
|
|
||||||
#ifdef LINUX_INOTIFY
|
#ifdef LINUX_INOTIFY
|
||||||
/* Initialize inotify */
|
/* Initialize inotify */
|
||||||
inotify_fd = inotify_init1(IN_NONBLOCK);
|
inotify_fd = inotify_init1(IN_NONBLOCK);
|
||||||
|
@ -3584,19 +3622,6 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Edit text in EDITOR, if opted */
|
|
||||||
if (getenv("NNN_USE_EDITOR")) {
|
|
||||||
editor = xgetenv("VISUAL", xgetenv("EDITOR", "vi"));
|
|
||||||
/* copier used as a temp var */
|
|
||||||
copier = editor;
|
|
||||||
while (*copier && *copier != ' ')
|
|
||||||
++copier;
|
|
||||||
if (*copier == ' ') {
|
|
||||||
*copier = '\0';
|
|
||||||
editor_arg = ++copier;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get locker wait time, if set; copier used as tmp var */
|
/* Get locker wait time, if set; copier used as tmp var */
|
||||||
copier = getenv("NNN_IDLE_TIMEOUT");
|
copier = getenv("NNN_IDLE_TIMEOUT");
|
||||||
if (copier) {
|
if (copier) {
|
||||||
|
|
Loading…
Reference in a new issue