hook into modeman's entered and left signals
- save previous mode when a prompt is shown - restore previous mode when finished prompting
This commit is contained in:
parent
6214c38d7e
commit
fbb78f1133
@ -115,6 +115,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
|
||||||
_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
|
||||||
@ -138,6 +139,7 @@ class ModeManager(QObject):
|
|||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self._win_id = win_id
|
self._win_id = win_id
|
||||||
self._parsers = {}
|
self._parsers = {}
|
||||||
|
self._prev_mode = usertypes.KeyMode.normal
|
||||||
self.mode = usertypes.KeyMode.normal
|
self.mode = usertypes.KeyMode.normal
|
||||||
self._releaseevents_to_pass = set()
|
self._releaseevents_to_pass = set()
|
||||||
|
|
||||||
@ -247,6 +249,11 @@ 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:
|
||||||
|
# save previous mode when being prompted
|
||||||
|
self._prev_mode = self.mode
|
||||||
|
else:
|
||||||
|
self._prev_mode = usertypes.KeyMode.normal
|
||||||
self.mode = mode
|
self.mode = mode
|
||||||
self.entered.emit(mode, self._win_id)
|
self.entered.emit(mode, self._win_id)
|
||||||
|
|
||||||
@ -266,12 +273,6 @@ class ModeManager(QObject):
|
|||||||
usertypes.KeyMode.yesno, usertypes.KeyMode.prompt]:
|
usertypes.KeyMode.yesno, usertypes.KeyMode.prompt]:
|
||||||
raise cmdexc.CommandError(
|
raise cmdexc.CommandError(
|
||||||
"Mode {} can't be entered manually!".format(mode))
|
"Mode {} can't be entered manually!".format(mode))
|
||||||
|
|
||||||
if (config.val.tabs.mode_on_change == 'restore' and
|
|
||||||
m.name in ['insert', 'passthrough']):
|
|
||||||
window = objreg.get('main-window', scope='window',
|
|
||||||
window=self._win_id)
|
|
||||||
window.tabbed_browser.currentWidget().data.input_mode = m
|
|
||||||
self.enter(m, 'command')
|
self.enter(m, 'command')
|
||||||
|
|
||||||
@pyqtSlot(usertypes.KeyMode, str, bool)
|
@pyqtSlot(usertypes.KeyMode, str, bool)
|
||||||
@ -299,6 +300,9 @@ 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]:
|
||||||
|
self.enter(self._prev_mode,
|
||||||
|
reason='restore mode before {}'.format(mode.name))
|
||||||
|
|
||||||
@cmdutils.register(instance='mode-manager', name='leave-mode',
|
@cmdutils.register(instance='mode-manager', name='leave-mode',
|
||||||
not_modes=[usertypes.KeyMode.normal], scope='window')
|
not_modes=[usertypes.KeyMode.normal], scope='window')
|
||||||
@ -306,11 +310,6 @@ class ModeManager(QObject):
|
|||||||
"""Leave the mode we're currently in."""
|
"""Leave the mode we're currently in."""
|
||||||
if self.mode == usertypes.KeyMode.normal:
|
if self.mode == usertypes.KeyMode.normal:
|
||||||
raise ValueError("Can't leave normal mode!")
|
raise ValueError("Can't leave normal mode!")
|
||||||
if config.val.tabs.mode_on_change == 'restore':
|
|
||||||
window = objreg.get('main-window', scope='window',
|
|
||||||
window=self._win_id)
|
|
||||||
tab = window.tabbed_browser.currentWidget()
|
|
||||||
tab.data.input_mode = usertypes.KeyMode.normal
|
|
||||||
self.leave(self.mode, 'leave current')
|
self.leave(self.mode, 'leave current')
|
||||||
|
|
||||||
def eventFilter(self, event):
|
def eventFilter(self, event):
|
||||||
|
@ -484,6 +484,7 @@ class MainWindow(QWidget):
|
|||||||
self.tabbed_browser.cur_fullscreen_requested.connect(status.maybe_hide)
|
self.tabbed_browser.cur_fullscreen_requested.connect(status.maybe_hide)
|
||||||
|
|
||||||
# command input / completion
|
# command input / completion
|
||||||
|
mode_manager.entered.connect(self.tabbed_browser.on_mode_entered)
|
||||||
mode_manager.left.connect(self.tabbed_browser.on_mode_left)
|
mode_manager.left.connect(self.tabbed_browser.on_mode_left)
|
||||||
cmd.clear_completion_selection.connect(
|
cmd.clear_completion_selection.connect(
|
||||||
completion_obj.on_clear_completion_selection)
|
completion_obj.on_clear_completion_selection)
|
||||||
|
@ -631,6 +631,14 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
if config.val.tabs.tabs_are_windows:
|
if config.val.tabs.tabs_are_windows:
|
||||||
self.window().setWindowIcon(icon)
|
self.window().setWindowIcon(icon)
|
||||||
|
|
||||||
|
@pyqtSlot(usertypes.KeyMode)
|
||||||
|
def on_mode_entered(self, mode):
|
||||||
|
"""Save input mode when tabs.mode_on_change = restore."""
|
||||||
|
input_modes = [usertypes.KeyMode.insert, usertypes.KeyMode.passthrough]
|
||||||
|
if (mode in input_modes and
|
||||||
|
config.val.tabs.mode_on_change == 'restore'):
|
||||||
|
self.currentWidget().data.input_mode = mode
|
||||||
|
|
||||||
@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."""
|
||||||
@ -642,6 +650,8 @@ class TabbedBrowser(tabwidget.TabWidget):
|
|||||||
if widget is None:
|
if widget is None:
|
||||||
return
|
return
|
||||||
widget.setFocus()
|
widget.setFocus()
|
||||||
|
elif config.val.tabs.mode_on_change == 'restore':
|
||||||
|
self.currentWidget().data.input_mode = usertypes.KeyMode.normal
|
||||||
|
|
||||||
@pyqtSlot(int)
|
@pyqtSlot(int)
|
||||||
def on_current_changed(self, idx):
|
def on_current_changed(self, idx):
|
||||||
|
Loading…
Reference in New Issue
Block a user