Supporting the backspace

This commit is contained in:
Anonymus Raccoon
2020-05-07 17:41:39 +02:00
parent 4a29a24532
commit 0f5f3cbe97
4 changed files with 21 additions and 1 deletions
+5 -1
View File
@@ -26,6 +26,10 @@ typedef struct binding
extern const key_function_t key_functions[];
extern const binding_t emacs_bindings[];
int buffer_get_display_pos(buffer_t *buffer);
int self_insert_command(int key, buffer_t *buffer, env_t *env);
int newline_command(int key, buffer_t *buffer, env_t *env);
int eof_command(int key, buffer_t *buffer, env_t *env);
int eof_command(int key, buffer_t *buffer, env_t *env);
int backward_delete_char_command(int key, buffer_t *buffer, env_t *env);
+12
View File
@@ -34,6 +34,18 @@ int self_insert_command(int key, buffer_t *buffer, env_t *env)
return (0);
}
int backward_delete_char_command(int key, buffer_t *buffer, env_t *env)
{
int len = buffer->buffer ? strlen(buffer->buffer) : 0;
if (buffer->pos == 0)
return (0);
buffer->pos--;
for (int i = buffer->pos; i < len; i++)
buffer->buffer[i] = buffer->buffer[i + 1];
return (0);
}
int newline_command(int key, buffer_t *buffer, env_t *env)
{
int ret;
+3
View File
@@ -14,11 +14,14 @@ const key_function_t key_functions[] = {
{"self-insert-command", &self_insert_command},
{"newline", &newline_command},
{"enf-of-file", &eof_command},
{"backward-delete-char", &backward_delete_char_command},
{NULL, NULL}
};
const binding_t emacs_bindings[] = {
{'\n', &newline_command},
{CTRL('d'), &eof_command},
{127, &backward_delete_char_command},
{KEY_BACKSPACE, &backward_delete_char_command},
{0, NULL}
};
+1
View File
@@ -73,6 +73,7 @@ void start_shell(env_t *env)
refresh();
y = getcury(env->window);
mvaddstr(y, buffer.startx, buffer.buffer);
clrtoeol();
move(y, buffer_get_display_pos(&buffer));
key = getch();
} else