aboutsummaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2014-09-16 19:15:24 +0200
committerMarc André Tanner <mat@brain-dump.org>2014-09-16 19:15:24 +0200
commit03efb93095237310273cbe31674cdf115be53544 (patch)
treedac331a321f41b7b62f01489b109abdda062c622 /window.c
parent9a4f43dec861ee8aa398adf901fd4d11d7a24dcd (diff)
downloadvis-03efb93095237310273cbe31674cdf115be53544.tar.gz
vis-03efb93095237310273cbe31674cdf115be53544.tar.xz
Implement CTRL-{U,D,E,Y} in normal mode
Diffstat (limited to 'window.c')
-rw-r--r--window.c46
1 files changed, 22 insertions, 24 deletions
diff --git a/window.c b/window.c
index 8ed4767..db35c4d 100644
--- a/window.c
+++ b/window.c
@@ -619,52 +619,50 @@ static bool window_viewport_up(Win *win, int n) {
size_t window_slide_up(Win *win, int lines) {
Cursor *cursor = &win->cursor;
- if (window_viewport_up(win, lines)) {
- if (cursor->line == win->lastline)
- window_cursor_set(win, win->lastline, cursor->col);
+ if (window_viewport_down(win, lines)) {
+ if (cursor->line == win->topline)
+ window_cursor_set(win, win->topline, cursor->col);
else
window_cursor_to(win, cursor->pos);
} else {
- window_cursor_to(win, 0);
+ window_line_down(win);
}
return cursor->pos;
}
size_t window_slide_down(Win *win, int lines) {
Cursor *cursor = &win->cursor;
- if (window_viewport_down(win, lines)) {
- if (cursor->line == win->topline)
- window_cursor_set(win, win->topline, cursor->col);
+ if (window_viewport_up(win, lines)) {
+ if (cursor->line == win->lastline)
+ window_cursor_set(win, win->lastline, cursor->col);
else
window_cursor_to(win, cursor->pos);
} else {
- window_cursor_to(win, text_size(win->text));
+ window_line_up(win);
}
return cursor->pos;
}
size_t window_scroll_up(Win *win, int lines) {
- if (window_viewport_up(win, lines))
- window_cursor_set(win, win->topline, win->cursor.col);
- else
+ Cursor *cursor = &win->cursor;
+ if (window_viewport_up(win, lines)) {
+ Line *line = cursor->line < win->lastline ? cursor->line : win->lastline;
+ window_cursor_set(win, line, win->cursor.col);
+ } else {
window_cursor_to(win, 0);
- return win->cursor.pos;
+ }
+ return cursor->pos;
}
size_t window_scroll_down(Win *win, int lines) {
- if (window_viewport_down(win, lines))
- window_cursor_set(win, win->lastline, win->cursor.col);
- else
+ Cursor *cursor = &win->cursor;
+ if (window_viewport_down(win, lines)) {
+ Line *line = cursor->line > win->topline ? cursor->line : win->topline;
+ window_cursor_set(win, line, cursor->col);
+ } else {
window_cursor_to(win, text_size(win->text));
- return win->cursor.pos;
-}
-
-size_t window_page_up(Win *win) {
- return window_scroll_up(win, win->height);
-}
-
-size_t window_page_down(Win *win) {
- return window_scroll_down(win, win->height);
+ }
+ return cursor->pos;
}
size_t window_line_up(Win *win) {