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 --- doc/calcurse.1.txt | 11 ++++----- doc/manual.txt | 9 +++---- src/args.c | 15 +++--------- src/io.c | 70 +++++++++++++++++++++++++++++------------------------- 4 files changed, 50 insertions(+), 55 deletions(-) diff --git a/doc/calcurse.1.txt b/doc/calcurse.1.txt index 6768088..2383e95 100644 --- a/doc/calcurse.1.txt +++ b/doc/calcurse.1.txt @@ -42,7 +42,7 @@ Synopsis -------- [verse] -*calcurse* [*-h*|*-v*] [*-an*] [*-t*[num]] [*-c* | *-D*] +*calcurse* [*-h*|*-v*] [*-an*] [*-t*[num]] [*-c*] [*-D*] [*-i*] [*-x*[format]] [*-d* |] [*-s*[date]] [*-r*[range]] [*-S* ] [*--status*] @@ -65,9 +65,8 @@ The following options are supported: from which to read the appointments can be specified using the *-c* flag. *-c* , *--calendar* :: - Specify the calendar file to use. The default calendar is - *~/.calcurse/apts* (see section 'FILES' below). This option is incompatible - with -*D*. + Specify the calendar file to use. The default calendar is *~/.calcurse/apts* + (see section 'FILES' below). This option has precedence over *-D*. *-d* , *--day* :: Print the appointments for the given date or for the given number of @@ -100,8 +99,8 @@ menu. Four formats are available: appointments can be specified using the *-c* flag. *-D* , *--directory* :: - Specify the data directory to use. This option is incompatible with -c. - If not specified, the default directory is *~/.calcurse/*. + Specify the data directory to use. If not specified, the default directory is + *~/.calcurse/*. *--format-apt* :: Specify a format to control the output of appointments in non-interactive diff --git a/doc/manual.txt b/doc/manual.txt index 2ff8a9a..9f2791a 100644 --- a/doc/manual.txt +++ b/doc/manual.txt @@ -181,8 +181,9 @@ long options are supported): from which to read the appointments can be specified using the `-c` flag. `-c , --calendar `:: - Specify the calendar file to use. The default calendar is - `~/.calcurse/apts` (see section <>). + Specify the calendar file to use. The default calendar is `~/.calcurse/apts` + (see section <>). This option has precedence + over `-D`. `-d , --day `:: Print the appointments for the given date or for the given number of @@ -206,8 +207,8 @@ Note: as for the `-a` flag, the calendar from which to read the appointments can be specified using the `-c` flag. `-D , --directory `:: - Specify the data directory to use. This option is incompatible with -c. - If not specified, the default directory is `~/.calcurse/`. + Specify the data directory to use. If not specified, the default directory is + `~/.calcurse/`. `--format-apt `:: Specify a format to control the output of appointments in non-interactive 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