From ef77033ca52647599df6c9053d073216d439780c Mon Sep 17 00:00:00 2001 From: Leo C Date: Thu, 16 Jun 2016 09:06:49 +0200 Subject: [PATCH] cli_readline.c: code cleanup (history search) --- avr/cli_readline.c | 63 +++++++++++++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 17 deletions(-) diff --git a/avr/cli_readline.c b/avr/cli_readline.c index e34f0c8..c2e2326 100644 --- a/avr/cli_readline.c +++ b/avr/cli_readline.c @@ -67,14 +67,14 @@ struct fkey_tbl_s { static const FLASH struct fkey_tbl_s fkey_table[] = { FKEY_TBL_ITEM(B, KEY_DOWN), // Down arrow key -FKEY_TBL_ITEM(A, KEY_UP), // Up arrow key +FKEY_TBL_ITEM(A, KEY_UP), // Up arrow key FKEY_TBL_ITEM(D, KEY_LEFT), // Left arrow key -FKEY_TBL_ITEM(C, KEY_RIGHT), // Right arrow key +FKEY_TBL_ITEM(C, KEY_RIGHT), // Right arrow key FKEY_TBL_ITEM(1~, KEY_HOME), // Home key -FKEY_TBL_ITEM(3~, KEY_DC), // Delete character key -FKEY_TBL_ITEM(2~, KEY_IC), // Ins char/toggle ins mode key -FKEY_TBL_ITEM(6~, KEY_NPAGE), // Next-page key -FKEY_TBL_ITEM(5~, KEY_PPAGE), // Previous-page key +FKEY_TBL_ITEM(3~, KEY_DC), // Delete character key +FKEY_TBL_ITEM(2~, KEY_IC), // Ins char/toggle ins mode key +FKEY_TBL_ITEM(6~, KEY_NPAGE), // Next-page key +FKEY_TBL_ITEM(5~, KEY_PPAGE), // Previous-page key FKEY_TBL_ITEM(4~, KEY_END), // End key FKEY_TBL_ITEM(Z, KEY_BTAB), // Back tab key /* VT400: */ @@ -94,9 +94,9 @@ FKEY_TBL_ITEM(17~, KEY_F(6)), // Function key F6 FKEY_TBL_ITEM(18~, KEY_F(7)), // Function key F7 FKEY_TBL_ITEM(19~, KEY_F(8)), // Function key F8 FKEY_TBL_ITEM(20~, KEY_F(9)), // Function key F9 -FKEY_TBL_ITEM(21~, KEY_F(10)), // Function key F10 -FKEY_TBL_ITEM(23~, KEY_F(11)), // Function key F11 -FKEY_TBL_ITEM(24~, KEY_F(12)), // Function key F12 +FKEY_TBL_ITEM(21~, KEY_F(10)), // Function key F10 +FKEY_TBL_ITEM(23~, KEY_F(11)), // Function key F11 +FKEY_TBL_ITEM(24~, KEY_F(12)), // Function key F12 { NULL } /* Mark end of table */ }; @@ -375,7 +375,7 @@ static char *hist_next(void) #define REFRESH_TO_EOL() { \ if (num < eol_num) { \ - wlen = eol_num - num; \ + uint_fast8_t wlen = eol_num - num; \ putnstr(buf + num, wlen); \ num = eol_num; \ } \ @@ -414,7 +414,7 @@ static void cread_add_char(char ichar, bool insert, uint_fast8_t *num, } } -static void cread_add_str(char *str, int strsize, bool insert, +static void cread_add_str(char *str, uint_fast8_t strsize, bool insert, uint_fast8_t *num, uint_fast8_t *eol_num, char *buf, uint_fast8_t len) { @@ -429,18 +429,16 @@ static int cread_line(const FLASH char *const prompt, char *buf, { uint_fast8_t num = 0; uint_fast8_t eol_num = 0; - uint_fast8_t wlen; - int ichar; bool insert = 1; - int init_len = strlen(buf); (void) prompt; + uint_fast8_t init_len = strlen(buf); if (init_len) cread_add_str(buf, init_len, 1, &num, &eol_num, buf, *len); while (1) { - ichar = getcmd_getch(); + int ichar = getcmd_getch(); if ((ichar == '\n') || (ichar == '\r')) { putchar('\n'); @@ -474,7 +472,7 @@ static int cread_line(const FLASH char *const prompt, char *buf, case KEY_DC: case CTL_CH('d'): /* delete-char */ if (num < eol_num) { - wlen = eol_num - num - 1; + uint_fast8_t wlen = eol_num - num - 1; if (wlen) { memmove(&buf[num], &buf[num+1], wlen); putnstr(buf + num, wlen); @@ -507,7 +505,7 @@ static int cread_line(const FLASH char *const prompt, char *buf, case DEL7: case 8: /* backward-delete-char */ if (num) { - wlen = eol_num - num; + uint_fast8_t wlen = eol_num - num; num--; memmove(&buf[num], &buf[num+1], wlen); getcmd_putch(CTL_BACKSPACE); @@ -550,6 +548,37 @@ static int cread_line(const FLASH char *const prompt, char *buf, getcmd_cbeep(); } break; +#if 0 + case KEY_PPAGE: /* history-search-backward */ + case KEY_NPAGE: /* history-search-forward */ + if (enable_history) { + char *hline; + + if (ichar == KEY_PPAGE) + hline = hist_search_backward(); + else + hline = hist_search_forward(); + + if (hline) { + /* nuke the current line */ + /* first, go home */ + BEGINNING_OF_LINE(); + + /* erase to end of line */ + ERASE_TO_EOL(); + + /* copy new line into place and display */ + strcpy(buf, hline); + eol_num = strlen(buf); + REFRESH_TO_EOL(); + } else { + getcmd_cbeep(); + } + } else { + getcmd_cbeep(); + } + break; +#endif #ifdef CONFIG_AUTO_COMPLETE case '\t': { int num2, col; -- 2.39.2