summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Fleischer <calcurse@cryptocrack.de>2011-09-01 17:08:37 +0200
committerLukas Fleischer <calcurse@cryptocrack.de>2011-10-05 12:25:48 +0200
commit718a6cfee4916f347636215ee35313610793f9bd (patch)
tree766f456aba09ed277a7acc9a41424c5466434f05
parent711d5dea20679298192b25a5bbfe4fd70d9012d6 (diff)
downloadcalcurse-718a6cfee4916f347636215ee35313610793f9bd.zip
Add command line argument to run the GC manually
Adds a "-g" option that allows for running the garbage collector for note files manually. This is useful for users that do not use note files at all or rarely edit/remove them. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
-rw-r--r--doc/calcurse.1.txt3
-rw-r--r--doc/manual.txt3
-rw-r--r--src/args.c23
3 files changed, 27 insertions, 2 deletions
diff --git a/doc/calcurse.1.txt b/doc/calcurse.1.txt
index 884aa34..f611079 100644
--- a/doc/calcurse.1.txt
+++ b/doc/calcurse.1.txt
@@ -103,6 +103,9 @@ appointments can be specified using the *-c* flag.
Specify the data directory to use. This option is incompatible with -c.
If not specified, the default directory is *~/.calcurse/*.
+*-g*, *--gc*::
+ Run the garbage collector for note files and exit.
+
*-h*, *--help*::
Print a short help text describing the supported command-line options,
and exit.
diff --git a/doc/manual.txt b/doc/manual.txt
index 55b9785..4964a21 100644
--- a/doc/manual.txt
+++ b/doc/manual.txt
@@ -209,6 +209,9 @@ can be specified using the `-c` flag.
Specify the data directory to use. This option is incompatible with -c.
If not specified, the default directory is `~/.calcurse/`.
+`-g, --gc`::
+ Run the garbage collector for note files and exit.
+
`-h, --help`::
Print a short help text describing the supported command-line options,
and exit.
diff --git a/src/args.c b/src/args.c
index 8600d33..c2e4d60 100644
--- a/src/args.c
+++ b/src/args.c
@@ -52,7 +52,7 @@ static void
usage ()
{
const char *arg_usage =
- _("Usage: calcurse [-h|-v] [-N] [-an] [-t[num]] [-i<file>] [-x[format]]\n"
+ _("Usage: calcurse [-g|-h|-v] [-N] [-an] [-t[num]] [-i<file>] [-x[format]]\n"
" [-d <date>|<num>] [-s[date]] [-r[range]]\n"
" [-c<file> | -D<dir>] [-S<regex>] [--status]\n");
fputs (arg_usage, stdout);
@@ -106,6 +106,8 @@ help_arg ()
" print events and appointments for <date> or <num> upcoming days and"
"\n\texit. To specify both a starting date and a range, use the\n"
"\t'--startday' and the '--range' option.\n"
+ "\n -g, --gc\n"
+ " run the garbage collector for note files and exit. \n"
"\n -i <file>, --import <file>\n"
" import the icalendar data contained in <file>. \n"
"\n -n, --next\n"
@@ -686,6 +688,7 @@ parse_args (int argc, char **argv, struct conf *conf)
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 */
int nflag = 0; /* -n: print next appointment */
int Nflag = 0; /* -N: also print note content with apps and todos */
@@ -708,13 +711,14 @@ parse_args (int argc, char **argv, struct conf *conf)
STATUS_OPT = CHAR_MAX + 1
};
- static char *optstr = "hvnNax::t::d:c:r::s::S:D:i:";
+ static char *optstr = "ghvnNax::t::d:c:r::s::S:D:i:";
struct option longopts[] = {
{"appointment", no_argument, NULL, 'a'},
{"calendar", required_argument, NULL, 'c'},
{"day", required_argument, NULL, 'd'},
{"directory", required_argument, NULL, 'D'},
+ {"gc", no_argument, NULL, 'g'},
{"help", no_argument, NULL, 'h'},
{"import", required_argument, NULL, 'i'},
{"next", no_argument, NULL, 'n'},
@@ -760,6 +764,9 @@ parse_args (int argc, char **argv, struct conf *conf)
case 'h':
hflag = 1;
break;
+ case 'g':
+ gflag = 1;
+ break;
case 'i':
iflag = 1;
multiple_flag++;
@@ -894,6 +901,18 @@ parse_args (int argc, char **argv, struct conf *conf)
status_arg ();
non_interactive = 1;
}
+ else if (gflag)
+ {
+ io_init (cfile, datadir);
+ io_check_dir (path_dir, (int *)0);
+ io_check_dir (path_notes, (int *)0);
+ io_check_file (path_apts, (int *)0);
+ io_check_file (path_todo, (int *)0);
+ io_load_app ();
+ io_load_todo ();
+ note_gc ();
+ non_interactive = 1;
+ }
else if (multiple_flag)
{
if (load_data)