Hi,
thank you for writing vis. I would ask if the attached patch makes
sense to you. Now window_line_up() and window_line_down() works
properly and I can add the following key bindings:
{ { CONTROL('y') }, cursor, { .m = window_line_up } },
{ { CONTROL('e') }, cursor, { .m = window_line_down } },
It works but I'm not sure it's the only (and right) way to do it.
Regards,
Claudio
diff --git a/config.def.h b/config.def.h
index b0b836c..cddd1aa 100644
--- a/config.def.h
+++ b/config.def.h
@@ -93,8 +93,10 @@ static KeyBinding basic_movement[] = {
{ { KEY(SRIGHT) }, movement, { .i = MOVE_WORD_START_NEXT } },
{ { KEY(UP) }, movement, { .i = MOVE_LINE_UP } },
{ { KEY(DOWN) }, movement, { .i = MOVE_LINE_DOWN } },
- { { KEY(PPAGE) }, cursor, { .m = window_page_up } },
- { { KEY(NPAGE) }, cursor, { .m = window_page_down } },
+ { { CONTROL('u') }, cursor, { .m = window_page_up } },
+ { { CONTROL('d') }, cursor, { .m = window_page_down } },
+ { { CONTROL('y') }, cursor, { .m = window_line_up } },
+ { { CONTROL('e') }, cursor, { .m = window_line_down } },
{ { KEY(HOME) }, movement, { .i = MOVE_LINE_START } },
{ { KEY(END) }, movement, { .i = MOVE_LINE_FINISH } },
{ /* empty last element, array terminator */ },
diff --git a/window.c b/window.c
index eb1c8e7..e76e5a7 100644
--- a/window.c
+++ b/window.c
@@ -632,27 +632,14 @@ size_t window_page_down(Win *win) {
size_t window_line_up(Win *win) {
Cursor *cursor = &win->cursor;
- if (!cursor->line->prev) {
- window_scroll_lines_up(win, 1);
- return cursor->pos;
- }
- cursor->row--;
- cursor->line = cursor->line->prev;
- cursor->pos = pos_by_line(win, cursor->line) + cursor_offset(cursor);
- return window_cursor_update(win);
+ window_scroll_lines_up(win, 1);
+ return cursor->pos;
}
size_t window_line_down(Win *win) {
Cursor *cursor = &win->cursor;
- if (!cursor->line->next) {
- if (cursor->line == win->bottomline)
- window_scroll_lines_down(win, 1);
- return cursor->pos;
- }
- cursor->row++;
- cursor->line = cursor->line->next;
- cursor->pos = pos_by_line(win, cursor->line) + cursor_offset(cursor);
- return window_cursor_update(win);
+ window_scroll_lines_down(win, 1);
+ return cursor->pos;
}
void window_update(Win *win) {