From 62643017c3d5bc1bb9fff91553e52a47e7730a01 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 13 Sep 2017 23:02:51 +0200 Subject: [PATCH] hexedit: implement page up/down function old new delta hexedit_main 924 970 +46 Signed-off-by: Denys Vlasenko --- miscutils/hexedit.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/miscutils/hexedit.c b/miscutils/hexedit.c index ac38978fd..a99569706 100644 --- a/miscutils/hexedit.c +++ b/miscutils/hexedit.c @@ -236,7 +236,7 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv) redraw(); printf(ESC"[1;10H"); /* position on 1st hex byte in first line */ -//TODO: //PgUp/PgDown; Home/End: start/end of line; '<'/'>': start/end of file +//TODO: //Home/End: start/end of line; '<'/'>': start/end of file //Backspace: undo //Enter: goto specified position //Ctrl-L: redraw @@ -249,12 +249,14 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv) for (;;) { char read_key_buffer[KEYCODE_BUFFER_SIZE]; + unsigned cnt; int32_t key; uint8_t byte; fflush_all(); key = read_key(STDIN_FILENO, read_key_buffer, -1); + cnt = 1; switch (key) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': @@ -307,7 +309,10 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv) putchar(' '); } break; + case KEYCODE_PAGEDOWN: + cnt = G.height; case KEYCODE_DOWN: + k_down: G.current_byte += 16; if (G.current_byte >= G.eof_byte) { move_mapping_further(); @@ -324,6 +329,8 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv) row--; redraw_cur_line(); } + if (--cnt) + goto k_down; break; case KEYCODE_LEFT: @@ -348,7 +355,10 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv) G.current_byte--; printf(ESC"[2D"); break; + case KEYCODE_PAGEUP: + cnt = G.height; case KEYCODE_UP: + k_up: if ((G.current_byte - G.addr) < 16) { move_mapping_lower(); if ((G.current_byte - G.addr) < 16) @@ -364,6 +374,8 @@ int hexedit_main(int argc UNUSED_PARAM, char **argv) printf(ESC"M"); /* scroll up */ redraw_cur_line(); } + if (--cnt) + goto k_up; break; } }