about summary refs log tree commit diff stats
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-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;