tAllow escape from prompt, better line delete handling of cursor - ve - a minim… | |
git clone git://src.adamsgaard.dk/ve | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 0bcce6ea7409b475034ddaf2e79439468b161869 | |
parent 68ebb8e650025d82f30c96de9564f924c6bfdb37 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Tue, 6 Aug 2019 21:09:25 +0200 | |
Allow escape from prompt, better line delete handling of cursor | |
Diffstat: | |
M input.c | 7 ++++++- | |
M io.c | 7 ++++++- | |
M output.c | 9 ++++++--- | |
3 files changed, 18 insertions(+), 5 deletions(-) | |
--- | |
diff --git a/input.c b/input.c | |
t@@ -28,7 +28,11 @@ editor_prompt(char *prompt) | |
editor_refresh_screen(); | |
c = editor_read_key(); | |
- if (c == '\r') { | |
+ if (c == '\x1b') { /* detect escape */ | |
+ editor_set_status_message(""); | |
+ free(buf); | |
+ return NULL; | |
+ } else if (c == '\r') { | |
if (buflen != 0) { | |
editor_set_status_message(""); | |
return buf; | |
t@@ -171,6 +175,7 @@ editor_process_keypress() | |
break; | |
case 'd': | |
editor_row_delete(E.cursor_y); | |
+ editor_move_cursor('h'); | |
break; | |
case 'o': | |
diff --git a/io.c b/io.c | |
t@@ -73,8 +73,13 @@ file_save(char *filename) | |
int len, fd; | |
char *buf; | |
- if (filename == NULL) | |
+ if (filename == NULL) { | |
filename = editor_prompt("save as: %s"); | |
+ if (filename == NULL) { | |
+ editor_set_status_message("save aborted"); | |
+ return; | |
+ } | |
+ } | |
buf = editor_concatenate_rows(&len); | |
diff --git a/output.c b/output.c | |
t@@ -52,16 +52,17 @@ editor_draw_status(struct abuf *ab) | |
{ | |
char left_status[512], right_status[512]; | |
int left_status_len, right_status_len, padding; | |
+ int percentage; | |
left_status_len = 0; | |
switch (E.mode) { | |
case 1: | |
left_status_len = snprintf(left_status, sizeof(left_st… | |
- "INSERT > "); | |
+ "INSERT "); | |
break; | |
case 2: | |
left_status_len = snprintf(left_status, sizeof(left_st… | |
- "VISUAL > "); | |
+ "VISUAL "); | |
break; | |
} | |
left_status_len += snprintf(left_status + left_status_len, | |
t@@ -70,9 +71,11 @@ editor_draw_status(struct abuf *ab) | |
E.filename ? E.filename : "[unnamed]", | |
E.file_changed ? "[+] " : ""); | |
+ percentage = (int)((float)(E.cursor_y)/(E.num_rows-1)*100); | |
+ if (percentage < 0) percentage = 0; | |
right_status_len = snprintf(right_status, sizeof(right_status), | |
"%d%% < %d:%d", | |
- abs((int)((float)(E.cursor_y)/(E.num_rows-… | |
+ percentage, | |
E.cursor_x+1, E.cursor_y+1); | |
if (left_status_len > E.screen_columns) |