address requested changes
- add INPUT_MODES & PROMPT_MODES constants in modeman - use those in tabbedbrowser and modeman - fix debug logs format to be more human readable - fix associated tests for new debug logs
This commit is contained in:
parent
7c2802e843
commit
c9f6cd507b
@ -30,6 +30,9 @@ from qutebrowser.config import config
|
|||||||
from qutebrowser.commands import cmdexc, cmdutils
|
from qutebrowser.commands import cmdexc, cmdutils
|
||||||
from qutebrowser.utils import usertypes, log, objreg, utils
|
from qutebrowser.utils import usertypes, log, objreg, utils
|
||||||
|
|
||||||
|
INPUT_MODES = [usertypes.KeyMode.insert, usertypes.KeyMode.passthrough]
|
||||||
|
PROMPT_MODES = [usertypes.KeyMode.prompt, usertypes.KeyMode.yesno]
|
||||||
|
|
||||||
|
|
||||||
@attr.s(frozen=True)
|
@attr.s(frozen=True)
|
||||||
class KeyEvent:
|
class KeyEvent:
|
||||||
@ -115,7 +118,7 @@ class ModeManager(QObject):
|
|||||||
Attributes:
|
Attributes:
|
||||||
mode: The mode we're currently in.
|
mode: The mode we're currently in.
|
||||||
_win_id: The window ID of this ModeManager
|
_win_id: The window ID of this ModeManager
|
||||||
_prev_mode: mode before a prompt poped up
|
_prev_mode: Mode before a prompt popped up
|
||||||
_parsers: A dictionary of modes and their keyparsers.
|
_parsers: A dictionary of modes and their keyparsers.
|
||||||
_forward_unbound_keys: If we should forward unbound keys.
|
_forward_unbound_keys: If we should forward unbound keys.
|
||||||
_releaseevents_to_pass: A set of KeyEvents where the keyPressEvent was
|
_releaseevents_to_pass: A set of KeyEvents where the keyPressEvent was
|
||||||
@ -235,10 +238,8 @@ class ModeManager(QObject):
|
|||||||
mode, '' if reason is None else ' (reason: {})'.format(reason)))
|
mode, '' if reason is None else ' (reason: {})'.format(reason)))
|
||||||
if mode not in self._parsers:
|
if mode not in self._parsers:
|
||||||
raise ValueError("No keyparser for mode {}".format(mode))
|
raise ValueError("No keyparser for mode {}".format(mode))
|
||||||
prompt_modes = (usertypes.KeyMode.prompt, usertypes.KeyMode.yesno)
|
if self.mode == mode or (self.mode in PROMPT_MODES and
|
||||||
input_modes = [usertypes.KeyMode.insert, usertypes.KeyMode.passthrough]
|
mode in PROMPT_MODES):
|
||||||
if self.mode == mode or (self.mode in prompt_modes and
|
|
||||||
mode in prompt_modes):
|
|
||||||
log.modes.debug("Ignoring request as we're in mode {} "
|
log.modes.debug("Ignoring request as we're in mode {} "
|
||||||
"already.".format(self.mode))
|
"already.".format(self.mode))
|
||||||
return
|
return
|
||||||
@ -250,9 +251,8 @@ class ModeManager(QObject):
|
|||||||
return
|
return
|
||||||
log.modes.debug("Overriding mode {}.".format(self.mode))
|
log.modes.debug("Overriding mode {}.".format(self.mode))
|
||||||
self.left.emit(self.mode, mode, self._win_id)
|
self.left.emit(self.mode, mode, self._win_id)
|
||||||
if (mode in prompt_modes and self.mode in input_modes and
|
if (mode in PROMPT_MODES and self.mode in INPUT_MODES and
|
||||||
config.val.tabs.mode_on_change == 'restore'):
|
config.val.tabs.mode_on_change == 'restore'):
|
||||||
# save previous mode when being prompted
|
|
||||||
self._prev_mode = self.mode
|
self._prev_mode = self.mode
|
||||||
else:
|
else:
|
||||||
self._prev_mode = usertypes.KeyMode.normal
|
self._prev_mode = usertypes.KeyMode.normal
|
||||||
@ -303,7 +303,7 @@ class ModeManager(QObject):
|
|||||||
self.clear_keychain()
|
self.clear_keychain()
|
||||||
self.mode = usertypes.KeyMode.normal
|
self.mode = usertypes.KeyMode.normal
|
||||||
self.left.emit(mode, self.mode, self._win_id)
|
self.left.emit(mode, self.mode, self._win_id)
|
||||||
if mode in [usertypes.KeyMode.prompt, usertypes.KeyMode.yesno]:
|
if mode in PROMPT_MODES:
|
||||||
self.enter(self._prev_mode,
|
self.enter(self._prev_mode,
|
||||||
reason='restore mode before {}'.format(mode.name))
|
reason='restore mode before {}'.format(mode.name))
|
||||||
|
|
||||||
|
@ -634,8 +634,8 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
@pyqtSlot(usertypes.KeyMode)
|
@pyqtSlot(usertypes.KeyMode)
|
||||||
def on_mode_entered(self, mode):
|
def on_mode_entered(self, mode):
|
||||||
"""Save input mode when tabs.mode_on_change = restore."""
|
"""Save input mode when tabs.mode_on_change = restore."""
|
||||||
input_modes = [usertypes.KeyMode.insert, usertypes.KeyMode.passthrough]
|
if (config.val.tabs.mode_on_change == 'restore' and
|
||||||
if mode in input_modes and config.val.tabs.mode_on_change == 'restore':
|
mode in modeman.INPUT_MODES):
|
||||||
tab = self.currentWidget()
|
tab = self.currentWidget()
|
||||||
if tab is not None:
|
if tab is not None:
|
||||||
tab.data.input_mode = mode
|
tab.data.input_mode = mode
|
||||||
@ -643,18 +643,15 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
@pyqtSlot(usertypes.KeyMode)
|
@pyqtSlot(usertypes.KeyMode)
|
||||||
def on_mode_left(self, mode):
|
def on_mode_left(self, mode):
|
||||||
"""Give focus to current tab if command mode was left."""
|
"""Give focus to current tab if command mode was left."""
|
||||||
if mode in [usertypes.KeyMode.command, usertypes.KeyMode.prompt,
|
|
||||||
usertypes.KeyMode.yesno]:
|
|
||||||
widget = self.currentWidget()
|
widget = self.currentWidget()
|
||||||
log.modes.debug("Left status-input mode, focusing {!r}".format(
|
|
||||||
widget))
|
|
||||||
if widget is None:
|
if widget is None:
|
||||||
return
|
return
|
||||||
|
if mode in [usertypes.KeyMode.command] + modeman.PROMPT_MODES:
|
||||||
|
log.modes.debug("Left status-input mode, focusing {!r}".format(
|
||||||
|
widget))
|
||||||
widget.setFocus()
|
widget.setFocus()
|
||||||
elif config.val.tabs.mode_on_change == 'restore':
|
if config.val.tabs.mode_on_change == 'restore':
|
||||||
tab = self.currentWidget()
|
widget.data.input_mode = usertypes.KeyMode.normal
|
||||||
if tab is not None:
|
|
||||||
tab.data.input_mode = usertypes.KeyMode.normal
|
|
||||||
|
|
||||||
@pyqtSlot(int)
|
@pyqtSlot(int)
|
||||||
def on_current_changed(self, idx):
|
def on_current_changed(self, idx):
|
||||||
@ -672,25 +669,24 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
log.modes.debug("Current tab changed, focusing {!r}".format(tab))
|
log.modes.debug("Current tab changed, focusing {!r}".format(tab))
|
||||||
tab.setFocus()
|
tab.setFocus()
|
||||||
|
|
||||||
prompt_modes = [usertypes.KeyMode.prompt, usertypes.KeyMode.yesno]
|
|
||||||
modes_to_leave = [usertypes.KeyMode.hint, usertypes.KeyMode.caret]
|
modes_to_leave = [usertypes.KeyMode.hint, usertypes.KeyMode.caret]
|
||||||
|
|
||||||
mm_instance = modeman.instance(self._win_id)
|
mm_instance = modeman.instance(self._win_id)
|
||||||
current_mode = mm_instance.mode
|
current_mode = mm_instance.mode
|
||||||
log.modes.debug("{}: mode before tab change: {}."
|
log.modes.debug("Mode before tab change: {} (mode_on_change = {})"
|
||||||
.format(mode_on_change, current_mode.name))
|
.format(current_mode.name, mode_on_change))
|
||||||
if mode_on_change == 'normal':
|
if mode_on_change == 'normal':
|
||||||
modes_to_leave += [usertypes.KeyMode.insert,
|
modes_to_leave += modeman.INPUT_MODES
|
||||||
usertypes.KeyMode.passthrough]
|
|
||||||
for mode in modes_to_leave:
|
for mode in modes_to_leave:
|
||||||
modeman.leave(self._win_id, mode, 'tab changed', maybe=True)
|
modeman.leave(self._win_id, mode, 'tab changed', maybe=True)
|
||||||
if mode_on_change == 'restore' and current_mode not in prompt_modes:
|
if (mode_on_change == 'restore' and
|
||||||
|
current_mode not in modeman.PROMPT_MODES):
|
||||||
modeman.enter(self._win_id, tab.data.input_mode, 'restore')
|
modeman.enter(self._win_id, tab.data.input_mode, 'restore')
|
||||||
if self._now_focused is not None:
|
if self._now_focused is not None:
|
||||||
objreg.register('last-focused-tab', self._now_focused, update=True,
|
objreg.register('last-focused-tab', self._now_focused, update=True,
|
||||||
scope='window', window=self._win_id)
|
scope='window', window=self._win_id)
|
||||||
log.modes.debug("{}: mode after tab change: {}."
|
log.modes.debug("Mode after tab change: {} (mode_on_change = {})"
|
||||||
.format(mode_on_change, mm_instance.mode.name))
|
.format(current_mode.name, mode_on_change))
|
||||||
self._now_focused = tab
|
self._now_focused = tab
|
||||||
self.current_tab_changed.emit(tab)
|
self.current_tab_changed.emit(tab)
|
||||||
QTimer.singleShot(0, self._update_window_title)
|
QTimer.singleShot(0, self._update_window_title)
|
||||||
|
@ -163,7 +163,7 @@ Feature: Keyboard input
|
|||||||
Then the message "foo 3" should be shown
|
Then the message "foo 3" should be shown
|
||||||
And the message "foo 3" should be shown
|
And the message "foo 3" should be shown
|
||||||
|
|
||||||
# :test all tabs.mode_on_change modes
|
# test all tabs.mode_on_change modes
|
||||||
|
|
||||||
Scenario: mode on change normal
|
Scenario: mode on change normal
|
||||||
Given I set tabs.mode_on_change to normal
|
Given I set tabs.mode_on_change to normal
|
||||||
@ -173,8 +173,8 @@ Feature: Keyboard input
|
|||||||
And I open about:blank in a new tab
|
And I open about:blank in a new tab
|
||||||
Then "Entering mode KeyMode.insert (reason: command)" should be logged
|
Then "Entering mode KeyMode.insert (reason: command)" should be logged
|
||||||
And "Leaving mode KeyMode.insert (reason: tab changed)" should be logged
|
And "Leaving mode KeyMode.insert (reason: tab changed)" should be logged
|
||||||
And "normal: mode before tab change: insert." should be logged
|
And "Mode before tab change: insert (mode_on_change = normal)" should be logged
|
||||||
And "normal: mode after tab change: normal." should be logged
|
And "Mode after tab change: normal (mode_on_change = normal)" should be logged
|
||||||
|
|
||||||
Scenario: mode on change persist
|
Scenario: mode on change persist
|
||||||
Given I set tabs.mode_on_change to persist
|
Given I set tabs.mode_on_change to persist
|
||||||
@ -183,8 +183,9 @@ Feature: Keyboard input
|
|||||||
And I run :enter-mode insert
|
And I run :enter-mode insert
|
||||||
And I open about:blank in a new tab
|
And I open about:blank in a new tab
|
||||||
Then "Entering mode KeyMode.insert (reason: command)" should be logged
|
Then "Entering mode KeyMode.insert (reason: command)" should be logged
|
||||||
And "persist: mode before tab change: insert." should be logged
|
And "Leaving mode KeyMode.insert (reason: tab changed)" should not be logged
|
||||||
And "persist: mode after tab change: insert." should be logged
|
And "Mode before tab change: insert (mode_on_change = persist)" should be logged
|
||||||
|
And "Mode after tab change: insert (mode_on_change = persist)" should be logged
|
||||||
|
|
||||||
Scenario: mode on change restore
|
Scenario: mode on change restore
|
||||||
Given I set tabs.mode_on_change to restore
|
Given I set tabs.mode_on_change to restore
|
||||||
@ -195,11 +196,11 @@ Feature: Keyboard input
|
|||||||
And I run :enter-mode passthrough
|
And I run :enter-mode passthrough
|
||||||
And I run :tab-focus 1
|
And I run :tab-focus 1
|
||||||
Then "Entering mode KeyMode.insert (reason: command)" should be logged
|
Then "Entering mode KeyMode.insert (reason: command)" should be logged
|
||||||
And "restore: mode before tab change: insert." should be logged
|
And "Mode before tab change: insert (mode_on_change = restore)" should be logged
|
||||||
And "Entering mode KeyMode.normal (reason: restore)" should be logged
|
And "Entering mode KeyMode.normal (reason: restore)" should be logged
|
||||||
And "restore: mode after tab change: normal." should be logged
|
And "Mode after tab change: normal (mode_on_change = restore)" should be logged
|
||||||
And "Entering mode KeyMode.passthrough (reason: command)" should be logged
|
And "Entering mode KeyMode.passthrough (reason: command)" should be logged
|
||||||
And "restore: mode before tab change: passthrough." should be logged
|
And "Mode before tab change: passthrough (mode_on_change = restore)" should be logged
|
||||||
And "Entering mode KeyMode.insert (reason: restore)" should be logged
|
And "Entering mode KeyMode.insert (reason: restore)" should be logged
|
||||||
And "restore: mode after tab change: insert." should be logged
|
And "Mode after tab change: insert (mode_on_change = restore)" should be logged
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user