From f7a08dfd345659114d07e0e0bebe79523da82558 Mon Sep 17 00:00:00 2001 From: Marc Jauvin Date: Fri, 12 Jan 2018 16:57:05 -0500 Subject: [PATCH 1/7] use tabs.mode_on_change to persist or restore mode --- qutebrowser/mainwindow/tabbedbrowser.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/qutebrowser/mainwindow/tabbedbrowser.py b/qutebrowser/mainwindow/tabbedbrowser.py index c51a7aaff..9c140f8a7 100644 --- a/qutebrowser/mainwindow/tabbedbrowser.py +++ b/qutebrowser/mainwindow/tabbedbrowser.py @@ -649,17 +649,23 @@ class TabbedBrowser(tabwidget.TabWidget): log.webview.debug("on_current_changed got called with invalid " "index {}".format(idx)) return + if self._now_focused and config.val.tabs.mode_on_change == 'restore': + current_mode = modeman.instance(self._win_id).mode + if not current_mode in (usertypes.KeyMode.insert,usertypes.KeyMode.passthrough): + current_mode = usertypes.KeyMode.normal + self._now_focused.data.input_mode = current_mode log.modes.debug("Current tab changed, focusing {!r}".format(tab)) tab.setFocus() modes_to_leave = [usertypes.KeyMode.hint, usertypes.KeyMode.caret] - if not config.val.tabs.persist_mode_on_change: + if not config.val.tabs.mode_on_change == 'persist': modes_to_leave += [usertypes.KeyMode.insert, usertypes.KeyMode.passthrough] for mode in modes_to_leave: modeman.leave(self._win_id, mode, 'tab changed', maybe=True) - + if config.val.tabs.mode_on_change == 'restore': + modeman.enter(self._win_id, tab.data.input_mode, 'restore input mode for tab') if self._now_focused is not None: objreg.register('last-focused-tab', self._now_focused, update=True, scope='window', window=self._win_id) From c87d8d0d8f6c2a383ee98500f28991ecca76ad4a Mon Sep 17 00:00:00 2001 From: Marc Jauvin Date: Fri, 12 Jan 2018 17:02:34 -0500 Subject: [PATCH 2/7] add propery to save tab input mode --- qutebrowser/browser/browsertab.py | 1 + 1 file changed, 1 insertion(+) diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index eb0e55c4b..9b59f64fc 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -107,6 +107,7 @@ class TabData: override_target = attr.ib(None) pinned = attr.ib(False) fullscreen = attr.ib(False) + input_mode = usertypes.KeyMode.normal class AbstractAction: From 5dbfff016e70941f86c3a2a95dd90e4bb644c2f4 Mon Sep 17 00:00:00 2001 From: Marc Jauvin Date: Fri, 12 Jan 2018 17:05:47 -0500 Subject: [PATCH 3/7] replace persist_mode_on_change with mode_on_change supports old persist_mode_on_change functionality or new save/restore mode --- qutebrowser/config/configdata.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index a118a8b59..ebe52b7ea 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -1251,10 +1251,15 @@ tabs.padding: type: Padding desc: Padding (in pixels) around text for tabs. -tabs.persist_mode_on_change: - default: false - type: Bool - desc: Stay in insert/passthrough mode when switching tabs. +tabs.mode_on_change: + default: normal + type: + name: String + valid_values: + - persist: "retain the current mode." + - restore: "restore previously saved mode" + - normal: "always revert to normal mode" + desc: When switching tabs, what input mode is applied. tabs.position: default: top From 81b85994a12dd2cbf19b6b118496743eb6f7135b Mon Sep 17 00:00:00 2001 From: Marc Jauvin Date: Sun, 14 Jan 2018 13:29:51 -0500 Subject: [PATCH 4/7] document code a bit more --- qutebrowser/browser/browsertab.py | 1 + qutebrowser/mainwindow/tabbedbrowser.py | 1 + 2 files changed, 2 insertions(+) diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index 9b59f64fc..c9d2f540a 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -99,6 +99,7 @@ class TabData: Only used for QtWebKit. pinned: Flag to pin the tab. fullscreen: Whether the tab has a video shown fullscreen currently. + input_mode: current input mode for the tab. (insert, passthrough, normal) """ keep_icon = attr.ib(False) diff --git a/qutebrowser/mainwindow/tabbedbrowser.py b/qutebrowser/mainwindow/tabbedbrowser.py index 9c140f8a7..896e2f8ab 100644 --- a/qutebrowser/mainwindow/tabbedbrowser.py +++ b/qutebrowser/mainwindow/tabbedbrowser.py @@ -651,6 +651,7 @@ class TabbedBrowser(tabwidget.TabWidget): return if self._now_focused and config.val.tabs.mode_on_change == 'restore': current_mode = modeman.instance(self._win_id).mode + # only save insert & passthrough mode. otherwise default to normal if not current_mode in (usertypes.KeyMode.insert,usertypes.KeyMode.passthrough): current_mode = usertypes.KeyMode.normal self._now_focused.data.input_mode = current_mode From 05d076ba9f9c40e414ed0ca40326d35044d7005d Mon Sep 17 00:00:00 2001 From: Marc Jauvin Date: Mon, 15 Jan 2018 09:00:06 -0500 Subject: [PATCH 5/7] fix asciidoc for tabs.mode_on_change --- doc/help/settings.asciidoc | 18 ++++++++++++------ qutebrowser/config/configdata.yml | 6 +++--- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/doc/help/settings.asciidoc b/doc/help/settings.asciidoc index 53af8399d..6b5fe34c9 100644 --- a/doc/help/settings.asciidoc +++ b/doc/help/settings.asciidoc @@ -241,7 +241,7 @@ |<>|Position of new tabs opened from another tab. |<>|Position of new tabs which aren't opened from another tab. |<>|Padding (in pixels) around text for tabs. -|<>|Stay in insert/passthrough mode when switching tabs. +|<>|Set input mode behavior when switching tab. |<>|Shrink pinned tabs down to their contents. |<>|Position of the tab bar. |<>|Which tab to select when the focused tab is removed. @@ -2824,13 +2824,19 @@ Default: - +pass:[right]+: +pass:[5]+ - +pass:[top]+: +pass:[0]+ -[[tabs.persist_mode_on_change]] -=== tabs.persist_mode_on_change -Stay in insert/passthrough mode when switching tabs. +[[tabs.mode_on_change]] +=== tabs.mode_on_change +When switching tabs, what input mode is applied. -Type: <> +Type: <> -Default: +pass:[false]+ +Valid values: + + * +persist+: Retain the current mode. + * +restore+: Restore previously saved mode. + * +normal+: Always revert to normal mode. + +Default: +pass:[normal]+ [[tabs.pinned.shrink]] === tabs.pinned.shrink diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index ebe52b7ea..921034288 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -1256,9 +1256,9 @@ tabs.mode_on_change: type: name: String valid_values: - - persist: "retain the current mode." - - restore: "restore previously saved mode" - - normal: "always revert to normal mode" + - persist: "Retain the current mode." + - restore: "Restore previously saved mode." + - normal: "Always revert to normal mode." desc: When switching tabs, what input mode is applied. tabs.position: From 7d620a4bfc80c3120071d91cb3492111621ed3de Mon Sep 17 00:00:00 2001 From: Marc Jauvin Date: Mon, 15 Jan 2018 13:39:42 -0500 Subject: [PATCH 6/7] fix pylint/flake8 errors --- qutebrowser/mainwindow/tabbedbrowser.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qutebrowser/mainwindow/tabbedbrowser.py b/qutebrowser/mainwindow/tabbedbrowser.py index 896e2f8ab..b325b5e1c 100644 --- a/qutebrowser/mainwindow/tabbedbrowser.py +++ b/qutebrowser/mainwindow/tabbedbrowser.py @@ -652,7 +652,8 @@ class TabbedBrowser(tabwidget.TabWidget): if self._now_focused and config.val.tabs.mode_on_change == 'restore': current_mode = modeman.instance(self._win_id).mode # only save insert & passthrough mode. otherwise default to normal - if not current_mode in (usertypes.KeyMode.insert,usertypes.KeyMode.passthrough): + input_modes = (usertypes.KeyMode.insert, usertypes.KeyMode.passthrough) + if current_mode not in input_modes: current_mode = usertypes.KeyMode.normal self._now_focused.data.input_mode = current_mode From 9bb256b54502c1c463a1d631b9fccdd2d88bcc03 Mon Sep 17 00:00:00 2001 From: Marc Jauvin Date: Mon, 15 Jan 2018 16:19:38 -0500 Subject: [PATCH 7/7] shorten lines --- qutebrowser/browser/browsertab.py | 2 +- qutebrowser/mainwindow/tabbedbrowser.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index c9d2f540a..41e4f1eaf 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -99,7 +99,7 @@ class TabData: Only used for QtWebKit. pinned: Flag to pin the tab. fullscreen: Whether the tab has a video shown fullscreen currently. - input_mode: current input mode for the tab. (insert, passthrough, normal) + input_mode: current input mode for the tab. """ keep_icon = attr.ib(False) diff --git a/qutebrowser/mainwindow/tabbedbrowser.py b/qutebrowser/mainwindow/tabbedbrowser.py index b325b5e1c..0d1487f50 100644 --- a/qutebrowser/mainwindow/tabbedbrowser.py +++ b/qutebrowser/mainwindow/tabbedbrowser.py @@ -652,8 +652,8 @@ class TabbedBrowser(tabwidget.TabWidget): if self._now_focused and config.val.tabs.mode_on_change == 'restore': current_mode = modeman.instance(self._win_id).mode # only save insert & passthrough mode. otherwise default to normal - input_modes = (usertypes.KeyMode.insert, usertypes.KeyMode.passthrough) - if current_mode not in input_modes: + modes = (usertypes.KeyMode.insert, usertypes.KeyMode.passthrough) + if current_mode not in modes: current_mode = usertypes.KeyMode.normal self._now_focused.data.input_mode = current_mode @@ -667,7 +667,8 @@ class TabbedBrowser(tabwidget.TabWidget): for mode in modes_to_leave: modeman.leave(self._win_id, mode, 'tab changed', maybe=True) if config.val.tabs.mode_on_change == 'restore': - modeman.enter(self._win_id, tab.data.input_mode, 'restore input mode for tab') + modeman.enter(self._win_id, tab.data.input_mode, + 'restore input mode for tab') if self._now_focused is not None: objreg.register('last-focused-tab', self._now_focused, update=True, scope='window', window=self._win_id)