Code

Actually add the ^D binding to move-page-down
[tig.git] / tig.c
diff --git a/tig.c b/tig.c
index a501db044b3c718dac45dbffb4f8b30f02faccb9..fcaf3c81e917e84f4637748090568e7c43b33ed5 100644 (file)
--- a/tig.c
+++ b/tig.c
@@ -114,6 +114,7 @@ static void report(const char *msg, ...);
 #define S_ISGITLINK(mode) (((mode) & S_IFMT) == 0160000)
 
 /* Some ASCII-shorthands fitted into the ncurses namespace. */
+#define KEY_CTL(x)     ((x) & 0x1f) /* KEY_CTL(A) == ^A == \1 */
 #define KEY_TAB                '\t'
 #define KEY_RETURN     '\r'
 #define KEY_ESC                27
@@ -1135,6 +1136,7 @@ io_run_load(const char **argv, const char *separators,
        REQ_(MOVE_LAST_LINE,    "Move cursor to last line"), \
        \
        REQ_GROUP("Scrolling") \
+       REQ_(SCROLL_FIRST_COL,  "Scroll to the first line columns"), \
        REQ_(SCROLL_LEFT,       "Scroll two columns left"), \
        REQ_(SCROLL_RIGHT,      "Scroll two columns right"), \
        REQ_(SCROLL_LINE_UP,    "Scroll one line up"), \
@@ -1437,7 +1439,9 @@ static struct keybinding default_keybindings[] = {
        { KEY_TAB,      REQ_VIEW_NEXT },
        { KEY_RETURN,   REQ_ENTER },
        { KEY_UP,       REQ_PREVIOUS },
+       { KEY_CTL('P'), REQ_PREVIOUS },
        { KEY_DOWN,     REQ_NEXT },
+       { KEY_CTL('N'), REQ_NEXT },
        { 'R',          REQ_REFRESH },
        { KEY_F(5),     REQ_REFRESH },
        { 'O',          REQ_MAXIMIZE },
@@ -1448,16 +1452,21 @@ static struct keybinding default_keybindings[] = {
        { KEY_HOME,     REQ_MOVE_FIRST_LINE },
        { KEY_END,      REQ_MOVE_LAST_LINE },
        { KEY_NPAGE,    REQ_MOVE_PAGE_DOWN },
+       { KEY_CTL('D'), REQ_MOVE_PAGE_DOWN },
        { ' ',          REQ_MOVE_PAGE_DOWN },
        { KEY_PPAGE,    REQ_MOVE_PAGE_UP },
+       { KEY_CTL('U'), REQ_MOVE_PAGE_UP },
        { 'b',          REQ_MOVE_PAGE_UP },
        { '-',          REQ_MOVE_PAGE_UP },
 
        /* Scrolling */
+       { '|',          REQ_SCROLL_FIRST_COL },
        { KEY_LEFT,     REQ_SCROLL_LEFT },
        { KEY_RIGHT,    REQ_SCROLL_RIGHT },
        { KEY_IC,       REQ_SCROLL_LINE_UP },
+       { KEY_CTL('Y'), REQ_SCROLL_LINE_UP },
        { KEY_DC,       REQ_SCROLL_LINE_DOWN },
+       { KEY_CTL('E'), REQ_SCROLL_LINE_DOWN },
        { 'w',          REQ_SCROLL_PAGE_UP },
        { 's',          REQ_SCROLL_PAGE_DOWN },
 
@@ -1472,6 +1481,7 @@ static struct keybinding default_keybindings[] = {
        { 'z',          REQ_STOP_LOADING },
        { 'v',          REQ_SHOW_VERSION },
        { 'r',          REQ_SCREEN_REDRAW },
+       { KEY_CTL('L'), REQ_SCREEN_REDRAW },
        { 'o',          REQ_OPTIONS },
        { '.',          REQ_TOGGLE_LINENO },
        { 'D',          REQ_TOGGLE_DATE },
@@ -2894,6 +2904,11 @@ scroll_view(struct view *view, enum request request)
        assert(view_is_displayed(view));
 
        switch (request) {
+       case REQ_SCROLL_FIRST_COL:
+               view->yoffset = 0;
+               redraw_view_from(view, 0);
+               report("");
+               return;
        case REQ_SCROLL_LEFT:
                if (view->yoffset == 0) {
                        report("Cannot scroll beyond the first column");
@@ -3688,6 +3703,7 @@ view_driver(struct view *view, enum request request)
                move_view(view, request);
                break;
 
+       case REQ_SCROLL_FIRST_COL:
        case REQ_SCROLL_LEFT:
        case REQ_SCROLL_RIGHT:
        case REQ_SCROLL_LINE_DOWN: