--- libaitcli/src/aitcli.c 2025/12/24 00:00:53 1.21.2.4 +++ libaitcli/src/aitcli.c 2025/12/24 00:16:40 1.21.2.5 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitcli.c,v 1.21.2.4 2025/12/24 00:00:53 misho Exp $ +* $Id: aitcli.c,v 1.21.2.5 2025/12/24 00:16:40 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -505,6 +505,22 @@ bufEND(int idx, void * __restrict cli_buffer) } static int +bufLEFTin(int idx, void * __restrict cli_buffer) +{ + linebuffer_t *buf = cli_buffer; + + if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY) + return RETCODE_ERR; + + if (buf->line_posin > 0) { + rewindin(buf, 1); + buf->line_posin--; + } + + return RETCODE_OK; +} + +static int bufLEFT(int idx, void * __restrict cli_buffer) { linebuffer_t *buf = cli_buffer; @@ -519,6 +535,22 @@ bufLEFT(int idx, void * __restrict cli_buffer) } static int +bufRIGHTin(int idx, void * __restrict cli_buffer) +{ + linebuffer_t *buf = cli_buffer; + + if (!cli_buffer || idx < 0 || idx > MAX_BINDKEY) + return RETCODE_ERR; + + if (buf->line_posin < buf->line_lenin) { + write(buf->line_out, buf->line_input + buf->line_posin, 1); + buf->line_posin++; + } + + return RETCODE_OK; +} + +static int bufRIGHT(int idx, void * __restrict cli_buffer) { linebuffer_t *buf = cli_buffer; @@ -1444,12 +1476,14 @@ cliInit(int fin, int fout, const char *prompt) keys[i].key_len = inkeys[i].key_len = sizeof K_RIGHT - 1; if (cli_buffer->line_prompt) keys[i].key_func = bufRIGHT; + inkeys[i].key_func = bufRIGHTin; memcpy(keys[i].key_ch, K_RIGHT, keys[i].key_len); memcpy(inkeys[i].key_ch, K_RIGHT, inkeys[i].key_len); i++; keys[i].key_len = inkeys[i].key_len = sizeof K_LEFT - 1; if (cli_buffer->line_prompt) keys[i].key_func = bufLEFT; + inkeys[i].key_func = bufLEFTin; memcpy(keys[i].key_ch, K_LEFT, keys[i].key_len); memcpy(inkeys[i].key_ch, K_LEFT, inkeys[i].key_len); i++;