about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/tools/autocomplete.c12
-rw-r--r--src/tools/autocomplete.h2
-rw-r--r--src/ui/window_list.c2
3 files changed, 16 insertions, 0 deletions
diff --git a/src/tools/autocomplete.c b/src/tools/autocomplete.c
index 5e9f14f1..6c960ba2 100644
--- a/src/tools/autocomplete.c
+++ b/src/tools/autocomplete.c
@@ -385,6 +385,18 @@ autocomplete_param_no_with_func(const char *const input, char *command, int arg_
     return NULL;
 }
 
+/* remove the first message if we have more than max */
+void
+autocomplete_remove_older_than_max(Autocomplete ac, int maxsize)
+{
+    if (autocomplete_length(ac) > maxsize) {
+        GList *first = g_list_nth(ac->items, 0);
+        if (first) {
+            ac->items = g_list_delete_link(ac->items, first);
+        }
+    }
+}
+
 static gchar*
 _search_next(Autocomplete ac, GList *curr, gboolean quote)
 {
diff --git a/src/tools/autocomplete.h b/src/tools/autocomplete.h
index 90b17bb3..10bbbf61 100644
--- a/src/tools/autocomplete.h
+++ b/src/tools/autocomplete.h
@@ -74,4 +74,6 @@ char* autocomplete_param_no_with_func(const char *const input, char *command,
 void autocomplete_reset(Autocomplete ac);
 
 gboolean autocomplete_contains(Autocomplete ac, const char *value);
+
+void autocomplete_remove_older_than_max(Autocomplete ac, int maxsize);
 #endif
diff --git a/src/ui/window_list.c b/src/ui/window_list.c
index 408296c9..e506a957 100644
--- a/src/ui/window_list.c
+++ b/src/ui/window_list.c
@@ -1164,6 +1164,8 @@ wins_add_urls_ac(const ProfWin *const win, const ProfMessage *const message)
         gchar *word = g_match_info_fetch (match_info, 0);
 
         autocomplete_add(win->urls_ac, word);
+        // for people who run profanity a long time, we don't want to waste a lot of memory
+        autocomplete_remove_older_than_max(win->urls_ac, 20);
 
         g_free (word);
         g_match_info_next (match_info, NULL);