diff --git a/doc/help/commands.asciidoc b/doc/help/commands.asciidoc index 1d7ac608d..b469104e6 100644 --- a/doc/help/commands.asciidoc +++ b/doc/help/commands.asciidoc @@ -743,7 +743,9 @@ This tries to automatically click on typical _Previous Page_ or _Next Page_ link - `next`: Open a _next_ link. - `up`: Go up a level in the current URL. - `increment`: Increment the last number in the URL. + Uses the link:settings.html#url.incdec_segments[url.incdec_segments] config option. - `decrement`: Decrement the last number in the URL. + Uses the link:settings.html#url.incdec_segments[url.incdec_segments] config option. diff --git a/doc/help/settings.asciidoc b/doc/help/settings.asciidoc index 73aae6fb2..67ede4fa8 100644 --- a/doc/help/settings.asciidoc +++ b/doc/help/settings.asciidoc @@ -2994,6 +2994,7 @@ Type: <> Valid values: * +host+ + * +port+ * +path+ * +query+ * +anchor+ diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index 6ddb72636..6eaa3e167 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -638,7 +638,9 @@ class CommandDispatcher: - `next`: Open a _next_ link. - `up`: Go up a level in the current URL. - `increment`: Increment the last number in the URL. + Uses the link:settings.html#url.incdec_segments[url.incdec_segments] config option. - `decrement`: Decrement the last number in the URL. + Uses the link:settings.html#url.incdec_segments[url.incdec_segments] config option. tab: Open in a new tab. bg: Open in a background tab. diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index a118a8b59..2d99af729 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -1418,7 +1418,7 @@ url.default_page: url.incdec_segments: type: name: FlagList - valid_values: [host, path, query, anchor] + valid_values: [host, port, path, query, anchor] default: [path, query] desc: URL segments where `:navigate increment/decrement` will search for a number. diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py index 97e03c072..88853483e 100644 --- a/qutebrowser/utils/urlutils.py +++ b/qutebrowser/utils/urlutils.py @@ -537,7 +537,7 @@ def incdec_number(url, incdec, count=1, segments=None): incdec: Either 'increment' or 'decrement' count: The number to increment or decrement by segments: A set of URL segments to search. Valid segments are: - 'host', 'path', 'query', 'anchor'. + 'host', 'port', 'path', 'query', 'anchor'. Default: {'path', 'query'} Return: @@ -550,7 +550,7 @@ def incdec_number(url, incdec, count=1, segments=None): if segments is None: segments = {'path', 'query'} - valid_segments = {'host', 'path', 'query', 'anchor'} + valid_segments = {'host', 'port', 'path', 'query', 'anchor'} if segments - valid_segments: extra_elements = segments - valid_segments raise IncDecError("Invalid segments: {}".format( @@ -561,6 +561,7 @@ def incdec_number(url, incdec, count=1, segments=None): # Order as they appear in a URL segment_modifiers = [ ('host', url.host, url.setHost), + ('port', lambda: str(url.port()) if url.port() > 0 else '', lambda x: url.setPort(int(x))), ('path', url.path, url.setPath), ('query', url.query, url.setQuery), ('anchor', url.fragment, url.setFragment), diff --git a/tests/unit/utils/test_urlutils.py b/tests/unit/utils/test_urlutils.py index 4d9b3ba0a..de83ba7bf 100644 --- a/tests/unit/utils/test_urlutils.py +++ b/tests/unit/utils/test_urlutils.py @@ -622,6 +622,23 @@ class TestIncDecNumber: base_url, incdec, segments={'host', 'path', 'query', 'anchor'}) assert new_url == expected_url + def test_incdec_port(self): + """Test incdec_number with port.""" + + base_url = QUrl('http://localhost:8000') + new_url = urlutils.incdec_number( + base_url, 'increment', segments={'port'}) + assert new_url == QUrl('http://localhost:8001') + new_url = urlutils.incdec_number( + base_url, 'decrement', segments={'port'}) + assert new_url == QUrl('http://localhost:7999') + + def test_incdec_port_default(self): + """Test that a default port (with url.port() == -1) is not touched.""" + base_url = QUrl('http://localhost') + with pytest.raises(urlutils.IncDecError): + urlutils.incdec_number(base_url, 'increment', segments={'port'}) + @pytest.mark.parametrize('incdec', ['increment', 'decrement']) @pytest.mark.parametrize('value', [ '{}foo', 'foo{}', 'foo{}bar', '42foo{}'