shared: shell: Only omit consecutive duplicate history lines.
authorMarijn Suijten <marijns95@gmail.com>
Sat, 18 Jan 2020 20:44:23 +0000 (21:44 +0100)
committerAyush Garg <ayush.garg@samsung.com>
Mon, 12 Apr 2021 09:00:48 +0000 (14:30 +0530)
Change rl_handler to append duplicate history, as long as it isn't
identical to the last line. It prevents consecutive duplicates while
still having an accurate overview of the most recent commands used,
mimicking most modern shells.

This addresses my only major gripe with bluetoothctl: pressing UP does
not retrieve the last typed command when it is a duplicate of something
else written (much) earlier in the history. It is especially noticeable
when needing the same command repeatedly.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
src/shared/shell.c

index ef1188b..39f9a23 100644 (file)
@@ -680,6 +680,7 @@ int bt_shell_release_prompt(const char *input)
 static void rl_handler(char *input)
 {
        wordexp_t w;
+       HIST_ENTRY *last;
 
        if (!input) {
                rl_insert_text("quit");
@@ -695,7 +696,9 @@ static void rl_handler(char *input)
        if (!bt_shell_release_prompt(input))
                goto done;
 
-       if (history_search(input, -1))
+       last = history_get(history_length + history_base - 1);
+       /* append only if input is different from previous command */
+       if (!last || strcmp(input, last->line))
                add_history(input);
 
        if (data.monitor)