From e7e1ff75c21f8f29c9b536e12440d58045206845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Wed, 15 Apr 2015 00:05:17 +0200 Subject: Try to remember column position when moving across lines This currently only works for non-wrapped lines. --- window.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'window.c') diff --git a/window.c b/window.c index 1f22988..df2b069 100644 --- a/window.c +++ b/window.c @@ -28,7 +28,9 @@ typedef struct { /* cursor position */ Filepos pos; /* in bytes from the start of the file */ + Filepos lastpos; /* previous cursor position */ int row, col; /* in terms of zero based screen coordinates */ + int lastcol; /* remembered column used when moving across lines */ Line *line; /* screen line on which cursor currently resides */ bool highlighted; /* true e.g. when cursor is on a bracket */ } Cursor; @@ -292,6 +294,9 @@ static size_t window_cursor_update(Win *win) { window_draw(win); } } + if (cursor->pos != cursor->lastpos) + cursor->lastcol = 0; + cursor->lastpos = cursor->pos; if (win->ui) win->ui->cursor_to(win->ui, cursor->col, cursor->row); return cursor->pos; @@ -753,19 +758,27 @@ size_t window_line_down(Win *win) { size_t window_screenline_up(Win *win) { Cursor *cursor = &win->cursor; + int lastcol = cursor->lastcol; + if (!lastcol) + lastcol = cursor->col; if (!cursor->line->prev) window_scroll_up(win, 1); if (cursor->line->prev) - window_cursor_set(win, cursor->line->prev, cursor->col); + window_cursor_set(win, cursor->line->prev, lastcol); + cursor->lastcol = lastcol; return cursor->pos; } size_t window_screenline_down(Win *win) { Cursor *cursor = &win->cursor; + int lastcol = cursor->lastcol; + if (!lastcol) + lastcol = cursor->col; if (!cursor->line->next && cursor->line == win->bottomline) window_scroll_down(win, 1); if (cursor->line->next) - window_cursor_set(win, cursor->line->next, cursor->col); + window_cursor_set(win, cursor->line->next, lastcol); + cursor->lastcol = lastcol; return cursor->pos; } -- cgit v1.2.3