mirror of
https://github.com/jarun/nnn.git
synced 2024-11-28 05:41:31 +00:00
Add NNN_OPTS environment variable feature (#476)
This commit is contained in:
parent
9b199b3253
commit
1ed015e988
43
src/nnn.c
43
src/nnn.c
|
@ -553,16 +553,18 @@ static const char * const messages[] = {
|
|||
};
|
||||
|
||||
/* Supported configuration environment variables */
|
||||
#define NNN_BMS 0
|
||||
#define NNN_PLUG 1
|
||||
#define NNN_OPENER 2
|
||||
#define NNN_COLORS 3
|
||||
#define NNNLVL 4
|
||||
#define NNN_PIPE 5
|
||||
#define NNN_ARCHIVE 6 /* strings end here */
|
||||
#define NNN_TRASH 7 /* flags begin here */
|
||||
#define NNN_OPTS 0
|
||||
#define NNN_BMS 1
|
||||
#define NNN_PLUG 2
|
||||
#define NNN_OPENER 3
|
||||
#define NNN_COLORS 4
|
||||
#define NNNLVL 5
|
||||
#define NNN_PIPE 6
|
||||
#define NNN_ARCHIVE 7 /* strings end here */
|
||||
#define NNN_TRASH 8 /* flags begin here */
|
||||
|
||||
static const char * const env_cfg[] = {
|
||||
"NNN_OPTS",
|
||||
"NNN_BMS",
|
||||
"NNN_PLUG",
|
||||
"NNN_OPENER",
|
||||
|
@ -6450,7 +6452,12 @@ int main(int argc, char *argv[])
|
|||
mmask_t mask;
|
||||
#endif
|
||||
|
||||
while ((opt = getopt(argc, argv, "aAb:cdeEgHKnop:QrRs:St:vVxh")) != -1) {
|
||||
const char* const env_opts = xgetenv(env_cfg[NNN_OPTS], NULL);
|
||||
int env_opts_idx = (env_opts ? (int)strlen(env_opts) : -1);
|
||||
while ((opt = (--env_opts_idx >= 0 ? env_opts[env_opts_idx] : getopt(argc, argv, "aAb:cdeEgHKnop:QrRs:St:vVxh"))) != -1) {
|
||||
if (env_opts_idx >= 0) {
|
||||
optarg = NULL;
|
||||
}
|
||||
switch (opt) {
|
||||
case 'a':
|
||||
cfg.mtime = 0;
|
||||
|
@ -6495,6 +6502,9 @@ int main(int argc, char *argv[])
|
|||
cfg.nonavopen = 1;
|
||||
break;
|
||||
case 'p':
|
||||
if (!optarg) {
|
||||
break;
|
||||
}
|
||||
cfg.picker = 1;
|
||||
if (optarg[0] == '-' && optarg[1] == '\0')
|
||||
cfg.pickraw = 1;
|
||||
|
@ -6524,24 +6534,39 @@ int main(int argc, char *argv[])
|
|||
cfg.rollover = 0;
|
||||
break;
|
||||
case 's':
|
||||
if (!optarg) {
|
||||
break;
|
||||
}
|
||||
session = optarg;
|
||||
break;
|
||||
case 't':
|
||||
if (!optarg) {
|
||||
break;
|
||||
}
|
||||
idletimeout = atoi(optarg);
|
||||
break;
|
||||
case 'v':
|
||||
namecmpfn = &xstrverscasecmp;
|
||||
break;
|
||||
case 'V':
|
||||
if (env_opts_idx >= 0) {
|
||||
break;
|
||||
}
|
||||
fprintf(stdout, "%s\n", VERSION);
|
||||
return _SUCCESS;
|
||||
case 'x':
|
||||
cfg.x11 = 1;
|
||||
break;
|
||||
case 'h':
|
||||
if (env_opts_idx >= 0) {
|
||||
break;
|
||||
}
|
||||
usage();
|
||||
return _SUCCESS;
|
||||
default:
|
||||
if (env_opts_idx >= 0) {
|
||||
fprintf(stderr, "Error: Illegal option '%c' in env var '%s'\n\n", opt, env_cfg[NNN_OPTS]);
|
||||
}
|
||||
usage();
|
||||
return _FAILURE;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue