aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmbika Eshwar <cepheac@protonmail.ch>2020-09-29 02:16:25 -0400
committerLukas Fleischer <lfleischer@calcurse.org>2020-10-11 09:59:37 -0400
commitb144b19964fcd5cfb99526641751823dea9bee9d (patch)
treef22109a0609be2868090c94efa24ed61a14745b9
parent1b40844aa3b7a94fd84533ed6ef78a5c5cbac5f1 (diff)
downloadcalcurse-b144b19964fcd5cfb99526641751823dea9bee9d.tar.gz
calcurse-b144b19964fcd5cfb99526641751823dea9bee9d.zip
Implemented rendering of notes in todo view
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
-rw-r--r--src/calcurse.h1
-rw-r--r--src/note.c11
-rw-r--r--src/ui-todo.c22
3 files changed, 33 insertions, 1 deletions
diff --git a/src/calcurse.h b/src/calcurse.h
index dca9d8b..7f03b68 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -1019,6 +1019,7 @@ void edit_note(char **, const char *);
void view_note(const char *, const char *);
void erase_note(char **);
void note_read(char *, FILE *);
+void note_read_contents(char *, size_t, FILE *);
void note_gc(void);
/* notify.c */
diff --git a/src/note.c b/src/note.c
index 92c1ecf..40e0882 100644
--- a/src/note.c
+++ b/src/note.c
@@ -155,6 +155,17 @@ void note_read(char *buffer, FILE * fp)
buffer[MAX_NOTESIZ] = '\0';
}
+/* Read the contents of a note file */
+void note_read_contents(char *buffer, size_t buffer_len, FILE * fp)
+{
+ size_t read_count = fread(buffer, 1, buffer_len, fp);
+ if (read_count != buffer_len)
+ buffer[read_count] = '\0';
+ else
+ memcpy(&buffer[buffer_len - 4], "...\0", 4);
+}
+
+
static void
note_gc_extract_key(struct note_gc_hash *data, const char **key, int *len)
{
diff --git a/src/ui-todo.c b/src/ui-todo.c
index b546720..876f570 100644
--- a/src/ui-todo.c
+++ b/src/ui-todo.c
@@ -314,7 +314,27 @@ void ui_todo_popup_item(void)
if (!item)
return;
- item_in_popup(NULL, NULL, item->mesg, _("TODO:"));
+ if (item->note) {
+ /* Assign a sane default note size that will cleanly
+ * truncate long notes */
+ const char *note_heading = _("Note:");
+ size_t note_size = 3500;
+ char note[note_size];
+ char *notepath, *msg;
+ FILE *fp;
+
+ asprintf(&notepath, "%s%s", path_notes, item->note);
+ fp = fopen(notepath, "r");
+ note_read_contents(note, note_size, fp);
+ fclose(fp);
+ mem_free(notepath);
+
+ asprintf(&msg, "%s\n\n%s\n%s", item->mesg, note_heading, note);
+ item_in_popup(NULL, NULL, msg, _("TODO:"));
+ mem_free(msg);
+ } else {
+ item_in_popup(NULL, NULL, item->mesg, _("TODO:"));
+ }
}
void ui_todo_flag(void)