]> Pileus Git - lackey/blobdiff - views/events.c
Add cursor like movement to events and todos view
[lackey] / views / events.c
index ced1a3fc3e3bb577333ed17a594a8810a2b8a17c..99158676800fc2f081d83036a0cedd4164ab7129 100644 (file)
@@ -61,10 +61,18 @@ void events_draw(void)
                                      cur.day   != next.day   ;
                        int newtime = cur.hour  != next.hour  ||
                                      cur.min   != next.min   ;
+
+                       /* Update events */
+                       if (EVENT == NULL || compare(&EVENT->start, &start) < 0)
+                               EVENT = event;
+
+                       /* Spacing before the date */
                        if ((newdate || newtime) && row != 0)
                                row++;
                        if (newdate && row != 0)
                                row++;
+
+                       /* Print date */
                        if (newdate) {
                                wday_t wday = day_of_week(next.year, next.month, next.day);
                                wattron(win, A_BOLD);
@@ -75,9 +83,13 @@ void events_draw(void)
                                wattroff(win, A_BOLD);
                                row++;
                        }
-                       event_line(win, event, row++-line, 4, COLS-4, SHOW_DETAILS);
+
+                       /* Print event info */
+                       event_line(win, event, row++-line, 4, COLS-4,
+                                       SHOW_DETAILS | SHOW_ACTIVE);
                        if (event->name && event->desc)
                                mvwprintw(win, row++-line, 14, "%s", event->desc);
+
                        cur = next;
                        count += 1;
                }
@@ -89,23 +101,32 @@ void events_draw(void)
 /* Events run */
 int events_run(int key, mmask_t btn, int row, int col)
 {
-       int scroll = 0;
+       int scroll = 0, move = 0;
        switch (key)
        {
-               case 'g': scroll = -line;    break;
-               case 'G': scroll =  rows;    break;
-               case 'j': scroll =  1;       break;
-               case 'k': scroll = -1;       break;
-               case 'd': scroll =  LINES/2; break;
-               case 'u': scroll = -LINES/2; break;
-               case 'D': scroll =  LINES;   break;
-               case 'U': scroll = -LINES;   break;
+               case 'g':    scroll = -line;    break;
+               case 'G':    scroll =  rows;    break;
+               case '\005': scroll =  1;       break; // ctrl-e
+               case '\031': scroll = -1;       break; // ctrl-y
+               case 'd':    scroll =  LINES/2; break;
+               case 'u':    scroll = -LINES/2; break;
+               case 'D':    scroll =  LINES;   break;
+               case 'U':    scroll = -LINES;   break;
+               case 'j':    move   =  1;       break;
+               case 'k':    move   = -1;       break;
+               case '\012': // enter
+                       view_edit(EDIT_EVENT);
+                       return 1;
        }
-       line = CLAMP(line+scroll, 0, rows-1);
-       if (scroll) {
+       line   = CLAMP(line+scroll, 0, rows-1);
+       for (int i=0; i<move && EVENT && EVENT->next; i++)
+               EVENT = EVENT->next;
+       for (int i=0; i>move && EVENT && EVENT->prev; i--)
+               EVENT = EVENT->prev;
+       if (scroll || move) {
                werase(win);
                events_draw();
                wrefresh(win);
        }
-       return scroll;
+       return scroll || move;
 }