diff options
author | portix <portix@gmx.net> | 2011-06-16 23:46:40 +0200 |
---|---|---|
committer | portix <portix@gmx.net> | 2011-06-16 23:46:40 +0200 |
commit | acc28d2ed52b294e7e8150d76dd8672368d06eb1 (patch) | |
tree | 90585990f2d1fe2ca71f2098518e07e90caf660e /src | |
parent | 85875d71b9d120cacfaca884841151d5c8e11fe5 (diff) | |
download | dwb-acc28d2ed52b294e7e8150d76dd8672368d06eb1.zip |
Fix double matching keybindings
Diffstat (limited to 'src')
-rw-r--r-- | src/commands.c | 6 | ||||
-rw-r--r-- | src/dwb.c | 28 | ||||
-rw-r--r-- | src/dwb.h | 1 |
3 files changed, 22 insertions, 13 deletions
diff --git a/src/commands.c b/src/commands.c index 765b92ef..fbcbb7a8 100644 --- a/src/commands.c +++ b/src/commands.c @@ -49,11 +49,7 @@ dwb_com_simple_command(KeyMap *km) { else if (ret != NO_ERROR) { dwb_set_error_message(dwb.state.fview, arg->e ? arg->e : km->map->error); } - dwb.state.nummod = 0; - if (dwb.state.buffer) { - g_string_free(dwb.state.buffer, true); - dwb.state.buffer = NULL; - } + dwb_clean_key_buffer(); }/*}}}*/ /* COMMANDS {{{*/ @@ -1901,6 +1901,16 @@ dwb_eval_editing_key(GdkEventKey *e) { return ret; }/*}}}*/ +/* dwb_clean_buffer() {{{*/ +void +dwb_clean_key_buffer() { + dwb.state.nummod = 0; + if (dwb.state.buffer) { + g_string_free(dwb.state.buffer, true); + dwb.state.buffer = NULL; + } +}/*}}}*/ + /* dwb_eval_key(GdkEventKey *e) {{{*/ static gboolean dwb_eval_key(GdkEventKey *e) { @@ -1935,8 +1945,6 @@ dwb_eval_key(GdkEventKey *e) { if (!key) { return false; } - - if (!old) { dwb.state.buffer = g_string_new(NULL); old = dwb.state.buffer->str; @@ -1956,7 +1964,6 @@ dwb_eval_key(GdkEventKey *e) { } const char *buf = dwb.state.buffer->str; - int length = dwb.state.buffer->len; int longest = 0; KeyMap *tmp = NULL; GList *coms = NULL; @@ -1970,14 +1977,14 @@ dwb_eval_key(GdkEventKey *e) { if (!km->key || !kl ) { continue; } - if (dwb.comps.autocompletion && g_str_has_prefix(km->key, buf) && CLEAN_STATE(e) == km->mod) { - coms = g_list_append(coms, km); - } - if (!strcmp(&buf[length - kl], km->key) && (CLEAN_STATE(e) == km->mod)) { + if (g_str_has_prefix(km->key, buf) && (CLEAN_STATE(e) == km->mod) ) { if (!longest || kl > longest) { longest = kl; tmp = km; } + if (dwb.comps.autocompletion) { + coms = g_list_append(coms, km); + } ret = true; } } @@ -1989,9 +1996,14 @@ dwb_eval_key(GdkEventKey *e) { dwb_comp_autocomplete(coms, NULL); ret = true; } - if (tmp) { + if (tmp && dwb.state.buffer->len == longest) { dwb_com_simple_command(tmp); } + PRINT_DEBUG("longest match: %d", longest); + if (longest == 0) { + dwb_clean_key_buffer(); + CLEAR_COMMAND_TEXT(dwb.state.fview); + } FREE(key); return ret; @@ -674,5 +674,6 @@ gboolean dwb_get_allowed(const char *, const char *); gboolean dwb_toggle_allowed(const char *, const char *); char * dwb_get_host(WebKitWebView *); void dwb_focus_view(GList *); +void dwb_clean_key_buffer(void); #endif |