From 87664095cdd2c85d50e1be42442c0c24b611c7dc Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Thu, 7 Jul 2011 18:23:30 +0200 Subject: Refactor out note functions * Add new note_edit() and note_view() helper functions. Use these instead of copy-pasted code in *_note_edit(). * Move all note-related functions (note_edit(), note_view(), note_erase()) to a new source file "note.c". Signed-off-by: Lukas Fleischer --- src/Makefile.am | 1 + src/calcurse.h | 6 +++- src/day.c | 25 ++-------------- src/note.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/todo.c | 29 +++---------------- src/utils.c | 18 ------------ 6 files changed, 103 insertions(+), 66 deletions(-) create mode 100644 src/note.c diff --git a/src/Makefile.am b/src/Makefile.am index 8fff8e3..12147a5 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -19,6 +19,7 @@ calcurse_SOURCES = \ io.c \ keys.c \ llist.c \ + note.c \ notify.c \ recur.c \ sigs.c \ diff --git a/src/calcurse.h b/src/calcurse.h index a0af508..ea37cd2 100644 --- a/src/calcurse.h +++ b/src/calcurse.h @@ -750,6 +750,11 @@ void mem_stats (void); #endif /* CALCURSE_MEMORY_DEBUG */ +/* note.c */ +void edit_note (char **, char *); +void view_note (char *, char *); +void erase_note (char **, enum eraseflg); + /* notify.c */ int notify_time_left (void); unsigned notify_needs_reminder (void); @@ -877,7 +882,6 @@ long mystrtol (const char *); void print_bool_option_incolor (WINDOW *, unsigned, int, int); const char *get_tempdir (void); char *new_tempfile (const char *, int); -void erase_note (char **, enum eraseflg); int parse_date (char *, enum datefmt, int *, int *, int *, struct date *); void str_toupper (char *); diff --git a/src/day.c b/src/day.c index ffbe567..884d86b 100644 --- a/src/day.c +++ b/src/day.c @@ -1043,25 +1043,12 @@ day_edit_note (char *editor) struct apoint *a; struct recur_event *re; struct event *e; - char fullname[BUFSIZ]; - char *filename; long date; int item_num; item_num = apoint_hilt (); p = day_get_item (item_num); - if (p->note == NULL) - { - if ((filename = new_tempfile (path_notes, NOTESIZ)) == NULL) - return; - else - p->note = filename; - } - (void)snprintf (fullname, BUFSIZ, "%s%s", path_notes, p->note); - wins_launch_external (fullname, editor); - - if (io_file_is_empty (fullname) > 0) - erase_note (&p->note, ERASE_FORCE); + edit_note (&p->note, editor); date = calendar_get_slctd_day_sec (); switch (p->type) @@ -1089,14 +1076,8 @@ day_edit_note (char *editor) void day_view_note (char *pager) { - struct day_item *p; - char fullname[BUFSIZ]; - - p = day_get_item (apoint_hilt ()); - if (p->note == NULL) - return; - (void)snprintf (fullname, BUFSIZ, "%s%s", path_notes, p->note); - wins_launch_external (fullname, pager); + struct day_item *p = day_get_item (apoint_hilt ()); + view_note (p->note, pager); } /* Pipe an appointment or event to an external program. */ diff --git a/src/note.c b/src/note.c new file mode 100644 index 0000000..57bfc2d --- /dev/null +++ b/src/note.c @@ -0,0 +1,90 @@ +/* + * Calcurse - text-based organizer + * + * Copyright (c) 2004-2011 calcurse Development Team + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Send your feedback or comments to : misc@calcurse.org + * Calcurse home page : http://calcurse.org + * + */ + +#include + +#include "calcurse.h" + +/* Edit a note with an external editor. */ +void +edit_note (char **note, char *editor) +{ + char fullname[BUFSIZ]; + char *filename; + + if (*note == NULL) + { + if ((filename = new_tempfile (path_notes, NOTESIZ)) != NULL) + *note = filename; + else + return; + } + (void)snprintf (fullname, BUFSIZ, "%s%s", path_notes, *note); + wins_launch_external (fullname, editor); + + if (io_file_is_empty (fullname) > 0) + erase_note (note, ERASE_FORCE); +} + +/* View a note in an external pager. */ +void +view_note (char *note, char *pager) +{ + char fullname[BUFSIZ]; + + if (note == NULL) + return; + (void)snprintf (fullname, BUFSIZ, "%s%s", path_notes, note); + wins_launch_external (fullname, pager); +} + +/* Erase a note previously attached to an item. */ +void +erase_note (char **note, enum eraseflg flag) +{ + char fullname[BUFSIZ]; + + if (*note == NULL) + return; + if (flag != ERASE_FORCE_KEEP_NOTE) + { + (void)snprintf (fullname, BUFSIZ, "%s%s", path_notes, *note); + if (unlink (fullname) != 0) + EXIT (_("could not remove note")); + } + mem_free (*note); + *note = NULL; +} diff --git a/src/todo.c b/src/todo.c index c11a676..c489f51 100644 --- a/src/todo.c +++ b/src/todo.c @@ -471,37 +471,16 @@ todo_update_panel (int which_pan) void todo_edit_note (char *editor) { - struct todo *i; - char fullname[BUFSIZ]; - char *filename; - - i = todo_get_item (hilt); - if (i->note == NULL) - { - if ((filename = new_tempfile (path_notes, NOTESIZ)) != NULL) - i->note = filename; - else - return; - } - (void)snprintf (fullname, BUFSIZ, "%s%s", path_notes, i->note); - wins_launch_external (fullname, editor); - - if (io_file_is_empty (fullname) > 0) - erase_note (&i->note, ERASE_FORCE); + struct todo *i = todo_get_item (hilt); + edit_note (&i->note, editor); } /* View a note previously attached to a todo */ void todo_view_note (char *pager) { - struct todo *i; - char fullname[BUFSIZ]; - - i = todo_get_item (hilt); - if (i->note == NULL) - return; - (void)snprintf (fullname, BUFSIZ, "%s%s", path_notes, i->note); - wins_launch_external (fullname, pager); + struct todo *i = todo_get_item (hilt); + view_note (i->note, pager); } /* Pipe a todo item to an external program. */ diff --git a/src/utils.c b/src/utils.c index 949b1b7..4ea2ce3 100644 --- a/src/utils.c +++ b/src/utils.c @@ -595,24 +595,6 @@ new_tempfile (const char *prefix, int trailing_len) return mem_strdup (fullname + prefix_len); } -/* Erase a note previously attached to a todo, event or appointment. */ -void -erase_note (char **note, enum eraseflg flag) -{ - char fullname[BUFSIZ]; - - if (*note == NULL) - return; - if (flag != ERASE_FORCE_KEEP_NOTE) - { - (void)snprintf (fullname, BUFSIZ, "%s%s", path_notes, *note); - if (unlink (fullname) != 0) - EXIT (_("could not remove note")); - } - mem_free (*note); - *note = NULL; -} - /* * Convert a string containing a date into three integers containing the year, * month and day. -- cgit v1.2.3-54-g00ecf