From b697fcd43c32c2ef9090b89d73446e0d2caef701 Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Tue, 14 Aug 2012 17:09:42 +0200 Subject: [PATCH] terminal: implement basic scrolling-keys This implements Shift+UP/DOWN and Shift+PageUp/PageDown as scrolling keys for terminals. This will later be made configurable so other keyboard-shortcuts can be used. Signed-off-by: David Herrmann --- src/terminal.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/terminal.c b/src/terminal.c index 031b626..07aee67 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -33,6 +33,7 @@ #include #include #include +#include #include "console.h" #include "eloop.h" #include "log.h" @@ -309,7 +310,30 @@ static void input_event(struct uterm_input *input, if (!term->opened) return; - kmscon_vte_handle_keyboard(term->vte, ev); + if (UTERM_INPUT_HAS_MODS(ev, UTERM_SHIFT_MASK)) { + if (ev->keysym == XK_Up) { + kmscon_console_sb_up(term->console, 1); + schedule_redraw(term); + return; + } else if (ev->keysym == XK_Down) { + kmscon_console_sb_down(term->console, 1); + schedule_redraw(term); + return; + } else if (ev->keysym == XK_Prior) { + kmscon_console_sb_page_up(term->console, 1); + schedule_redraw(term); + return; + } else if (ev->keysym == XK_Next) { + kmscon_console_sb_page_down(term->console, 1); + schedule_redraw(term); + return; + } + } + + if (kmscon_vte_handle_keyboard(term->vte, ev)) { + kmscon_console_sb_reset(term->console); + schedule_redraw(term); + } } static void write_event(struct kmscon_vte *vte, const char *u8, size_t len,