diff options
-rw-r--r-- | src/calcurse.h | 6 | ||||
-rw-r--r-- | src/config.c | 4 | ||||
-rw-r--r-- | src/custom.c | 50 | ||||
-rw-r--r-- | src/day.c | 2 | ||||
-rw-r--r-- | src/ui-day.c | 26 | ||||
-rw-r--r-- | src/vars.c | 6 |
6 files changed, 60 insertions, 34 deletions
diff --git a/src/calcurse.h b/src/calcurse.h index f14b0bb..72a0fa6 100644 --- a/src/calcurse.h +++ b/src/calcurse.h @@ -283,7 +283,9 @@ struct conf { unsigned compact_panels; unsigned system_dialogs; unsigned multiple_days; - unsigned dayseparator; + unsigned header_line; + unsigned event_separator; + unsigned day_separator; unsigned empty_appt_line; const char *editor; const char *pager; @@ -423,7 +425,7 @@ enum day_item_type { RECUR_APPT, APPT, EMPTY_SEPARATOR, - DAY_SEPARATOR + END_SEPARATOR }; /* Available item types. */ diff --git a/src/config.c b/src/config.c index 1f61f62..ce595f9 100644 --- a/src/config.c +++ b/src/config.c @@ -94,7 +94,9 @@ static const struct confvar confmap[] = { {"appearance.compactpanels", CONFIG_HANDLER_BOOL(conf.compact_panels)}, {"appearance.defaultpanel", config_parse_default_panel, config_serialize_default_panel, NULL}, {"appearance.layout", config_parse_layout, config_serialize_layout, NULL}, - {"appearance.dayseparator", CONFIG_HANDLER_UNSIGNED(conf.dayseparator)}, + {"appearance.headerline", CONFIG_HANDLER_BOOL(conf.header_line)}, + {"appearance.eventseparator", CONFIG_HANDLER_BOOL(conf.event_separator)}, + {"appearance.dayseparator", CONFIG_HANDLER_BOOL(conf.day_separator)}, {"appearance.emptyline", CONFIG_HANDLER_BOOL(conf.empty_appt_line)}, {"appearance.notifybar", CONFIG_HANDLER_BOOL(nbar.show)}, {"appearance.sidebarwidth", config_parse_sidebar_width, config_serialize_sidebar_width, NULL}, diff --git a/src/custom.c b/src/custom.c index b5890cd..52ecdcd 100644 --- a/src/custom.c +++ b/src/custom.c @@ -529,7 +529,9 @@ enum { CAL_VIEW, TODO_VIEW, MULTIPLE_DAYS, - DAYSEPARATOR, + HEADER_LINE, + EVENT_SEPARATOR, + DAY_SEPARATOR, EMPTY_APPT_LINE, AUTO_SAVE, AUTO_GC, @@ -556,6 +558,8 @@ static void print_general_option(int i, WINDOW *win, int y, int hilt, void *cb_d "appearance.calendarview = ", "appearance.todoview = ", "general.multipledays = ", + "appearance.headerline = ", + "appearance.eventseparator = ", "appearance.dayseparator = ", "appearance.emptyline = ", "general.autosave = ", @@ -614,14 +618,23 @@ static void print_general_option(int i, WINDOW *win, int y, int hilt, void *cb_d custom_remove_attr(win, ATTR_HIGHEST); mvwaddstr(win, y + 1, XPOS, _("(preferred todo display)")); break; - case DAYSEPARATOR: - custom_apply_attr(win, ATTR_HIGHEST); - mvwprintw(win, y, XPOS + strlen(opt[DAYSEPARATOR]), "%d", - conf.dayseparator); - custom_remove_attr(win, ATTR_HIGHEST); - mvwaddstr(win, y + 1, XPOS, - _("(lines between days in the appointments " - "panel)")); + case HEADER_LINE: + print_bool_option_incolor(win, conf.header_line, y, + XPOS + strlen(opt[HEADER_LINE])); + mvwaddstr(win, y + XPOS, 1, + _("(horizontal line above the day heading)")); + break; + case EVENT_SEPARATOR: + print_bool_option_incolor(win, conf.event_separator, y, + XPOS + strlen(opt[EVENT_SEPARATOR])); + mvwaddstr(win, y + XPOS, 1, + _("(empty line between events and appointments)")); + break; + case DAY_SEPARATOR: + print_bool_option_incolor(win, conf.day_separator, y, + XPOS + strlen(opt[DAY_SEPARATOR])); + mvwaddstr(win, y + XPOS, 1, + _("(each day ends with an empty line)")); break; case EMPTY_APPT_LINE: print_bool_option_incolor(win, conf.empty_appt_line, y, @@ -793,20 +806,23 @@ static void general_option_edit(int i) ui_todo_set_view(conf.todo_view); ui_todo_load_items(); break; - case EMPTY_APPT_LINE: - conf.empty_appt_line = !conf.empty_appt_line; - break; case MULTIPLE_DAYS: if (conf.multiple_days == 21) conf.multiple_days = 1; else conf.multiple_days++; break; - case DAYSEPARATOR: - if (conf.dayseparator == 2) - conf.dayseparator = 0; - else - conf.dayseparator++; + case HEADER_LINE: + conf.header_line = !conf.header_line; + break; + case EVENT_SEPARATOR: + conf.event_separator = !conf.event_separator; + break; + case DAY_SEPARATOR: + conf.day_separator = !conf.day_separator; + break; + case EMPTY_APPT_LINE: + conf.empty_appt_line = !conf.empty_appt_line; break; case HEADING_POS: if (conf.heading_pos == RIGHT) @@ -464,7 +464,7 @@ day_store_items(time_t date, int include_captions, int n) /* Empty line at end of day if appointments have one. */ if (apts == 0 && conf.empty_appt_line) day_add_item(EMPTY_SEPARATOR, 0, ENDOFDAY(date), p); - day_add_item(DAY_SEPARATOR, 0, ENDOFDAY(date), p); + day_add_item(END_SEPARATOR, 0, ENDOFDAY(date), p); } } diff --git a/src/ui-day.c b/src/ui-day.c index b959c07..82db4e5 100644 --- a/src/ui-day.c +++ b/src/ui-day.c @@ -103,7 +103,7 @@ static void daybegin(int dir) sel--; break; case 1: - while (day_get_item(sel)->type != DAY_SEPARATOR) + while (day_get_item(sel)->type != END_SEPARATOR) sel++; if (sel == lb_apt.item_count - 1) { while (day_get_item(sel)->type != DAY_HEADING) @@ -1087,7 +1087,7 @@ void ui_day_sel_dayend(void) { int sel = listbox_get_sel(&lb_apt); - while (day_get_item(sel)->type != DAY_SEPARATOR) + while (day_get_item(sel)->type != END_SEPARATOR) sel++; while (lb_apt.type[sel] != LISTBOX_ROW_TEXT) sel--; @@ -1121,18 +1121,19 @@ void ui_day_draw(int n, WINDOW *win, int y, int hilt, void *cb_data) day_display_item_date(item, win, !hilt, date, y, 1); day_display_item(item, win, !hilt, width - 1, y + 1, 1); } else if (item->type == DAY_HEADING) { + if (conf.header_line && n) { + wmove(win, y, 0); + whline(win, ACS_HLINE, width); + } char *buf = fmt_day_heading(date); utf8_chop(buf, width); custom_apply_attr(win, ATTR_HIGHEST); - mvwprintw(win, y, + mvwprintw(win, y + (conf.header_line && n), conf.heading_pos == RIGHT ? width - utf8_strwidth(buf) - 1 : conf.heading_pos == LEFT ? 1 : (width - utf8_strwidth(buf)) / 2, "%s", buf); custom_remove_attr(win, ATTR_HIGHEST); mem_free(buf); - } else if (item->type == EVNT_SEPARATOR) { - wmove(win, y, 1); - whline(win, 0, width - 2); } } @@ -1143,7 +1144,7 @@ enum listbox_row_type ui_day_row_type(int n, void *cb_data) if (item->type == DAY_HEADING || item->type == EVNT_SEPARATOR || item->type == EMPTY_SEPARATOR || - item->type == DAY_SEPARATOR) + item->type == END_SEPARATOR) return LISTBOX_ROW_CAPTION; else return LISTBOX_ROW_TEXT; @@ -1153,11 +1154,14 @@ int ui_day_height(int n, void *cb_data) { struct day_item *item = day_get_item(n); - if (item->type == APPT || - item->type == RECUR_APPT) + if (item->type == DAY_HEADING) + return 1 + (conf.header_line && n); + else if (item->type == APPT || item->type == RECUR_APPT) return conf.empty_appt_line ? 3 : 2; - else if (item->type == DAY_SEPARATOR) - return conf.dayseparator; + else if (item->type == EVNT_SEPARATOR) + return conf.event_separator; + else if (item->type == END_SEPARATOR) + return conf.day_separator; else return 1; } @@ -122,9 +122,11 @@ void vars_init(void) /* Variables for user configuration */ conf.cal_view = CAL_MONTH_VIEW; conf.todo_view = TODO_HIDE_COMPLETED_VIEW; - conf.empty_appt_line = 1; conf.multiple_days = 7; - conf.dayseparator = 2; + conf.header_line = 1; + conf.event_separator = 1; + conf.day_separator = 1; + conf.empty_appt_line = 1; conf.confirm_quit = 1; conf.confirm_delete = 1; conf.auto_save = 1; |