From 08278138c4bebdf02c6c46fe0372b0cea7851657 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sat, 3 Nov 2018 07:54:37 +0100 Subject: [PATCH] Add :yank markdown --- doc/changelog.asciidoc | 2 ++ doc/help/commands.asciidoc | 1 + doc/help/settings.asciidoc | 2 ++ qutebrowser/browser/commands.py | 11 +++++++++-- qutebrowser/config/configdata.yml | 2 ++ tests/end2end/features/yankpaste.feature | 7 +++++++ 6 files changed, 23 insertions(+), 2 deletions(-) diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc index 03d3e75b7..93cffe40c 100644 --- a/doc/changelog.asciidoc +++ b/doc/changelog.asciidoc @@ -32,6 +32,8 @@ Added dict/list setting. - New `hints.selectors` setting which allows to configure what CSS selectors are used for hints, and also allows adding custom hint groups. +- New `:yank markdown` feature which yanks the current URL and title in + markdown format. Changed ~~~~~~~ diff --git a/doc/help/commands.asciidoc b/doc/help/commands.asciidoc index 88c738729..13cf0a790 100644 --- a/doc/help/commands.asciidoc +++ b/doc/help/commands.asciidoc @@ -1472,6 +1472,7 @@ Yank something to the clipboard or primary selection. - `title`: The current page's title. - `domain`: The current scheme, domain, and port number. - `selection`: The selection under the cursor. + - `markdown`: Yank title and URL in markdown format. diff --git a/doc/help/settings.asciidoc b/doc/help/settings.asciidoc index 348baf7ca..b7cb0349b 100644 --- a/doc/help/settings.asciidoc +++ b/doc/help/settings.asciidoc @@ -640,10 +640,12 @@ Default: * +pass:[xO]+: +pass:[set-cmd-text :open -b -r {url:pretty}]+ * +pass:[xo]+: +pass:[set-cmd-text -s :open -b]+ * +pass:[yD]+: +pass:[yank domain -s]+ +* +pass:[yM]+: +pass:[yank markdown -s]+ * +pass:[yP]+: +pass:[yank pretty-url -s]+ * +pass:[yT]+: +pass:[yank title -s]+ * +pass:[yY]+: +pass:[yank -s]+ * +pass:[yd]+: +pass:[yank domain]+ +* +pass:[ym]+: +pass:[yank markdown]+ * +pass:[yp]+: +pass:[yank pretty-url]+ * +pass:[yt]+: +pass:[yank title]+ * +pass:[yy]+: +pass:[yank]+ diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index a3f301ae5..096a324d2 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -796,7 +796,7 @@ class CommandDispatcher: def _yank_url(self, what): """Helper method for yank() to get the URL to copy.""" - assert what in ['url', 'pretty-url'], what + assert what in ['url', 'pretty-url', 'markdown'], what flags = QUrl.RemovePassword if what == 'pretty-url': flags |= QUrl.DecodeReserved @@ -816,7 +816,7 @@ class CommandDispatcher: @cmdutils.register(instance='command-dispatcher', scope='window') @cmdutils.argument('what', choices=['selection', 'url', 'pretty-url', - 'title', 'domain']) + 'title', 'domain', 'markdown']) def yank(self, what='url', sel=False, keep=False, quiet=False): """Yank something to the clipboard or primary selection. @@ -828,6 +828,7 @@ class CommandDispatcher: - `title`: The current page's title. - `domain`: The current scheme, domain, and port number. - `selection`: The selection under the cursor. + - `markdown`: Yank title and URL in markdown format. sel: Use the primary selection instead of the clipboard. keep: Stay in visual mode after yanking the selection. @@ -853,6 +854,12 @@ class CommandDispatcher: caret = self._current_widget().caret caret.selection(callback=_selection_callback) return + elif what == 'markdown': + idx = self._current_index() + title = self._tabbed_browser.widget.page_title(idx) + url = self._yank_url(what) + s = '[{}]({})'.format(title, url) + what = 'markdown URL' # For printing else: # pragma: no cover raise ValueError("Invalid value {!r} for `what'.".format(what)) diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index ac556f3fb..e0bad5ba9 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -2615,6 +2615,8 @@ bindings.default: yD: yank domain -s yp: yank pretty-url yP: yank pretty-url -s + ym: yank markdown + yM: yank markdown -s pp: open -- {clipboard} pP: open -- {primary} Pp: open -t -- {clipboard} diff --git a/tests/end2end/features/yankpaste.feature b/tests/end2end/features/yankpaste.feature index c6f9b572b..806bbd2d2 100644 --- a/tests/end2end/features/yankpaste.feature +++ b/tests/end2end/features/yankpaste.feature @@ -41,6 +41,13 @@ Feature: Yanking and pasting. Then the message "Yanked title to clipboard: Test title" should be shown And the clipboard should contain "Test title" + Scenario: Yanking markdown URL to clipboard + When I open data/title.html + And I wait for regex "Changing title for idx \d to 'Test title'" in the log + And I run :yank markdown + Then the message "Yanked markdown URL to clipboard: *" should be shown + And the clipboard should contain "[Test title](http://localhost:(port)/data/title.html)" + Scenario: Yanking domain to clipboard When I open data/title.html And I run :yank domain