diff options
-rw-r--r-- | src/tools/autocomplete.c | 12 | ||||
-rw-r--r-- | src/tools/autocomplete.h | 2 | ||||
-rw-r--r-- | src/ui/window_list.c | 2 |
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); |