diff options
author | Jimmy <jimmy@spalge.com> | 2022-02-20 10:20:15 +1300 |
---|---|---|
committer | Jimmy <jimmy@spalge.com> | 2022-02-20 10:20:15 +1300 |
commit | 133856e5ca7189b4c5112e2d75b5fab59b8f7f6f (patch) | |
tree | 64fcd4f2fbe48bf9362d591bde4d664a0801af9e | |
parent | a22f60e38573156877b718fb89c0b8b53e1bb3a6 (diff) | |
parent | caaa6b6fdad45704f73598ef51e3b4b84d6844e6 (diff) | |
download | qutebrowser-133856e5ca7189b4c5112e2d75b5fab59b8f7f6f.tar.gz qutebrowser-133856e5ca7189b4c5112e2d75b5fab59b8f7f6f.zip |
Merge pull request #7000 from AckslD/mode-autocmd
-rw-r--r-- | qutebrowser/config/configdata.yml | 12 | ||||
-rw-r--r-- | qutebrowser/mainwindow/tabbedbrowser.py | 21 | ||||
-rw-r--r-- | tests/end2end/features/tabs.feature | 19 |
3 files changed, 52 insertions, 0 deletions
diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index cf5e4665a..59f16511f 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -1811,6 +1811,18 @@ input.match_counts: Disabling it allows for emacs-like bindings where number keys are passed through (according to `input.forward_unbound_keys`) instead. +input.mode_override: + default: null + type: + name: String + none_ok: true + valid_values: + - normal + - insert + - passthrough + supports_pattern: true + desc: Mode to change to when focusing on a tab/URL changes. + ## keyhint keyhint.blacklist: diff --git a/qutebrowser/mainwindow/tabbedbrowser.py b/qutebrowser/mainwindow/tabbedbrowser.py index c3f06e185..da688367e 100644 --- a/qutebrowser/mainwindow/tabbedbrowser.py +++ b/qutebrowser/mainwindow/tabbedbrowser.py @@ -223,6 +223,10 @@ class TabbedBrowser(QWidget): # https://bugreports.qt.io/browse/QTBUG-65223 self.cur_load_finished.connect(self._leave_modes_on_load) + # handle mode_override + self.current_tab_changed.connect(lambda tab: self._mode_override(tab.url())) + self.cur_url_changed.connect(self._mode_override) + # This init is never used, it is immediately thrown away in the next # line. self.undo_stack: UndoStackType = collections.deque() @@ -777,6 +781,23 @@ class TabbedBrowser(QWidget): if not self.widget.page_title(idx): self.widget.set_page_title(idx, url.toDisplayString()) + def _mode_override(self, url: QUrl) -> None: + """Override mode if url matches pattern. + + Args: + url: The QUrl to match for + """ + if not url.isValid(): + return + mode = config.instance.get('input.mode_override', url=url) + if mode: + log.modes.debug(f"Mode change to {mode} triggered for url {url}") + modeman.enter( + self._win_id, + usertypes.KeyMode[mode], + reason='mode_override', + ) + @pyqtSlot(browsertab.AbstractTab) def _on_icon_changed(self, tab): """Set the icon of a tab. diff --git a/tests/end2end/features/tabs.feature b/tests/end2end/features/tabs.feature index 3715d5765..54e84a10e 100644 --- a/tests/end2end/features/tabs.feature +++ b/tests/end2end/features/tabs.feature @@ -1741,3 +1741,22 @@ Feature: Tab management And I run :undo And I run :message-info "Still alive!" Then the message "Still alive!" should be shown + + Scenario: Passthrough mode override + When I run :set -u localhost:*/data/numbers/1.txt input.mode_override 'passthrough' + And I open data/numbers/1.txt + Then "Entering mode KeyMode.passthrough (reason: mode_override)" should be logged + + Scenario: Insert mode override + When I run :set -u localhost:*/data/numbers/1.txt input.mode_override 'insert' + And I open data/numbers/1.txt + Then "Entering mode KeyMode.insert (reason: mode_override)" should be logged + + Scenario: Mode override on tab switch + When I run :set -u localhost:*/data/numbers/1.txt input.mode_override 'insert' + And I open data/numbers/1.txt + And I wait for "Entering mode KeyMode.insert (reason: mode_override)" in the log + And I run :fake-key -g <esc> + And I open data/numbers/2.txt in a new tab + And I run :tab-prev + Then "Entering mode KeyMode.insert (reason: mode_override)" should be logged |