]> Pileus Git - lackey/blobdiff - src/args.c
Improve event display formatting
[lackey] / src / args.c
index 1fceff6b85ab3e16f47c8e07592e4571438cc82b..9ad0640351f706123fcd385e2c19e95bf9937031 100644 (file)
@@ -38,14 +38,15 @@ struct option long_options[] = {
        {"week", 2, NULL, 'w'},
 };
 
-static int print_day  = 0;
-static int print_week = 0;
+static int   print_day  = 0;
+static int   print_week = 0;
+static char *calendar   = NULL;
 
 /* Usage */
 static void usage(char *name)
 {
        printf("Usage:\n");
-       printf("  %s [OPTION...]\n", name);
+       printf("  %s [OPTION...] [CALENDAR]\n", name);
        printf("\n");
        printf("Options:\n");
        printf("  -h, --help  Print usage information\n");
@@ -83,6 +84,13 @@ void args_init(void)
                }
        }
 
+       /* Save default calendar */
+       calendar = argv[optind];
+
+       /* Load calendars */
+       for (int i = optind; i < argc; i++)
+               cal_config("ical", argv[i], "location", argv[i]);
+
        /* Validate arguments */
        if (print_day && print_week)
                error("Cannot print both day and week");
@@ -90,6 +98,23 @@ void args_init(void)
 
 void args_main(void)
 {
+       /* Focus the default calendar */
+       if (calendar) {
+               event_t *event = EVENTS;
+               date_t   start = {SEL.year, SEL.month, SEL.day, 0, 0};
+               while (event && compare(&start, &event->start) > 0)
+                       event = event->next;
+               while (event && !match(calendar, event->cal->name))
+                       event = event->next;
+               if (!event)
+                       event = EVENTS;
+               while (event && !match(calendar, event->cal->name))
+                       event = event->next;
+               if (event)
+                       SEL = event->start;
+       }
+
+       /* Print days or week */
        if (print_day || print_week) {
                event_t *event = EVENTS;
                for (int d = 0; d < (print_day ? 1 : 7); d++) {
@@ -100,11 +125,11 @@ void args_main(void)
                        add_days(&start.year, &start.month, &start.day, d);
                        add_days(&end.year,   &end.month,   &end.day,   d);
 
-
                        /* Print day header */
                        wday_t wday = day_of_week(start.year, start.month, start.day);
-                       printf("%s%s, %s %d, %d\n",
-                               d ? "\n" : "",
+                       if (d > 0)
+                               printf("\n");
+                       printf("%s, %s %d, %d\n",
                                day_to_string(wday),
                                month_to_string(start.month),
                                start.day+1,
@@ -117,14 +142,19 @@ void args_main(void)
                        /* Print event info */
                        int printed = 0;
                        while (event && compare(&end, &event->start) > 0) {
-                               printf("%s  %02d:%02d",
-                                       printed ? "\n" : "",
-                                       event->start.hour,
-                                       event->start.min);
+                               if (printed > 0)
+                                       printf("\n");
+                               printf("* %02d:%02d - %02d:%02d",
+                                       event->start.hour, event->start.min,
+                                       event->end.hour,   event->end.min);
+                               if (!event->name)
+                                       printf("\n");
                                if (event->name)
                                        printf("  %s\n", event->name);
+                               if (event->loc)
+                                       printf("  Location:      %s\n", event->loc);
                                if (event->desc)
-                                       printf("\n  %s\n", event->desc);
+                                       printf("  Description:   %s\n", event->desc);
                                printed++;
                                event = event->next;
                        }