Add NNN_OPTS environment variable feature (#476)

This commit is contained in:
Uffe Jakobsen 2020-02-14 16:05:18 +01:00 committed by GitHub
parent 9b199b3253
commit 1ed015e988
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -553,16 +553,18 @@ static const char * const messages[] = {
}; };
/* Supported configuration environment variables */ /* Supported configuration environment variables */
#define NNN_BMS 0 #define NNN_OPTS 0
#define NNN_PLUG 1 #define NNN_BMS 1
#define NNN_OPENER 2 #define NNN_PLUG 2
#define NNN_COLORS 3 #define NNN_OPENER 3
#define NNNLVL 4 #define NNN_COLORS 4
#define NNN_PIPE 5 #define NNNLVL 5
#define NNN_ARCHIVE 6 /* strings end here */ #define NNN_PIPE 6
#define NNN_TRASH 7 /* flags begin here */ #define NNN_ARCHIVE 7 /* strings end here */
#define NNN_TRASH 8 /* flags begin here */
static const char * const env_cfg[] = { static const char * const env_cfg[] = {
"NNN_OPTS",
"NNN_BMS", "NNN_BMS",
"NNN_PLUG", "NNN_PLUG",
"NNN_OPENER", "NNN_OPENER",
@ -6450,7 +6452,12 @@ int main(int argc, char *argv[])
mmask_t mask; mmask_t mask;
#endif #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) { switch (opt) {
case 'a': case 'a':
cfg.mtime = 0; cfg.mtime = 0;
@ -6495,6 +6502,9 @@ int main(int argc, char *argv[])
cfg.nonavopen = 1; cfg.nonavopen = 1;
break; break;
case 'p': case 'p':
if (!optarg) {
break;
}
cfg.picker = 1; cfg.picker = 1;
if (optarg[0] == '-' && optarg[1] == '\0') if (optarg[0] == '-' && optarg[1] == '\0')
cfg.pickraw = 1; cfg.pickraw = 1;
@ -6524,24 +6534,39 @@ int main(int argc, char *argv[])
cfg.rollover = 0; cfg.rollover = 0;
break; break;
case 's': case 's':
if (!optarg) {
break;
}
session = optarg; session = optarg;
break; break;
case 't': case 't':
if (!optarg) {
break;
}
idletimeout = atoi(optarg); idletimeout = atoi(optarg);
break; break;
case 'v': case 'v':
namecmpfn = &xstrverscasecmp; namecmpfn = &xstrverscasecmp;
break; break;
case 'V': case 'V':
if (env_opts_idx >= 0) {
break;
}
fprintf(stdout, "%s\n", VERSION); fprintf(stdout, "%s\n", VERSION);
return _SUCCESS; return _SUCCESS;
case 'x': case 'x':
cfg.x11 = 1; cfg.x11 = 1;
break; break;
case 'h': case 'h':
if (env_opts_idx >= 0) {
break;
}
usage(); usage();
return _SUCCESS; return _SUCCESS;
default: default:
if (env_opts_idx >= 0) {
fprintf(stderr, "Error: Illegal option '%c' in env var '%s'\n\n", opt, env_cfg[NNN_OPTS]);
}
usage(); usage();
return _FAILURE; return _FAILURE;
} }