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) {

Reply via email to