From 0e1493d536c564f5d75a1345fe149cfdf0daee61 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Thu, 8 Oct 2026 14:48:25 +0000 Subject: fix cursor moving left --- src/line/cursor.cc | 31 +++++++++++++------------------ src/line/getter.cc | 6 ++++++ src/line/mode.cc | 1 + 3 files changed, 20 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/line/cursor.cc b/src/line/cursor.cc index 05311ad..3c701e5 100644 --- a/src/line/cursor.cc +++ b/src/line/cursor.cc @@ -9,6 +9,8 @@ #include #include +#include "line/getter.h" + using namespace std; namespace ov4 @@ -27,7 +29,8 @@ void print_override(const std::string &s) // erase rest of the line print("\x1b[K"); fflush(stdout); - print("{}", s.substr(buffer_index_display_begin, buffer_index_display_end-buffer_index_display_begin+1)); fflush(stdout); + print("{}", s.substr(get_buffer_index_display_begin(), + get_buffer_index_display_end() - get_buffer_index_display_begin() + 1)); fflush(stdout); //line_end_pos = s.size()+1; // restore cursor position @@ -82,11 +85,11 @@ void cursor_input_char(char c) // print("\x1b[C"); fflush(stdout); // move cursor to the right // buffer_index_cursor++; update_line_end_pos(); - int end_possible_buffer_index = window_size_col-prompt_pos-1; - buffer_index_display_end = - (end_possible_buffer_index > (buffer_index_display_end)+1) - ? (buffer_index_display_end)+1 - : end_possible_buffer_index; + // int end_possible_buffer_index = window_size_col-prompt_pos-1; + // buffer_index_display_end = + // (end_possible_buffer_index > (buffer_index_display_end)+1) + // ? (buffer_index_display_end)+1 + // : end_possible_buffer_index; move_cursor(T_cursor_movement_direction::RIGHT); return; @@ -114,19 +117,13 @@ void update_window_size() window_size_col = ws.ws_col; } -void update_line_end_pos() -{ - line_end_pos = prompt_pos + line_buffer.size(); - line_end_pos = (line_end_pos > window_size_col) ? window_size_col : line_end_pos; -} - void move_cursor(T_cursor_movement_direction d) { switch (d) { case T_cursor_movement_direction::LEFT: // if cursor is not at left margin - if (prompt_pos < (buffer_index_cursor+1)) + if (prompt_pos < get_terminal_pos_cursor()) { buffer_index_cursor--; print("\x1b[D"); fflush(stdout); // move cursor to the left @@ -135,14 +132,13 @@ void move_cursor(T_cursor_movement_direction d) else { buffer_index_cursor--; - buffer_index_display_begin--; - buffer_index_display_end--; + _buffer_index_display_begin--; } break; case T_cursor_movement_direction::RIGHT: // if cursor is not at right margin - if (line_end_pos > (buffer_index_cursor+1)) + if (line_end_pos > get_terminal_pos_cursor()) { buffer_index_cursor++; print("\x1b[C"); fflush(stdout); // move cursor to the right @@ -151,8 +147,7 @@ void move_cursor(T_cursor_movement_direction d) else { buffer_index_cursor++; - buffer_index_display_begin++; - buffer_index_display_end++; + _buffer_index_display_begin++; } break; diff --git a/src/line/getter.cc b/src/line/getter.cc index 2ef9723..50456d8 100644 --- a/src/line/getter.cc +++ b/src/line/getter.cc @@ -33,6 +33,12 @@ int get_buffer_index_display_end() return min(max_possible_end, window_possible_end); } +void update_line_end_pos() +{ + line_end_pos = prompt_pos + line_buffer.size(); + line_end_pos = (line_end_pos > window_size_col) ? window_size_col : line_end_pos; +} + T_position get_cursor_position() { diff --git a/src/line/mode.cc b/src/line/mode.cc index e3f071c..e8024fa 100644 --- a/src/line/mode.cc +++ b/src/line/mode.cc @@ -6,6 +6,7 @@ #include #include "line/cursor.h" +#include "line/getter.h" using namespace std; -- cgit v1.3.1-4-g156e