From 57ddd8e95e5d8ff8ad0473e84e58094045e57d6a Mon Sep 17 00:00:00 2001 From: Martin Tournoij Date: Fri, 5 Jun 2015 14:24:43 +0200 Subject: [PATCH 1/3] Always handle the key, even if it's bound. This fixes #716, which sufficiently annoyed me to make this quick fix. It's not a great fix, but it's not worse than what we had already, and the current behaviour is very surprising IMHO. --- qutebrowser/keyinput/basekeyparser.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/qutebrowser/keyinput/basekeyparser.py b/qutebrowser/keyinput/basekeyparser.py index b52a39824..ce9719f31 100644 --- a/qutebrowser/keyinput/basekeyparser.py +++ b/qutebrowser/keyinput/basekeyparser.py @@ -162,12 +162,6 @@ class BaseKeyParser(QObject): key = e.key() self._debug_log("Got key: 0x{:x} / text: '{}'".format(key, txt)) - if key == Qt.Key_Escape: - self._debug_log("Escape pressed, discarding '{}'.".format( - self._keystring)) - self._keystring = '' - return self.Match.none - if len(txt) == 1: category = unicodedata.category(txt) is_control_char = (category == 'Cc') @@ -303,6 +297,15 @@ class BaseKeyParser(QObject): True if the event was handled, False otherwise. """ handled = self._handle_special_key(e) + + # Special case for . See: + # https://github.com/The-Compiler/qutebrowser/issues/716 + if e.key() == Qt.Key_Escape: + self._debug_log("Escape pressed, discarding '{}'.".format( + self._keystring)) + self._keystring = '' + self.keystring_updated.emit(self._keystring) + if handled or not self._supports_chains: return handled match = self._handle_single_key(e) From fa65f345ac36bbb3e075d682d6c072af9a8bc347 Mon Sep 17 00:00:00 2001 From: Martin Tournoij Date: Fri, 5 Jun 2015 15:10:41 +0200 Subject: [PATCH 2/3] Perhaps fix it more properly after all :-) --- doc/help/commands.asciidoc | 5 +++++ qutebrowser/config/configdata.py | 2 +- qutebrowser/keyinput/basekeyparser.py | 14 ++++++-------- qutebrowser/keyinput/modeman.py | 5 +++++ 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/doc/help/commands.asciidoc b/doc/help/commands.asciidoc index 104478c10..c14f23b81 100644 --- a/doc/help/commands.asciidoc +++ b/doc/help/commands.asciidoc @@ -685,6 +685,7 @@ How many steps to zoom out. [options="header",width="75%",cols="25%,75%"] |============== |Command|Description +|<>|Clear the currently entered key chain. |<>|Execute the command currently in the commandline. |<>|Go forward in the commandline history. |<>|Go back in the commandline history. @@ -739,6 +740,10 @@ How many steps to zoom out. |<>|Toggle caret selection mode. |<>|Yank the selected text to the clipboard or primary selection. |============== +[[clear-keychain]] +=== clear-keychain +Clear the currently entered key chain. + [[command-accept]] === command-accept Execute the command currently in the commandline. diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index ad269d212..aa7a9c8c8 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -1143,7 +1143,7 @@ KEY_DATA = collections.OrderedDict([ ])), ('normal', collections.OrderedDict([ - ('search', ['']), + ('search ;; clear-keychain', ['']), ('set-cmd-text -s :open', ['o']), ('set-cmd-text :open {url}', ['go']), ('set-cmd-text -s :open -t', ['O']), diff --git a/qutebrowser/keyinput/basekeyparser.py b/qutebrowser/keyinput/basekeyparser.py index ce9719f31..487575127 100644 --- a/qutebrowser/keyinput/basekeyparser.py +++ b/qutebrowser/keyinput/basekeyparser.py @@ -298,14 +298,6 @@ class BaseKeyParser(QObject): """ handled = self._handle_special_key(e) - # Special case for . See: - # https://github.com/The-Compiler/qutebrowser/issues/716 - if e.key() == Qt.Key_Escape: - self._debug_log("Escape pressed, discarding '{}'.".format( - self._keystring)) - self._keystring = '' - self.keystring_updated.emit(self._keystring) - if handled or not self._supports_chains: return handled match = self._handle_single_key(e) @@ -362,3 +354,9 @@ class BaseKeyParser(QObject): "defined!") if mode == self._modename: self.read_config() + + def clear_keystring(self): + """Clear the currently entered key sequence.""" + self._debug_log("discarding keystring '{}'.".format(self._keystring)) + self._keystring = '' + self.keystring_updated.emit(self._keystring) diff --git a/qutebrowser/keyinput/modeman.py b/qutebrowser/keyinput/modeman.py index e64522204..686741044 100644 --- a/qutebrowser/keyinput/modeman.py +++ b/qutebrowser/keyinput/modeman.py @@ -332,3 +332,8 @@ class ModeManager(QObject): return self._eventFilter_keypress(event) else: return self._eventFilter_keyrelease(event) + + @cmdutils.register(instance='mode-manager', scope='window', hide=True) + def clear_keychain(self): + """Clear the currently entered key chain.""" + self._handlers[self.mode].__self__.clear_keystring() From dfada850e0ebcbc1f9a847bbf964deed27ef17d4 Mon Sep 17 00:00:00 2001 From: Martin Tournoij Date: Fri, 5 Jun 2015 16:52:33 +0200 Subject: [PATCH 3/3] Update code after refactor, and add migration --- qutebrowser/config/configdata.py | 2 ++ qutebrowser/keyinput/modeman.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index aa7a9c8c8..f9b0470c7 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -1354,4 +1354,6 @@ CHANGED_KEY_COMMANDS = [ (re.compile(r'^scroll 0 -50$'), r'scroll up'), (re.compile(r'^scroll 50 0$'), r'scroll right'), (re.compile(r'^scroll ([-\d]+ [-\d]+)$'), r'scroll-px \1'), + + (re.compile(r'^search$'), r'search ;; clear-keychain'), ] diff --git a/qutebrowser/keyinput/modeman.py b/qutebrowser/keyinput/modeman.py index 5b03bd9e0..6906a8720 100644 --- a/qutebrowser/keyinput/modeman.py +++ b/qutebrowser/keyinput/modeman.py @@ -321,4 +321,4 @@ class ModeManager(QObject): @cmdutils.register(instance='mode-manager', scope='window', hide=True) def clear_keychain(self): """Clear the currently entered key chain.""" - self._handlers[self.mode].__self__.clear_keystring() + self._parsers[self.mode].clear_keystring()