From 86c465b0e50e1479e819f63c0bac86e7aec236a1 Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Wed, 27 Jun 2012 12:07:02 +0200 Subject: Allow passing both "-D" and "-c" This is particularly useful if one wants to use configuration and key bindings from a specific directory, while using an appointment file from somewhere else. "-c" has precedence over "-D". Also update the usage message, man page and documentation. Signed-off-by: Lukas Fleischer --- src/args.c | 15 +++----------- src/io.c | 70 +++++++++++++++++++++++++++++++++----------------------------- 2 files changed, 40 insertions(+), 45 deletions(-) (limited to 'src') diff --git a/src/args.c b/src/args.c index 2a286dd..6646b29 100644 --- a/src/args.c +++ b/src/args.c @@ -62,7 +62,7 @@ static void usage(void) const char *arg_usage = _("Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]]\n" " [-d |] [-s[date]] [-r[range]]\n" - " [-c | -D] [-S] [--status]\n" + " [-c] [-D] [-S] [--status]\n" " [--read-only]\n"); fputs(arg_usage, stdout); } @@ -112,9 +112,9 @@ static void help_arg(void) " Don't save configuration nor appointments/todos. Use with care.\n" "\nFiles:\n" " -c , --calendar \n" - " specify the calendar to use (incompatible with '-D').\n" + " specify the calendar to use (has precedence over '-D').\n" "\n -D , --directory \n" - " specify the data directory to use (incompatible with '-c').\n" + " specify the data directory to use.\n" "\tIf not specified, the default directory is ~/.calcurse\n" "\nNon-interactive:\n" " -a, --appointment\n" @@ -445,9 +445,7 @@ int parse_args(int argc, char **argv) int unknown_flag = 0; /* Command-line flags */ int aflag = 0; /* -a: print appointments for current day */ - int cflag = 0; /* -c: specify the calendar file to use */ int dflag = 0; /* -d: print appointments for a specified days */ - int Dflag = 0; /* -D: specify data directory to use */ int hflag = 0; /* -h: print help text */ int gflag = 0; /* -g: run garbage collector */ int iflag = 0; /* -i: import data */ @@ -516,7 +514,6 @@ int parse_args(int argc, char **argv) load_data++; break; case 'c': - cflag = 1; multiple_flag++; cfile = optarg; load_data++; @@ -528,7 +525,6 @@ int parse_args(int argc, char **argv) ddate = optarg; break; case 'D': - Dflag = 1; datadir = optarg; break; case 'h': @@ -638,11 +634,6 @@ int parse_args(int argc, char **argv) usage_try(); return EXIT_FAILURE; /* Incorrect arguments */ - } else if (Dflag && cflag) { - fputs(_("Options '-D' and '-c' cannot be used at the same time\n"), stderr); - usage(); - usage_try(); - return EXIT_FAILURE; } else if (Sflag && !(aflag || dflag || rflag || sflag || tflag)) { fputs(_("Option '-S' must be used with either '-d', '-r', '-s', " "'-a' or '-t'\n"), stderr); diff --git a/src/io.c b/src/io.c index 9bffe1a..1263a6a 100644 --- a/src/io.c +++ b/src/io.c @@ -231,7 +231,6 @@ void io_init(const char *cfile, const char *datadir) snprintf(path_todo, BUFSIZ, "%s/" TODO_PATH_NAME, home); snprintf(path_conf, BUFSIZ, "%s/" CONF_PATH_NAME, home); snprintf(path_notes, BUFSIZ, "%s/" NOTES_DIR_NAME, home); - snprintf(path_apts, BUFSIZ, "%s/" APTS_PATH_NAME, home); snprintf(path_keys, BUFSIZ, "%s/" KEYS_PATH_NAME, home); snprintf(path_cpid, BUFSIZ, "%s/" CPID_PATH_NAME, home); snprintf(path_dpid, BUFSIZ, "%s/" DPID_PATH_NAME, home); @@ -249,43 +248,48 @@ void io_init(const char *cfile, const char *datadir) snprintf(path_dpid, BUFSIZ, "%s/" DPID_PATH, home); snprintf(path_dmon_log, BUFSIZ, "%s/" DLOG_PATH, home); snprintf(path_notes, BUFSIZ, "%s/" NOTES_DIR, home); - if (cfile == NULL) { - snprintf(path_apts, BUFSIZ, "%s/" APTS_PATH, home); + } + + if (cfile == NULL) { + if (datadir != NULL) { + snprintf(path_apts, BUFSIZ, "%s/" APTS_PATH_NAME, home); } else { - snprintf(apts_file, BUFSIZ, "%s", cfile); - strncpy(path_apts, apts_file, BUFSIZ); - /* check if the file exists, otherwise create it */ - data_file = fopen(path_apts, "r"); - if (data_file == NULL) { - printf(_("%s does not exist, create it now [y or n] ? "), path_apts); - ch = getchar(); - switch (ch) { - case 'N': - case 'n': - puts(_("aborting...\n")); - exit_calcurse(EXIT_FAILURE); - break; - - case 'Y': - case 'y': - data_file = fopen(path_apts, "w"); - if (data_file == NULL) { - perror(path_apts); - exit_calcurse(EXIT_FAILURE); - } else { - printf(_("%s successfully created\n"), path_apts); - puts(_("starting interactive mode...\n")); - } - break; - - default: - puts(_("aborting...\n")); + snprintf(path_apts, BUFSIZ, "%s/" APTS_PATH, home); + } + } else { + snprintf(apts_file, BUFSIZ, "%s", cfile); + strncpy(path_apts, apts_file, BUFSIZ); + /* check if the file exists, otherwise create it */ + data_file = fopen(path_apts, "r"); + if (data_file == NULL) { + printf(_("%s does not exist, create it now [y or n] ? "), path_apts); + ch = getchar(); + switch (ch) { + case 'N': + case 'n': + puts(_("aborting...\n")); + exit_calcurse(EXIT_FAILURE); + break; + + case 'Y': + case 'y': + data_file = fopen(path_apts, "w"); + if (data_file == NULL) { + perror(path_apts); exit_calcurse(EXIT_FAILURE); - break; + } else { + printf(_("%s successfully created\n"), path_apts); + puts(_("starting interactive mode...\n")); } + break; + + default: + puts(_("aborting...\n")); + exit_calcurse(EXIT_FAILURE); + break; } - file_close(data_file, __FILE_POS__); } + file_close(data_file, __FILE_POS__); } } -- cgit v1.2.3