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>
This commit is contained in:
Lukas Fleischer 2011-04-11 15:12:50 +02:00
parent 1140feaabf
commit b9c1969126
4 changed files with 32 additions and 0 deletions

View File

@ -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);

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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 */