diff options
Diffstat (limited to 'window.c')
| -rw-r--r-- | window.c | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -788,6 +788,30 @@ size_t window_scroll_down(Win *win, int lines) { return cursor->pos; } +size_t window_line_up(Win *win) { + Cursor *cursor = &win->cursor; + if (cursor->line->prev && cursor->line->prev->prev && + cursor->line->lineno != cursor->line->prev->lineno && + cursor->line->prev->lineno != cursor->line->prev->prev->lineno) + return window_screenline_up(win); + size_t bol = text_line_begin(win->text, cursor->pos); + size_t prev = text_line_prev(win->text, bol); + size_t pos = text_line_offset(win->text, prev, cursor->pos - bol); + window_cursor_to(win, pos); + return cursor->pos; +} + +size_t window_line_down(Win *win) { + Cursor *cursor = &win->cursor; + if (!cursor->line->next || cursor->line->next->lineno != cursor->line->lineno) + return window_screenline_down(win); + size_t bol = text_line_begin(win->text, cursor->pos); + size_t next = text_line_next(win->text, bol); + size_t pos = text_line_offset(win->text, next, cursor->pos - bol); + window_cursor_to(win, pos); + return cursor->pos; +} + size_t window_screenline_up(Win *win) { Cursor *cursor = &win->cursor; if (!cursor->line->prev) |
