aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Hentenaar <tim@hentenaar.com>2014-10-10 01:55:14 +0200
committerLukas Fleischer <calcurse@cryptocrack.de>2014-10-10 09:33:57 +0200
commit7f62fb185c2617eb308f7ca5fe8b9e18828cb772 (patch)
treec20ac5e02a8767f0959507011b9886a971a31fd4
parent7f06c25230db49e6a7dcf00692cc2d1bae9ec6ea (diff)
downloadcalcurse-7f62fb185c2617eb308f7ca5fe8b9e18828cb772.tar.gz
calcurse-7f62fb185c2617eb308f7ca5fe8b9e18828cb772.zip
Let SIGUSR1 trigger a reload
In an effort to better integrate the import process with external applications, it's desirable to have a mechanism by which external programs can trigger a reload of calcurse's data. This patch adds that functionality via SIGUSR1. The reload request is handled in the main loop. When the user is currently entering data, the request is delayed until the main loop is re-entered. Signed-off-by: Tim Hentenaar <tim@hentenaar.com> Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
-rw-r--r--src/calcurse.c5
-rw-r--r--src/calcurse.h1
-rw-r--r--src/sigs.c5
-rw-r--r--src/vars.c3
4 files changed, 14 insertions, 0 deletions
diff --git a/src/calcurse.c b/src/calcurse.c
index dd5abf5..7b94b9b 100644
--- a/src/calcurse.c
+++ b/src/calcurse.c
@@ -625,6 +625,11 @@ int main(int argc, char **argv)
wins_reset();
}
+ if (want_reload) {
+ want_reload = 0;
+ key_generic_reload();
+ }
+
key = keys_getch(win[KEY].p, &count, &reg);
switch (key) {
case KEY_GENERIC_REDRAW:
diff --git a/src/calcurse.h b/src/calcurse.h
index 4a6ea24..ce19183 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -1096,6 +1096,7 @@ extern unsigned colorize;
extern int foreground, background;
extern enum ui_mode ui_mode;
extern int read_only;
+extern int want_reload;
extern const char *datefmt_str[DATE_FORMATS];
extern int days[12];
extern const char *monthnames[12];
diff --git a/src/sigs.c b/src/sigs.c
index 18abcba..a95d9ab 100644
--- a/src/sigs.c
+++ b/src/sigs.c
@@ -86,6 +86,10 @@ static void generic_hdlr(int sig)
}
exit(EXIT_SUCCESS);
break;
+ case SIGUSR1:
+ want_reload = 1;
+ ungetch(KEY_RESIZE);
+ break;
}
}
@@ -112,6 +116,7 @@ void sigs_init()
if (!sigs_set_hdlr(SIGCHLD, generic_hdlr)
|| !sigs_set_hdlr(SIGWINCH, generic_hdlr)
|| !sigs_set_hdlr(SIGTERM, generic_hdlr)
+ || !sigs_set_hdlr(SIGUSR1, generic_hdlr)
|| !sigs_set_hdlr(SIGINT, SIG_IGN))
exit_calcurse(1);
}
diff --git a/src/vars.c b/src/vars.c
index 16b892a..39fbb87 100644
--- a/src/vars.c
+++ b/src/vars.c
@@ -61,6 +61,9 @@ enum ui_mode ui_mode = UI_CMDLINE;
/* Don't save anything if this is set. */
int read_only = 0;
+/* Applications can trigger a reload by sending SIGUSR1. */
+int want_reload = 0;
+
/* Strings describing each input date format. */
const char *datefmt_str[DATE_FORMATS];