diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2014-09-16 19:15:24 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2014-09-16 19:15:24 +0200 |
| commit | 03efb93095237310273cbe31674cdf115be53544 (patch) | |
| tree | dac331a321f41b7b62f01489b109abdda062c622 /window.c | |
| parent | 9a4f43dec861ee8aa398adf901fd4d11d7a24dcd (diff) | |
| download | vis-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.c | 46 |
1 files changed, 22 insertions, 24 deletions
@@ -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) { |
