From a98a6ac0c8eac0a6f55f0b7405bddbf8a8dfbd0e Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Wed, 28 Jun 2017 21:42:50 +0200 Subject: [PATCH 01/17] travis: Write a sane sources.list Also updates nodejs --- scripts/dev/ci/travis_install.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/scripts/dev/ci/travis_install.sh b/scripts/dev/ci/travis_install.sh index 0ada134c1..9bcb5e07c 100644 --- a/scripts/dev/ci/travis_install.sh +++ b/scripts/dev/ci/travis_install.sh @@ -43,6 +43,12 @@ travis_retry() { } apt_install() { + sudo tee /etc/apt/sources.list < Date: Wed, 28 Jun 2017 22:41:08 +0200 Subject: [PATCH 02/17] Fix :undo documentation See #2759 --- doc/help/commands.asciidoc | 4 ++-- qutebrowser/browser/commands.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/help/commands.asciidoc b/doc/help/commands.asciidoc index c3ff94d35..05bf3ad93 100644 --- a/doc/help/commands.asciidoc +++ b/doc/help/commands.asciidoc @@ -85,7 +85,7 @@ It is possible to run or bind multiple commands by separating them with `;;`. |<>|Pin/Unpin the current/[count]th tab. |<>|Switch to the previous tab, or switch [count] tabs back. |<>|Unbind a keychain. -|<>|Re-open a closed tab (optionally skipping [count] closed tabs). +|<>|Re-open a closed tab. |<>|Show the source of the current page in a new tab. |<>|Close all windows except for the current one. |<>|Save open pages and quit. @@ -936,7 +936,7 @@ Unbind a keychain. [[undo]] === undo -Re-open a closed tab (optionally skipping [count] closed tabs). +Re-open a closed tab. [[view-source]] === view-source diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index e0b89c693..3d8516fe2 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -932,7 +932,7 @@ class CommandDispatcher: @cmdutils.register(instance='command-dispatcher', scope='window') def undo(self): - """Re-open a closed tab (optionally skipping [count] closed tabs).""" + """Re-open a closed tab.""" try: self._tabbed_browser.undo() except IndexError: From 302961a86aa0ba2a2998e8c21e0319f4f4a91f96 Mon Sep 17 00:00:00 2001 From: Jay Kamat Date: Wed, 28 Jun 2017 21:15:49 -0700 Subject: [PATCH 03/17] Refactor set_tab_pinned to take a tab widget. See #2759 --- qutebrowser/browser/commands.py | 9 +++++++-- qutebrowser/mainwindow/tabbedbrowser.py | 2 +- qutebrowser/mainwindow/tabwidget.py | 9 +++++---- qutebrowser/misc/sessions.py | 2 +- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index 3d8516fe2..54ee0d53e 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -282,7 +282,12 @@ class CommandDispatcher: to_pin = not tab.data.pinned tab_index = self._current_index() if count is None else count - 1 cmdutils.check_overflow(tab_index + 1, 'int') - self._tabbed_browser.set_tab_pinned(tab_index, to_pin) + tab = self._cntwidget(count) + + if tab is None: + raise cmdexc.CommandError("Unable to find tab '{}'.".format(count)) + + self._tabbed_browser.set_tab_pinned(tab, to_pin) @cmdutils.register(instance='command-dispatcher', name='open', maxsplit=0, scope='window') @@ -515,7 +520,7 @@ class CommandDispatcher: newtab.data.keep_icon = True newtab.history.deserialize(history) newtab.zoom.set_factor(curtab.zoom.factor()) - new_tabbed_browser.set_tab_pinned(idx, curtab.data.pinned) + new_tabbed_browser.set_tab_pinned(newtab, curtab.data.pinned) return newtab @cmdutils.register(instance='command-dispatcher', scope='window') diff --git a/qutebrowser/mainwindow/tabbedbrowser.py b/qutebrowser/mainwindow/tabbedbrowser.py index e0468330e..94508ab63 100644 --- a/qutebrowser/mainwindow/tabbedbrowser.py +++ b/qutebrowser/mainwindow/tabbedbrowser.py @@ -342,7 +342,7 @@ class TabbedBrowser(tabwidget.TabWidget): newtab = self.tabopen(url, background=False, idx=idx) newtab.history.deserialize(history_data) - self.set_tab_pinned(idx, pinned) + self.set_tab_pinned(newtab, pinned) @pyqtSlot('QUrl', bool) def openurl(self, url, newtab): diff --git a/qutebrowser/mainwindow/tabwidget.py b/qutebrowser/mainwindow/tabwidget.py index 2c4eb6eab..c7823f84e 100644 --- a/qutebrowser/mainwindow/tabwidget.py +++ b/qutebrowser/mainwindow/tabwidget.py @@ -26,7 +26,7 @@ from PyQt5.QtCore import (pyqtSignal, pyqtSlot, Qt, QSize, QRect, QPoint, QTimer, QUrl) from PyQt5.QtWidgets import (QTabWidget, QTabBar, QSizePolicy, QCommonStyle, QStyle, QStylePainter, QStyleOptionTab, - QStyleFactory) + QStyleFactory, QWidget) from PyQt5.QtGui import QIcon, QPalette, QColor from qutebrowser.utils import qtutils, objreg, utils, usertypes, log @@ -94,17 +94,18 @@ class TabWidget(QTabWidget): bar.set_tab_data(idx, 'indicator-color', color) bar.update(bar.tabRect(idx)) - def set_tab_pinned(self, idx, pinned, *, loading=False): + def set_tab_pinned(self, tab: QWidget, + pinned: bool, *, loading: bool = False) -> None: """Set the tab status as pinned. Args: - idx: The tab index. + tab: The tab to pin pinned: Pinned tab state to set. loading: Whether to ignore current data state when counting pinned_count. """ bar = self.tabBar() - tab = self.widget(idx) + idx = self.indexOf(tab) # Only modify pinned_count if we had a change # always modify pinned_count if we are loading diff --git a/qutebrowser/misc/sessions.py b/qutebrowser/misc/sessions.py index 5ce4ee66d..26656e1ee 100644 --- a/qutebrowser/misc/sessions.py +++ b/qutebrowser/misc/sessions.py @@ -406,7 +406,7 @@ class SessionManager(QObject): tab_to_focus = i if new_tab.data.pinned: tabbed_browser.set_tab_pinned( - i, new_tab.data.pinned, loading=True) + new_tab, new_tab.data.pinned, loading=True) if tab_to_focus is not None: tabbed_browser.setCurrentIndex(tab_to_focus) if win.get('active', False): From d132b6ed71efa0f985b74ac51a2a91b66fc1f50e Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 29 Jun 2017 22:39:48 +0200 Subject: [PATCH 04/17] Fix :scroll-page with --bottom-navigate on QtWebEngine There were two issues here: - The comparison was backwards, causing scroller.at_bottom() to always return true. - When zoomed in, jsret['px']['y'] can be a float, which means we can be slightly off when checking the difference - math.ceil() fixes that. --- CHANGELOG.asciidoc | 1 + qutebrowser/browser/webengine/webenginetab.py | 3 ++- tests/end2end/features/scroll.feature | 7 +++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 353bd3d00..598207bfb 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -137,6 +137,7 @@ Fixed fixed. - Scrolling to an anchor in a background tab now works correctly, and javascript gets the correct window size for background tabs. +- `:scroll-page` with `--bottom-navigate` now works correctly on QtWebEngine v0.10.1 ------- diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 8acd0eda0..0a4c2dfc7 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -20,6 +20,7 @@ """Wrapper over a QWebEngineView.""" import os +import math import functools import sip @@ -342,7 +343,7 @@ class WebEngineScroller(browsertab.AbstractScroller): else: perc_y = min(100, round(100 / dy * jsret['px']['y'])) - self._at_bottom = dy >= jsret['px']['y'] + self._at_bottom = math.ceil(jsret['px']['y']) >= dy self._pos_perc = perc_x, perc_y self.perc_changed.emit(*self._pos_perc) diff --git a/tests/end2end/features/scroll.feature b/tests/end2end/features/scroll.feature index a69b6ffae..28658e1e6 100644 --- a/tests/end2end/features/scroll.feature +++ b/tests/end2end/features/scroll.feature @@ -292,6 +292,13 @@ Feature: Scrolling And I run :scroll-page --bottom-navigate next 0 1 Then data/hello2.txt should be loaded + Scenario: :scroll-page with --bottom-navigate when not at the bottom + When I run :scroll-px 0 10 + And I wait until the scroll position changed + And I run :scroll-page --bottom-navigate next 0 1 + Then the following tabs should be open: + - data/scroll/simple.html + Scenario: :scroll-page with --top-navigate When I run :scroll-page --top-navigate prev 0 -1 Then data/hello3.txt should be loaded From 0d5a33ef2a62f0355e6e1ea9ad5d44e5bded358a Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 29 Jun 2017 23:21:10 +0200 Subject: [PATCH 05/17] Update changelog --- CHANGELOG.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 598207bfb..406400413 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -137,7 +137,7 @@ Fixed fixed. - Scrolling to an anchor in a background tab now works correctly, and javascript gets the correct window size for background tabs. -- `:scroll-page` with `--bottom-navigate` now works correctly on QtWebEngine +- (QtWebEngine) `:scroll-page` with `--bottom-navigate` now works correctly v0.10.1 ------- From 596dee69d61baeb5cdbed8d9d044597f2038d275 Mon Sep 17 00:00:00 2001 From: Jay Kamat Date: Thu, 29 Jun 2017 20:04:02 -0700 Subject: [PATCH 06/17] Clean up pin_tab Also add a test case for :pin-tab with an invalid count --- qutebrowser/browser/commands.py | 9 +-------- tests/end2end/features/tabs.feature | 11 +++++++++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index 54ee0d53e..f21115db5 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -277,16 +277,9 @@ class CommandDispatcher: """ tab = self._cntwidget(count) if tab is None: - return + raise cmdexc.CommandError("Tab {} does not exist!".format(count)) to_pin = not tab.data.pinned - tab_index = self._current_index() if count is None else count - 1 - cmdutils.check_overflow(tab_index + 1, 'int') - tab = self._cntwidget(count) - - if tab is None: - raise cmdexc.CommandError("Unable to find tab '{}'.".format(count)) - self._tabbed_browser.set_tab_pinned(tab, to_pin) @cmdutils.register(instance='command-dispatcher', name='open', diff --git a/tests/end2end/features/tabs.feature b/tests/end2end/features/tabs.feature index 9980b448f..1d3f22b10 100644 --- a/tests/end2end/features/tabs.feature +++ b/tests/end2end/features/tabs.feature @@ -1073,6 +1073,17 @@ Feature: Tab management - data/numbers/2.txt (pinned) - data/numbers/3.txt (active) + Scenario: :tab-pin with an invalid count + When I open data/numbers/1.txt + And I open data/numbers/2.txt in a new tab + And I open data/numbers/3.txt in a new tab + And I run :tab-pin with count 23 + Then the error "Tab 23 does not exist!" should be shown + And the following tabs should be open: + - data/numbers/1.txt + - data/numbers/2.txt + - data/numbers/3.txt (active) + Scenario: Pinned :tab-close prompt yes When I open data/numbers/1.txt And I run :tab-pin From e4a054d34e85551f44ea379276ce6148d26e124a Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 30 Jun 2017 10:42:33 +0200 Subject: [PATCH 07/17] Stop marking QtWebEngine as experimental --- doc/qutebrowser.1.asciidoc | 2 +- qutebrowser/qutebrowser.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/qutebrowser.1.asciidoc b/doc/qutebrowser.1.asciidoc index cd95bf8e5..1b8345b0c 100644 --- a/doc/qutebrowser.1.asciidoc +++ b/doc/qutebrowser.1.asciidoc @@ -57,7 +57,7 @@ show it. How URLs should be opened if there is already a qutebrowser instance running. *--backend* '{webkit,webengine}':: - Which backend to use (webengine backend is EXPERIMENTAL!). + Which backend to use. *--enable-webengine-inspector*:: Enable the web inspector for QtWebEngine. Note that this is a SECURITY RISK and you should not visit untrusted websites with the inspector turned on. See https://bugreports.qt.io/browse/QTBUG-50725 for more details. diff --git a/qutebrowser/qutebrowser.py b/qutebrowser/qutebrowser.py index eba5b6884..e163a9f8d 100644 --- a/qutebrowser/qutebrowser.py +++ b/qutebrowser/qutebrowser.py @@ -64,8 +64,7 @@ def get_argparser(): help="How URLs should be opened if there is already a " "qutebrowser instance running.") parser.add_argument('--backend', choices=['webkit', 'webengine'], - help="Which backend to use (webengine backend is " - "EXPERIMENTAL!).") + help="Which backend to use.") parser.add_argument('--enable-webengine-inspector', action='store_true', help="Enable the web inspector for QtWebEngine. Note " "that this is a SECURITY RISK and you should not " From 9cedaa60bc62ef6dbf34328440a17089b9c6376b Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 30 Jun 2017 14:56:02 +0200 Subject: [PATCH 08/17] Check for PyQt5.QtQml in earlyinit --- qutebrowser/misc/earlyinit.py | 1 + 1 file changed, 1 insertion(+) diff --git a/qutebrowser/misc/earlyinit.py b/qutebrowser/misc/earlyinit.py index e0cbfbbc9..4993d6927 100644 --- a/qutebrowser/misc/earlyinit.py +++ b/qutebrowser/misc/earlyinit.py @@ -336,6 +336,7 @@ def check_libraries(backend): "http://pyyaml.org/download/pyyaml/ (py3.4) " "or Install via pip.", pip="PyYAML"), + 'PyQt5.QtQml': _missing_str("PyQt5.QtQml"), } if backend == 'webengine': modules['PyQt5.QtWebEngineWidgets'] = _missing_str("QtWebEngine", From 2fbadc46d21e5a76d94904e951105464c1acebfb Mon Sep 17 00:00:00 2001 From: Jay Kamat Date: Fri, 30 Jun 2017 09:57:39 -0700 Subject: [PATCH 09/17] Remove error when count is invalid to :tab-pin --- qutebrowser/browser/commands.py | 2 +- tests/end2end/features/tabs.feature | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py index f21115db5..0b448a845 100644 --- a/qutebrowser/browser/commands.py +++ b/qutebrowser/browser/commands.py @@ -277,7 +277,7 @@ class CommandDispatcher: """ tab = self._cntwidget(count) if tab is None: - raise cmdexc.CommandError("Tab {} does not exist!".format(count)) + return to_pin = not tab.data.pinned self._tabbed_browser.set_tab_pinned(tab, to_pin) diff --git a/tests/end2end/features/tabs.feature b/tests/end2end/features/tabs.feature index 1d3f22b10..8097f390e 100644 --- a/tests/end2end/features/tabs.feature +++ b/tests/end2end/features/tabs.feature @@ -1078,8 +1078,7 @@ Feature: Tab management And I open data/numbers/2.txt in a new tab And I open data/numbers/3.txt in a new tab And I run :tab-pin with count 23 - Then the error "Tab 23 does not exist!" should be shown - And the following tabs should be open: + Then the following tabs should be open: - data/numbers/1.txt - data/numbers/2.txt - data/numbers/3.txt (active) From 69337ed2642fdca97af3434881a8b43d0bf4bfd9 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sun, 2 Jul 2017 13:07:13 +0200 Subject: [PATCH 10/17] Update tox default envlist --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 722dad3c4..35bcb266c 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ # and then run "tox" from this directory. [tox] -envlist = py34,py35,py36-cov,misc,vulture,flake8,pylint,pyroma,check-manifest +envlist = py36-cov,misc,vulture,flake8,pylint,pyroma,check-manifest,eslint distshare = {toxworkdir} skipsdist = true From 2f264905369193d1416925415abf2fc1a4c0e289 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sun, 2 Jul 2017 14:03:38 +0200 Subject: [PATCH 11/17] Remove FIXME --- qutebrowser/browser/webengine/webenginesettings.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/qutebrowser/browser/webengine/webenginesettings.py b/qutebrowser/browser/webengine/webenginesettings.py index 66f3a1219..493a2a687 100644 --- a/qutebrowser/browser/webengine/webenginesettings.py +++ b/qutebrowser/browser/webengine/webenginesettings.py @@ -132,9 +132,6 @@ def _init_stylesheet(profile): Mostly inspired by QupZilla: https://github.com/QupZilla/qupzilla/blob/v2.0/src/lib/app/mainapplication.cpp#L1063-L1101 https://github.com/QupZilla/qupzilla/blob/v2.0/src/lib/tools/scripts.cpp#L119-L132 - - FIXME:qtwebengine Use QWebEngineStyleSheet once that's available - https://codereview.qt-project.org/#/c/148671/ """ old_script = profile.scripts().findScript('_qute_stylesheet') if not old_script.isNull(): From 3b53ec1cb6c136ffb12e46f3b532e546cb0bd421 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Mon, 3 Jul 2017 09:40:39 +0200 Subject: [PATCH 12/17] Skip tests with permission changes if they didn't work This e.g. wouldn't work inside of a Docker container otherwise. --- tests/end2end/features/downloads.feature | 4 ++-- tests/end2end/features/test_downloads_bdd.py | 9 +++++++++ tests/unit/misc/test_editor.py | 10 ++++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/tests/end2end/features/downloads.feature b/tests/end2end/features/downloads.feature index 95b775303..07e062610 100644 --- a/tests/end2end/features/downloads.feature +++ b/tests/end2end/features/downloads.feature @@ -579,9 +579,9 @@ Feature: Downloading things from a website. And I wait until the download is finished Then the downloaded file content-size should exist - @posix Scenario: Downloading to unwritable destination - When I set storage -> prompt-download-directory to false + When the unwritable dir is unwritable + And I set storage -> prompt-download-directory to false And I run :download http://localhost:(port)/data/downloads/download.bin --dest (tmpdir)/downloads/unwritable Then the error "Download error: Permission denied" should be shown diff --git a/tests/end2end/features/test_downloads_bdd.py b/tests/end2end/features/test_downloads_bdd.py index 25eb52aad..4be175a66 100644 --- a/tests/end2end/features/test_downloads_bdd.py +++ b/tests/end2end/features/test_downloads_bdd.py @@ -21,6 +21,7 @@ import os import sys import shlex +import pytest import pytest_bdd as bdd bdd.scenarios('downloads.feature') @@ -53,6 +54,14 @@ def clean_old_downloads(quteproc): quteproc.send_cmd(':download-clear') +@bdd.when("the unwritable dir is unwritable") +def check_unwritable(tmpdir): + unwritable = tmpdir / 'downloads' / 'unwritable' + if os.access(str(unwritable), os.W_OK): + # Docker container or similar + pytest.skip("Unwritable dir was writable") + + @bdd.when("I wait until the download is finished") def wait_for_download_finished(quteproc): quteproc.wait_for(category='downloads', message='Download * finished') diff --git a/tests/unit/misc/test_editor.py b/tests/unit/misc/test_editor.py index de9125c8b..70886cda6 100644 --- a/tests/unit/misc/test_editor.py +++ b/tests/unit/misc/test_editor.py @@ -123,24 +123,30 @@ class TestFileHandling: os.remove(filename) - @pytest.mark.posix def test_unreadable(self, message_mock, editor, caplog): """Test file handling when closing with an unreadable file.""" editor.edit("") filename = editor._file.name assert os.path.exists(filename) os.chmod(filename, 0o077) + if os.access(filename, os.R_OK): + # Docker container or similar + pytest.skip("File was still readable") + with caplog.at_level(logging.ERROR): editor._proc.finished.emit(0, QProcess.NormalExit) assert not os.path.exists(filename) msg = message_mock.getmsg(usertypes.MessageLevel.error) assert msg.text.startswith("Failed to read back edited file: ") - @pytest.mark.posix def test_unwritable(self, monkeypatch, message_mock, editor, tmpdir, caplog): """Test file handling when the initial file is not writable.""" tmpdir.chmod(0) + if os.access(str(tmpdir), os.W_OK): + # Docker container or similar + pytest.skip("File was still writable") + monkeypatch.setattr(editormod.tempfile, 'tempdir', str(tmpdir)) with caplog.at_level(logging.ERROR): From 629038632c6cc8c0ecd8b6a7a32d59ef4d5b9d02 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Mon, 3 Jul 2017 09:42:02 +0200 Subject: [PATCH 13/17] Add proxy support for QtWebEngine and Qt 5.7.1 This used to give us crashes in libproxy: https://github.com/libproxy/libproxy/issues/45 https://bugreports.qt.io/browse/QTBUG-56852 However, trying again with Qt 5.7.1 on Debian and from PyPI, this doesn't happen anymore, so it was probably something with how Archlinux handled things. See #2082, #2775. Reverts fd29528e4f0c3ef445a85ea1d9e2c96bcc3e37ed --- CHANGELOG.asciidoc | 1 + doc/help/settings.asciidoc | 2 -- qutebrowser/app.py | 6 ++---- qutebrowser/browser/webkit/webkittab.py | 7 ------- qutebrowser/config/configdata.py | 8 ++------ scripts/dev/src2asciidoc.py | 3 +-- 6 files changed, 6 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 406400413..ea7481030 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -45,6 +45,7 @@ Added customize statusbar colors for private windows. - New `{private}` field displaying `[Private Mode]` for `ui -> window-title-format` and `tabs -> title-format`. +- (QtWebEngine) Proxy support with Qt 5.7.1 too Changed ~~~~~~~ diff --git a/doc/help/settings.asciidoc b/doc/help/settings.asciidoc index 9c362dbca..b038d462d 100644 --- a/doc/help/settings.asciidoc +++ b/doc/help/settings.asciidoc @@ -789,8 +789,6 @@ The proxy to use. In addition to the listed values, you can use a `socks://...` or `http://...` URL. -This setting only works with Qt 5.8 or newer when using the QtWebEngine backend. - Valid values: * +system+: Use the system wide proxy. diff --git a/qutebrowser/app.py b/qutebrowser/app.py index a3a855f9a..65e8d8181 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -410,10 +410,8 @@ def _init_modules(args, crash_handler): log.init.debug("Initializing network...") networkmanager.init() - if qtutils.version_check('5.8'): - # Otherwise we can only initialize it for QtWebKit because of crashes - log.init.debug("Initializing proxy...") - proxy.init() + log.init.debug("Initializing proxy...") + proxy.init() log.init.debug("Initializing readline-bridge...") readline_bridge = readline.ReadlineBridge() diff --git a/qutebrowser/browser/webkit/webkittab.py b/qutebrowser/browser/webkit/webkittab.py index fa626e863..c29aa15cb 100644 --- a/qutebrowser/browser/webkit/webkittab.py +++ b/qutebrowser/browser/webkit/webkittab.py @@ -33,7 +33,6 @@ from PyQt5.QtWebKit import QWebSettings from PyQt5.QtPrintSupport import QPrinter from qutebrowser.browser import browsertab -from qutebrowser.browser.network import proxy from qutebrowser.browser.webkit import webview, tabhistory, webkitelem from qutebrowser.browser.webkit.network import webkitqutescheme from qutebrowser.utils import qtutils, objreg, usertypes, utils, log, debug @@ -42,12 +41,6 @@ from qutebrowser.utils import qtutils, objreg, usertypes, utils, log, debug def init(): """Initialize QtWebKit-specific modules.""" qapp = QApplication.instance() - - if not qtutils.version_check('5.8'): - # Otherwise we initialize it globally in app.py - log.init.debug("Initializing proxy...") - proxy.init() - log.init.debug("Initializing js-bridge...") js_bridge = webkitqutescheme.JSBridge(qapp) objreg.register('js-bridge', js_bridge) diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index 28cf41ac5..32d80f3b7 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -437,14 +437,10 @@ def data(readonly=False): "User agent to send. Empty to send the default."), ('proxy', - SettingValue(typ.Proxy(), 'system', - backends=(None if qtutils.version_check('5.8') - else [usertypes.Backend.QtWebKit])), + SettingValue(typ.Proxy(), 'system'), "The proxy to use.\n\n" "In addition to the listed values, you can use a `socks://...` " - "or `http://...` URL.\n\n" - "This setting only works with Qt 5.8 or newer when using the " - "QtWebEngine backend."), + "or `http://...` URL."), ('proxy-dns-requests', SettingValue(typ.Bool(), 'true', diff --git a/scripts/dev/src2asciidoc.py b/scripts/dev/src2asciidoc.py index 7445a99c6..a202edeb3 100755 --- a/scripts/dev/src2asciidoc.py +++ b/scripts/dev/src2asciidoc.py @@ -365,8 +365,7 @@ def generate_commands(filename): def _generate_setting_section(f, sectname, sect): """Generate documentation for a single section.""" - version_dependent_options = [('network', 'proxy'), - ('general', 'print-element-backgrounds')] + version_dependent_options = [('general', 'print-element-backgrounds')] for optname, option in sect.items(): f.write("\n") f.write('[[{}-{}]]'.format(sectname, optname) + "\n") From 023bf826384d58e259ce38ce430edb87508d176f Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 4 Jul 2017 17:30:47 +0200 Subject: [PATCH 14/17] Update for PyQt 5.9.1 --- .travis.yml | 8 ++++++-- README.asciidoc | 4 ++-- misc/requirements/requirements-pyqt.txt | 4 ++-- tox.ini | 22 ++++++++++++++++++++++ 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index e18bd2efa..ec2868730 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,14 +23,18 @@ matrix: language: python python: 3.6 env: TESTENV=py36-pyqt571 + - os: linux + language: python + python: 3.6 + env: TESTENV=py36-pyqt58 - os: linux language: python python: 3.5 - env: TESTENV=py35-pyqt58 + env: TESTENV=py35-pyqt59 - os: linux language: python python: 3.6 - env: TESTENV=py36-pyqt58 + env: TESTENV=py36-pyqt59 - os: osx env: TESTENV=py36 OSX=elcapitan osx_image: xcode7.3 diff --git a/README.asciidoc b/README.asciidoc index 347b8356b..1c7e42c33 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -99,10 +99,10 @@ Requirements The following software and libraries are required to run qutebrowser: * http://www.python.org/[Python] 3.4 or newer (3.5 recommended) -* http://qt.io/[Qt] 5.2.0 or newer (5.9.0 recommended) +* http://qt.io/[Qt] 5.2.0 or newer (5.9 recommended) * QtWebKit (old or link:https://github.com/annulen/webkit/wiki[reloaded]/NG) or QtWebEngine * http://www.riverbankcomputing.com/software/pyqt/intro[PyQt] 5.2.0 or newer -(5.8.1 recommended) for Python 3 +(5.9 recommended) for Python 3 * https://pypi.python.org/pypi/setuptools/[pkg_resources/setuptools] * http://fdik.org/pyPEG/[pyPEG2] * http://jinja.pocoo.org/[jinja2] diff --git a/misc/requirements/requirements-pyqt.txt b/misc/requirements/requirements-pyqt.txt index da611589a..fffa133ab 100644 --- a/misc/requirements/requirements-pyqt.txt +++ b/misc/requirements/requirements-pyqt.txt @@ -1,4 +1,4 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py -PyQt5==5.8.2 -sip==4.19.2 +PyQt5==5.9 +sip==4.19.3 diff --git a/tox.ini b/tox.ini index 35bcb266c..04cf826d1 100644 --- a/tox.ini +++ b/tox.ini @@ -111,6 +111,28 @@ deps = PyQt5==5.8.2 commands = {envpython} -bb -m pytest {posargs:tests} +[testenv:py35-pyqt59] +basepython = python3.5 +setenv = + {[testenv]setenv} + QUTE_BDD_WEBENGINE=true +passenv = {[testenv]passenv} +deps = + {[testenv]deps} + PyQt5==5.9 +commands = {envpython} -bb -m pytest {posargs:tests} + +[testenv:py36-pyqt59] +basepython = {env:PYTHON:python3.6} +setenv = + {[testenv]setenv} + QUTE_BDD_WEBENGINE=true +passenv = {[testenv]passenv} +deps = + {[testenv]deps} + PyQt5==5.9 +commands = {envpython} -bb -m pytest {posargs:tests} + # other envs [testenv:mkvenv] From 378914b327c9d4be8afdb029b314719014b7b2f2 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 4 Jul 2017 18:01:11 +0200 Subject: [PATCH 15/17] Ignore another new geoclue error during tests --- pytest.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/pytest.ini b/pytest.ini index a2d2779d9..ab437801b 100644 --- a/pytest.ini +++ b/pytest.ini @@ -45,6 +45,7 @@ qt_log_ignore = ^QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to .* ^QGeoclueMaster error creating GeoclueMasterClient\. ^Geoclue error: Process org\.freedesktop\.Geoclue\.Master exited with status 127 + ^QDBusConnection: name 'org.freedesktop.Geoclue.Master' had owner '' but we thought it was ':1.1' ^QObject::connect: Cannot connect \(null\)::stateChanged\(QNetworkSession::State\) to QNetworkReplyHttpImpl::_q_networkSessionStateChanged\(QNetworkSession::State\) ^QXcbClipboard: Cannot transfer data, no data available ^load glyph failed From 28410b85339acd2708b864568981c83b4511da4d Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 4 Jul 2017 18:01:47 +0200 Subject: [PATCH 16/17] Release v0.11.0 --- CHANGELOG.asciidoc | 102 +++---- CONTRIBUTING.asciidoc | 3 +- qutebrowser/__init__.py | 2 +- .../old_configs/qutebrowser-v0.11.0.conf | 251 ++++++++++++++++++ tests/unit/config/test_config.py | 2 +- 5 files changed, 306 insertions(+), 54 deletions(-) create mode 100644 tests/unit/config/old_configs/qutebrowser-v0.11.0.conf diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index ea7481030..14fd41b88 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -14,8 +14,8 @@ This project adheres to http://semver.org/[Semantic Versioning]. // `Fixed` for any bug fixes. // `Security` to invite users to upgrade in case of vulnerabilities. -v0.11.0 (unreleased) --------------------- +v0.11.0 +------- New dependencies ~~~~~~~~~~~~~~~~ @@ -28,7 +28,10 @@ New dependencies Added ~~~~~ -- New `-p` flag for `:open` to open a private window. +- Private browsing is now implemented for QtWebEngine, *and changed its + behavior*: The `general -> private-browsing` setting now only applies to newly + opened windows, and you can use the `-p` flag to `:open` to open a private + window. - New "pinned tabs" feature, with a new `:tab-pin` command (bound to `` by default). - (QtWebEngine) Implemented `:follow-selected`. @@ -45,7 +48,8 @@ Added customize statusbar colors for private windows. - New `{private}` field displaying `[Private Mode]` for `ui -> window-title-format` and `tabs -> title-format`. -- (QtWebEngine) Proxy support with Qt 5.7.1 too +- (QtWebEngine) Proxy support with Qt 5.7.1 (already was supported for 5.8 and + newer) Changed ~~~~~~~ @@ -53,62 +57,51 @@ Changed - To prevent elaborate phishing attacks, the Punycode version (`xn--*`) is now shown in addition to the decoded version for international domain names (IDN). -- Private browsing is now implemented for QtWebEngine, and changed it's - behavior: The `general -> private-browsing` setting now only applies to newly - opened windows, and you can use the `-p` flag to `:open` to open a private - window. -- Improved `qute://history` page (with lazy loading) -- Starting with legacy QtWebKit now shows a warning message once. -- Crash reports are not public anymore. -- Paths like `C:` are now treated as absolute paths on Windows for downloads, - and invalid paths are handled properly. -- PAC on QtWebKit now supports SOCKS5 as type. -- Comments in the config file are now before the individual options instead of - being before sections. -- Messages are now hidden when clicked. -- stdin is now closed immediately for processes spawned from qutebrowser. -- When `ui -> message-timeout` is set to 0, messages are now never cleared. -- Middle/right-clicking the blank parts of the tab bar (when vertical) now - closes the current tab. -- (QtWebEngine) With Qt 5.9, `content -> cookies-store` can now be set without - a restart. -- (QtWebEngine) With Qt 5.9, better error messages are now shown for failed - downloads. -- The adblocker now also blocks non-GET requests (e.g. POST). -- `javascript:` links can now be hinted. -- `:view-source`, `:tab-clone` and `:navigate --tab` now don't open the tab as - "explicit" anymore, i.e. (with the default settings) open it next to the - active tab. -- (QtWebEngine) The underlying Chromium version is now shown in the version - info. -- `qute:*` pages now use `qute://*` instead (e.g. `qute://version` instead of - `qute:version`), but the old versions are automatically redirected. +- Starting with legacy QtWebKit now shows a warning message. + *With the next release, support for it will be removed.* - The Windows releases are redone from scratch, which means: - They now use the new QtWebEngine backend - The bundled Qt is updated from 5.5 to 5.9 - The bundled Python is updated from 3.4 to 3.6 - They are now generated with PyInstaller instead of cx_Freeze - The installer is now generated using NSIS instead of being a MSI +- Improved `qute://history` page (with lazy loading) +- Crash reports are not public anymore. +- Paths like `C:` are now treated as absolute paths on Windows for downloads, + and invalid paths are handled properly. +- Comments in the config file are now placed before the individual options + instead of being before sections. +- Messages are now hidden when clicked. +- stdin is now closed immediately for processes spawned from qutebrowser. +- When `ui -> message-timeout` is set to 0, messages are now never cleared. +- Middle/right-clicking the blank parts of the tab bar (when vertical) now + closes the current tab. +- The adblocker now also blocks non-GET requests (e.g. POST). +- `javascript:` links can now be hinted. +- `:view-source`, `:tab-clone` and `:navigate --tab` now don't open the tab as + "explicit" anymore, i.e. (with the default settings) open it next to the + active tab. +- `qute:*` pages now use `qute://*` instead (e.g. `qute://version` instead of + `qute:version`), but the old versions are automatically redirected. - Texts in prompts are now selectable. -- Renderer process crashes now show an error page. -- (QtWebKit) storage -> offline-web-application-storage` got renamed to `...-cache` - The default level for `:messages` is now `info`, not `error` - Trying to focus the currently focused tab with `:tab-focus` now focuses the last viewed tab. +- (QtWebEngine) With Qt 5.9, `content -> cookies-store` can now be set without + a restart. +- (QtWebEngine) With Qt 5.9, better error messages are now shown for failed + downloads. +- (QtWebEngine) The underlying Chromium version is now shown in the version + info. +- (QtWebKit) Renderer process crashes now show an error page on Qt 5.9 or newer. +- (QtWebKit) storage -> offline-web-application-storage` got renamed to `...-cache` +- (QtWebKit) PAC now supports SOCKS5 as type. Fixed ~~~~~ - The macOS .dmg is now built against Qt 5.9 which fixes various important issues (such as not being able to type dead keys). -- (QtWebEngine) Added a workaround for a black screen with some setups - (the workaround requires PyOpenGL to be installed, but it's optional) -- (QtWebEngine) Starting with Nouveau graphics now shows an error message - instead of crashing in Qt. This adds a new dependency on `PyQt5.QtOpenGL`. -- (QtWebEngine) Retrying downloads now shows an error instead of crashing. -- (QtWebEngine) Cloning a view-source tab now doesn't crash anymore. -- (QtWebKit) The HTTP cache is disabled on Qt 5.7.1 and 5.8 now as it leads to - frequent crashes due to a Qt bug. - Fixed crash with `:download` on PyQt 5.9. - Cloning a page without history doesn't crash anymore. - When a download results in a HTTP error, it now shows the error correctly @@ -118,7 +111,6 @@ Fixed - Fixed crash when unbinding an unbound key in the key config. - Fixed crash when using `:debug-log-filter` when `--filter` wasn't given on startup. - Fixed crash with some invalid setting values. -- (QtWebKit) Fixed Crash when a PAC file returns an invalid value. - Continuing a search after clearing it now works correctly. - The tabbar and completion should now be more consistently and correctly styled with various system styles. @@ -126,19 +118,27 @@ Fixed - The validation for colors in stylesheets is now less strict, allowing for all valid Qt values. - `data:` URLs now aren't added to the history anymore. -- (QtWebEngine) `window.navigator.userAgent` is now set correctly when - customizing the user agent. - Accidentally starting with Python 2 now shows a proper error message again. -- (QtWebEngine) HTML fullscreen is now tracked for each tab separately, which - means it's not possible anymore to accidentally get stuck in fullscreen state - by closing a tab with a fullscreen video. - For some people, running some userscripts crashed - this should now be fixed. - Various other rare crashes should now be fixed. - The settings documentation was truncated with v0.10.1 which should now be fixed. - Scrolling to an anchor in a background tab now works correctly, and javascript gets the correct window size for background tabs. -- (QtWebEngine) `:scroll-page` with `--bottom-navigate` now works correctly +- (QtWebEngine) Added a workaround for a black screen with some setups +- (QtWebEngine) Starting with Nouveau graphics now shows an error message + instead of crashing in Qt. +- (QtWebEngine) Retrying downloads now shows an error instead of crashing. +- (QtWebEngine) Cloning a view-source tab now doesn't crash anymore. +- (QtWebEngine) `window.navigator.userAgent` is now set correctly when + customizing the user agent. +- (QtWebEngine) HTML fullscreen is now tracked for each tab separately, which + means it's not possible anymore to accidentally get stuck in fullscreen state + by closing a tab with a fullscreen video. +- (QtWebEngine) `:scroll-page` with `--bottom-navigate` now works correctly. +- (QtWebKit) The HTTP cache is disabled on Qt 5.7.1 and 5.8 now as it leads to + frequent crashes due to a Qt bug. +- (QtWebKit) Fixed Crash when a PAC file returns an invalid value. v0.10.1 ------- diff --git a/CONTRIBUTING.asciidoc b/CONTRIBUTING.asciidoc index d5c77f521..5a7eafd77 100644 --- a/CONTRIBUTING.asciidoc +++ b/CONTRIBUTING.asciidoc @@ -682,8 +682,9 @@ qutebrowser release * Add newest config to `tests/unit/config/old_configs` and update `test_upgrade_version` - `python -m qutebrowser --basedir conf :quit` - - `sed '/^#/d' conf/config/qutebrowser.conf > tests/unit/config/old_configs/qutebrowser-v0.x.y.conf` + - `sed '/^#/d' conf/config/qutebrowser.conf > tests/unit/config/old_configs/qutebrowser-v0.$x.$y.conf` - `rm -r conf` + - git add - commit * Adjust `__version_info__` in `qutebrowser/__init__.py`. * Update changelog (remove *(unreleased)*) diff --git a/qutebrowser/__init__.py b/qutebrowser/__init__.py index e61419c0c..cca2bf1b8 100644 --- a/qutebrowser/__init__.py +++ b/qutebrowser/__init__.py @@ -26,7 +26,7 @@ __copyright__ = "Copyright 2014-2017 Florian Bruhin (The Compiler)" __license__ = "GPL" __maintainer__ = __author__ __email__ = "mail@qutebrowser.org" -__version_info__ = (0, 10, 1) +__version_info__ = (0, 11, 0) __version__ = '.'.join(str(e) for e in __version_info__) __description__ = "A keyboard-driven, vim-like browser based on PyQt5." diff --git a/tests/unit/config/old_configs/qutebrowser-v0.11.0.conf b/tests/unit/config/old_configs/qutebrowser-v0.11.0.conf new file mode 100644 index 000000000..ba48a6ff5 --- /dev/null +++ b/tests/unit/config/old_configs/qutebrowser-v0.11.0.conf @@ -0,0 +1,251 @@ +[general] +ignore-case = smart +startpage = https://start.duckduckgo.com +yank-ignored-url-parameters = ref,utm_source,utm_medium,utm_campaign,utm_term,utm_content +default-open-dispatcher = +default-page = ${startpage} +auto-search = naive +auto-save-config = true +auto-save-interval = 15000 +editor = gvim -f "{}" +editor-encoding = utf-8 +private-browsing = false +developer-extras = false +print-element-backgrounds = true +xss-auditing = false +default-encoding = iso-8859-1 +new-instance-open-target = tab +new-instance-open-target.window = last-focused +log-javascript-console = debug +save-session = false +session-default-name = +url-incdec-segments = path,query +[ui] +history-session-interval = 30 +zoom-levels = 25%,33%,50%,67%,75%,90%,100%,110%,125%,150%,175%,200%,250%,300%,400%,500% +default-zoom = 100% +downloads-position = top +status-position = bottom +message-timeout = 2000 +message-unfocused = false +confirm-quit = never +zoom-text-only = false +frame-flattening = false +user-stylesheet = +hide-scrollbar = true +smooth-scrolling = false +remove-finished-downloads = -1 +hide-statusbar = false +statusbar-padding = 1,1,0,0 +window-title-format = {perc}{title}{title_sep}qutebrowser +modal-js-dialog = false +hide-wayland-decoration = false +keyhint-blacklist = +keyhint-delay = 500 +prompt-radius = 8 +prompt-filebrowser = true +[network] +do-not-track = true +accept-language = en-US,en +referer-header = same-domain +user-agent = +proxy = system +proxy-dns-requests = true +ssl-strict = ask +dns-prefetch = true +custom-headers = +netrc-file = +[completion] +show = always +download-path-suggestion = path +timestamp-format = %Y-%m-%d +height = 50% +cmd-history-max-items = 100 +web-history-max-items = 1000 +quick-complete = true +shrink = false +scrollbar-width = 12 +scrollbar-padding = 2 +[input] +timeout = 500 +partial-timeout = 5000 +insert-mode-on-plugins = false +auto-leave-insert-mode = true +auto-insert-mode = false +forward-unbound-keys = auto +spatial-navigation = false +links-included-in-focus-chain = true +rocker-gestures = false +mouse-zoom-divider = 512 +[tabs] +background-tabs = false +select-on-remove = next +new-tab-position = next +new-tab-position-explicit = last +last-close = ignore +show = always +show-switching-delay = 800 +wrap = true +movable = true +close-mouse-button = middle +position = top +show-favicons = true +favicon-scale = 1.0 +width = 20% +pinned-width = 43 +indicator-width = 3 +tabs-are-windows = false +title-format = {index}: {title} +title-format-pinned = {index} +title-alignment = left +mousewheel-tab-switching = true +padding = 0,0,5,5 +indicator-padding = 2,2,0,4 +[storage] +download-directory = +prompt-download-directory = true +remember-download-directory = true +maximum-pages-in-cache = 0 +offline-web-application-cache = true +local-storage = true +cache-size = +[content] +allow-images = true +allow-javascript = true +allow-plugins = false +webgl = true +hyperlink-auditing = false +geolocation = ask +notifications = ask +media-capture = ask +javascript-can-open-windows-automatically = false +javascript-can-close-windows = false +javascript-can-access-clipboard = false +ignore-javascript-prompt = false +ignore-javascript-alert = false +local-content-can-access-remote-urls = false +local-content-can-access-file-urls = true +cookies-accept = no-3rdparty +cookies-store = true +host-block-lists = https://www.malwaredomainlist.com/hostslist/hosts.txt,http://someonewhocares.org/hosts/hosts,http://winhelp2002.mvps.org/hosts.zip,http://malwaredomains.lehigh.edu/files/justdomains.zip,https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext +host-blocking-enabled = true +host-blocking-whitelist = piwik.org +enable-pdfjs = false +[hints] +border = 1px solid #E3BE23 +mode = letter +chars = asdfghjkl +min-chars = 1 +scatter = true +uppercase = false +dictionary = /usr/share/dict/words +auto-follow = unique-match +auto-follow-timeout = 0 +next-regexes = \bnext\b,\bmore\b,\bnewer\b,\b[>→≫]\b,\b(>>|»)\b,\bcontinue\b +prev-regexes = \bprev(ious)?\b,\bback\b,\bolder\b,\b[<←≪]\b,\b(<<|«)\b +find-implementation = python +hide-unmatched-rapid-hints = true +[searchengines] +DEFAULT = https://duckduckgo.com/?q={} +[aliases] +[colors] +completion.fg = white +completion.bg = #333333 +completion.alternate-bg = #444444 +completion.category.fg = white +completion.category.bg = qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, stop:1 #505050) +completion.category.border.top = black +completion.category.border.bottom = ${completion.category.border.top} +completion.item.selected.fg = black +completion.item.selected.bg = #e8c000 +completion.item.selected.border.top = #bbbb00 +completion.item.selected.border.bottom = ${completion.item.selected.border.top} +completion.match.fg = #ff4444 +completion.scrollbar.fg = ${completion.fg} +completion.scrollbar.bg = ${completion.bg} +statusbar.fg = white +statusbar.bg = black +statusbar.fg.private = ${statusbar.fg} +statusbar.bg.private = #666666 +statusbar.fg.insert = ${statusbar.fg} +statusbar.bg.insert = darkgreen +statusbar.fg.command = ${statusbar.fg} +statusbar.bg.command = ${statusbar.bg} +statusbar.fg.command.private = ${statusbar.fg.private} +statusbar.bg.command.private = ${statusbar.bg.private} +statusbar.fg.caret = ${statusbar.fg} +statusbar.bg.caret = purple +statusbar.fg.caret-selection = ${statusbar.fg} +statusbar.bg.caret-selection = #a12dff +statusbar.progress.bg = white +statusbar.url.fg = ${statusbar.fg} +statusbar.url.fg.success = white +statusbar.url.fg.success.https = lime +statusbar.url.fg.error = orange +statusbar.url.fg.warn = yellow +statusbar.url.fg.hover = aqua +tabs.fg.odd = white +tabs.bg.odd = grey +tabs.fg.even = white +tabs.bg.even = darkgrey +tabs.fg.selected.odd = white +tabs.bg.selected.odd = black +tabs.fg.selected.even = ${tabs.fg.selected.odd} +tabs.bg.selected.even = ${tabs.bg.selected.odd} +tabs.bg.bar = #555555 +tabs.indicator.start = #0000aa +tabs.indicator.stop = #00aa00 +tabs.indicator.error = #ff0000 +tabs.indicator.system = rgb +hints.fg = black +hints.bg = qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8)) +hints.fg.match = green +downloads.bg.bar = black +downloads.fg.start = white +downloads.bg.start = #0000aa +downloads.fg.stop = ${downloads.fg.start} +downloads.bg.stop = #00aa00 +downloads.fg.system = rgb +downloads.bg.system = rgb +downloads.fg.error = white +downloads.bg.error = red +webpage.bg = white +keyhint.fg = #FFFFFF +keyhint.fg.suffix = #FFFF00 +keyhint.bg = rgba(0, 0, 0, 80%) +messages.fg.error = white +messages.bg.error = red +messages.border.error = #bb0000 +messages.fg.warning = white +messages.bg.warning = darkorange +messages.border.warning = #d47300 +messages.fg.info = white +messages.bg.info = black +messages.border.info = #333333 +prompts.fg = white +prompts.bg = darkblue +prompts.selected.bg = #308cc6 +[fonts] +_monospace = xos4 Terminus, Terminus, Monospace, "DejaVu Sans Mono", Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal +completion = 8pt ${_monospace} +completion.category = bold ${completion} +tabbar = 8pt ${_monospace} +statusbar = 8pt ${_monospace} +downloads = 8pt ${_monospace} +hints = bold 13px ${_monospace} +debug-console = 8pt ${_monospace} +web-family-standard = +web-family-fixed = +web-family-serif = +web-family-sans-serif = +web-family-cursive = +web-family-fantasy = +web-size-minimum = 0 +web-size-minimum-logical = 6 +web-size-default = 16 +web-size-default-fixed = 13 +keyhint = 8pt ${_monospace} +messages.error = 8pt ${_monospace} +messages.warning = 8pt ${_monospace} +messages.info = 8pt ${_monospace} +prompts = 8pt sans-serif diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py index c897b9f16..be526dac3 100644 --- a/tests/unit/config/test_config.py +++ b/tests/unit/config/test_config.py @@ -408,7 +408,7 @@ class TestDefaultConfig: If it did change, place a new qutebrowser-vx.y.z.conf in old_configs and then increment the version. """ - assert qutebrowser.__version__ == '0.10.1' + assert qutebrowser.__version__ == '0.11.0' @pytest.mark.parametrize('filename', os.listdir(os.path.join(os.path.dirname(__file__), 'old_configs')), From defe140d98a6a82b1fba0c1440fb827a758b4733 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 4 Jul 2017 19:56:54 +0200 Subject: [PATCH 17/17] build_release: Run tox with -vv --- scripts/dev/build_release.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/dev/build_release.py b/scripts/dev/build_release.py index 073b9a58e..9190a8801 100755 --- a/scripts/dev/build_release.py +++ b/scripts/dev/build_release.py @@ -64,7 +64,7 @@ def call_tox(toxenv, *args, python=sys.executable): env['PYTHON'] = python env['PATH'] = os.environ['PATH'] + os.pathsep + os.path.dirname(python) subprocess.check_call( - [sys.executable, '-m', 'tox', '-v', '-e', toxenv] + list(args), + [sys.executable, '-m', 'tox', '-vv', '-e', toxenv] + list(args), env=env)