diff --git a/README.asciidoc b/README.asciidoc index f57f1a14f..2b36cacb8 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -157,9 +157,9 @@ Contributors, sorted by the number of commits in descending order: * Artur Shaik * Nathan Isom * Thorsten Wißmann +* Panagiotis Ktistakis * Kevin Velghe * Austin Anderson -* Panagiotis Ktistakis * Jimmy * Alexey "Averrin" Nabrodov * avk diff --git a/doc/help/commands.asciidoc b/doc/help/commands.asciidoc index 97896ae64..e9cb4571c 100644 --- a/doc/help/commands.asciidoc +++ b/doc/help/commands.asciidoc @@ -650,6 +650,8 @@ Syntax: +:set-cmd-text [*--space*] [*--append*] 'text'+ Preset the statusbar to some text. +You can use the `{url}` and `{url:pretty}` variables here which will get replaced by the encoded/decoded URL. + ==== positional arguments * +'text'+: The commandline to set. diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index 0133e14ba..cce6ea1db 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -1386,13 +1386,13 @@ KEY_DATA = collections.OrderedDict([ ('normal', collections.OrderedDict([ ('clear-keychain ;; search', ['']), ('set-cmd-text -s :open', ['o']), - ('set-cmd-text :open {url}', ['go']), + ('set-cmd-text :open {url:pretty}', ['go']), ('set-cmd-text -s :open -t', ['O']), - ('set-cmd-text :open -t {url}', ['gO']), + ('set-cmd-text :open -t {url:pretty}', ['gO']), ('set-cmd-text -s :open -b', ['xo']), - ('set-cmd-text :open -b {url}', ['xO']), + ('set-cmd-text :open -b {url:pretty}', ['xO']), ('set-cmd-text -s :open -w', ['wo']), - ('set-cmd-text :open -w {url}', ['wO']), + ('set-cmd-text :open -w {url:pretty}', ['wO']), ('open -t', ['ga', '']), ('open -w', ['']), ('tab-close', ['d', '']), diff --git a/qutebrowser/mainwindow/statusbar/command.py b/qutebrowser/mainwindow/statusbar/command.py index f44f35126..e00e4b2b4 100644 --- a/qutebrowser/mainwindow/statusbar/command.py +++ b/qutebrowser/mainwindow/statusbar/command.py @@ -19,14 +19,14 @@ """The commandline in the statusbar.""" -from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QSize +from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QSize from PyQt5.QtWidgets import QSizePolicy from qutebrowser.keyinput import modeman, modeparsers -from qutebrowser.commands import cmdexc, cmdutils -from qutebrowser.misc import cmdhistory +from qutebrowser.commands import cmdexc, cmdutils, runners +from qutebrowser.misc import cmdhistory, split from qutebrowser.misc import miscwidgets as misc -from qutebrowser.utils import usertypes, log, objreg, qtutils +from qutebrowser.utils import usertypes, log, objreg class Command(misc.MinimalLineEditMixin, misc.CommandLineEdit): @@ -95,6 +95,9 @@ class Command(misc.MinimalLineEditMixin, misc.CommandLineEdit): def set_cmd_text_command(self, text, space=False, append=False): """Preset the statusbar to some text. + You can use the `{url}` and `{url:pretty}` variables here which will get + replaced by the encoded/decoded URL. + // Wrapper for set_cmd_text to check the arguments and allow multiple @@ -105,24 +108,9 @@ class Command(misc.MinimalLineEditMixin, misc.CommandLineEdit): space: If given, a space is added to the end. append: If given, the text is appended to the current text. """ - tabbed_browser = objreg.get('tabbed-browser', scope='window', - window=self._win_id) - if '{url}' in text: - try: - url = tabbed_browser.current_url().toString( - QUrl.FullyEncoded | QUrl.RemovePassword) - except qtutils.QtValueError as e: - msg = "Current URL is invalid" - if e.reason: - msg += " ({})".format(e.reason) - msg += "!" - raise cmdexc.CommandError(msg) - # FIXME we currently replace the URL in any place in the arguments, - # rather than just replacing it if it is a dedicated argument. We - # could split the args, but then trailing spaces would be lost, so - # I'm not sure what's the best thing to do here - # https://github.com/The-Compiler/qutebrowser/issues/123 - text = text.replace('{url}', url) + args = split.simple_split(text) + args = runners.replace_variables(self._win_id, args) + text = ' '.join(args) if space: text += ' ' diff --git a/tests/integration/features/misc.feature b/tests/integration/features/misc.feature index 13a3c33c6..1356a3cf3 100644 --- a/tests/integration/features/misc.feature +++ b/tests/integration/features/misc.feature @@ -15,9 +15,21 @@ Feature: Various utility commands. Scenario: :set-cmd-text with URL replacement When I open data/hello.txt - When I run :set-cmd-text :message-info >{url}< + And I run :set-cmd-text :message-info {url} And I run :command-accept - Then the message ">http://localhost:*/hello.txt<" should be shown + Then the message "http://localhost:*/hello.txt" should be shown + + Scenario: :set-cmd-text with URL replacement with encoded spaces + When I open data/title with spaces.html + And I run :set-cmd-text :message-info {url} + And I run :command-accept + Then the message "http://localhost:*/title%20with%20spaces.html" should be shown + + Scenario: :set-cmd-text with URL replacement with decoded spaces + When I open data/title with spaces.html + And I run :set-cmd-text :message-info "> {url:pretty} <" + And I run :command-accept + Then the message "> http://localhost:*/title with spaces.html <" should be shown Scenario: :set-cmd-text with -s and -a When I run :set-cmd-text -s :message-info "foo @@ -342,7 +354,7 @@ Feature: Various utility commands. Scenario: Running :pyeval with --quiet When I run :debug-pyeval --quiet 1+1 Then "pyeval output: 2" should be logged - + ## https://github.com/The-Compiler/qutebrowser/issues/504 Scenario: Focusing download widget via Tab