diff options
author | Lukas Fleischer <calcurse@cryptocrack.de> | 2012-06-27 12:07:02 +0200 |
---|---|---|
committer | Lukas Fleischer <calcurse@cryptocrack.de> | 2012-06-30 14:34:37 +0200 |
commit | 86c465b0e50e1479e819f63c0bac86e7aec236a1 (patch) | |
tree | 29012c3da575e004a3c34d56f1eba0771fc7ab33 | |
parent | 7a75415a619bd6698f45ec24f696f7b9dbb3752c (diff) | |
download | calcurse-86c465b0e50e1479e819f63c0bac86e7aec236a1.zip |
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 <calcurse@cryptocrack.de>
-rw-r--r-- | doc/calcurse.1.txt | 11 | ||||
-rw-r--r-- | doc/manual.txt | 9 | ||||
-rw-r--r-- | src/args.c | 15 | ||||
-rw-r--r-- | 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*<file> | *-D*<dir>] +*calcurse* [*-h*|*-v*] [*-an*] [*-t*[num]] [*-c*<file>] [*-D*<dir>] [*-i*<file>] [*-x*[format]] [*-d* <date>|<num>] [*-s*[date]] [*-r*[range]] [*-S* <regex>] [*--status*] @@ -65,9 +65,8 @@ The following options are supported: from which to read the appointments can be specified using the *-c* flag. *-c* <file>, *--calendar* <file>:: - 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* <date|num>, *--day* <date|num>:: 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* <dir>, *--directory* <dir>:: - 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* <format>:: 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 <file>, --calendar <file>`:: - Specify the calendar file to use. The default calendar is - `~/.calcurse/apts` (see section <<basics_files,calcurse files>>). + Specify the calendar file to use. The default calendar is `~/.calcurse/apts` + (see section <<basics_files,calcurse files>>). This option has precedence + over `-D`. `-d <date|num>, --day <date|num>`:: 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 <dir>, --directory <dir>`:: - 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 <format>`:: Specify a format to control the output of appointments in non-interactive @@ -62,7 +62,7 @@ static void usage(void) const char *arg_usage = _("Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i<file>] [-x[format]]\n" " [-d <date>|<num>] [-s[date]] [-r[range]]\n" - " [-c<file> | -D<dir>] [-S<regex>] [--status]\n" + " [-c<file>] [-D<dir>] [-S<regex>] [--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 <file>, --calendar <file>\n" - " specify the calendar <file> to use (incompatible with '-D').\n" + " specify the calendar <file> to use (has precedence over '-D').\n" "\n -D <dir>, --directory <dir>\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); @@ -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__); } } |