#include "line/line_editor.h" #include #include #include #include #include #include #include using namespace std; namespace ov4 { int T_line_editor::get_terminal_pos_cursor() { return prompt_pos + (buffer_index_cursor - get_buffer_index_display_begin()) + 1; } int T_line_editor::get_buffer_index_display_begin() { return _buffer_index_display_begin; } int T_line_editor::get_buffer_index_display_end() { int max_possible_end = get_buffer_index_display_begin() + line_buffer.size() - 1; int window_possible_end = get_buffer_index_display_begin() + (window_size_col - prompt_pos) -1; return min(max_possible_end, window_possible_end); } int T_line_editor::get_terminal_pos_line_end() { int possible = prompt_pos + line_buffer.size(); return min(possible, window_size_col); } // T_position T_line_editor::get_cursor_position() // { // char c; // string buffer; // T_position pos; // int row, col; // tcflush(STDIN_FILENO, TCIFLUSH); // cout << "\x1b[6n" << flush; // while (read(STDIN_FILENO, &c, 1) == 1) // { // if (c == 'R') break; // buffer += c; // } // if (buffer.size() <= 2 || buffer[0] != '\x1b' || buffer[1] != '[') // { // pos.row = -1; // pos.col = -1; // return pos; // } // if ((sscanf(buffer.c_str(), "\x1b[%d;%d", &row, &col)) != 2) // { // pos.row = -1; // pos.col = -1; // return pos; // } // pos.row = row; // pos.col = col; // // print("row {}, col {}\r\n", row, col); // // fflush(stdout); // return pos; // } }