From cabc22e032b933a84335da9acbbf0721eed9c63f Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Tue, 12 Jun 2012 23:12:51 +0200 Subject: Add key bindings to go to the previous/next month/year In addition to generic key bindings for moving one day (week) forward/backward, define similar bindings for moving a month or a year. Of course, count prefixes are allowed here as well. Also add status bar hints and help texts. Signed-off-by: Lukas Fleischer --- src/calcurse.c | 24 ++++++++++++++++++++++++ src/calcurse.h | 10 +++++++++- src/calendar.c | 12 ++++++++++++ src/help.c | 16 ++++++++++++++++ src/keys.c | 17 +++++++++++++++++ src/wins.c | 13 ++++++++++--- 6 files changed, 88 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/calcurse.c b/src/calcurse.c index e80e9dc..09baab5 100644 --- a/src/calcurse.c +++ b/src/calcurse.c @@ -460,6 +460,30 @@ int main(int argc, char **argv) } break; + case KEY_GENERIC_PREV_MONTH: + calendar_move(MONTH_PREV, count); + inday = do_storage(1); + wins_update(FLAG_CAL | FLAG_APP); + break; + + case KEY_GENERIC_NEXT_MONTH: + calendar_move(MONTH_NEXT, count); + inday = do_storage(1); + wins_update(FLAG_CAL | FLAG_APP); + break; + + case KEY_GENERIC_PREV_YEAR: + calendar_move(YEAR_PREV, count); + inday = do_storage(1); + wins_update(FLAG_CAL | FLAG_APP); + break; + + case KEY_GENERIC_NEXT_YEAR: + calendar_move(YEAR_NEXT, count); + inday = do_storage(1); + wins_update(FLAG_CAL | FLAG_APP); + break; + case KEY_START_OF_WEEK: if (wins_slctd() == CAL) { calendar_move(WEEK_START, count); diff --git a/src/calcurse.h b/src/calcurse.h index ec6335f..9f01f48 100644 --- a/src/calcurse.h +++ b/src/calcurse.h @@ -403,6 +403,10 @@ enum key { KEY_GENERIC_NEXT_DAY, KEY_GENERIC_PREV_WEEK, KEY_GENERIC_NEXT_WEEK, + KEY_GENERIC_PREV_MONTH, + KEY_GENERIC_NEXT_MONTH, + KEY_GENERIC_PREV_YEAR, + KEY_GENERIC_NEXT_YEAR, KEY_GENERIC_SCROLL_DOWN, KEY_GENERIC_SCROLL_UP, KEY_GENERIC_GOTO_TODAY, @@ -539,7 +543,11 @@ enum move { WEEK_PREV, WEEK_NEXT, WEEK_START, - WEEK_END + WEEK_END, + MONTH_PREV, + MONTH_NEXT, + YEAR_PREV, + YEAR_NEXT }; /* Available color pairs. */ diff --git a/src/calendar.c b/src/calendar.c index dbac9c7..a157caa 100644 --- a/src/calendar.c +++ b/src/calendar.c @@ -626,6 +626,18 @@ void calendar_move(enum move move, int count) case WEEK_NEXT: ret = date_change(&t, 0, count * WEEKINDAYS); break; + case MONTH_PREV: + ret = date_change(&t, -count, 0); + break; + case MONTH_NEXT: + ret = date_change(&t, count, 0); + break; + case YEAR_PREV: + ret = date_change(&t, -count * YEARINMONTHS, 0); + break; + case YEAR_NEXT: + ret = date_change(&t, count * YEARINMONTHS, 0); + break; case WEEK_START: /* Normalize struct tm to get week day number. */ mktime(&t); diff --git a/src/help.c b/src/help.c index 2cae3cc..c61a4e0 100644 --- a/src/help.c +++ b/src/help.c @@ -120,6 +120,10 @@ help_write_pad(struct window *win, char *title, char *text, enum key action) case KEY_GENERIC_NEXT_DAY: case KEY_GENERIC_PREV_WEEK: case KEY_GENERIC_NEXT_WEEK: + case KEY_GENERIC_PREV_MONTH: + case KEY_GENERIC_NEXT_MONTH: + case KEY_GENERIC_PREV_YEAR: + case KEY_GENERIC_NEXT_YEAR: case KEY_GENERIC_GOTO_TODAY: case KEY_GENERIC_CREDITS: case KEY_GENERIC_CUT: @@ -216,6 +220,10 @@ static int wanted_page(int ch) case KEY_GENERIC_NEXT_DAY: case KEY_GENERIC_PREV_WEEK: case KEY_GENERIC_NEXT_WEEK: + case KEY_GENERIC_PREV_MONTH: + case KEY_GENERIC_NEXT_MONTH: + case KEY_GENERIC_PREV_YEAR: + case KEY_GENERIC_NEXT_YEAR: case KEY_GENERIC_GOTO_TODAY: page = HELP_GENERAL; break; @@ -694,6 +702,10 @@ void help_screen(void) " '%s' : +1 Day -> move to next day\n" " '%s' : -1 Week -> move to previous week\n" " '%s' : +1 Week -> move to next week\n" + " '%s' : -1 Month -> move to previous month\n" + " '%s' : +1 Month -> move to next month\n" + " '%s' : -1 Year -> move to previous year\n" + " '%s' : +1 Year -> move to next year\n" " '%s' : Goto today -> move to current day\n" "\nThe '%s' and '%s' keys are used to scroll text upward or downward\n" "when inside specific screens such the help screens for example.\n" @@ -706,6 +718,10 @@ void help_screen(void) keys_action_firstkey(KEY_GENERIC_NEXT_DAY), keys_action_firstkey(KEY_GENERIC_PREV_WEEK), keys_action_firstkey(KEY_GENERIC_NEXT_WEEK), + keys_action_firstkey(KEY_GENERIC_PREV_MONTH), + keys_action_firstkey(KEY_GENERIC_NEXT_MONTH), + keys_action_firstkey(KEY_GENERIC_PREV_YEAR), + keys_action_firstkey(KEY_GENERIC_NEXT_YEAR), keys_action_firstkey(KEY_GENERIC_GOTO_TODAY), keys_action_firstkey(KEY_GENERIC_SCROLL_UP), keys_action_firstkey(KEY_GENERIC_SCROLL_DOWN)); diff --git a/src/keys.c b/src/keys.c index 6e6b194..f670f9a 100644 --- a/src/keys.c +++ b/src/keys.c @@ -71,6 +71,10 @@ static struct keydef_s keydef[NBKEYS] = { {"generic-next-day", "C-l"}, {"generic-prev-week", "C-k"}, {"generic-next-week", "C-j"}, + {"generic-prev-month", "M"}, + {"generic-next-month", "m"}, + {"generic-prev-year", "Y"}, + {"generic-next-year", "y"}, {"generic-scroll-down", "C-n"}, {"generic-scroll-up", "C-p"}, {"generic-goto-today", "C-g"}, @@ -466,6 +470,19 @@ void keys_popup_info(enum key key) info[KEY_GENERIC_NEXT_WEEK] = _ ("Move to next week in calendar, whichever panel is currently selected."); + info[KEY_GENERIC_PREV_MONTH] = + _("Move to previous month in calendar, whichever panel is currently " + "selected"); + info[KEY_GENERIC_NEXT_MONTH] = + _ + ("Move to next month in calendar, whichever panel is currently " + "selected."); + info[KEY_GENERIC_PREV_YEAR] = + _("Move to previous year in calendar, whichever panel is currently " + "selected"); + info[KEY_GENERIC_NEXT_YEAR] = + _ + ("Move to next year in calendar, whichever panel is currently selected."); info[KEY_GENERIC_SCROLL_DOWN] = _ ("Scroll window down (e.g. when displaying text inside a popup window)."); diff --git a/src/wins.c b/src/wins.c index 7d2f8a2..d518377 100644 --- a/src/wins.c +++ b/src/wins.c @@ -601,6 +601,10 @@ void wins_status_bar(void) struct binding gnday = { _("+1 Day"), KEY_GENERIC_NEXT_DAY }; struct binding gpweek = { _("-1 Week"), KEY_GENERIC_PREV_WEEK }; struct binding gnweek = { _("+1 Week"), KEY_GENERIC_NEXT_WEEK }; + struct binding gpmonth = { _("-1 Month"), KEY_GENERIC_PREV_MONTH }; + struct binding gnmonth = { _("+1 Month"), KEY_GENERIC_NEXT_MONTH }; + struct binding gpyear = { _("-1 Year"), KEY_GENERIC_PREV_YEAR }; + struct binding gnyear = { _("+1 Year"), KEY_GENERIC_NEXT_YEAR }; struct binding today = { _("Today"), KEY_GENERIC_GOTO_TODAY }; struct binding nview = { _("Nxt View"), KEY_GENERIC_SCROLL_DOWN }; struct binding pview = { _("Prv View"), KEY_GENERIC_SCROLL_UP }; @@ -626,19 +630,22 @@ void wins_status_bar(void) struct binding *bindings_cal[] = { &help, &quit, &save, &chgvu, &nview, &pview, &up, &down, &left, &right, &togo, &import, &export, &weekb, &weeke, &appt, &todo, &gpday, &gnday, - &gpweek, &gnweek, &draw, &today, &conf + &gpweek, &gnweek, &gpmonth, &gnmonth, &gpyear, &gnyear, &draw, &today, + &conf }; struct binding *bindings_apoint[] = { &help, &quit, &save, &chgvu, &import, &export, &add, &del, &edit, &view, &pipe, &draw, &rept, &flag, &enote, &vnote, &up, &down, &gpday, &gnday, - &gpweek, &gnweek, &togo, &today, &conf, &appt, &todo, &cut, &paste + &gpweek, &gnweek, &gpmonth, &gnmonth, &gpyear, &gnyear, &togo, &today, + &conf, &appt, &todo, &cut, &paste }; struct binding *bindings_todo[] = { &help, &quit, &save, &chgvu, &import, &export, &add, &del, &edit, &view, &pipe, &flag, &rprio, &lprio, &enote, &vnote, &up, &down, &gpday, &gnday, - &gpweek, &gnweek, &togo, &today, &conf, &appt, &todo, &draw + &gpweek, &gnweek, &gpmonth, &gnmonth, &gpyear, &gnyear, &togo, &today, + &conf, &appt, &todo, &draw }; enum win active_panel = wins_slctd(); -- cgit v1.2.3-70-g09d2