about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJohn Hernandez <129467592+H3rnand3zzz@users.noreply.github.com>2023-04-14 20:57:20 +0200
committerJohn Hernandez <129467592+H3rnand3zzz@users.noreply.github.com>2023-04-17 11:29:47 +0200
commit59b99fece8ffa10c6a23b11111b7b49858ea9139 (patch)
treea68384faef2d8a28b46da63e4dfc8998b83eee1e
parent1b679498b6818eb433cdaa1361f18e00ad1860fc (diff)
downloadprofani-tty-59b99fece8ffa10c6a23b11111b7b49858ea9139.tar.gz
Don't add the same command twice to history
Expected behaviour
When you type
/command
/command
it should be just 1 entry in the history.

Behaviour
All the entries were saved.

Behaviour is changed by introducing check. Before adding to history,
entry now is compared to the last history entry.
-rw-r--r--src/ui/inputwin.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c
index e59be8b5..453dfeac 100644
--- a/src/ui/inputwin.c
+++ b/src/ui/inputwin.c
@@ -568,12 +568,15 @@ _inp_rl_startup_hook(void)
 static void
 _inp_rl_linehandler(char* line)
 {
-    if (line && *line) {
-        if (!get_password) {
-            add_history(line);
-        }
-    }
     inp_line = line;
+    if (!line || !*line || get_password) {
+        return;
+    }
+    HISTORY_STATE* history = history_get_history_state();
+    HIST_ENTRY* last = history->length > 0 ? history->entries[history->length - 1] : NULL;
+    if (last == NULL || strcmp(last->line, line) != 0) {
+        add_history(line);
+    }
 }
 
 static gboolean shift_tab = FALSE;