diff --git a/qutebrowser/browser/downloads.py b/qutebrowser/browser/downloads.py index c064d700e..94dc2b471 100644 --- a/qutebrowser/browser/downloads.py +++ b/qutebrowser/browser/downloads.py @@ -166,6 +166,7 @@ def get_filename_question(*, suggested_filename, url, parent=None): q.title = "Save file to:" q.text = "Please enter a location for {}".format( html.escape(url.toDisplayString())) + q.yank_text = url.toString() q.mode = usertypes.PromptMode.download q.completed.connect(q.deleteLater) q.default = _path_suggestion(suggested_filename) diff --git a/qutebrowser/mainwindow/prompt.py b/qutebrowser/mainwindow/prompt.py index 3d21a52e0..f9c685c86 100644 --- a/qutebrowser/mainwindow/prompt.py +++ b/qutebrowser/mainwindow/prompt.py @@ -422,6 +422,18 @@ class PromptContainer(QWidget): except UnsupportedOperationError: pass + @cmdutils.register(instance='prompt-container', scope='window', + modes=[usertypes.KeyMode.prompt]) + def prompt_yank(self): + """Yank URLs or other data in prompts.""" + question = self._prompt.question + s = None + if question and hasattr(question, 'yank_text'): + s = question.yank_text + utils.set_clipboard(s) + message.info("Yanked download URL to clipboard: {}".format(s)) + + class LineEdit(QLineEdit): @@ -721,6 +733,7 @@ class DownloadFilenamePrompt(FilenamePrompt): ('prompt-accept', 'Accept'), ('leave-mode', 'Abort'), ('prompt-open-download', "Open download"), + ('prompt-yank', "Yank URLs in prompts"), ] return cmds diff --git a/qutebrowser/utils/usertypes.py b/qutebrowser/utils/usertypes.py index aad685d07..da1c2f00b 100644 --- a/qutebrowser/utils/usertypes.py +++ b/qutebrowser/utils/usertypes.py @@ -266,6 +266,7 @@ class Question(QObject): For user_pwd, a default username as string. title: The question title to show. text: The prompt text to display to the user. + yank_text: The prompt text available to prompt-yank command. answer: The value the user entered (as password for user_pwd). is_aborted: Whether the question was aborted. interrupted: Whether the question was interrupted by another one. @@ -296,6 +297,7 @@ class Question(QObject): self.default = None self.title = None self.text = None + self.yank_text = None self.answer = None self.is_aborted = False self.interrupted = False