diff options
author | Lukas Fleischer <calcurse@cryptocrack.de> | 2011-04-11 15:12:50 +0200 |
---|---|---|
committer | Lukas Fleischer <calcurse@cryptocrack.de> | 2011-04-12 12:02:23 +0200 |
commit | b9c1969126bc772a4ec34b56cd0de9b6fc4e44f5 (patch) | |
tree | e148be2f9d6ca6fd487634b86dce77d5c069ce7c | |
parent | 1140feaabf7bf826b52d21643885fb1bd94702ed (diff) | |
download | calcurse-b9c1969126bc772a4ec34b56cd0de9b6fc4e44f5.zip |
Drop empty notes after editing.
Keeping empty notes doesn't make sense here. Also, there doesn't seem to
be a simple way to erase notes yet. This will make calcurse delete any
notes that are empty (meaning that they are either 0-byte files or
contain nothing but a newline character) when returning from the editor.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
-rw-r--r-- | src/calcurse.h | 1 | ||||
-rw-r--r-- | src/day.c | 3 | ||||
-rw-r--r-- | src/io.c | 25 | ||||
-rw-r--r-- | src/todo.c | 3 |
4 files changed, 32 insertions, 0 deletions
diff --git a/src/calcurse.h b/src/calcurse.h index 4b28039..0a306f0 100644 --- a/src/calcurse.h +++ b/src/calcurse.h @@ -696,6 +696,7 @@ void io_stop_psave_thread (void); void io_set_lock (void); unsigned io_dump_pid (char *); unsigned io_get_pid (char *); +int io_file_is_empty (char *); /* keys.c */ void keys_init (void); @@ -1085,6 +1085,9 @@ day_edit_note (char *editor) (void)snprintf (fullname, BUFSIZ, "%s%s", path_notes, p->note); wins_launch_external (fullname, editor); + if (io_file_is_empty (fullname)) + erase_note (&p->note, ERASE_FORCE); + date = calendar_get_slctd_day_sec (); switch (p->type) { @@ -3040,3 +3040,28 @@ io_get_pid (char *file) return pid; } + +/* + * Check whether a file is empty. + */ +int +io_file_is_empty (char *file) +{ + FILE *fp; + + if (file && (fp = fopen (file, "r"))) + { + if (fgetc (fp) == '\n' || feof (fp)) + { + fclose (fp); + return 1; + } + else + { + fclose (fp); + return 0; + } + } + + return 1; +} @@ -503,6 +503,9 @@ todo_edit_note (char *editor) } (void)snprintf (fullname, BUFSIZ, "%s%s", path_notes, i->note); wins_launch_external (fullname, editor); + + if (io_file_is_empty (fullname)) + erase_note (&i->note, ERASE_FORCE); } /* View a note previously attached to a todo */ |