Fix prompts while in command mode

This commit is contained in:
Florian Bruhin 2016-11-04 06:47:56 +01:00
parent dd0ce8fe3b
commit a16d41333b
2 changed files with 31 additions and 18 deletions

View File

@ -201,16 +201,20 @@ class PromptQueue(QObject):
@pyqtSlot(usertypes.KeyMode) @pyqtSlot(usertypes.KeyMode)
def _on_mode_left(self, mode): def _on_mode_left(self, mode):
"""Abort question when a mode was left.""" """Abort question when a prompt mode was left."""
if self._question is not None: if mode not in [usertypes.KeyMode.prompt, usertypes.KeyMode.yesno]:
log.prompt.debug("Left mode {}, hiding {}".format( return
mode, self._question)) if self._question is None:
self.show_prompts.emit(None) return
if self._question.answer is None and not self._question.is_aborted:
log.prompt.debug("Cancelling {} because {} was left".format( log.prompt.debug("Left mode {}, hiding {}".format(
self._question, mode)) mode, self._question))
self._question.cancel() self.show_prompts.emit(None)
self._question = None if self._question.answer is None and not self._question.is_aborted:
log.prompt.debug("Cancelling {} because {} was left".format(
self._question, mode))
self._question.cancel()
self._question = None
class PromptContainer(QWidget): class PromptContainer(QWidget):
@ -332,14 +336,15 @@ class PromptContainer(QWidget):
This ensures no matter where a prompt was answered, we leave the prompt This ensures no matter where a prompt was answered, we leave the prompt
mode and dispose of the prompt object in every window. mode and dispose of the prompt object in every window.
""" """
if mode in [usertypes.KeyMode.prompt, usertypes.KeyMode.yesno]: if mode not in [usertypes.KeyMode.prompt, usertypes.KeyMode.yesno]:
modeman.maybe_leave(self._win_id, mode, 'left in other window') return
item = self._layout.takeAt(0) modeman.maybe_leave(self._win_id, mode, 'left in other window')
if item is not None: item = self._layout.takeAt(0)
widget = item.widget() if item is not None:
log.prompt.debug("Deleting prompt {}".format(widget)) widget = item.widget()
widget.hide() log.prompt.debug("Deleting prompt {}".format(widget))
widget.deleteLater() widget.hide()
widget.deleteLater()
@cmdutils.register(instance='prompt-container', hide=True, scope='window', @cmdutils.register(instance='prompt-container', hide=True, scope='window',
modes=[usertypes.KeyMode.prompt, modes=[usertypes.KeyMode.prompt,

View File

@ -419,3 +419,11 @@ Feature: Prompts
And I run :prompt-item-focus next And I run :prompt-item-focus next
And I run :prompt-accept test-prompt-item-focus And I run :prompt-accept test-prompt-item-focus
Then "Added quickmark test-prompt-item-focus for *" should be logged Then "Added quickmark test-prompt-item-focus for *" should be logged
Scenario: Getting question in command mode
When I open data/hello.txt
And I run :later 500 quickmark-save
And I run :set-cmd-text :
And I wait for a prompt
And I run :prompt-accept prompt-in-command-mode
Then "Added quickmark prompt-in-command-mode for *" should be logged