aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/keys.cc12
-rw-r--r--src/keys.hh10
-rw-r--r--src/keysrc23
-rw-r--r--src/ui.cc6
-rw-r--r--src/uicmd.cc35
-rw-r--r--src/uicmd.hh1
6 files changed, 85 insertions, 2 deletions
diff --git a/src/keys.cc b/src/keys.cc
index 58335a13..44e2aeba 100644
--- a/src/keys.cc
+++ b/src/keys.cc
@@ -99,7 +99,17 @@ static const KeyBinding_t default_keys[] = {
{ "forward" , KEYS_FORWARD , fltk::SHIFT , fltk::BackSpaceKey },
{ "forward" , KEYS_FORWARD , 0 , '.' },
{ "goto" , KEYS_GOTO , fltk::CTRL , 'l' },
- { "home" , KEYS_HOME , fltk::CTRL , 'h' }
+ { "home" , KEYS_HOME , fltk::CTRL , 'h' },
+ { "screen-up" , KEYS_SCREEN_UP , 0 , fltk::PageUpKey },
+ { "screen-up" , KEYS_SCREEN_UP , 0 , 'b' },
+ { "screen-down" , KEYS_SCREEN_DOWN , 0 , fltk::PageDownKey },
+ { "screen-down" , KEYS_SCREEN_DOWN , 0 , fltk::SpaceKey },
+ { "line-up" , KEYS_LINE_UP , 0 , fltk::UpKey },
+ { "line-down" , KEYS_LINE_DOWN , 0 , fltk::DownKey },
+ { "left" , KEYS_LEFT , 0 , fltk::LeftKey },
+ { "right" , KEYS_RIGHT , 0 , fltk::RightKey },
+ { "top" , KEYS_TOP , 0 , fltk::HomeKey },
+ { "bottom" , KEYS_BOTTOM , 0 , fltk::EndKey },
};
static Dlist *bindings;
diff --git a/src/keys.hh b/src/keys.hh
index 18c82c9d..218f15e9 100644
--- a/src/keys.hh
+++ b/src/keys.hh
@@ -36,7 +36,15 @@ typedef enum {
KEYS_BACK,
KEYS_FORWARD,
KEYS_GOTO,
- KEYS_HOME
+ KEYS_HOME,
+ KEYS_SCREEN_UP,
+ KEYS_SCREEN_DOWN,
+ KEYS_LINE_UP,
+ KEYS_LINE_DOWN,
+ KEYS_LEFT,
+ KEYS_RIGHT,
+ KEYS_TOP,
+ KEYS_BOTTOM
} KeysCommand_t;
class Keys {
diff --git a/src/keysrc b/src/keysrc
index 6a6eda69..0634f70f 100644
--- a/src/keysrc
+++ b/src/keysrc
@@ -69,3 +69,26 @@
# "stop" loading the page.
#(stop has no default binding)
+
+#--------------------------------------------------------------------
+# MOTION COMMANDS
+#--------------------------------------------------------------------
+
+#pageup = screen-up
+#b = screen-up
+
+#pagedown = screen-down
+#space = screen-down
+
+#up = line-up
+
+#down = line-down
+
+#left = left
+
+#right = right
+
+#home = top
+
+#end = bottom
+
diff --git a/src/ui.cc b/src/ui.cc
index b0ba4c2e..f807921f 100644
--- a/src/ui.cc
+++ b/src/ui.cc
@@ -750,6 +750,12 @@ int UI::handle(int event)
KeysCommand_t cmd = Keys::getKeyCmd();
if (cmd == KEYS_NOP) {
// Do nothing
+ } else if (cmd == KEYS_SCREEN_UP || cmd == KEYS_SCREEN_DOWN ||
+ cmd == KEYS_LINE_UP || cmd == KEYS_LINE_DOWN ||
+ cmd == KEYS_LEFT || cmd == KEYS_RIGHT ||
+ cmd == KEYS_TOP || cmd == KEYS_BOTTOM) {
+ a_UIcmd_scroll(a_UIcmd_get_bw_by_widget(this), cmd);
+ ret = 1;
} else if (cmd == KEYS_BACK) {
a_UIcmd_back(a_UIcmd_get_bw_by_widget(this));
ret = 1;
diff --git a/src/uicmd.cc b/src/uicmd.cc
index c832eb85..8e8a2834 100644
--- a/src/uicmd.cc
+++ b/src/uicmd.cc
@@ -23,6 +23,7 @@
#include <fltk/Tooltip.h>
#include "paths.hh"
+#include "keys.hh"
#include "ui.hh"
#include "uicmd.hh"
#include "timeout.hh"
@@ -1088,6 +1089,40 @@ void a_UIcmd_set_scroll_by_fragment(BrowserWindow *bw, const char *f)
}
/*
+ * Pass scrolling command to dw.
+ */
+void a_UIcmd_scroll(BrowserWindow *bw, int icmd)
+{
+ Layout *layout = (Layout*)bw->render_layout;
+
+ if (layout) {
+ typedef struct {
+ KeysCommand_t keys_cmd;
+ ScrollCommand dw_cmd;
+ } mapping_t;
+
+ const mapping_t map[] = {
+ {KEYS_SCREEN_UP, SCREEN_UP_CMD},
+ {KEYS_SCREEN_DOWN, SCREEN_DOWN_CMD},
+ {KEYS_LINE_UP, LINE_UP_CMD},
+ {KEYS_LINE_DOWN, LINE_DOWN_CMD},
+ {KEYS_LEFT, LEFT_CMD},
+ {KEYS_RIGHT, RIGHT_CMD},
+ {KEYS_TOP, TOP_CMD},
+ {KEYS_BOTTOM, BOTTOM_CMD},
+ };
+ KeysCommand_t keycmd = (KeysCommand_t)icmd;
+
+ for (uint_t i = 0; i < (sizeof(map)/sizeof(mapping_t)); i++) {
+ if (keycmd == map[i].keys_cmd) {
+ layout->scroll(map[i].dw_cmd);
+ break;
+ }
+ }
+ }
+}
+
+/*
* Get location's text
*/
char *a_UIcmd_get_location_text(BrowserWindow *bw)
diff --git a/src/uicmd.hh b/src/uicmd.hh
index 40779403..87d923d3 100644
--- a/src/uicmd.hh
+++ b/src/uicmd.hh
@@ -68,6 +68,7 @@ void a_UIcmd_get_wh(BrowserWindow *bw, int *w, int *h);
void a_UIcmd_get_scroll_xy(BrowserWindow *bw, int *x, int *y);
void a_UIcmd_set_scroll_xy(BrowserWindow *bw, int x, int y);
void a_UIcmd_set_scroll_by_fragment(BrowserWindow *bw, const char *f);
+void a_UIcmd_scroll(BrowserWindow *bw, int icmd);
char *a_UIcmd_get_location_text(BrowserWindow *bw);
void a_UIcmd_set_location_text(void *vbw, const char *text);
void a_UIcmd_set_page_prog(BrowserWindow *bw, size_t nbytes, int cmd);