mirror of
https://github.com/zoriya/ash.git
synced 2026-06-01 10:15:10 +00:00
Adding left, right, home, end and del key support
This commit is contained in:
@@ -32,7 +32,8 @@ SRC = src/shell.c \
|
||||
src/key_bindings/basic_typing_functions.c \
|
||||
src/key_bindings/default_bindings.c \
|
||||
src/key_bindings/control_commands.c \
|
||||
src/redirections/pty_pipe.c
|
||||
src/redirections/pty_pipe.c \
|
||||
src/key_bindings/move_commands.c
|
||||
|
||||
OBJ = $(SRC:%.c=%.o)
|
||||
OBJ += src/main.o
|
||||
|
||||
@@ -32,4 +32,11 @@ 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 backward_delete_char_command(int key, buffer_t *buffer, env_t *env);
|
||||
|
||||
int backward_delete_char_command(int key, buffer_t *buffer, env_t *env);
|
||||
int delete_char_command(int key, buffer_t *buffer, env_t *env);
|
||||
|
||||
int forward_char_command(int key, buffer_t *buffer, env_t *env);
|
||||
int backward_char_command(int key, buffer_t *buffer, env_t *env);
|
||||
int beginning_of_line_command(int key, buffer_t *buffer, env_t *env);
|
||||
int end_of_line_command(int key, buffer_t *buffer, env_t *env);
|
||||
|
||||
@@ -46,6 +46,15 @@ int backward_delete_char_command(int key, buffer_t *buffer, env_t *env)
|
||||
return (0);
|
||||
}
|
||||
|
||||
int delete_char_command(int key, buffer_t *buffer, env_t *env)
|
||||
{
|
||||
int len = buffer->buffer ? strlen(buffer->buffer) : 0;
|
||||
|
||||
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;
|
||||
|
||||
@@ -15,6 +15,11 @@ const key_function_t key_functions[] = {
|
||||
{"newline", &newline_command},
|
||||
{"enf-of-file", &eof_command},
|
||||
{"backward-delete-char", &backward_delete_char_command},
|
||||
{"delete-char", &delete_char_command},
|
||||
{"backward-char", &backward_char_command},
|
||||
{"forward-char", &forward_char_command},
|
||||
{"beginning-of-line", &beginning_of_line_command},
|
||||
{"end-of-line", &end_of_line_command},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
@@ -23,5 +28,10 @@ const binding_t emacs_bindings[] = {
|
||||
{CTRL('d'), &eof_command},
|
||||
{127, &backward_delete_char_command},
|
||||
{KEY_BACKSPACE, &backward_delete_char_command},
|
||||
{KEY_DC, &delete_char_command},
|
||||
{KEY_LEFT, &backward_char_command},
|
||||
{KEY_RIGHT, &forward_char_command},
|
||||
{KEY_HOME, &beginning_of_line_command},
|
||||
{KEY_END, &end_of_line_command},
|
||||
{0, NULL}
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
** EPITECH PROJECT, 2020
|
||||
** ash
|
||||
** File description:
|
||||
** arrow_commands
|
||||
*/
|
||||
|
||||
#include "shell.h"
|
||||
#include "key_functions.h"
|
||||
|
||||
int backward_char_command(int key, buffer_t *buffer, env_t *env)
|
||||
{
|
||||
if (buffer->pos != 0)
|
||||
buffer->pos--;
|
||||
return (0);
|
||||
}
|
||||
|
||||
int forward_char_command(int key, buffer_t *buffer, env_t *env)
|
||||
{
|
||||
if (buffer->buffer && buffer->buffer[buffer->pos] != '\0')
|
||||
buffer->pos++;
|
||||
return (0);
|
||||
}
|
||||
|
||||
int beginning_of_line_command(int key, buffer_t *buffer, env_t *env)
|
||||
{
|
||||
buffer->pos = 0;
|
||||
return (0);
|
||||
}
|
||||
|
||||
int end_of_line_command(int key, buffer_t *buffer, env_t *env)
|
||||
{
|
||||
buffer->pos = buffer->buffer ? strlen(buffer->buffer) : 0;
|
||||
return (0);
|
||||
}
|
||||
Reference in New Issue
Block a user