static void com_scroll_down(void);
static void com_page_up(void);
static void com_page_down(void);
+static void com_cancel_scrolling(void);
+static void com_scroll_top(void);
static struct gui_command command_list[] = {
{
.name = "page_down",
.description = "scroll down one page",
.handler = com_page_down
+ }, {
+ .key = "<home>",
+ .name = "scroll_top",
+ .description = "scroll to top of buffer",
+ .handler = com_scroll_top
+ }, {
+ .key = "<end>",
+ .name = "cancel_scroll",
+ .description = "deactivate scroll mode",
+ .handler = com_cancel_scrolling
}, {
.handler = NULL
}
sprintf(buf, "<ppage>");
return buf;
}
+ if (c == KEY_HOME) {
+ sprintf(buf, "<home>");
+ return buf;
+ }
+ if (c == KEY_END) {
+ sprintf(buf, "<end>");
+ return buf;
+ }
if (c < 256 && c > -128 && iscntrl((unsigned char) c)) {
if (c < 0)
c += 256;
filled - scroll_position, ringbuffer_filled(bot_win_rb));
}
+static void com_scroll_top(void)
+{
+ int i = RINGBUFFER_SIZE - 1;
+ unsigned lines = 0;
+
+ while (i > 0 && !ringbuffer_get(bot_win_rb, i))
+ i--;
+ /* i is oldest entry */
+ for (; lines < bot.lines && i >= 0; i--) {
+ struct rb_entry *rbe = ringbuffer_get(bot_win_rb, i);
+ if (!rbe)
+ break;
+ lines += NUM_LINES(strlen(rbe->msg));
+ }
+ i++;
+ if (lines > 0 && scroll_position != i) {
+ scroll_position = i;
+ redraw_bot_win();
+ print_scroll_msg();
+ return;
+ }
+ print_in_bar(COLOR_ERRMSG, "top of buffer is shown\n");
+}
+
+static void com_cancel_scrolling(void)
+{
+
+ if (scroll_position == 0) {
+ print_in_bar(COLOR_ERRMSG, "bottom of buffer is shown\n");
+ return;
+ }
+ scroll_position = 0;
+ redraw_bot_win();
+}
+
static void com_page_down(void)
{
unsigned lines = 0;