Add a value argument to :prompt-accept
This commit is contained in:
parent
b45f940e72
commit
d579697245
@ -111,6 +111,8 @@ Changed
|
|||||||
when using `--backend webengine`.
|
when using `--backend webengine`.
|
||||||
- `content -> javascript-can-open-windows` got renamed to
|
- `content -> javascript-can-open-windows` got renamed to
|
||||||
`javascript-can-open-windows-automatically`.
|
`javascript-can-open-windows-automatically`.
|
||||||
|
- `:prompt-accept` now optionally accepts a value which overrides the one
|
||||||
|
entered in the input box.
|
||||||
|
|
||||||
Deprecated
|
Deprecated
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
@ -1219,8 +1219,14 @@ The editor which should be launched can be configured via the `general -> editor
|
|||||||
|
|
||||||
[[prompt-accept]]
|
[[prompt-accept]]
|
||||||
=== prompt-accept
|
=== prompt-accept
|
||||||
|
Syntax: +:prompt-accept ['value']+
|
||||||
|
|
||||||
Accept the current prompt.
|
Accept the current prompt.
|
||||||
|
|
||||||
|
==== positional arguments
|
||||||
|
* +'value'+: If given, uses this value instead of the entered one. For boolean prompts, "yes"/"no" are accepted as value.
|
||||||
|
|
||||||
|
|
||||||
[[prompt-no]]
|
[[prompt-no]]
|
||||||
=== prompt-no
|
=== prompt-no
|
||||||
Answer no to a yes/no prompt.
|
Answer no to a yes/no prompt.
|
||||||
|
@ -26,7 +26,7 @@ from PyQt5.QtCore import pyqtSlot, pyqtSignal, QTimer, QObject
|
|||||||
from PyQt5.QtWidgets import QLineEdit
|
from PyQt5.QtWidgets import QLineEdit
|
||||||
|
|
||||||
from qutebrowser.keyinput import modeman
|
from qutebrowser.keyinput import modeman
|
||||||
from qutebrowser.commands import cmdutils
|
from qutebrowser.commands import cmdutils, cmdexc
|
||||||
from qutebrowser.utils import usertypes, log, qtutils, objreg, utils
|
from qutebrowser.utils import usertypes, log, qtutils, objreg, utils
|
||||||
|
|
||||||
|
|
||||||
@ -236,49 +236,65 @@ class Prompter(QObject):
|
|||||||
@cmdutils.register(instance='prompter', hide=True, scope='window',
|
@cmdutils.register(instance='prompter', hide=True, scope='window',
|
||||||
modes=[usertypes.KeyMode.prompt,
|
modes=[usertypes.KeyMode.prompt,
|
||||||
usertypes.KeyMode.yesno])
|
usertypes.KeyMode.yesno])
|
||||||
def prompt_accept(self):
|
def prompt_accept(self, value=None):
|
||||||
"""Accept the current prompt.
|
"""Accept the current prompt.
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
This executes the next action depending on the question mode, e.g. asks
|
This executes the next action depending on the question mode, e.g. asks
|
||||||
for the password or leaves the mode.
|
for the password or leaves the mode.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
value: If given, uses this value instead of the entered one.
|
||||||
|
For boolean prompts, "yes"/"no" are accepted as value.
|
||||||
"""
|
"""
|
||||||
prompt = objreg.get('prompt', scope='window', window=self._win_id)
|
prompt = objreg.get('prompt', scope='window', window=self._win_id)
|
||||||
|
text = value if value is not None else prompt.lineedit.text()
|
||||||
|
|
||||||
if (self._question.mode == usertypes.PromptMode.user_pwd and
|
if (self._question.mode == usertypes.PromptMode.user_pwd and
|
||||||
self._question.user is None):
|
self._question.user is None):
|
||||||
# User just entered a username
|
# User just entered a username
|
||||||
self._question.user = prompt.lineedit.text()
|
self._question.user = text
|
||||||
prompt.txt.setText("Password:")
|
prompt.txt.setText("Password:")
|
||||||
prompt.lineedit.clear()
|
prompt.lineedit.clear()
|
||||||
prompt.lineedit.setEchoMode(QLineEdit.Password)
|
prompt.lineedit.setEchoMode(QLineEdit.Password)
|
||||||
elif self._question.mode == usertypes.PromptMode.user_pwd:
|
elif self._question.mode == usertypes.PromptMode.user_pwd:
|
||||||
# User just entered a password
|
# User just entered a password
|
||||||
password = prompt.lineedit.text()
|
self._question.answer = AuthTuple(self._question.user, text)
|
||||||
self._question.answer = AuthTuple(self._question.user, password)
|
|
||||||
modeman.maybe_leave(self._win_id, usertypes.KeyMode.prompt,
|
modeman.maybe_leave(self._win_id, usertypes.KeyMode.prompt,
|
||||||
'prompt accept')
|
'prompt accept')
|
||||||
self._question.done()
|
self._question.done()
|
||||||
elif self._question.mode == usertypes.PromptMode.text:
|
elif self._question.mode == usertypes.PromptMode.text:
|
||||||
# User just entered text.
|
# User just entered text.
|
||||||
self._question.answer = prompt.lineedit.text()
|
self._question.answer = text
|
||||||
modeman.maybe_leave(self._win_id, usertypes.KeyMode.prompt,
|
modeman.maybe_leave(self._win_id, usertypes.KeyMode.prompt,
|
||||||
'prompt accept')
|
'prompt accept')
|
||||||
self._question.done()
|
self._question.done()
|
||||||
elif self._question.mode == usertypes.PromptMode.download:
|
elif self._question.mode == usertypes.PromptMode.download:
|
||||||
# User just entered a path for a download.
|
# User just entered a path for a download.
|
||||||
target = usertypes.FileDownloadTarget(prompt.lineedit.text())
|
target = usertypes.FileDownloadTarget(text)
|
||||||
self._question.answer = target
|
self._question.answer = target
|
||||||
modeman.maybe_leave(self._win_id, usertypes.KeyMode.prompt,
|
modeman.maybe_leave(self._win_id, usertypes.KeyMode.prompt,
|
||||||
'prompt accept')
|
'prompt accept')
|
||||||
self._question.done()
|
self._question.done()
|
||||||
elif self._question.mode == usertypes.PromptMode.yesno:
|
elif self._question.mode == usertypes.PromptMode.yesno:
|
||||||
# User wants to accept the default of a yes/no question.
|
# User wants to accept the default of a yes/no question.
|
||||||
|
if value is None:
|
||||||
self._question.answer = self._question.default
|
self._question.answer = self._question.default
|
||||||
|
elif value == 'yes':
|
||||||
|
self._question.answer = True
|
||||||
|
elif value == 'no':
|
||||||
|
self._question.answer = False
|
||||||
|
else:
|
||||||
|
raise cmdexc.CommandError("Invalid value {} - expected "
|
||||||
|
"yes/no!".format(value))
|
||||||
modeman.maybe_leave(self._win_id, usertypes.KeyMode.yesno,
|
modeman.maybe_leave(self._win_id, usertypes.KeyMode.yesno,
|
||||||
'yesno accept')
|
'yesno accept')
|
||||||
self._question.done()
|
self._question.done()
|
||||||
elif self._question.mode == usertypes.PromptMode.alert:
|
elif self._question.mode == usertypes.PromptMode.alert:
|
||||||
|
if value is not None:
|
||||||
|
raise cmdexc.CommandError("No value is permitted with alert "
|
||||||
|
"prompts!")
|
||||||
# User acknowledged an alert
|
# User acknowledged an alert
|
||||||
self._question.answer = None
|
self._question.answer = None
|
||||||
modeman.maybe_leave(self._win_id, usertypes.KeyMode.prompt,
|
modeman.maybe_leave(self._win_id, usertypes.KeyMode.prompt,
|
||||||
|
@ -218,3 +218,34 @@ Feature: Prompts
|
|||||||
"authenticated": true,
|
"authenticated": true,
|
||||||
"user": "user"
|
"user": "user"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# :prompt-accept with value argument
|
||||||
|
|
||||||
|
Scenario: Javascript alert with value
|
||||||
|
When I set content -> ignore-javascript-alert to false
|
||||||
|
And I open data/prompt/jsalert.html
|
||||||
|
And I run :click-element id button
|
||||||
|
And I wait for a prompt
|
||||||
|
And I run :prompt-accept foobar
|
||||||
|
And I run :prompt-accept
|
||||||
|
Then the javascript message "Alert done" should be logged
|
||||||
|
And the error "No value is permitted with alert prompts!" should be shown
|
||||||
|
|
||||||
|
@pyqt>=5.3.1
|
||||||
|
Scenario: Javascript prompt with value
|
||||||
|
When I set content -> ignore-javascript-prompt to false
|
||||||
|
And I open data/prompt/jsprompt.html
|
||||||
|
And I run :click-element id button
|
||||||
|
And I wait for a prompt
|
||||||
|
And I press the keys "prompt test"
|
||||||
|
And I run :prompt-accept "overridden value"
|
||||||
|
Then the javascript message "Prompt reply: overridden value" should be logged
|
||||||
|
|
||||||
|
Scenario: Javascript confirm with invalid value
|
||||||
|
When I open data/prompt/jsconfirm.html
|
||||||
|
And I run :click-element id button
|
||||||
|
And I wait for a prompt
|
||||||
|
And I run :prompt-accept nope
|
||||||
|
And I run :prompt-accept yes
|
||||||
|
Then the javascript message "confirm reply: true" should be logged
|
||||||
|
And the error "Invalid value nope - expected yes/no!" should be shown
|
||||||
|
Loading…
Reference in New Issue
Block a user