From f0d6ef99dcfdb92230d6ab63c69f5baf6510f867 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sat, 17 Jun 2000 13:16:42 +0000 Subject: [PATCH] Completion list is now sorted. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@360 dbcabf3a-b0e7-0310-adc4-f8d773084564 --- src/core/misc.c | 5 +++++ src/core/misc.h | 3 +++ src/fe-common/core/completion.c | 7 ++++--- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/core/misc.c b/src/core/misc.c index 6315b906..bc73f5a0 100644 --- a/src/core/misc.c +++ b/src/core/misc.c @@ -353,6 +353,11 @@ int g_istr_equal(gconstpointer v, gconstpointer v2) return g_strcasecmp((const char *) v, (const char *) v2) == 0; } +int g_istr_cmp(gconstpointer v, gconstpointer v2) +{ + return g_strcasecmp((const char *) v, (const char *) v2); +} + /* a char* hash function from ASU */ unsigned int g_istr_hash(gconstpointer v) { diff --git a/src/core/misc.h b/src/core/misc.h index b836e3dd..3df1dc94 100644 --- a/src/core/misc.h +++ b/src/core/misc.h @@ -40,6 +40,9 @@ char *convert_home(const char *path); int g_istr_equal(gconstpointer v, gconstpointer v2); unsigned int g_istr_hash(gconstpointer v); +/* Case-insensitive GCompareFunc func */ +int g_istr_cmp(gconstpointer v, gconstpointer v2); + /* Find `mask' from `data', you can use * and ? wildcards. */ int match_wildcards(const char *mask, const char *data); diff --git a/src/fe-common/core/completion.c b/src/fe-common/core/completion.c index fa9d628b..552d8642 100644 --- a/src/fe-common/core/completion.c +++ b/src/fe-common/core/completion.c @@ -21,6 +21,7 @@ #include "module.h" #include "signals.h" #include "commands.h" +#include "misc.h" #include "lib-config/iconfig.h" #include "settings.h" @@ -194,7 +195,7 @@ static GList *completion_get_settings(const char *key) SETTINGS_REC *rec = tmp->data; if (g_strncasecmp(rec->key, key, len) == 0) - complist = g_list_append(complist, g_strdup(rec->key)); + complist = g_list_insert_sorted(complist, g_strdup(rec->key), (GCompareFunc) g_istr_cmp); } g_slist_free(sets); return complist; @@ -218,7 +219,7 @@ static GList *completion_get_commands(const char *cmd, char cmdchar) if (g_strncasecmp(rec->cmd, cmd, len) == 0) { word = g_strdup_printf("%c%s", cmdchar, rec->cmd); if (glist_find_icase_string(complist, word) == NULL) - complist = g_list_append(complist, word); + complist = g_list_insert_sorted(complist, word, (GCompareFunc) g_istr_cmp); else g_free(word); } @@ -250,7 +251,7 @@ static GList *completion_get_subcommands(const char *cmd) continue; if (g_strncasecmp(rec->cmd, cmd, len) == 0) - complist = g_list_append(complist, g_strdup(rec->cmd+skip)); + complist = g_list_insert_sorted(complist, g_strdup(rec->cmd+skip), (GCompareFunc) g_istr_cmp); } return complist; }