-/* Data */
-view_t views[] = {
- { "Day", day_init, day_size, day_draw, day_run, {KEY_F(1), '1', } },
- { "Week", week_init, week_size, week_draw, week_run, {KEY_F(2), '2', } },
- { "Month", month_init, month_size, month_draw, month_run, {KEY_F(3), '3', } },
- { "Year", year_init, year_size, year_draw, year_run, {KEY_F(4), '4', } },
- { "|", NULL, NULL, NULL, NULL, { } },
- { "Events", events_init, events_size, events_draw, events_run, {KEY_F(5), '5', } },
- { "Todo", todo_init, todo_size, todo_draw, todo_run, {KEY_F(6), '6', } },
- { "|", NULL, NULL, NULL, NULL, { } },
- { "Settings", settings_init, settings_size, settings_draw, settings_run, {KEY_F(7), '7', } },
- { "Help", help_init, help_size, help_draw, help_run, {KEY_F(8), '8', '?'} },
+/* Macros */
+#define VIEW(name, title, ...) \
+ void name##_init(WINDOW *win); \
+ void name##_size(int,int); \
+ void name##_draw(void); \
+ int name##_run(int,mmask_t,int,int); \
+ view_t name##_view = { \
+ #name, \
+ title, \
+ name##_init, \
+ name##_size, \
+ name##_draw, \
+ name##_run, \
+ { __VA_ARGS__ } \
+ }
+
+/* Views */
+VIEW(day, "Day", KEY_F(1), '1');
+VIEW(week, "Week", KEY_F(2), '2');
+VIEW(month, "Month", KEY_F(3), '3');
+VIEW(year, "Year", KEY_F(4), '4');
+VIEW(events, "Events", KEY_F(5), '5');
+VIEW(todo, "Todo", KEY_F(6), '6');
+VIEW(settings, "Settings", KEY_F(7), '7');
+VIEW(help, "Help", KEY_F(8), '8');
+VIEW(edit, "Edit");
+
+/* View data */
+view_t spacer = { "|", "|" };
+
+view_t *views[] = {
+ &day_view, &week_view, &month_view, &year_view,
+ &events_view, &todo_view,
+ &settings_view, &help_view,
+ &edit_view
+};
+
+view_t *menu[] = {
+ &day_view, &week_view, &month_view, &year_view,
+ &spacer, &events_view, &todo_view,
+ &spacer, &settings_view, &help_view