summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Fleischer <calcurse@cryptocrack.de>2012-06-27 12:07:02 +0200
committerLukas Fleischer <calcurse@cryptocrack.de>2012-06-30 14:34:37 +0200
commit86c465b0e50e1479e819f63c0bac86e7aec236a1 (patch)
tree29012c3da575e004a3c34d56f1eba0771fc7ab33
parent7a75415a619bd6698f45ec24f696f7b9dbb3752c (diff)
downloadcalcurse-86c465b0e50e1479e819f63c0bac86e7aec236a1.tar.gz
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.txt11
-rw-r--r--doc/manual.txt9
-rw-r--r--src/args.c15
-rw-r--r--src/io.c70
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
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<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);
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__);
}
}