CLI: long options to override configuration file settings

The input and output date formats may be set from the command line.
Intended for scripts that must be independent of the local user
configuration.

Cannot be used in interactive mode.

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This commit is contained in:
Lars Henriksen 2018-11-15 21:38:41 +01:00 committed by Lukas Fleischer
parent 3d7bb89c88
commit 42e296c840

View File

@ -74,7 +74,9 @@ enum {
OPT_EXPORT_UID, OPT_EXPORT_UID,
OPT_READ_ONLY, OPT_READ_ONLY,
OPT_STATUS, OPT_STATUS,
OPT_DAEMON OPT_DAEMON,
OPT_INPUT_DATEFMT,
OPT_OUTPUT_DATEFMT
}; };
/* /*
@ -364,7 +366,8 @@ int parse_args(int argc, char **argv)
/* Command-line flags - NOTE that read_only is global */ /* Command-line flags - NOTE that read_only is global */
int grep = 0, purge = 0, query = 0, next = 0; int grep = 0, purge = 0, query = 0, next = 0;
int status = 0, gc = 0, import = 0, export = 0, daemon = 0; int status = 0, gc = 0, import = 0, export = 0, daemon = 0;
int filter_opt = 0, format_opt = 0, query_range = 0; /* Command line invocation */
int filter_opt = 0, format_opt = 0, query_range = 0, cmd_line = 0;
/* Query ranges */ /* Query ranges */
time_t from = -1, to = -1; time_t from = -1, to = -1;
int range = 0; int range = 0;
@ -387,6 +390,9 @@ int parse_args(int argc, char **argv)
int non_interactive = 1; int non_interactive = 1;
int ch; int ch;
regex_t reg; regex_t reg;
char buf[BUFSIZ];
struct tm tm;
time_t t;
static const char *optstr = "PFgGhvnNax::t::C:d:c:r::s::S:D:i:l:qQ"; static const char *optstr = "PFgGhvnNax::t::C:d:c:r::s::S:D:i:l:qQ";
@ -443,6 +449,8 @@ int parse_args(int argc, char **argv)
{"read-only", no_argument, NULL, OPT_READ_ONLY}, {"read-only", no_argument, NULL, OPT_READ_ONLY},
{"status", no_argument, NULL, OPT_STATUS}, {"status", no_argument, NULL, OPT_STATUS},
{"daemon", no_argument, NULL, OPT_DAEMON}, {"daemon", no_argument, NULL, OPT_DAEMON},
{"input-datefmt", required_argument, NULL, OPT_INPUT_DATEFMT},
{"output-datefmt", required_argument, NULL, OPT_OUTPUT_DATEFMT},
{NULL, no_argument, NULL, 0} {NULL, no_argument, NULL, 0}
}; };
@ -719,6 +727,24 @@ int parse_args(int argc, char **argv)
break; break;
case OPT_DAEMON: case OPT_DAEMON:
daemon = 1; daemon = 1;
filter.type_mask = TYPE_MASK_APPT | TYPE_MASK_RECUR_APPT;
break;
case OPT_INPUT_DATEFMT:
conf.input_datefmt = atoi(optarg);
EXIT_IF(conf.input_datefmt < 1 || conf.input_datefmt > 4,
_("invalid input date format: %s"), optarg);
cmd_line = 1;
break;
case OPT_OUTPUT_DATEFMT:
time(&t);
localtime_r(&t, &tm);
EXIT_IF(!strftime(buf, sizeof(buf), optarg, &tm),
_("invalid output date format: %s"), optarg);
strncpy(conf.output_datefmt, optarg,
sizeof(conf.output_datefmt) - 1);
conf.output_datefmt[sizeof(conf.output_datefmt) - 1] =
'\0';
cmd_line = 1;
break; break;
default: default:
usage(); usage();
@ -837,7 +863,7 @@ int parse_args(int argc, char **argv)
} else if (daemon) { } else if (daemon) {
dmon_stop(); dmon_stop();
dmon_start(0); dmon_start(0);
} else { } else if (!cmd_line) {
/* interactive mode */ /* interactive mode */
non_interactive = 0; non_interactive = 0;
} }