mirror of
https://github.com/zoriya/ash.git
synced 2026-05-31 01:55:56 +00:00
Supporting the backspace
This commit is contained in:
@@ -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);
|
||||
@@ -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;
|
||||
|
||||
@@ -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}
|
||||
};
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user