diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2015-11-28 13:37:25 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2015-11-28 20:09:14 +0100 |
| commit | b09c2afba792282de34ed8865fd2a4ca53a48d9d (patch) | |
| tree | 3b52284bb0215419ba6c109323daaf27748b44d0 | |
| parent | 51cd7471a0d6b7fc60fba5956b7ddc827e567776 (diff) | |
| download | vis-b09c2afba792282de34ed8865fd2a4ca53a48d9d.tar.gz vis-b09c2afba792282de34ed8865fd2a4ca53a48d9d.tar.xz | |
view: preserve column position when moving across lines
| -rw-r--r-- | view.c | 26 |
1 files changed, 18 insertions, 8 deletions
@@ -830,20 +830,30 @@ size_t view_scroll_down(View *view, int lines) { size_t view_line_up(Cursor *cursor) { if (cursor->line && cursor->line->prev && cursor->line->prev->prev && - cursor->line->lineno != cursor->line->prev->lineno && - cursor->line->prev->lineno != cursor->line->prev->prev->lineno) + cursor->line->lineno != cursor->line->prev->lineno && + cursor->line->prev->lineno != cursor->line->prev->prev->lineno) return view_screenline_up(cursor); - size_t pos = text_line_up(cursor->view->text, cursor->pos); - view_cursors_to(cursor, pos); - return pos; + int lastcol = cursor->lastcol; + if (!lastcol) + lastcol = cursor->col; + view_cursors_to(cursor, text_line_up(cursor->view->text, cursor->pos)); + if (cursor->line) + cursor_set(cursor, cursor->line, lastcol); + cursor->lastcol = lastcol; + return cursor->pos; } size_t view_line_down(Cursor *cursor) { if (cursor->line && (!cursor->line->next || cursor->line->next->lineno != cursor->line->lineno)) return view_screenline_down(cursor); - size_t pos = text_line_down(cursor->view->text, cursor->pos); - view_cursors_to(cursor, pos); - return pos; + int lastcol = cursor->lastcol; + if (!lastcol) + lastcol = cursor->col; + view_cursors_to(cursor, text_line_down(cursor->view->text, cursor->pos)); + if (cursor->line) + cursor_set(cursor, cursor->line, lastcol); + cursor->lastcol = lastcol; + return cursor->pos; } size_t view_screenline_up(Cursor *cursor) { |
