tRefresh screen size before every redraw - ve - a minimal text editor (work in … | |
git clone git://src.adamsgaard.dk/ve | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit dc3d4c4dbb62543b349bd8a6f47e6a8f734efea3 | |
parent b9155f5bf8853830af6771cf86f226856a46c75e | |
Author: Anders Damsgaard <[email protected]> | |
Date: Sun, 11 Aug 2019 11:17:17 +0200 | |
Refresh screen size before every redraw | |
Diffstat: | |
M TODO | 1 + | |
M ve.c | 18 +++++++++++++----- | |
2 files changed, 14 insertions(+), 5 deletions(-) | |
--- | |
diff --git a/TODO b/TODO | |
t@@ -1,4 +1,5 @@ | |
Core functionality: | |
+ - Set keypress timeout before redraw | |
- Proper handling of command-line arguments | |
- Implement procedural keybinds | |
- Implementing most Vi binds | |
diff --git a/ve.c b/ve.c | |
t@@ -148,7 +148,7 @@ get_cursor_position(int *rows, int *cols) { | |
if (buf[0] != '\x1b' || buf[1] != '[') | |
return -1; | |
- if (scanf(&buf[2], "%d;%d", rows, cols) != 2) | |
+ if (sscanf(&buf[2], "%d;%d", rows, cols) != 2) | |
return -1; | |
return 0; | |
} | |
t@@ -586,6 +586,16 @@ editor_find(int direction) | |
/** OUTPUT **/ | |
+void | |
+editor_update_screen_size() | |
+{ | |
+ if (get_window_size(&E.screen_rows, &E.screen_columns) == -1) | |
+ die("get_window_size in main()"); | |
+ E.screen_rows--; | |
+ if (E.show_status) | |
+ E.screen_rows--; | |
+} | |
+ | |
/* reallocate append buffer to hold string s */ | |
void | |
ab_append(struct abuf *ab, const char *s, int len) | |
t@@ -824,6 +834,7 @@ editor_prompt(char *prompt) | |
buf[0] = '\0'; | |
while (1) { | |
+ editor_update_screen_size(); | |
editor_set_status_message(prompt, buf); | |
editor_refresh_screen(); | |
editor_place_cursor(strlen(prompt) - 1 + strlen(buf), | |
t@@ -1088,10 +1099,6 @@ init_editor() { | |
E.show_status = 0; | |
E.file_changed = 0; | |
E.find_query = NULL; | |
- | |
- if (get_window_size(&E.screen_rows, &E.screen_columns) == -1) | |
- die("get_window_size"); | |
- E.screen_rows -= 1; | |
} | |
t@@ -1110,6 +1117,7 @@ main(int argc, char* argv[]) | |
editor_set_status_message("%s %s", PROGNAME, VERSION); | |
while (1) { | |
+ editor_update_screen_size(); | |
editor_refresh_screen(); | |
editor_process_keypress(); | |
} |