tConstrain horizontal cursor movement during vertical navigation - ve - a minimal text editor (work in progress) (HTM) git clone git://src.adamsgaard.dk/ve (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit ff5731cf9db9e1933a13654bce29476117121ab5 (DIR) parent b6a1dc1daa16f2ce59d88fba5bf3bfdb36e61136 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk> Date: Tue, 6 Aug 2019 13:22:48 +0200 Constrain horizontal cursor movement during vertical navigation Diffstat: M input.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) --- (DIR) diff --git a/input.c b/input.c t@@ -5,9 +5,13 @@ #define CTRL_KEY(k) ((k) & 0x1f) +/* move cursor according to screen, file, and line limits */ void editor_move_cursor(char key) { + int row_len; + eRow *row; + switch(key) { case 'h': if (E.cursor_x > 0) t@@ -22,9 +26,17 @@ editor_move_cursor(char key) E.cursor_y--; break; case 'l': - E.cursor_x++; + row = (E.cursor_y >= E.num_rows) ? NULL : &E.row[E.cursor_y]; + if (row && E.cursor_x < row->size) + E.cursor_x++; break; } + + /* do not allow navigation past EOL by vertical navigation */ + row = (E.cursor_y >= E.num_rows) ? NULL : &E.row[E.cursor_y]; + row_len = row ? row->size : 0; + if (E.cursor_x > row_len) + E.cursor_x = row_len; } void