summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorportix <portix@gmx.net>2011-06-16 23:46:40 +0200
committerportix <portix@gmx.net>2011-06-16 23:46:40 +0200
commitacc28d2ed52b294e7e8150d76dd8672368d06eb1 (patch)
tree90585990f2d1fe2ca71f2098518e07e90caf660e /src
parent85875d71b9d120cacfaca884841151d5c8e11fe5 (diff)
downloaddwb-acc28d2ed52b294e7e8150d76dd8672368d06eb1.zip
Fix double matching keybindings
Diffstat (limited to 'src')
-rw-r--r--src/commands.c6
-rw-r--r--src/dwb.c28
-rw-r--r--src/dwb.h1
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 {{{*/
diff --git a/src/dwb.c b/src/dwb.c
index af6a57d6..eb0d1f4a 100644
--- a/src/dwb.c
+++ b/src/dwb.c
@@ -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;
diff --git a/src/dwb.h b/src/dwb.h
index bc1bcd66..c7567719 100644
--- a/src/dwb.h
+++ b/src/dwb.h
@@ -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