Add backspacing to prompt
This commit is contained in:
parent
697a764ae8
commit
bb637bab94
2 changed files with 21 additions and 10 deletions
|
@ -31,6 +31,7 @@ void input_process_key(KEY c) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CTRL_KEY('L'):
|
case CTRL_KEY('L'):
|
||||||
|
case ESCAPE:
|
||||||
case NOP:
|
case NOP:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
16
src/kilo.c
16
src/kilo.c
|
@ -71,11 +71,20 @@ char *editor_prompt(const char *prompt) {
|
||||||
ui_draw_screen();
|
ui_draw_screen();
|
||||||
|
|
||||||
KEY key = terminal_read_key();
|
KEY key = terminal_read_key();
|
||||||
if (key == ESCAPE) goto failure;
|
switch (key) {
|
||||||
else if (key == ENTER) {
|
case BACKSPACE:
|
||||||
|
if (buf_size > 0)
|
||||||
|
buf[--buf_size] = '\0';
|
||||||
|
break;
|
||||||
|
case ENTER:
|
||||||
if (buf_size > 0) goto success;
|
if (buf_size > 0) goto success;
|
||||||
else goto failure;
|
else goto failure;
|
||||||
} else if (isprint(key)) {
|
break;
|
||||||
|
case ESCAPE:
|
||||||
|
goto failure;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (isprint(key)) {
|
||||||
if (buf_size + 1 >= buf_cap)
|
if (buf_size + 1 >= buf_cap)
|
||||||
buf = realloc(buf, buf_cap *= 2);
|
buf = realloc(buf, buf_cap *= 2);
|
||||||
|
|
||||||
|
@ -84,6 +93,7 @@ char *editor_prompt(const char *prompt) {
|
||||||
buf[buf_size] = '\0';
|
buf[buf_size] = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
failure:
|
failure:
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
Reference in a new issue