aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/calcurse.c6
-rw-r--r--src/calcurse.h8
-rw-r--r--src/io.c12
3 files changed, 17 insertions, 9 deletions
diff --git a/src/calcurse.c b/src/calcurse.c
index 57dce89..31be357 100644
--- a/src/calcurse.c
+++ b/src/calcurse.c
@@ -274,7 +274,7 @@ static inline void key_generic_save(void)
char *msg = NULL;
int ret;
- ret = io_save_cal();
+ ret = io_save_cal(interactive);
if (ret == IO_SAVE_RELOAD) {
ui_todo_load_items();
@@ -505,7 +505,7 @@ static inline void key_generic_scroll_down(void)
static inline void key_generic_quit(void)
{
if (conf.auto_save)
- io_save_cal();
+ io_save_cal(interactive);
if (conf.auto_gc)
note_gc();
@@ -540,7 +540,7 @@ static inline void key_generic_cmd(void)
if (!strcmp(cmd_name, "write") || !strcmp(cmd_name, "w") ||
!strcmp(cmd_name, "wq")) {
- io_save_cal();
+ io_save_cal(interactive);
valid = 1;
}
if (!strcmp(cmd_name, "quit") || !strcmp(cmd_name, "q") ||
diff --git a/src/calcurse.h b/src/calcurse.h
index 17c45f8..49b1a70 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -654,7 +654,11 @@ enum getstr {
#define PARSE_DATETIME_HAS_DATE (1 << 0)
#define PARSE_DATETIME_HAS_TIME (1 << 1)
-/* Return codes for the io_save_cal() function. */
+/* Save types and return codes for the io_save_cal() function. */
+enum save_type {
+ interactive,
+ periodic
+};
enum {
IO_SAVE_CTINUE,
IO_SAVE_RELOAD,
@@ -862,7 +866,7 @@ unsigned io_save_apts(const char *);
void io_dump_todo(const char *);
unsigned io_save_todo(const char *);
unsigned io_save_keys(void);
-int io_save_cal(void);
+int io_save_cal(enum save_type);
void io_load_app(struct item_filter *);
void io_load_todo(struct item_filter *);
int io_load_data(struct item_filter *, int);
diff --git a/src/io.c b/src/io.c
index aa31313..16fddc3 100644
--- a/src/io.c
+++ b/src/io.c
@@ -490,16 +490,20 @@ cleanup:
* IO_SAVE_NOOP: cancel save operation (nothing has changed)
* IO_SAVE_ERROR: cannot access data
*/
-int io_save_cal(void)
+int io_save_cal(enum save_type s_t)
{
int ret;
if (read_only)
return IO_SAVE_CANCEL;
- if ((ret = new_data()) == NOKNOW) {
+ if ((ret = new_data()) == NOKNOW)
return IO_SAVE_ERROR;
- } else if (ret) { /* New data */
+
+ if (ret) { /* New data */
+ if (s_t == periodic)
+ return IO_SAVE_CANCEL;
+ /* Interactively decide what to do. */
if ((ret = resolve_save_conflict()))
return ret;
} else /* No new data */
@@ -1422,7 +1426,7 @@ static void *io_psave_thread(void *arg)
for (;;) {
sleep(delay * MININSEC);
- io_save_cal();
+ io_save_cal(periodic);
}
}