A keyboard-driven, vim-like browser based on PyQt5.

Overview

qutebrowser

qutebrowser logo A keyboard-driven, vim-like browser based on PyQt5 and Qt.

Build Status coverage badge

qutebrowser is a keyboard-focused browser with a minimal GUI. It’s based on Python and PyQt5 and free software, licensed under the GPL.

It was inspired by other browsers/addons like dwb and Vimperator/Pentadactyl.

qutebrowser’s primary maintainer, The-Compiler, is currently working part-time on qutebrowser, funded by donations. To sustain this for a long time, your help is needed! See the GitHub Sponsors page for more information. Depending on your sign-up date and how long you keep a certain level, you can get qutebrowser t-shirts, stickers and more!

Screenshots

screenshot 1 screenshot 2 screenshot 3 screenshot 4

Downloads

See the github releases page for available downloads and the INSTALL file for detailed instructions on how to get qutebrowser running on various platforms.

Documentation and getting help

Please see the help page for available documentation pages and support channels.

Contributions / Bugs

You want to contribute to qutebrowser? Awesome! Please read the contribution guidelines for details and useful hints.

If you found a bug or have a feature request, you can report it in several ways:

  • Use the built-in :report command or the automatic crash dialog.

  • Open an issue in the Github issue tracker.

  • Write a mail to the mailinglist at [email protected].

For security bugs, please contact me directly at [email protected], GPG ID 0x916eb0c8fd55a072.

Requirements

The following software and libraries are required to run qutebrowser:

  • Python 3.6.1 or newer

  • Qt 5.12.0 or newer (5.12 LTS or 5.15 recommended) with the following modules:

    • QtCore / qtbase

    • QtQuick (part of qtbase or qtdeclarative in some distributions)

    • QtSQL (part of qtbase in some distributions)

    • QtDBus (part of qtbase in some distributions; note that a connection to DBus at runtime is optional)

    • QtOpenGL

    • QtWebEngine, or

    • alternatively QtWebKit (5.212) - This is not recommended due to known security issues in QtWebKit, you most likely want to use qutebrowser with the default QtWebEngine backend (based on Chromium) instead. Quoting the QtWebKit releases page: [The latest QtWebKit] release is based on [an] old WebKit revision with known unpatched vulnerabilities. Please use it carefully and avoid visiting untrusted websites and using it for transmission of sensitive data.

  • PyQt 5.12.0 or newer for Python 3

  • jinja2

  • PyYAML

On older Python versions (3.6/3.7/3.8), the following backports are also required:

The following libraries are optional:

  • adblock (for improved adblocking using ABP syntax)

  • pygments for syntax highlighting with :view-source on QtWebKit, or when using :view-source --pygments with the (default) QtWebEngine backend.

  • On Windows, colorama for colored log output.

  • importlib_resources on Python 3.7 or older, to improve QtWebEngine version detection when PyQtWebEngine is installed via pip (thus, this dependency usually isn’t relevant for packagers).

  • asciidoc to generate the documentation for the :help command, when using the git repository (rather than a release).

See the documentation for directions on how to install qutebrowser and its dependencies.

Donating

qutebrowser’s primary maintainer, The-Compiler, is currently working part-time on qutebrowser, funded by donations. To sustain this for a long time, your help is needed! See the GitHub Sponsors page for more information. Depending on your sign-up date and how long you keep a certain level, you can get qutebrowser t-shirts, stickers and more!

Alternatively, the following donation methods are available — note that eligibility for swag (shirts/stickers/etc.) is handled on a case-by-case basis for those, please get in touch for details.

  • SEPA bank transfer inside Europe (no fee):

    • Account holder: Florian Bruhin

    • Country: Switzerland

    • IBAN (EUR): CH13 0900 0000 9160 4094 6

    • IBAN (other): CH80 0900 0000 8711 8587 3

    • Bank: PostFinance AG, Mingerstrasse 20, 3030 Bern, Switzerland (BIC: POFICHBEXXX)

    • If you need any other information: Contact me at [email protected].

  • PayPal: CHF, EUR, USD

  • Cryptocurrencies:

    • Bitcoin: bc1q3ptyw8hxrcfz6ucfgmglphfvhqpy8xr6k25p00

    • Bitcoin Cash: 1BnxUbnJ5MrEPeh5nuUMx83tbiRAvqJV3N

    • Ethereum: 0x10c2425856F7a8799EBCaac4943026803b1089c6

    • Litecoin: MDt3YQciuCh6QyFmr8TiWNxB94PVzbnPm2

    • Others: Please get in touch, I’d happily set up anything supported by Ledger Live

Sponsors

Thanks a lot to MacStadium for supporting qutebrowser with a free hosted Mac Mini via their Open Source Project.

(They don’t require including this here - I’ve just been very happy with their offer, and without them, no macOS releases or tests would exist)

Thanks to the HSR Hochschule für Technik Rapperswil, which made it possible to work on qutebrowser extensions as a student research project.

powered by MacStadium HSR Hochschule für Technik Rapperswil

Authors

qutebrowser’s primary author is Florian Bruhin (The Compiler), but qutebrowser wouldn’t be what it is without the help of hundreds of contributors!

Additionally, the following people have contributed graphics:

  • Jad/yelo (new icon)

  • WOFall (original icon)

  • regines (key binding cheatsheet)

Also, thanks to everyone who contributed to one of qutebrowser’s crowdfunding campaigns!

Similar projects

Various projects with a similar goal like qutebrowser exist. Many of them were inspirations for qutebrowser in some way, thanks for that!

Active

Inactive

License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/gpl-3.0.txt.

pdf.js

qutebrowser optionally uses pdf.js to display PDF files in the browser. Windows releases come with a bundled pdf.js.

pdf.js is distributed under the terms of the Apache License. You can find a copy of the license in qutebrowser/3rdparty/pdfjs/LICENSE (in the Windows release or after running scripts/dev/update_3rdparty.py), or online here.

Issues
  • Completion refactor V3

    Completion refactor V3

    This is a combination of my previous efforts for #74 and #1765. It refactors completion models into functions that instantiate models on-demand. In order to avoid taking a performace hit, some models are backed by SQL tables.

    This approach is a little different than last time in that the SQL does not exist solely in the completion module. Instead, the bookmark-manager, quickmark-manager, and web-history are now backed by an in-memory SQL database rather than a python dict (see e130063 and f095dbe). On startup, they read from a file on disk and write entries into the in-memory database. This is the main part I'm looking for feedback on right now. How does it feel? The advantage of this approach is that SQL-based completion models can be returned on-demand just as the simple completion models are.

    It would likely be even more performant and simpler to replace the old bookmark/quickmark/history text files with an on-disk database, but that could be a usability hit for those that like to mess with these files manually.

    P.S. don't expect this to work just yet, but it will be there soon.


    This change is Reviewable

    opened by rcorre 158
  • Config (r)evolution

    Config (r)evolution

    Having the config in an .ini-like format might be a bad idea. Things like per-domain configs would probably be a lot easier in YAML...

    Some links:

    • https://en.wikipedia.org/wiki/YAML
    • http://pyyaml.org/wiki/PyYAML
    • http://yaml.org/

    See this proposal for more information about what the exact plans are for this.


    ~~Note: There's currently a Kickstarter campaign running with the goal of finally making this happen!~~

    component: config priority: 0 - high 
    opened by The-Compiler 106
  • Implement PAC support

    Implement PAC support

    I don't feel confident in several things:

    • Handling of QNetworkAccessManager in HTTPProxyResolver. I want to get a signal and finish asynchronously but if someone has called resolve before that, to wait for its completion. Also I want to clean up after that (set things to None). I don't quite understand how signals work -- are _finish and resolve called from different threads? When it's safe to remote HTTPNetworkReply so that completion signal is delivered to QEventLoop? If resolve is called long after signal is delivered, will it work? I feel not but I'm unsure how to get this right;
    • Code style;
    • Tests -- I haven't even run them because I don't know how.

    To be honest, I haven't touched Python and Qt for a very long time, so I just used Google for every feature I felt I needed. It would be very nice to get a review.


    This change is Reviewable

    opened by abbradar 89
  • QtWebEngine and Wayland

    QtWebEngine and Wayland

    Apparently --backend webengine on Wayland (probably with QT_QPA_PLATFORM=wayland-egl or QT_QPA_PLATFORM=wayland, without xwayland) segfaults (or aborts?).

    We should probably detect that and show an error.

    priority: 2 - low component: QtWebEngine qt: 5.12 
    opened by The-Compiler 80
  • "Out of date webengine version" returned by WhatsApp login page

    Version info (see :version): 1.5.2-1

    qutebrowser 1.5.2-1 qt5-webengine 5.11.2-2

    Description Since this morning, accessing https://web.whatsapp.com/ return the following error message: "WhatsApp works with Google Chrome 36+, to use WhatsApp, update Chrome"

    Both qtwebengine and qutebrowser seems to be the latest available version.

    Is this more a bug for the Qt community ?

    priority: 0 - high bug: behavior 
    opened by epheo 69
  • [WIP] Download complete pages as .mhtml file

    [WIP] Download complete pages as .mhtml file

    Issue #953.

    Downloads the current page and each referenced asset (currently stylesheets, scripts and images) into a .mhtml file. The file can be opened natively by qutebrowser and Opera, and with unMHT also by Firefox.

    I've focused on the logic so far, integration in the UI and code quality is yet to come.


    This change is Reviewable

    opened by Kingdread 68
  • More sophisticated adblocking

    More sophisticated adblocking

    ~~There should be an adblocker.~~

    edit: A host-based adblocker which is sufficient for most cases is implemented since a long time already, this issue is still open because it could be improved by implementing ABP-like filterlist support.

    The eric IDE helpviewer does have one (in Python), which might be a good inspiration

    priority: 2 - low 
    opened by The-Compiler 68
  • More sophisticated adblocking using Brave's Rust adblocker

    More sophisticated adblocking using Brave's Rust adblocker

    Closes #29

    This work-in-progress PR uses python-adblock to enable more sophisticated ad blocking using ABP syntax. Said package is a wrapper around Brave's adblock-rust, accessible from Python.

    To do

    • [x] Tell the ad-blocker about the request type
    • [x] Allow file:// URLs containing filters. Similar to the host blocker.
    • [x] Add tests
    • [x] Create better documentation for the python-adblock package. Most of it could be sent upstream too. The comment in https://github.com/brave/adblock-rust/issues/85 is a good start.
      • [x] Add README.md
    • [x] Build python-adblock wheels for more platforms
    • [x] Get rid of upsteam print statements eprintln!(...) such as src/engine.rs#L166.
    • [x] Make python-adblock dependency optional. Gracefully handle the case where the dependency is not found.
    • [x] A whitelist configuration list.
    • [x] Type stubs for python-adblock. See https://github.com/ArniDagur/python-adblock/issues/3.
    • [x] Fix lint issues. Get the pipeline passing.
    • [ ] Find out what's up with first_party_url=None blocking every request.

    and probably more...

    Unresolved questions:

    • [x] What should the configuration options be called?
    • [x] Should references to Brave be removed in case we want to be implementation-agnostic? Should the adblocker just be called AdBlocker instead of BraveAdBlocker?
    • [x] Should adblock.py be split into adblock.py + hostblock.py, to allow brave.py share functionality such as _FakeDownload?
      • See https://github.com/qutebrowser/qutebrowser/pull/5317#discussion_r444787809
    opened by ArniDagur 66
  • Per domain settings

    Per domain settings

    For all settings where this makes sense, the setting should be configurable per domain (or probably even protocol/domain/port triple).

    This will make a lot of things easier:

    • NoScript is essentially done then
    • RequestPolicy is a lot easier
    • etc.
    component: config priority: 0 - high 
    opened by The-Compiler 64
  • Complete periodic freezes with intel graphics

    Complete periodic freezes with intel graphics

    Version info (see :version):

    qutebrowser v1.6.0
    Git commit: 
    Backend: QtWebEngine (Chromium 69.0.3497.128)
    
    CPython: 3.7.2
    Qt: 5.12.1
    PyQt: 5.12
    
    sip: 4.19.14
    colorama: 0.4.1
    pypeg2: 2.15
    jinja2: 2.10
    pygments: 2.3.1
    yaml: 3.13
    cssutils: no
    attr: 18.2.0
    PyQt5.QtWebEngineWidgets: yes
    PyQt5.QtWebKitWidgets: no
    pdf.js: no
    sqlite: 3.27.2
    QtNetwork SSL: OpenSSL 1.1.1b  26 Feb 2019
    
    Style: QFusionStyle
    Platform: Linux-5.0.0-arch1-1-ARCH-x86_64-with-arch, 64bit
    Linux distribution: Arch Linux (arch)
    Frozen: False
    Imported from /usr/lib/python3.7/site-packages/qutebrowser
    Using Python from /usr/bin/python3
    Qt library executable path: /usr/lib/qt/libexec, data path: /usr/share/qt
    
    Paths:
    cache: /home/rodencor/.cache/qutebrowser
    config: /home/rodencor/.config/qutebrowser
    data: /home/rodencor/.local/share/qutebrowser
    runtime: /run/user/1000/qutebrowser
    system data: /usr/share/qutebrowser
    

    Other info:

    [[email protected] ~]$ pacman -Qs xf86-video-intel
    local/xf86-video-intel 1:2.99.917+859+g33ee0c3b-1 (xorg-drivers)
        X.org Intel i810/i830/i915/945G/G965+ video drivers
    
    [[email protected] ~]$ xrandr | head -3
    Screen 0: minimum 8 x 8, current 3840 x 2160, maximum 32767 x 32767
    eDP1 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 350mm x 190mm
       3840x2160     60.00*+  59.97
    
    [[email protected] ~]$ lspci | grep VGA
    00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04)
    
    [[email protected] ~]$ echo $QT_SCALE_FACTOR
    2
    

    Window manager: DWM

    Does the bug happen if you start with --temp-basedir?:

    Yes. Probably. When there is one regular instance and one temp-basedir instance, I've seen both freeze. I've yet to repro with nothing but a temp-basedir open.

    Description

    Within a few minutes of starting, qutebrowser will completely hang.

    • It will not draw to the display at all
    • It will not respond to any inputs
    • It cannot be closed via the WM
    • It can be moved between workspaces, but will not continue drawing
    • It will not respond to SIGINT (but stops with kill -9)
    • It can be stopped with kill -9

    Nothing in particular seems to trigger this. I can leave it to sit in another workspace for awhile, and it will be frozen when I come back to it. The logs show nothing suspicious (see attached). I tried rolling back to the version of xf86-video-intel before I noticed this, but it still reproes.

    It happens pretty frequently on my intel/4k laptop, but I have yet to notice this on my NVIDIA/1920x1080 desktop (which is an otherwise similarly configured and updated Arch machine).

    I haven't tried to rollback QT yet. The last Arch update seemed to change how some of the qt/pyqt/webengine packages are organized, so it may be tricky.

    In the attached screenshot, the small thing that looks like a terminal is actually qutebrowser, but the terminal underneath is drawing into it (or something?).

    How to reproduce

    1552398468

    log.txt

    priority: 1 - middle component: QtWebEngine bug: segfault/crash/hang 
    opened by rcorre 56
  • macOS: `scrolling.smooth true` makes `scroll down/up` not work

    macOS: `scrolling.smooth true` makes `scroll down/up` not work

    Version info:

    qutebrowser v2.4.0
    Git commit: 36ffff2f6 on HEAD (2021-10-21 18:50:06 +0200)
    Backend: QtWebEngine 5.15.2, based on Chromium 83.0.4103.122
    Qt: 5.15.2
    

    macOS Monterey v12.0.1

    Does the bug happen if you start with --temp-basedir?:

    Yes.

    Description After upgrading to macOS Monterey, j and k (i.e. scroll down and scroll up) stopped working. I isolated the issue to having scroll.smooth set to True.

    How to reproduce

    • open a page long enough to require scrolling on qutebrowser
    • press j

    Expected: it scrolls down Actual: it does nothing.

    If I run the command :set scrolling.smooth false, it starts working. If I run set scrolling.smooth true, it stops again.

    opened by Timothee 2
  • :yank doesn't replace previous url in

    :yank doesn't replace previous url in "current kill" until emacs is clicked/selected

    **Version info**: qutebrowser v2.4.0 Git commit: Backend: QtWebEngine 5.15.6, based on Chromium 87.0.4280.144 Qt: 5.15.2

    CPython: 3.9.7 PyQt: 5.15.4

    sip: 6.1.0.dev2104271705 colorama: 0.4.4 jinja2: 2.11.3 pygments: 2.7.1 yaml: 5.3.1 adblock: 0.5.0 PyQt5.QtWebEngineWidgets: yes PyQt5.QtWebEngine: 5.15.4 PyQt5.QtWebKitWidgets: yes pdf.js: no sqlite: 3.35.5 QtNetwork SSL: OpenSSL 1.1.1l 24 Aug 2021

    Style: QFusionStyle Platform plugin: xcb OpenGL: Intel, 4.6 (Compatibility Profile) Mesa 21.2.2 Platform: Linux-5.13.0-21-lowlatency-x86_64-with-glibc2.34, 64bit Linux distribution: Ubuntu 21.10 (ubuntu) Frozen: False Imported from /home/me/.local/lib/python3.9/site-packages/qutebrowser Using Python from /usr/bin/python3 Qt library executable path: /usr/lib/x86_64-linux-gnu/qt5/libexec, data path: /usr/share/qt5

    Paths: cache: /home/me/.cache/qutebrowser config: /home/me/.config/qutebrowser data: /home/me/.local/share/qutebrowser runtime: /run/user/1000/qutebrowser system data: /usr/share/qutebrowser

    Autoconfig loaded: no Config.py: /home/me/.config/qutebrowser/config.py has been loaded Uptime: 0:00:00

    Does the bug happen if you start with --temp-basedir?: Yes

    Description Doing a :yank to get the current page url doesn't go into the clipboard until clicking on an app (qutebrowser or otherwise). It might be after the 1st :yank that this behavior happens (ie. first :yank works correctly, subsequent do not).

    How to reproduce Have a script of somekind that will use the :yank'd url immediately after issuing the :yank command (for example i have a youtube-dl command bound to a hotkey). It will instead have the previously :yank'd url (or whatever was currently in the clipboard), until you interact with an app in some way (clicking/selecting/alt-tabbing).

    qt priority: 2 - low bug: behavior 
    opened by tinglycraniumplacidly 7
  • Popup and tooltip not close

    Popup and tooltip not close

    Version info:

    Description Screen Shot 2021-11-20 at 10 07 39

    when i click right mouse the popup will open but it never close when i click left mouse. Also when hover to somebox the tooltip show but never close.

    As you can see on the picture many popups appear at the same time

    How to reproduce

    status: can't reproduce status: needs triage 
    opened by loishy 4
  • Crashes tring to login to Google

    Crashes tring to login to Google

    I have been experiencing issues with qutebrowser crashing while trying to login to my Google account with 2 factor auth/advanced account protection being enable on FreeBSD and a Yubikey Neo security key.

    OS: 13.0-RELEASE-p5 Qutebrowser info: https://paste.the-compiler.org/view/69663e60

    Qutebrowser debug output

    07:52:43 DEBUG    init       earlyinit:init_log:272 Log initialized.
    07:52:43 DEBUG    init       app:run:85 Main process PID: 53016
    07:52:43 DEBUG    init       app:run:87 Initializing directories...
    07:52:43 DEBUG    init       standarddir:init:353 Base directory: /tmp/qutebrowser-basedir-o2dltiwt
    07:52:43 DEBUG    init       app:run:91 Initializing config...
    07:52:43 DEBUG    misc       elf:parse_webenginecore:325 QtWebEngine .so found at /usr/local/lib/qt5/libQt5WebEngineCore.so.5.15.2
    07:52:43 DEBUG    misc       elf:parse_webenginecore:331 Got versions from ELF: Versions(webengine='5.15.2', chromium='83.0.4103.122')
    07:52:43 DEBUG    init       app:run:94 Initializing application...
    07:52:43 DEBUG    misc       elf:parse_webenginecore:325 QtWebEngine .so found at /usr/local/lib/qt5/libQt5WebEngineCore.so.5.15.2
    07:52:43 DEBUG    misc       elf:parse_webenginecore:331 Got versions from ELF: Versions(webengine='5.15.2', chromium='83.0.4103.122')
    07:52:43 DEBUG    init       darkmode:settings:379 Darkmode variant: qt_515_2
    07:52:43 DEBUG    init       app:__init__:555 Commandline args: ['--debug', '--temp-basedir']
    07:52:43 DEBUG    init       app:__init__:556 Parsed: Namespace(backend=None, basedir='/tmp/qutebrowser-basedir-o2dltiwt', color=True, command=[], config_py=None, debug=True, debug_flags=[], desktop_file_name='org.qutebrowser.qutebrowser', enable_webengine_inspector=False, force_color=False, json_args=None, json_logging=False, logfilter=None, loglevel=None, loglines=2000, no_err_windows=False, nowindow=False, override_restore=False, qt_arg=None, qt_flag=None, session=None, target=None, temp_basedir=True, temp_basedir_restarted=False, temp_settings=[], untrusted_args=False, url=[], version=False)
    07:52:43 DEBUG    init       app:__init__:557 Qt arguments: ['--blink-settings=preferredColorScheme=2', '--enable-features=OverlayScrollbar,ReducedReferrerGranularity', '--disable-features=InstalledApp']
    07:52:44 DEBUG    init       app:__init__:562 Initializing application...
    07:52:44 DEBUG    ipc        ipc:send_to_running_instance:476 Connecting to /tmp/qutebrowser-basedir-o2dltiwt/runtime/ipc-4b1c901188e968e95def81bd11ff14ea
    07:52:44 DEBUG    ipc        ipc:send_to_running_instance:506 No existing instance present (error 2)
    07:52:44 DEBUG    init       ipc:send_or_listen:536 Starting IPC server...
    07:52:44 DEBUG    ipc        ipc:__init__:210 Not calling setSocketOptions
    07:52:44 DEBUG    ipc        ipc:listen:221 Listening as /tmp/qutebrowser-basedir-o2dltiwt/runtime/ipc-4b1c901188e968e95def81bd11ff14ea
    07:52:44 DEBUG    init       app:init:145 Starting init...
    07:52:44 DEBUG    extensions loader:_load_component:158 Importing qutebrowser.components.adblockcommands
    07:52:44 DEBUG    extensions loader:_load_component:158 Importing qutebrowser.components.braveadblock
    07:52:44 DEBUG    extensions loader:_load_component:166 Running init hook 'init'
    07:52:44 DEBUG    extensions loader:_load_component:158 Importing qutebrowser.components.caretcommands
    07:52:44 DEBUG    extensions loader:_load_component:158 Importing qutebrowser.components.hostblock
    07:52:44 DEBUG    extensions loader:_load_component:166 Running init hook 'init'
    07:52:44 DEBUG    network    hostblock:_should_be_used:82 Configured adblock method auto, adblock library usable: True
    07:52:44 DEBUG    extensions loader:_load_component:158 Importing qutebrowser.components.misccommands
    07:52:44 DEBUG    extensions loader:_load_component:158 Importing qutebrowser.components.readlinecommands
    07:52:44 DEBUG    extensions loader:_load_component:158 Importing qutebrowser.components.scrollcommands
    07:52:44 DEBUG    extensions loader:_load_component:158 Importing qutebrowser.components.utils.blockutils
    07:52:44 DEBUG    extensions loader:_load_component:158 Importing qutebrowser.components.zoomcommands
    07:52:44 DEBUG    init       app:_init_modules:454 Initializing logging from config...
    07:52:44 DEBUG    init       log:init_from_config:547 --debug flag overrides log configs
    07:52:44 DEBUG    init       app:_init_modules:458 Initializing save manager...
    07:52:44 DEBUG    init       app:_init_modules:464 Checking backend requirements...
    07:52:44 DEBUG    init       app:_init_modules:467 Initializing prompts...
    07:52:44 DEBUG    init       app:_init_modules:470 Initializing network...
    07:52:44 DEBUG    init       app:_init_modules:473 Initializing proxy...
    07:52:44 DEBUG    init       app:_init_modules:477 Initializing downloads...
    07:52:44 DEBUG    init       app:_init_modules:483 Initializing web history...
    07:52:44 DEBUG    sql        sql:run:334 pragma user_version
    07:52:44 DEBUG    sql        sql:run:334 PRAGMA journal_mode=WAL
    07:52:44 DEBUG    sql        sql:run:334 PRAGMA synchronous=NORMAL
    07:52:44 DEBUG    sql        sql:run:334 CREATE TABLE IF NOT EXISTS History (url NOT NULL, title NOT NULL, atime NOT NULL, redirect NOT NULL)
    07:52:44 DEBUG    sql        sql:run:334 CREATE TABLE IF NOT EXISTS CompletionHistory (url PRIMARY KEY, title NOT NULL, last_atime NOT NULL)
    07:52:44 DEBUG    sql        sql:run:334 CREATE INDEX IF NOT EXISTS CompletionHistoryAtimeIndex ON CompletionHistory (last_atime)
    07:52:44 DEBUG    sql        sql:run:334 CREATE TABLE IF NOT EXISTS CompletionMetaInfo (key PRIMARY KEY, value )
    07:52:44 DEBUG    sql        sql:run:334 SELECT EXISTS(SELECT * FROM CompletionMetaInfo WHERE key = :val)
    07:52:44 DEBUG    sql        sql:run:338     {':val': 'excluded_patterns'}
    07:52:44 DEBUG    sql        sql:run:334 REPLACE INTO CompletionMetaInfo (key, value) values(:key, :value)
    07:52:44 DEBUG    sql        sql:run:338     {':key': 'excluded_patterns', ':value': ''}
    07:52:44 DEBUG    sql        sql:run:334 SELECT EXISTS(SELECT * FROM CompletionMetaInfo WHERE key = :val)
    07:52:44 DEBUG    sql        sql:run:338     {':val': 'force_rebuild'}
    07:52:44 DEBUG    sql        sql:run:334 REPLACE INTO CompletionMetaInfo (key, value) values(:key, :value)
    07:52:44 DEBUG    sql        sql:run:338     {':key': 'force_rebuild', ':value': False}
    07:52:44 DEBUG    sql        sql:run:334 SELECT value FROM CompletionMetaInfo WHERE key = :key
    07:52:44 DEBUG    sql        sql:run:338     {':key': 'force_rebuild'}
    07:52:44 DEBUG    sql        sql:__enter__:256 Starting a transaction
    07:52:44 DEBUG    sql        sql:run:334 DELETE FROM History WHERE url LIKE 'data:%' OR url LIKE 'view-source:%' OR url LIKE 'qute://back%' OR url LIKE 'qute://pdfjs%'
    07:52:44 DEBUG    sql        history:_cleanup_history:282 Cleanup removed 0 items
    07:52:44 DEBUG    sql        sql:upgrade_user_version:231 Migrating from version 0.0 to 0.4
    07:52:44 DEBUG    sql        sql:run:334 PRAGMA user_version = 4
    07:52:44 DEBUG    sql        sql:__exit__:273 Committing a transaction
    07:52:44 DEBUG    sql        sql:run:334 SELECT value FROM CompletionMetaInfo WHERE key = :key
    07:52:44 DEBUG    sql        sql:run:338     {':key': 'excluded_patterns'}
    07:52:44 DEBUG    sql        sql:run:334 SELECT 1 FROM History LIMIT 1
    07:52:44 DEBUG    init       debug:__exit__:306 Initializing sql/history took 0.012301 seconds.
    07:52:44 DEBUG    init       app:_init_modules:492 Initializing command history...
    07:52:44 DEBUG    init       app:_init_modules:495 Initializing websettings...
    07:52:44 DEBUG    init       webenginesettings:init:495 Initializing qute://* handler...
    07:52:44 DEBUG    init       webenginesettings:init:499 Initializing request interceptor...
    07:52:44 DEBUG    init       webenginesettings:init:504 Initializing QtWebEngine downloads...
    07:52:44 DEBUG    init       webenginesettings:init:510 Initializing notification presenter...
    07:52:44 DEBUG    misc       elf:parse_webenginecore:325 QtWebEngine .so found at /usr/local/lib/qt5/libQt5WebEngineCore.so.5.15.2
    07:52:44 DEBUG    misc       elf:parse_webenginecore:331 Got versions from ELF: Versions(webengine='5.15.2', chromium='83.0.4103.122')
    07:52:44 DEBUG    misc       elf:parse_webenginecore:325 QtWebEngine .so found at /usr/local/lib/qt5/libQt5WebEngineCore.so.5.15.2
    07:52:44 DEBUG    misc       elf:parse_webenginecore:331 Got versions from ELF: Versions(webengine='5.15.2', chromium='83.0.4103.122')
    07:52:44 DEBUG    init       webenginesettings:init:513 Initializing global settings...
    07:52:44 DEBUG    init       webenginesettings:init:517 Initializing profiles...
    amdgpu: os_same_file_description couldn't determine if two DRM fds reference the same file description.
    If they do, bad things may happen!
    07:52:44 DEBUG    misc       elf:parse_webenginecore:325 QtWebEngine .so found at /usr/local/lib/qt5/libQt5WebEngineCore.so.5.15.2
    07:52:44 DEBUG    misc       elf:parse_webenginecore:331 Got versions from ELF: Versions(webengine='5.15.2', chromium='83.0.4103.122')
    [53016:1054982144:1119/075244.983953:WARNING:important_file_writer.cc(81)] temp file failure: /home/vendion/.local/share/qutebrowser/qutebrowser/QtWebEngine/Default/user_prefs.json : could not create temporary file: No such file or directory (2)
    07:52:44 DEBUG    config     webenginesettings:set_dictionary_language:327 Found dicts: []
    07:52:44 DEBUG    config     webenginesettings:set_dictionary_language:327 Found dicts: []
    07:52:44 DEBUG    init       webenginesettings:init:522 Misc initialization...
    07:52:44 DEBUG    config     config:_set_value:351 Config option changed: content.headers.user_agent = Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}
    07:52:44 DEBUG    config     config:_set_value:351 Config option changed: content.headers.user_agent = Mozilla/5.0 ({os_info}; rv:90.0) Gecko/20100101 Firefox/90.0
    07:52:44 DEBUG    config     config:_set_value:351 Config option changed: content.headers.user_agent = Mozilla/5.0 ({os_info}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99 Safari/537.36
    07:52:44 DEBUG    config     config:_set_value:351 Config option changed: content.headers.accept_language = 
    07:52:44 DEBUG    config     config:_set_value:351 Config option changed: content.javascript.enabled = True
    07:52:44 DEBUG    config     config:_set_value:351 Config option changed: content.javascript.enabled = True
    07:52:44 DEBUG    config     config:_set_value:351 Config option changed: content.images = True
    07:52:44 DEBUG    config     config:_set_value:351 Config option changed: content.images = True
    07:52:44 DEBUG    config     config:_set_value:351 Config option changed: content.cookies.accept = all
    07:52:44 DEBUG    config     config:_set_value:351 Config option changed: content.cookies.accept = all
    07:52:44 DEBUG    config     config:_set_value:351 Config option changed: content.javascript.enabled = True
    07:52:44 DEBUG    config     config:_set_value:351 Config option changed: content.javascript.enabled = True
    07:52:44 DEBUG    init       app:_init_modules:499 Initializing sessions...
    07:52:44 DEBUG    init       app:_init_modules:505 Initializing quickmarks...
    07:52:44 DEBUG    save       savemanager:save:95 Save of quickmark-manager requested - dirty True, save_on_exit False, is_exit False, force False -> True
    07:52:44 DEBUG    destroy    lineparser:_after_save:81 Saved to /tmp/qutebrowser-basedir-o2dltiwt/config/quickmarks
    07:52:44 DEBUG    init       app:_init_modules:509 Initializing bookmarks...
    07:52:44 DEBUG    save       savemanager:save:95 Save of bookmark-manager requested - dirty True, save_on_exit False, is_exit False, force False -> True
    07:52:44 DEBUG    destroy    lineparser:_after_save:81 Saved to /tmp/qutebrowser-basedir-o2dltiwt/config/bookmarks/urls
    07:52:44 DEBUG    init       app:_init_modules:513 Initializing cookies...
    07:52:44 DEBUG    init       app:_init_modules:516 Initializing cache...
    07:52:45 DEBUG    init       app:_init_modules:519 Initializing downloads...
    07:52:45 DEBUG    init       networkmanager:__init__:159 Initializing NetworkManager
    07:52:45 DEBUG    init       networkmanager:__init__:166 NetworkManager init done
    07:52:45 DEBUG    init       app:_init_modules:522 Initializing Greasemonkey...
    07:52:45 DEBUG    greasemonkey greasemonkey:load_scripts:307 Reading scripts from: /tmp/qutebrowser-basedir-o2dltiwt/data/greasemonkey
    07:52:45 DEBUG    greasemonkey greasemonkey:load_scripts:307 Reading scripts from: /tmp/qutebrowser-basedir-o2dltiwt/config/greasemonkey
    07:52:45 DEBUG    init       app:_init_modules:525 Misc initialization...
    07:52:45 DEBUG    init       app:init:165 Initializing eventfilter...
    07:52:45 DEBUG    init       app:init:168 Connecting signals...
    07:52:45 DEBUG    init       app:_process_args:220 Initializing main window...
    07:52:45 DEBUG    init       mainwindow:_init_downloadmanager:355 Initializing downloads...
    07:52:45 DEBUG    statusbar  bar:_hide_cmd_widget:361 Hiding cmd widget
    07:52:45 DEBUG    init       mainwindow:__init__:249 Initializing modes...
    07:52:45 DEBUG    init       mainwindow:_init_geometry:292 Initial main window geometry: PyQt5.QtCore.QRect(50, 50, 800, 600)
    07:52:45 DEBUG    init       app:_open_startpage:337 Opening start pages
    07:52:45 DEBUG    url        urlutils:get_path_if_valid:366 Checking if 'https://start.duckduckgo.com' is a path
    07:52:45 DEBUG    url        urlutils:fuzzy_url:225 URL is a fuzzy address
    07:52:45 DEBUG    url        urlutils:fuzzy_url:227 Converting fuzzy term 'https://start.duckduckgo.com' to URL -> https://start.duckduckgo.com
    07:52:45 DEBUG    webview    tabbedbrowser:tabopen:593 Creating new tab with URL PyQt5.QtCore.QUrl('https://start.duckduckgo.com'), background None, related True, idx None
    07:52:45 DEBUG    webview    tabbedbrowser:_get_new_tab_idx:680 tabs.new_position next -> opening new tab at -1, next left: 0 / right: 0
    07:52:45 DEBUG    modes      tabbedbrowser:_on_current_changed:832 Current tab changed, focusing <qutebrowser.browser.webengine.webenginetab.WebEngineTab tab_id=0 url=''>
    07:52:45 DEBUG    modes      tabbedbrowser:_on_current_changed:839 Mode before tab change: normal (mode_on_change = normal)
    07:52:45 DEBUG    modes      modeman:leave:424 Ignoring leave request for KeyMode.hint (reason tab changed) as we're in mode KeyMode.normal
    07:52:45 DEBUG    modes      modeman:leave:424 Ignoring leave request for KeyMode.caret (reason tab changed) as we're in mode KeyMode.normal
    07:52:45 DEBUG    modes      modeman:leave:424 Ignoring leave request for KeyMode.insert (reason tab changed) as we're in mode KeyMode.normal
    07:52:45 DEBUG    modes      modeman:leave:424 Ignoring leave request for KeyMode.passthrough (reason tab changed) as we're in mode KeyMode.normal
    07:52:45 DEBUG    modes      tabbedbrowser:_on_current_changed:850 Mode after tab change: normal (mode_on_change = normal)
    07:52:45 DEBUG    webview    browsertab:_on_before_load_started:1041 Going to start loading: https://start.duckduckgo.com
    07:52:45 DEBUG    webview    tabbedbrowser:_on_title_changed:757 Changing title for idx 0 to 'https://start.duckduckgo.com'
    07:52:45 DEBUG    misc       eventfilter:eventFilter:53 <qutebrowser.browser.webengine.webview.WebEngineView object at 0x847416b80> got new child <PyQt5.QtWidgets.QWidget object at 0x8474195e0>, installing filter
    07:52:45 DEBUG    init       app:_process_args:239 Init finished after 2.044862s
    07:52:45 DEBUG    init       app:init:177 Init done!
    07:52:45 DEBUG    misc       mainwindow:_update_overlay_geometry:350 new geometry for <qutebrowser.mainwindow.messageview.MessageView object at 0x8469b1940>: PyQt5.QtCore.QRect(0, 581, 801, 1)
    07:52:45 DEBUG    misc       app:on_focus_object_changed:581 Focus object changed: <PyQt5.QtWidgets.QWidget object at 0x8474195e0>
    07:52:45 DEBUG    webview    browsertab:_on_navigation_request:1065 navigation request: url https://start.duckduckgo.com/, type Type.typed, is_main_frame True
    07:52:45 DEBUG    webview    webenginetab:_store_match_data:151 Active search match: 0/0
    07:52:45 DEBUG    webview    browsertab:_set_load_status:1007 load status for <qutebrowser.browser.webengine.webenginetab.WebEngineTab tab_id=0 url=''>: LoadStatus.loading
    07:52:45 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_status_changed(<LoadStatus.loading: 6>) (tab 0)
    07:52:45 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_started() (tab 0)
    [53016:1094823936:1119/075245.996573:WARNING:linux_util.cc(146)] Cannot open /proc/53167/task
    [53086:587313152:1119/075246.011399:WARNING:simple_synchronous_entry.cc(1389)] Could not open platform files for entry.
    07:52:46 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_url_changed(PyQt5.QtCore.QUrl('https://start.duckduckgo.com/')) (tab 0)
    07:52:46 DEBUG    webview    tabbedbrowser:_on_title_changed:757 Changing title for idx 0 to 'https://start.duckduckgo.com'
    07:52:46 DEBUG    webview    tabbedbrowser:_on_title_changed:757 Changing title for idx 0 to 'DuckDuckGo — Privacy, simplified.'
    07:52:47 DEBUG    webview    browsertab:_on_navigation_request:1065 navigation request: url https://start.duckduckgo.com/post3.html, type Type.other, is_main_frame False
    07:52:47 DEBUG    webview    browsertab:_set_load_status:1007 load status for <qutebrowser.browser.webengine.webenginetab.WebEngineTab tab_id=0 url='https://start.duckduckgo.com/'>: LoadStatus.success_https
    07:52:47 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_status_changed(<LoadStatus.success_https: 3>) (tab 0)
    07:52:47 DEBUG    sql        sql:run:334 INSERT INTO History (url, title, atime, redirect) values(:url, :title, :atime, :redirect)
    07:52:47 DEBUG    sql        sql:run:338     {':atime': 1637326367, ':redirect': False, ':title': 'DuckDuckGo — Privacy, simplified.', ':url': 'https://start.duckduckgo.com/'}
    07:52:47 DEBUG    sql        sql:run:334 REPLACE INTO CompletionHistory (url, title, last_atime) values(:url, :title, :last_atime)
    07:52:47 DEBUG    sql        sql:run:338     {':last_atime': 1637326367, ':title': 'DuckDuckGo — Privacy, simplified.', ':url': 'https://start.duckduckgo.com/'}
    07:52:47 DEBUG    sessions   sessions:save:338 Saving session _autosave to /tmp/qutebrowser-basedir-o2dltiwt/data/sessions/_autosave.yml...
    07:52:47 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_finished(True) (tab 0)
    07:52:47 DEBUG    modes      modeman:leave:424 Ignoring leave request for KeyMode.insert (reason load started) as we're in mode KeyMode.normal
    07:52:47 DEBUG    modes      tabbedbrowser:_leave_modes_on_load:737 Ignoring leave_on_load request due to setting.
    07:52:48 DEBUG    webview    webenginetab:_js_cb_single:752 Got element from JS: {'attributes': {'class': 'cw--c'}, 'class_name': 'cw--c', 'id': 0, 'is_content_editable': False, 'outer_xml': '<div class="cw--c">\n\t\t\t\t\t\t\t\t<div class="logo-wrap--home">\n\t\t\t<a id="logo_homepage_link" class="logo_homepage" href="/about">\n\t\t\t\tAbout DuckDuckGo\n\t\t\t\t<span class="logo_homepage__tt">Duck it!</span>\n\t\t\t</a>\n\t\t</div>\n\n\t\t\t\t\t\t<div class="search-wrap--home">\n\t\t\t\t\t\t\t<form id="search_form_homepage" class="search--home  js-search-form search--adv" name="x" method="GET" action="//duckduckgo.com/">\n    <input id="search_form_input_homepage" class="js-search-input search__input--adv" type="text" autocomplete="off" name="q" tabindex="1" value="" autocapitalize="off" autocorrect="off">\n    <input id="search_button_homepage" class="search__button  js-search-button" type="submit" tabindex="2" value="S">\n    <input id="search_form_input_clear" class="search__clear  empty  js-search-clear" type="button" tabindex="3" value="X">\n    <div id="sea…
    07:52:48 DEBUG    webelem    webelem:is_editable:252 Checking if element is editable: <qutebrowser.browser.webengine.webengineelem.WebEngineElement html='<div class="cw--c"><div class="logo-wrap--home"><a id="logo_homepage_link" class="logo_homepage" href="/about">About DuckDuckGo<span class="logo_homepage__tt">Duck it!</span></a></div><div class="search-wrap--home"><form id="search_form_homepage" class="search--home  js-search-form search--adv" name="x" method="GET" action="//duckduckgo.com/"><input id="search_form_input_homepage" class="js-search-input search__input--adv" type="text" autocomplete="off" name="q" tabindex="1" value="" autocapita…'>
    07:52:48 DEBUG    mouse      eventfilter:_mousepress_insertmode_cb:204 Clicked non-editable element!
    07:52:48 DEBUG    modes      modeman:leave:424 Ignoring leave request for KeyMode.insert (reason click) as we're in mode KeyMode.normal
    07:52:49 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.normal - delegating to <qutebrowser.keyinput.modeparsers.NormalKeyParser>
    07:52:49 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Got key: 0x4f / modifiers: 0x0 / text: 'o' / dry_run True
    07:52:49 DEBUG    modes      modeman:_handle_keypress:312 match: 2, forward_unbound_keys: auto, passthrough: False, is_non_alnum: False, dry_run: True --> filter: True (focused: <PyQt5.QtWidgets.QWidget object at 0x847419670>)
    07:52:49 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.normal - delegating to <qutebrowser.keyinput.modeparsers.NormalKeyParser>
    07:52:49 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Got key: 0x4f / modifiers: 0x0 / text: 'o' / dry_run False
    07:52:49 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Definitive match for 'o'.
    07:52:49 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Clearing keystring (was: o).
    07:52:49 DEBUG    commands   command:run:537 command called: set-cmd-text ['-s', ':open']
    07:52:49 DEBUG    commands   command:run:551 Calling qutebrowser.mainwindow.statusbar.command.Command.set_cmd_text_command(<qutebrowser.mainwindow.statusbar.command.Command>, ':open', None, True, False, False)
    07:52:49 DEBUG    completion completer:schedule_completion_update:224 Scheduling completion update.
    07:52:49 DEBUG    completion completer:schedule_completion_update:221 Ignoring update because there were no changes.
    07:52:49 DEBUG    modes      command:set_cmd_text:111 Setting command text, focusing <qutebrowser.mainwindow.statusbar.command.Command>
    07:52:49 DEBUG    modes      modeman:enter:363 Entering mode KeyMode.command (reason: cmd focus)
    07:52:49 DEBUG    statusbar  bar:set_mode_active:327 Setting command flag to True
    07:52:49 DEBUG    misc       app:on_focus_object_changed:581 Focus object changed: <qutebrowser.mainwindow.statusbar.command.Command>
    07:52:49 DEBUG    misc       app:on_focus_object_changed:581 Focus object changed: <PyQt5.QtWidgets.QWidget object at 0x8474198b0>
    07:52:49 DEBUG    misc       app:on_focus_object_changed:581 Focus object changed: <qutebrowser.mainwindow.statusbar.command.Command>
    07:52:49 DEBUG    modes      modeman:_handle_keypress:312 match: 2, forward_unbound_keys: auto, passthrough: False, is_non_alnum: False, dry_run: False --> filter: True (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:49 DEBUG    completion completer:_partition:153 partitioning ['open', ' '] around position 5
    07:52:49 DEBUG    completion completer:_partition:164 partitioned: ['open'] '' []
    07:52:49 DEBUG    completion completer:_update_completion:246 Updating completion: ['open']  []
    07:52:49 DEBUG    completion completer:_get_new_completion:95 Before removing flags: ['open']
    07:52:49 DEBUG    completion completer:_get_new_completion:108 After removing flags: ['open']
    07:52:49 DEBUG    completion debug:__exit__:306 Starting url completion took 0.000946 seconds.
    07:52:49 DEBUG    completion debug:__exit__:306 Set completion model took 0.000671 seconds.
    07:52:49 DEBUG    completion completionmodel:set_pattern:181 Setting completion pattern ''
    07:52:49 DEBUG    sql        sql:run:334 SELECT url, title, strftime('%Y-%m-%d %H:%M', last_atime, 'unixepoch', 'localtime') FROM CompletionHistory WHERE ((url LIKE :0 escape '\' OR title LIKE :0 escape '\'))  ORDER BY last_atime DESC
    07:52:49 DEBUG    sql        sql:run:338     {':0': '%%'}
    07:52:49 DEBUG    sql        debug:__exit__:306 Running completion query took 0.000306 seconds.
    07:52:49 DEBUG    misc       mainwindow:_update_overlay_geometry:350 new geometry for <qutebrowser.completion.completionwidget.CompletionView>: PyQt5.QtCore.QRect(0, 281, 801, 301)
    07:52:49 DEBUG    completion debug:__exit__:306 Set pattern  took 0.008374 seconds.
    07:52:49 DEBUG    modes      modeman:_handle_keyrelease:337 filter: True
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    completion completer:schedule_completion_update:224 Scheduling completion update.
    07:52:50 DEBUG    completion completer:schedule_completion_update:221 Ignoring update because there were no changes.
    07:52:50 DEBUG    completion completer:_partition:153 partitioning ['open', ' g'] around position 6
    07:52:50 DEBUG    completion completer:_partition:164 partitioned: ['open'] 'g' []
    07:52:50 DEBUG    completion completer:_update_completion:246 Updating completion: ['open'] g []
    07:52:50 DEBUG    completion completer:_get_new_completion:95 Before removing flags: ['open']
    07:52:50 DEBUG    completion completer:_get_new_completion:108 After removing flags: ['open']
    07:52:50 DEBUG    completion completionmodel:set_pattern:181 Setting completion pattern 'g'
    07:52:50 DEBUG    sql        sql:run:334 SELECT url, title, strftime('%Y-%m-%d %H:%M', last_atime, 'unixepoch', 'localtime') FROM CompletionHistory WHERE ((url LIKE :0 escape '\' OR title LIKE :0 escape '\'))  ORDER BY last_atime DESC
    07:52:50 DEBUG    sql        sql:run:338     {':0': '%g%'}
    07:52:50 DEBUG    sql        debug:__exit__:306 Running completion query took 0.000288 seconds.
    07:52:50 DEBUG    completion debug:__exit__:306 Set pattern g took 0.000733 seconds.
    07:52:50 DEBUG    modes      modeman:_handle_keyrelease:337 filter: False
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    completion completer:schedule_completion_update:224 Scheduling completion update.
    07:52:50 DEBUG    completion completer:schedule_completion_update:221 Ignoring update because there were no changes.
    07:52:50 DEBUG    completion completer:_partition:153 partitioning ['open', ' go'] around position 7
    07:52:50 DEBUG    completion completer:_partition:164 partitioned: ['open'] 'go' []
    07:52:50 DEBUG    completion completer:_update_completion:246 Updating completion: ['open'] go []
    07:52:50 DEBUG    completion completer:_get_new_completion:95 Before removing flags: ['open']
    07:52:50 DEBUG    completion completer:_get_new_completion:108 After removing flags: ['open']
    07:52:50 DEBUG    completion completionmodel:set_pattern:181 Setting completion pattern 'go'
    07:52:50 DEBUG    sql        sql:run:334 SELECT url, title, strftime('%Y-%m-%d %H:%M', last_atime, 'unixepoch', 'localtime') FROM CompletionHistory WHERE ((url LIKE :0 escape '\' OR title LIKE :0 escape '\'))  ORDER BY last_atime DESC
    07:52:50 DEBUG    sql        sql:run:338     {':0': '%go%'}
    07:52:50 DEBUG    sql        debug:__exit__:306 Running completion query took 0.000282 seconds.
    07:52:50 DEBUG    completion debug:__exit__:306 Set pattern go took 0.000725 seconds.
    07:52:50 DEBUG    modes      modeman:_handle_keyrelease:337 filter: False
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    completion completer:schedule_completion_update:224 Scheduling completion update.
    07:52:50 DEBUG    completion completer:schedule_completion_update:221 Ignoring update because there were no changes.
    07:52:50 DEBUG    completion completer:_partition:153 partitioning ['open', ' goo'] around position 8
    07:52:50 DEBUG    completion completer:_partition:164 partitioned: ['open'] 'goo' []
    07:52:50 DEBUG    completion completer:_update_completion:246 Updating completion: ['open'] goo []
    07:52:50 DEBUG    completion completer:_get_new_completion:95 Before removing flags: ['open']
    07:52:50 DEBUG    completion completer:_get_new_completion:108 After removing flags: ['open']
    07:52:50 DEBUG    completion completionmodel:set_pattern:181 Setting completion pattern 'goo'
    07:52:50 DEBUG    sql        sql:run:334 SELECT url, title, strftime('%Y-%m-%d %H:%M', last_atime, 'unixepoch', 'localtime') FROM CompletionHistory WHERE ((url LIKE :0 escape '\' OR title LIKE :0 escape '\'))  ORDER BY last_atime DESC
    07:52:50 DEBUG    sql        sql:run:338     {':0': '%goo%'}
    07:52:50 DEBUG    sql        debug:__exit__:306 Running completion query took 0.000282 seconds.
    07:52:50 DEBUG    completion debug:__exit__:306 Set pattern goo took 0.00079 seconds.
    07:52:50 DEBUG    modes      modeman:_handle_keyrelease:337 filter: False
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    completion completer:schedule_completion_update:224 Scheduling completion update.
    07:52:50 DEBUG    completion completer:schedule_completion_update:221 Ignoring update because there were no changes.
    07:52:50 DEBUG    completion completer:_partition:153 partitioning ['open', ' goog'] around position 9
    07:52:50 DEBUG    completion completer:_partition:164 partitioned: ['open'] 'goog' []
    07:52:50 DEBUG    completion completer:_update_completion:246 Updating completion: ['open'] goog []
    07:52:50 DEBUG    completion completer:_get_new_completion:95 Before removing flags: ['open']
    07:52:50 DEBUG    completion completer:_get_new_completion:108 After removing flags: ['open']
    07:52:50 DEBUG    completion completionmodel:set_pattern:181 Setting completion pattern 'goog'
    07:52:50 DEBUG    sql        histcategory:set_pattern:81 Skipping query on goog due to prefix goo returning nothing.
    07:52:50 DEBUG    completion debug:__exit__:306 Set pattern goog took 0.000327 seconds.
    07:52:50 DEBUG    modes      modeman:_handle_keyrelease:337 filter: False
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    completion completer:schedule_completion_update:224 Scheduling completion update.
    07:52:50 DEBUG    completion completer:schedule_completion_update:221 Ignoring update because there were no changes.
    07:52:50 DEBUG    completion completer:_partition:153 partitioning ['open', ' googl'] around position 10
    07:52:50 DEBUG    completion completer:_partition:164 partitioned: ['open'] 'googl' []
    07:52:50 DEBUG    completion completer:_update_completion:246 Updating completion: ['open'] googl []
    07:52:50 DEBUG    completion completer:_get_new_completion:95 Before removing flags: ['open']
    07:52:50 DEBUG    completion completer:_get_new_completion:108 After removing flags: ['open']
    07:52:50 DEBUG    completion completionmodel:set_pattern:181 Setting completion pattern 'googl'
    07:52:50 DEBUG    sql        histcategory:set_pattern:81 Skipping query on googl due to prefix goo returning nothing.
    07:52:50 DEBUG    completion debug:__exit__:306 Set pattern googl took 0.000318 seconds.
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    completion completer:schedule_completion_update:224 Scheduling completion update.
    07:52:50 DEBUG    completion completer:schedule_completion_update:221 Ignoring update because there were no changes.
    07:52:50 DEBUG    modes      modeman:_handle_keyrelease:337 filter: False
    07:52:50 DEBUG    completion completer:_partition:153 partitioning ['open', ' google'] around position 11
    07:52:50 DEBUG    completion completer:_partition:164 partitioned: ['open'] 'google' []
    07:52:50 DEBUG    completion completer:_update_completion:246 Updating completion: ['open'] google []
    07:52:50 DEBUG    completion completer:_get_new_completion:95 Before removing flags: ['open']
    07:52:50 DEBUG    completion completer:_get_new_completion:108 After removing flags: ['open']
    07:52:50 DEBUG    completion completionmodel:set_pattern:181 Setting completion pattern 'google'
    07:52:50 DEBUG    sql        histcategory:set_pattern:81 Skipping query on google due to prefix goo returning nothing.
    07:52:50 DEBUG    completion debug:__exit__:306 Set pattern google took 0.000364 seconds.
    07:52:50 DEBUG    modes      modeman:_handle_keyrelease:337 filter: False
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:50 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:50 DEBUG    completion completer:schedule_completion_update:224 Scheduling completion update.
    07:52:50 DEBUG    completion completer:schedule_completion_update:221 Ignoring update because there were no changes.
    07:52:50 DEBUG    completion completer:_partition:153 partitioning ['open', ' google.'] around position 12
    07:52:50 DEBUG    completion completer:_partition:164 partitioned: ['open'] 'google.' []
    07:52:50 DEBUG    completion completer:_update_completion:246 Updating completion: ['open'] google. []
    07:52:50 DEBUG    completion completer:_get_new_completion:95 Before removing flags: ['open']
    07:52:50 DEBUG    completion completer:_get_new_completion:108 After removing flags: ['open']
    07:52:50 DEBUG    completion completionmodel:set_pattern:181 Setting completion pattern 'google.'
    07:52:50 DEBUG    sql        histcategory:set_pattern:81 Skipping query on google. due to prefix goo returning nothing.
    07:52:50 DEBUG    completion debug:__exit__:306 Set pattern google. took 0.000346 seconds.
    07:52:51 DEBUG    modes      modeman:_handle_keyrelease:337 filter: False
    07:52:51 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:51 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:51 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:51 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:51 DEBUG    completion completer:schedule_completion_update:224 Scheduling completion update.
    07:52:51 DEBUG    completion completer:schedule_completion_update:221 Ignoring update because there were no changes.
    07:52:51 DEBUG    completion completer:_partition:153 partitioning ['open', ' google.c'] around position 13
    07:52:51 DEBUG    completion completer:_partition:164 partitioned: ['open'] 'google.c' []
    07:52:51 DEBUG    completion completer:_update_completion:246 Updating completion: ['open'] google.c []
    07:52:51 DEBUG    completion completer:_get_new_completion:95 Before removing flags: ['open']
    07:52:51 DEBUG    completion completer:_get_new_completion:108 After removing flags: ['open']
    07:52:51 DEBUG    completion completionmodel:set_pattern:181 Setting completion pattern 'google.c'
    07:52:51 DEBUG    sql        histcategory:set_pattern:81 Skipping query on google.c due to prefix goo returning nothing.
    07:52:51 DEBUG    completion debug:__exit__:306 Set pattern google.c took 0.000326 seconds.
    07:52:51 DEBUG    modes      modeman:_handle_keyrelease:337 filter: False
    07:52:51 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:51 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:51 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:51 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:51 DEBUG    completion completer:schedule_completion_update:224 Scheduling completion update.
    07:52:51 DEBUG    completion completer:schedule_completion_update:221 Ignoring update because there were no changes.
    07:52:51 DEBUG    completion completer:_partition:153 partitioning ['open', ' google.co'] around position 14
    07:52:51 DEBUG    completion completer:_partition:164 partitioned: ['open'] 'google.co' []
    07:52:51 DEBUG    completion completer:_update_completion:246 Updating completion: ['open'] google.co []
    07:52:51 DEBUG    completion completer:_get_new_completion:95 Before removing flags: ['open']
    07:52:51 DEBUG    completion completer:_get_new_completion:108 After removing flags: ['open']
    07:52:51 DEBUG    completion completionmodel:set_pattern:181 Setting completion pattern 'google.co'
    07:52:51 DEBUG    sql        histcategory:set_pattern:81 Skipping query on google.co due to prefix goo returning nothing.
    07:52:51 DEBUG    completion debug:__exit__:306 Set pattern google.co took 0.00035 seconds.
    07:52:51 DEBUG    modes      modeman:_handle_keyrelease:337 filter: False
    07:52:51 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:51 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:51 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:51 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: False (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:51 DEBUG    completion completer:schedule_completion_update:224 Scheduling completion update.
    07:52:51 DEBUG    completion completer:schedule_completion_update:221 Ignoring update because there were no changes.
    07:52:51 DEBUG    completion completer:_partition:153 partitioning ['open', ' google.com'] around position 15
    07:52:51 DEBUG    completion completer:_partition:164 partitioned: ['open'] 'google.com' []
    07:52:51 DEBUG    completion completer:_update_completion:246 Updating completion: ['open'] google.com []
    07:52:51 DEBUG    completion completer:_get_new_completion:95 Before removing flags: ['open']
    07:52:51 DEBUG    completion completer:_get_new_completion:108 After removing flags: ['open']
    07:52:51 DEBUG    completion completionmodel:set_pattern:181 Setting completion pattern 'google.com'
    07:52:51 DEBUG    sql        histcategory:set_pattern:81 Skipping query on google.com due to prefix goo returning nothing.
    07:52:51 DEBUG    completion debug:__exit__:306 Set pattern google.com took 0.000315 seconds.
    07:52:51 DEBUG    modes      modeman:_handle_keyrelease:337 filter: False
    07:52:51 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:51 DEBUG    modes      modeman:_handle_keypress:312 match: 2, forward_unbound_keys: auto, passthrough: True, is_non_alnum: True, dry_run: True --> filter: True (focused: <qutebrowser.mainwindow.statusbar.command.Command>)
    07:52:51 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.command - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=False mode=<KeyMode.command: 3> passthrough=True supports_count=False win_id=0>
    07:52:51 DEBUG    commands   command:run:537 command called: command-accept
    07:52:51 DEBUG    commands   command:run:551 Calling qutebrowser.mainwindow.statusbar.command.Command.command_accept(<qutebrowser.mainwindow.statusbar.command.Command>, False)
    07:52:51 DEBUG    save       savemanager:mark_dirty:73 Marking command-history as dirty.
    07:52:51 DEBUG    modes      modeman:leave:431 Leaving mode KeyMode.command (reason: cmd accept)
    07:52:51 DEBUG    statusbar  bar:set_mode_active:327 Setting command flag to False
    07:52:51 DEBUG    completion completer:schedule_completion_update:224 Scheduling completion update.
    07:52:51 DEBUG    completion completer:schedule_completion_update:221 Ignoring update because there were no changes.
    07:52:51 DEBUG    statusbar  bar:_hide_cmd_widget:361 Hiding cmd widget
    07:52:51 DEBUG    misc       app:on_focus_object_changed:581 Focus object changed: <qutebrowser.mainwindow.mainwindow.MainWindow>
    07:52:51 DEBUG    misc       app:on_focus_object_changed:581 Focus object changed: <qutebrowser.mainwindow.statusbar.textbase.TextBase text=''>
    07:52:51 DEBUG    modes      tabbedbrowser:on_mode_left:812 Left status-input mode, focusing <qutebrowser.browser.webengine.webenginetab.WebEngineTab tab_id=0 url='https://start.duckduckgo.com/'>
    07:52:51 DEBUG    misc       app:on_focus_object_changed:581 Focus object changed: <PyQt5.QtWidgets.QWidget object at 0x847419dc0>
    07:52:51 DEBUG    misc       app:on_focus_object_changed:581 Focus object changed: <PyQt5.QtCore.QObject object at 0x847419dc0>
    07:52:51 DEBUG    commands   command:run:537 command called: open ['google.com']
    07:52:51 DEBUG    commands   command:run:551 Calling qutebrowser.browser.commands.CommandDispatcher.openurl(<qutebrowser.browser.commands.CommandDispatcher>, 'google.com', False, False, False, False, None, False, False)
    07:52:51 DEBUG    url        urlutils:get_path_if_valid:366 Checking if 'google.com' is a path
    07:52:51 DEBUG    url        urlutils:is_url:271 Checking if 'google.com' is a URL (autosearch=naive).
    07:52:51 DEBUG    url        urlutils:is_url:314 Checking via naive check
    07:52:51 DEBUG    url        urlutils:is_url:318 url = True
    07:52:51 DEBUG    url        urlutils:fuzzy_url:225 URL is a fuzzy address
    07:52:51 DEBUG    url        urlutils:fuzzy_url:227 Converting fuzzy term 'google.com' to URL -> http://google.com
    07:52:51 DEBUG    webview    browsertab:_on_before_load_started:1041 Going to start loading: http://google.com
    07:52:51 DEBUG    webview    tabbedbrowser:_on_title_changed:757 Changing title for idx 0 to 'http://google.com'
    07:52:51 DEBUG    misc       eventfilter:eventFilter:53 <qutebrowser.browser.webengine.webview.WebEngineView object at 0x847416b80> got new child <PyQt5.QtWidgets.QWidget object at 0x848e111f0>, installing filter
    07:52:51 DEBUG    modes      modeman:_handle_keypress:312 match: 2, forward_unbound_keys: auto, passthrough: True, is_non_alnum: True, dry_run: False --> filter: True (focused: <PyQt5.QtWidgets.QWidget object at 0x847419dc0>)
    07:52:51 DEBUG    webview    browsertab:_on_navigation_request:1065 navigation request: url http://google.com/, type Type.typed, is_main_frame True
    07:52:51 DEBUG    modes      modeman:_handle_keyrelease:337 filter: True
    07:52:51 DEBUG    webview    webenginetab:_store_match_data:151 Active search match: 0/0
    07:52:51 DEBUG    webview    browsertab:_set_load_status:1007 load status for <qutebrowser.browser.webengine.webenginetab.WebEngineTab tab_id=0 url='https://start.duckduckgo.com/'>: LoadStatus.loading
    07:52:51 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_status_changed(<LoadStatus.loading: 6>) (tab 0)
    07:52:51 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_started() (tab 0)
    07:52:51 DEBUG    webview    browsertab:_on_navigation_request:1065 navigation request: url http://www.google.com/, type Type.typed, is_main_frame True
    07:52:51 DEBUG    webview    browsertab:_on_navigation_request:1065 navigation request: url https://www.google.com/?gws_rd=ssl, type Type.typed, is_main_frame True
    07:52:52 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.normal - delegating to <qutebrowser.keyinput.modeparsers.NormalKeyParser>
    07:52:52 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Got key: 0x1000001 / modifiers: 0x0 / text: '<Tab>' / dry_run False
    07:52:52 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Trying match without modifiers
    07:52:52 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Trying match with key_mappings
    07:52:52 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Giving up with '<Tab>', no matches
    07:52:52 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Clearing keystring (was: <Tab>).
    07:52:52 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: False, is_non_alnum: True, dry_run: False --> filter: False (focused: <PyQt5.QtWidgets.QWidget object at 0x848e11160>)
    07:52:52 DEBUG    modes      modeman:_handle_keyrelease:337 filter: False
    07:52:52 DEBUG    misc       app:on_focus_object_changed:581 Focus object changed: <PyQt5.QtWidgets.QWidget object at 0x847419940>
    [53016:1054982144:1119/075252.002101:WARNING:linux_util.cc(146)] Cannot open /proc/53282/task
    07:52:52 DEBUG    misc       app:on_focus_object_changed:581 Focus object changed: <PyQt5.QtCore.QObject object at 0x847419940>
    07:52:52 DEBUG    webview    webenginetab:_on_renderer_process_pid_changed:1469 Renderer process PID for tab 0: 53282
    07:52:52 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_url_changed(PyQt5.QtCore.QUrl('https://www.google.com/?gws_rd=ssl')) (tab 0)
    07:52:52 DEBUG    webview    tabbedbrowser:_on_title_changed:757 Changing title for idx 0 to 'https://www.google.com/?gws_rd=ssl'
    07:52:52 DEBUG    misc       app:on_focus_object_changed:581 Focus object changed: <PyQt5.QtWidgets.QWidget object at 0x847419940>
    07:52:52 DEBUG    misc       eventfilter:eventFilter:63 <qutebrowser.browser.webengine.webview.WebEngineView object at 0x847416b80>: removed child <PyQt5.QtCore.QObject object at 0x848e11430>
    07:52:52 DEBUG    webview    tabbedbrowser:_on_title_changed:757 Changing title for idx 0 to 'Google'
    07:52:52 DEBUG    webview    browsertab:_set_load_status:1007 load status for <qutebrowser.browser.webengine.webenginetab.WebEngineTab tab_id=0 url='https://www.google.com/?gws_rd=ssl'>: LoadStatus.success_https
    07:52:52 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_status_changed(<LoadStatus.success_https: 3>) (tab 0)
    07:52:53 DEBUG    sql        sql:run:334 INSERT INTO History (url, title, atime, redirect) values(:url, :title, :atime, :redirect)
    07:52:53 DEBUG    sql        sql:run:338     {':atime': 1637326373, ':redirect': False, ':title': 'Google', ':url': 'https://www.google.com/?gws_rd=ssl'}
    07:52:53 DEBUG    sql        sql:run:334 REPLACE INTO CompletionHistory (url, title, last_atime) values(:url, :title, :last_atime)
    07:52:53 DEBUG    sql        sql:run:338     {':last_atime': 1637326373, ':title': 'Google', ':url': 'https://www.google.com/?gws_rd=ssl'}
    07:52:53 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_finished(True) (tab 0)
    07:52:53 DEBUG    modes      modeman:leave:424 Ignoring leave request for KeyMode.insert (reason load started) as we're in mode KeyMode.normal
    07:52:53 DEBUG    modes      tabbedbrowser:_leave_modes_on_load:737 Ignoring leave_on_load request due to setting.
    07:52:53 DEBUG    webview    webenginetab:_js_cb_single:752 Got element from JS: {'attributes': {'class': 'gb_3 gb_4 gb_3d gb_3c', 'href': 'https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=https://www.google.com/%3Fgws_rd%3Dssl&ec=GAZAmgQ', 'target': '_top'}, 'class_name': 'gb_3 gb_4 gb_3d gb_3c', 'id': 0, 'is_content_editable': False, 'outer_xml': '<a class="gb_3 gb_4 gb_3d gb_3c" href="https://accounts.google.com/ServiceLogin?hl=en&amp;passive=true&amp;continue=https://www.google.com/%3Fgws_rd%3Dssl&amp;ec=GAZAmgQ" target="_top">Sign in</a>', 'rects': [{'bottom': 48, 'height': 36, 'left': 686, 'right': 782, 'top': 12, 'width': 96}], 'tag_name': 'A', 'text': 'Sign in', 'value': ''}
    07:52:53 DEBUG    webelem    webelem:is_editable:252 Checking if element is editable: <qutebrowser.browser.webengine.webengineelem.WebEngineElement html='<a class="gb_3 gb_4 gb_3d gb_3c" href="https://accounts.google.com/ServiceLogin?hl=en&amp;passive=true&amp;continue=https://www.google.com/%3Fgws_rd%3Dssl&amp;ec=GAZAmgQ" target="_top">Sign in</a>'>
    07:52:53 DEBUG    mouse      eventfilter:_mousepress_insertmode_cb:204 Clicked non-editable element!
    07:52:53 DEBUG    modes      modeman:leave:424 Ignoring leave request for KeyMode.insert (reason click) as we're in mode KeyMode.normal
    07:52:53 DEBUG    webview    browsertab:_on_navigation_request:1065 navigation request: url https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=https://www.google.com/%3Fgws_…, type Type.link_clicked, is_main_frame True
    07:52:53 DEBUG    webview    webenginetab:_store_match_data:151 Active search match: 0/0
    07:52:53 DEBUG    webview    browsertab:_set_load_status:1007 load status for <qutebrowser.browser.webengine.webenginetab.WebEngineTab tab_id=0 url='https://www.google.com/?gws_rd=ssl'>: LoadStatus.loading
    07:52:53 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_status_changed(<LoadStatus.loading: 6>) (tab 0)
    07:52:53 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_started() (tab 0)
    07:52:53 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_url_changed(PyQt5.QtCore.QUrl('https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=https://www.google.com/%3Fgws_rd%3Dssl&ec=GAZAmgQ')) (tab 0)
    07:52:53 DEBUG    webview    tabbedbrowser:_on_title_changed:757 Changing title for idx 0 to 'https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=https://www.google.com/%3Fgws_rd%3Dssl&ec=GAZAmgQ'
    07:52:53 DEBUG    webview    tabbedbrowser:_on_title_changed:757 Changing title for idx 0 to 'Sign in - Google Accounts'
    [53086:526470400:1119/075254.670352:WARNING:http_cache_transaction.cc(1175)] Unable to open or create cache entry
    [53086:526470400:1119/075254.676574:WARNING:http_cache_transaction.cc(1175)] Unable to open or create cache entry
    [53086:526470400:1119/075254.680551:WARNING:http_cache_transaction.cc(1175)] Unable to open or create cache entry
    [53086:526470400:1119/075254.683086:WARNING:http_cache_transaction.cc(1175)] Unable to open or create cache entry
    [53086:526470400:1119/075254.807214:WARNING:http_cache_transaction.cc(1175)] Unable to open or create cache entry
    [53086:526470400:1119/075254.823215:WARNING:http_cache_transaction.cc(1175)] Unable to open or create cache entry
    [53086:526470400:1119/075254.827162:WARNING:http_cache_transaction.cc(1175)] Unable to open or create cache entry
    07:52:55 DEBUG    webview    browsertab:_on_navigation_request:1065 navigation request: url https://accounts.youtube.com/accounts/CheckConnection?pmpo=https%3A%2F%2Faccounts.google.com&v=-209…, type Type.other, is_main_frame False
    07:52:55 DEBUG    webview    browsertab:_set_load_status:1007 load status for <qutebrowser.browser.webengine.webenginetab.WebEngineTab tab_id=0 url='https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=https://www.google.com/%3Fgws_…'>: LoadStatus.success_https
    07:52:55 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_status_changed(<LoadStatus.success_https: 3>) (tab 0)
    [53086:526470400:1119/075255.453779:WARNING:http_cache_transaction.cc(1175)] Unable to open or create cache entry
    07:52:55 DEBUG    webview    webenginetab:_store_match_data:151 Active search match: 0/0
    07:52:55 DEBUG    webview    browsertab:_set_load_status:1007 load status for <qutebrowser.browser.webengine.webenginetab.WebEngineTab tab_id=0 url='https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=https://www.google.com/%3Fgws_…'>: LoadStatus.loading
    07:52:55 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_status_changed(<LoadStatus.loading: 6>) (tab 0)
    07:52:55 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_started() (tab 0)
    07:52:55 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_url_changed(PyQt5.QtCore.QUrl('https://accounts.google.com/signin/v2/identifier?hl=en&passive=true&continue=https%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl&ec=GAZAmgQ&flowName=GlifWebSignIn&flowEntry=ServiceLogin…) (tab 0)
    07:52:55 DEBUG    js         shared:javascript_log_message:156 [https://accounts.google.com/signin/v2/identifier?hl=en&passive=true&continue=https%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl&ec=GAZAmgQ&flowName=GlifWebSignIn&flowEntry=ServiceLogin:0] A cookie associated with a cross-site resource at http://accounts.youtube.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.
    [53016:14753792:1119/075255.885792:INFO:CONSOLE(0)] "A cookie associated with a cross-site resource at http://accounts.youtube.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.", source: https://accounts.google.com/signin/v2/identifier?hl=en&passive=true&continue=https%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl&ec=GAZAmgQ&flowName=GlifWebSignIn&flowEntry=ServiceLogin (0)
    07:52:55 DEBUG    webview    browsertab:_on_navigation_request:1065 navigation request: url https://accounts.google.com/_/bscframe, type Type.other, is_main_frame False
    07:52:56 DEBUG    webview    webenginetab:_js_cb_single:752 Got element from JS: {'attributes': {'aria-label': 'Email or phone', 'autocapitalize': 'none', 'autocomplete': 'username', 'class': 'whsOnd zHQkBf', 'data-initial-dir': 'ltr', 'data-initial-value': '', 'dir': 'ltr', 'id': 'identifierId', 'jsname': 'YPqjbf', 'name': 'identifier', 'spellcheck': 'false', 'tabindex': '0', 'type': 'email'}, 'caret_position': None, 'class_name': 'whsOnd zHQkBf', 'id': 0, 'is_content_editable': False, 'outer_xml': '<input type="email" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="username" spellcheck="false" tabindex="0" aria-label="Email or phone" name="identifier" autocapitalize="none" id="identifierId" dir="ltr" data-initial-dir="ltr" data-initial-value="">', 'rects': [{'bottom': 268, 'height': 52, 'left': 218, 'right': 582, 'top': 216, 'width': 364}], 'tag_name': 'INPUT', 'text': '', 'value': ''}
    07:52:56 DEBUG    webelem    webelem:is_editable:252 Checking if element is editable: <qutebrowser.browser.webengine.webengineelem.WebEngineElement html='<input type="email" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="username" spellcheck="false" tabindex="0" aria-label="Email or phone" name="identifier" autocapitalize="none" id="identifierId" dir="ltr" data-initial-dir="ltr" data-initial-value="">'>
    07:52:56 DEBUG    mouse      eventfilter:_mousepress_insertmode_cb:199 Clicked editable element!
    07:52:56 DEBUG    modes      modeman:enter:363 Entering mode KeyMode.insert (reason: click)
    07:52:56 DEBUG    modes      modeman:leave:424 Ignoring leave request for KeyMode.hint (reason insert mode) as we're in mode KeyMode.insert
    07:52:56 DEBUG    statusbar  bar:set_mode_active:321 Setting insert flag to True
    07:52:56 DEBUG    webview    browsertab:_set_load_status:1007 load status for <qutebrowser.browser.webengine.webenginetab.WebEngineTab tab_id=0 url='https://accounts.google.com/signin/v2/identifier?hl=en&passive=true&continue=https%3A%2F%2Fwww.goog…'>: LoadStatus.success_https
    07:52:56 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_status_changed(<LoadStatus.success_https: 3>) (tab 0)
    07:52:56 DEBUG    sql        sql:run:334 INSERT INTO History (url, title, atime, redirect) values(:url, :title, :atime, :redirect)
    07:52:56 DEBUG    sql        sql:run:338     {':atime': 1637326376, ':redirect': False, ':title': 'Sign in - Google Accounts', ':url': 'https://accounts.google.com/signin/v2/identifier?hl=en&passive=true&continue=https%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl&ec=GAZAmgQ&flowName=GlifWebSignIn&flowEntry=ServiceLogin'}
    07:52:56 DEBUG    sql        sql:run:334 REPLACE INTO CompletionHistory (url, title, last_atime) values(:url, :title, :last_atime)
    07:52:56 DEBUG    sql        sql:run:338     {':last_atime': 1637326376, ':title': 'Sign in - Google Accounts', ':url': 'https://accounts.google.com/signin/v2/identifier?hl=en&passive=true&continue=https%3A%2F%2Fwww.google.com%2F%3Fgws_rd%3Dssl&ec=GAZAmgQ&flowName=GlifWebSignIn&flowEntry=ServiceLogin'}
    07:52:56 DEBUG    signals    signalfilter:_filter_signals:87 emitting: cur_load_finished(True) (tab 0)
    07:52:56 DEBUG    modes      modeman:leave:431 Leaving mode KeyMode.insert (reason: load started)
    07:52:56 DEBUG    statusbar  bar:set_mode_active:321 Setting insert flag to False
    07:52:56 DEBUG    modes      tabbedbrowser:_leave_modes_on_load:737 Ignoring leave_on_load request due to setting.
    [53016:14753792:1119/075257.216239:ERROR:render_widget_host_view_base.cc(359)] Not implemented reached in virtual base::flat_map<std::string, std::string> content::RenderWidgetHostViewBase::GetKeyboardLayoutMap()
    07:52:57 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.normal - delegating to <qutebrowser.keyinput.modeparsers.NormalKeyParser>
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Got key: 0x56 / modifiers: 0x0 / text: 'v' / dry_run True
    07:52:57 DEBUG    modes      modeman:_handle_keypress:312 match: 2, forward_unbound_keys: auto, passthrough: False, is_non_alnum: False, dry_run: True --> filter: True (focused: <PyQt5.QtWidgets.QWidget object at 0x848f02670>)
    07:52:57 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.normal - delegating to <qutebrowser.keyinput.modeparsers.NormalKeyParser>
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Got key: 0x56 / modifiers: 0x0 / text: 'v' / dry_run False
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Definitive match for 'v'.
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Clearing keystring (was: v).
    07:52:57 DEBUG    commands   command:run:537 command called: mode-enter ['caret']
    07:52:57 DEBUG    commands   command:run:551 Calling qutebrowser.keyinput.modeman.ModeManager.mode_enter(<qutebrowser.keyinput.modeman.ModeManager mode=<KeyMode.normal: 1>>, 'caret')
    07:52:57 DEBUG    modes      modeman:enter:363 Entering mode KeyMode.caret (reason: command)
    07:52:57 DEBUG    modes      modeman:_handle_keypress:312 match: 2, forward_unbound_keys: auto, passthrough: False, is_non_alnum: False, dry_run: False --> filter: True (focused: <PyQt5.QtWidgets.QWidget object at 0x848e11f70>)
    07:52:57 DEBUG    modes      modeman:_handle_keyrelease:337 filter: True
    07:52:57 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.caret - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=True mode=<KeyMode.caret: 8> passthrough=True supports_count=True win_id=0>
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Got key: 0x45 / modifiers: 0x0 / text: 'e' / dry_run True
    07:52:57 DEBUG    modes      modeman:_handle_keypress:312 match: 2, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: True (focused: <PyQt5.QtWidgets.QWidget object at 0x848e11dc0>)
    07:52:57 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.caret - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=True mode=<KeyMode.caret: 8> passthrough=True supports_count=True win_id=0>
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Got key: 0x45 / modifiers: 0x0 / text: 'e' / dry_run False
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Definitive match for 'e'.
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Clearing keystring (was: e).
    07:52:57 DEBUG    commands   command:run:537 command called: move-to-end-of-word
    07:52:57 DEBUG    commands   command:run:551 Calling qutebrowser.components.caretcommands.move_to_end_of_word(<qutebrowser.browser.webengine.webenginetab.WebEngineTab tab_id=0 url='https://accounts.google.com/signin/v2/identifier?hl=en&passive=true&continue=https%3A%2F%2Fwww.goog…'>, 1)
    07:52:57 DEBUG    modes      modeman:_handle_keypress:312 match: 2, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: True (focused: <PyQt5.QtWidgets.QWidget object at 0x848e11d30>)
    07:52:57 DEBUG    modes      modeman:_handle_keyrelease:337 filter: True
    07:52:57 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.caret - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=True mode=<KeyMode.caret: 8> passthrough=True supports_count=True win_id=0>
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Got key: 0x4e / modifiers: 0x0 / text: 'n' / dry_run True
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Trying match without modifiers
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Trying match with key_mappings
    07:52:57 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: False (focused: <PyQt5.QtWidgets.QWidget object at 0x848e11c10>)
    07:52:57 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.caret - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=True mode=<KeyMode.caret: 8> passthrough=True supports_count=True win_id=0>
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Got key: 0x4e / modifiers: 0x0 / text: 'n' / dry_run False
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Trying match without modifiers
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Trying match with key_mappings
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Giving up with 'n', no matches
    07:52:57 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Clearing keystring (was: n).
    07:52:57 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: False (focused: <PyQt5.QtWidgets.QWidget object at 0x848e11ca0>)
    07:52:57 DEBUG    modes      modeman:_handle_keyrelease:337 filter: False
    07:52:58 DEBUG    js         shared:javascript_log_message:156 [userscript:_qute_js:1376] This document requires 'TrustedHTML' assignment.
    [53016:14753792:1119/075258.267818:INFO:CONSOLE(1376)] "This document requires 'TrustedHTML' assignment.", source: userscript:_qute_js (1376)
    07:52:58 DEBUG    js         shared:javascript_log_message:156 [userscript:_qute_js:1376] Uncaught TypeError: Failed to set the 'innerHTML' property on 'Element': This document requires 'TrustedHTML' assignment.
    [53016:14753792:1119/075258.270914:INFO:CONSOLE(1376)] "Uncaught TypeError: Failed to set the 'innerHTML' property on 'Element': This document requires 'TrustedHTML' assignment.", source: userscript:_qute_js (1376)
    07:52:58 DEBUG    webview    webenginetab:_selection_cb:325 Ignoring selection status None
    07:52:58 DEBUG    destroy    lineparser:_after_save:81 Saved to /tmp/qutebrowser-basedir-o2dltiwt/data/cmd-history
    07:52:58 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.caret - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=True mode=<KeyMode.caret: 8> passthrough=True supports_count=True win_id=0>
    07:52:58 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Got key: 0x1000000 / modifiers: 0x0 / text: '<Escape>' / dry_run True
    07:52:58 DEBUG    modes      modeman:_handle_keypress:312 match: 2, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: True --> filter: True (focused: <PyQt5.QtWidgets.QWidget object at 0x848e11ca0>)
    07:52:58 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.caret - delegating to <qutebrowser.keyinput.modeparsers.CommandKeyParser do_log=True mode=<KeyMode.caret: 8> passthrough=True supports_count=True win_id=0>
    07:52:58 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Got key: 0x1000000 / modifiers: 0x0 / text: '<Escape>' / dry_run False
    07:52:58 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Definitive match for '<Escape>'.
    07:52:58 DEBUG    keyboard   basekeyparser:_debug_log:216 CommandKeyParser for mode caret: Clearing keystring (was: <Escape>).
    07:52:58 DEBUG    commands   command:run:537 command called: mode-leave
    07:52:58 DEBUG    commands   command:run:551 Calling qutebrowser.keyinput.modeman.ModeManager.mode_leave(<qutebrowser.keyinput.modeman.ModeManager mode=<KeyMode.caret: 8>>)
    07:52:58 DEBUG    modes      modeman:leave:431 Leaving mode KeyMode.caret (reason: leave current)
    07:52:58 DEBUG    statusbar  bar:set_mode_active:335 Setting caret mode off
    07:52:58 DEBUG    modes      modeman:_handle_keypress:312 match: 2, forward_unbound_keys: auto, passthrough: True, is_non_alnum: False, dry_run: False --> filter: True (focused: <PyQt5.QtWidgets.QWidget object at 0x848e11ca0>)
    07:52:58 DEBUG    modes      modeman:_handle_keyrelease:337 filter: True
    07:52:58 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.normal - delegating to <qutebrowser.keyinput.modeparsers.NormalKeyParser>
    07:52:58 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Got key: 0x1000003 / modifiers: 0x0 / text: '<Backspace>' / dry_run True
    07:52:58 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Trying match without modifiers
    07:52:58 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Trying match with key_mappings
    07:52:58 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: False, is_non_alnum: False, dry_run: True --> filter: True (focused: <PyQt5.QtWidgets.QWidget object at 0x848e11ca0>)
    07:52:58 DEBUG    modes      modeman:_handle_keypress:287 got keypress in mode KeyMode.normal - delegating to <qutebrowser.keyinput.modeparsers.NormalKeyParser>
    07:52:58 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Got key: 0x1000003 / modifiers: 0x0 / text: '<Backspace>' / dry_run False
    07:52:58 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Trying match without modifiers
    07:52:58 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Trying match with key_mappings
    07:52:58 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Giving up with '<Backspace>', no matches
    07:52:58 DEBUG    keyboard   basekeyparser:_debug_log:216 NormalKeyParser for mode normal: Clearing keystring (was: <Backspace>).
    07:52:58 DEBUG    modes      modeman:_handle_keypress:312 match: 0, forward_unbound_keys: auto, passthrough: False, is_non_alnum: False, dry_run: False --> filter: True (focused: <PyQt5.QtWidgets.QWidget object at 0x848e11ca0>)
    07:52:59 DEBUG    modes      modeman:_handle_keyrelease:337 filter: True
    07:53:00 DEBUG    webview    webenginetab:_js_cb_single:752 Got element from JS: {'attributes': {'aria-label': 'Email or phone', 'autocapitalize': 'none', 'autocomplete': 'username', 'badinput': 'false', 'class': 'whsOnd zHQkBf', 'data-initial-dir': 'ltr', 'data-initial-value': 'n', 'dir': 'ltr', 'id': 'identifierId', 'jsname': 'YPqjbf', 'name': 'identifier', 'spellcheck': 'false', 'tabindex': '0', 'type': 'email'}, 'caret_position': None, 'class_name': 'whsOnd zHQkBf', 'id': 1, 'is_content_editable': False, 'outer_xml': '<input type="email" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="username" spellcheck="false" tabindex="0" aria-label="Email or phone" name="identifier" autocapitalize="none" id="identifierId" dir="ltr" data-initial-dir="ltr" data-initial-value="n" badinput="false">', 'rects': [{'bottom': 268, 'height': 52, 'left': 218, 'right': 582, 'top': 216, 'width': 364}], 'tag_name': 'INPUT', 'text': '', 'value': 'n'}
    07:53:00 DEBUG    webelem    webelem:is_editable:252 Checking if element is editable: <qutebrowser.browser.webengine.webengineelem.WebEngineElement html='<input type="email" class="whsOnd zHQkBf" jsname="YPqjbf" autocomplete="username" spellcheck="false" tabindex="0" aria-label="Email or phone" name="identifier" autocapitalize="none" id="identifierId" dir="ltr" data-initial-dir="ltr" data-initial-value="n" badinput="false">'>
    07:53:00 DEBUG    mouse      eventfilter:_mousepress_insertmode_cb:199 Clicked editable element!
    07:53:00 DEBUG    modes      modeman:enter:363 Entering mode KeyMode.insert (reason: click)
    07:53:00 DEBUG    modes      modeman:leave:424 Ignoring leave request for KeyMode.hint (reason insert mode) as we're in mode KeyMode.insert
    07:53:00 DEBUG    statusbar  bar:set_mode_active:321 Setting insert flag to True
    [53016:1112855808:1119/075303.238614:FATAL:rrect_f.cc(133)] Check failed: success. 
    Exception: qutebrowser killed by signal trace/BPT trap (core dumped)
    

    Stacktrace: gdb.txt

    status: needs triage 
    opened by vendion 3
  • prompt_queue is None at shutdown

    prompt_queue is None at shutdown

    Seeing this in various crash reports:

    Traceback (most recent call last):
      File "/usr/lib/python3.9/site-packages/qutebrowser/misc/quitter.py", line 225, in shutdown
        if prompt.prompt_queue.shutdown():
    AttributeError: 'NoneType' object has no attribute 'shutdown'
    

    https://crashes.qutebrowser.org/lists?search=prompt_queue.shutdown

    priority: 1 - middle bug: exception 
    opened by The-Compiler 0
  • Deleted C++ object: WebEngineView in show_error_page

    Deleted C++ object: WebEngineView in show_error_page

    Seeing various reports about this:

    Traceback (most recent call last):
      File "/usr/lib/python3.8/site-packages/qutebrowser/mainwindow/tabbedbrowser.py", line 969, in <lambda>
        QTimer.singleShot(100, lambda: show_error_page(error_page))
      File "/usr/lib/python3.8/site-packages/qutebrowser/mainwindow/tabbedbrowser.py", line 947, in show_error_page
        tab.set_html(html)
      File "/usr/lib/python3.8/site-packages/qutebrowser/browser/webengine/webenginetab.py", line 1378, in set_html
        self._widget.setHtml(html, base_url)
    RuntimeError: wrapped C/C++ object of type WebEngineView has been deleted
    

    https://crashes.qutebrowser.org/lists?search=show_error_page

    priority: 1 - middle bug: exception 
    opened by The-Compiler 0
  • Only on first launched page: Text cursor not appearing on textboxes, sometimes inability to delete text in textbox

    Only on first launched page: Text cursor not appearing on textboxes, sometimes inability to delete text in textbox

    Version info: qutebrowser v2.4.0 Git commit: Backend: QtWebEngine 5.15.2, based on Chromium 83.0.4103.122 Qt: 5.15.2

    Newest version of QuteBrowser that FreeBSD 13's pkg provides, on 2021-11-14, fully upgraded system.

    Full system information
    System:    Host: stripes Kernel: FreeBSD 13.0-RELEASE amd64 bits: 64 compiler: clang v: 11.0.1 Desktop: sway 1.6-8fa7b998
               dm: N/A OS: FreeBSD 13.0-RELEASE
    CPU:       Info: Dual Core model: Intel Core2 Duo P8800 bits: 64 type: MCP arch: Penryn rev: A cache: L2: N/A
               features: lm nx pae sse sse2 sse3 ssse3 vmx
               Speed: 2666 MHz min/max: N/A Core speed (MHz): N/A
    Graphics:  Device-1: Intel Mobile 4 Series Integrated Graphics driver: vgapci bus-ID: 0:0:2.0 chip-ID: 8086:2a42
               Display: wayland server: X.Org 1.21.0.99 compositor: sway driver: loaded: intel resolution: 1280x800~60Hz s-dpi: 96
               OpenGL: renderer: Mesa Mobile Intel GM45 Express (CTG) v: 2.1 Mesa 22.0.0-devel (git-38f0b36f1ac)
               direct render: Yes
    

    Does the bug happen if you start with --temp-basedir?: yes

    Description This is a low-priority bug, regarding the text cursor not appearing when starting qutebrowser and giving incorrect text editing behaviour on certain scenarios. Wayland is not at fault, as the same happens with X11. It only happens in the very first Page that is shown. Opening a page with Key O or opening a new tab removes the issue. The wrong behaviour is best explained with the help of this video. In chronological order:

    • 00:08 - Showing QuteBrowser version
    • 00:18 - Opening duck duck go as the first page.
    • 00:21 - Marking the Search input box to type in a search term
    • 00:22 - No blinking textcursor appears, but text does appear. In the textbox of duckduckgo I am able to delete text after I type it.
    • 00:30 - Only after I move the mouse away form the QuteBrowser window and back into the window, does the text cursor appear again.
    • 00:45 - Opening the review page of the service "WaniKani", as this shows this bug with another element: The inability to delete text
    • 00:56 - Again same deal, show that I can select the textbox and type text with the cursor missing
    • 01:00 - I am pressing Back space and DEL, yet no text is deleted.
    • 01:05 - In this case, moving the mouse into the window does not cure the problem
    • 01:07 - I have to click into the textbox for the cursor to appear. Now the problem is cured, I am able to delete text and am a happy boy
    • These problems do only happen on the very first page, that is opening, the hompage basically or a URL given as a startargument.

    https://user-images.githubusercontent.com/60887273/141688617-64ef40db-47d6-40ac-afd8-6a0db8b3d6c2.mp4

    How to reproduce Open a page on startup with a textbox on the page. Press F to navigate to the textbox. Type text, without the text cursor appearing.

    opened by FrostKiwi 0
  • Check if we need Slack UA quirk

    Check if we need Slack UA quirk

    <sudoforge> looks like the default user agent may need to be tweaked; slack is throwing a "your browser will not be supported as of march 1 2022" info message my way

    Not sure if there's much we can do for older versions before they actually drop support... And by then we hopefully have Qt 6 support in.

    status: needs triage 
    opened by The-Compiler 2
  • Match binds aggressively and avoid binds in hint generation

    Match binds aggressively and avoid binds in hint generation

    With the first of these commits, binds are matched more aggressively. :bind --mode normal ab nop and then pressing a: will enter command mode, unlike before and like vim. This closes #6001.

    That behavior exacerbates #6002, however, which is fixed in the second commit. It has little to no effect on performance with few hint binds, and still brings up hints in about a tenth to a quarter of a second with my eight (five of which are single letters that are also in hintchars at the moment, the worst case) on a crowded github page on my laptop.

    Two issues with this PR are that it will infinitely loop if there is no 'solution,' e.g. each hint char has a hint bind, and that I made KeySequence's iter_keys public and am not sure if I should have avoided doing so.

    I was unable to get all tests to even run, though pylint at least is passing (I would argue it shouldn't be, I struggled to split up lines in many places). test_hints.py also needs to pass a BaseKeyParser on line 107 (see hints.py line 470) but I can't find where it is called to see if I can pass it one to forward instead of creating a new one.

    opened by IsaacElenbaas 2
  • Settings frontend new css

    Settings frontend new css

    opened by twigleingrid 7
Releases(v2.4.0)
  • v2.4.0(Oct 21, 2021)

    Security

    • CVE-2021-41146: Fix arbitrary command execution on Windows via URL handler argument injection. See the security advisory for details.

    Added

    • New content.blocking.hosts.block_subdomains setting which can be used to disable the subdomain blocking for the hosts-based adblocker introduced in v2.3.0.
    • New downloads.prevent_mixed_content setting to prevent insecure mixed-content downloads (true by default).
    • New --private flag for :tab-clone, which clones a tab into a new private window, mirroring the same flags for :open and :tab-give.

    Fixed

    • Switching tabs via mouse wheel scrolling now works properly on macOS. Set tabs.mousewheel_switching to false if you prefer the previous behavior.
    • Speculative fix for a crash when closing qutebrowser while a systray notification is shown.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-2.4.0.dmg(135.98 MB)
    qutebrowser-2.4.0.tar.gz(5.79 MB)
    qutebrowser-2.4.0.tar.gz.asc(833 bytes)
    qutebrowser-2.4.0-amd64.exe(84.08 MB)
    qutebrowser-2.4.0-windows-standalone-amd64.zip(118.53 MB)
    qutebrowser-2.4.0-win32.exe(72.89 MB)
    qutebrowser-2.4.0-windows-standalone-win32.zip(100.45 MB)
  • v2.3.1(Jul 28, 2021)

    Fixes

    • Updated the workaround for Google Account log in claiming that this browser isn't secure. For an equivalent workaround on older versions, run: :set -u https://accounts.google.com/* content.headers.user_agent "Mozilla/5.0 ({os_info}; rv:90.0) Gecko/20100101 Firefox/90.0"
    • Corrupt cache file exceptions with adblock 0.5.0+ are now handled properly.
    • Crash when entering unicode surrogates into the filename prompt.
    • UnboundLocalError in qute-keepass when the database couldn't be opened.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-2.3.1.tar.gz(5.95 MB)
    qutebrowser-2.3.1.tar.gz.asc(833 bytes)
    qutebrowser-2.3.1.dmg(134.33 MB)
    qutebrowser-2.3.1-amd64.exe(83.50 MB)
    qutebrowser-2.3.1-windows-standalone-amd64.zip(117.92 MB)
    qutebrowser-2.3.1-win32.exe(72.38 MB)
    qutebrowser-2.3.1-windows-standalone-win32.zip(99.79 MB)
  • v2.3.0(Jun 28, 2021)

    Added

    • New content.prefers_reduced_motion setting to request websites to reduce non-essential motion/animations.
    • New colors.prompts.selected.fg setting to customize the text color for selected items in filename prompts.

    Changed

    • The hosts-based adblocker (using content.blocking.hosts.lists) now also blocks all requests to any subdomains of blocked hosts.
    • The fonts.web.* settings now support URL patterns.
    • The :greasemonkey-reload command now shows a list of loaded scripts and has a new --quiet switch to suppress that message.
    • When launching a userscript via hints, a new QUTE_CURRENT_URL environment variable now points to the current page (rather than the URL of the selected element, where QUTE_URL points to).

    Fixed

    • Crash on macOS 10.14+ when logging into Google accounts -- the previous fix was incomplete due wrong information in Apple's documentation.
    • Crash when two Greasemonkey scripts have the same name (usually happening because the same file is in both the data and the config directory).
    • Deprecation warnings when using the link_pyqt.py script on Python 3.10 (e.g. via tox or mkvenv.py).
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-2.3.0.tar.gz(5.95 MB)
    qutebrowser-2.3.0.tar.gz.asc(833 bytes)
    qutebrowser-2.3.0.dmg(134.28 MB)
    qutebrowser-2.3.0-amd64.exe(83.47 MB)
    qutebrowser-2.3.0-windows-standalone-amd64.zip(117.86 MB)
    qutebrowser-2.3.0-win32.exe(72.34 MB)
    qutebrowser-2.3.0-windows-standalone-win32.zip(99.74 MB)
  • v2.2.3(Jun 1, 2021)

    Fixed

    • Logging into Google accounts or sharing the camera on macOS 10.14+ crashed, which is now fixed.
    • The Windows installer now correctly aborts the installation on Windows 7 (rather than attempting an install which won't work, since Windows 7 is unsupported since the v2.0.0 release).
    • Using --json-logging without --debug caused qutebrowser to crash since the v1.13.0 release. It now works correctly again.
    • Mixing Qt 5.14+ with QtWebEngine 5.12 caused a crash related to qutebrowser's notification support, which is now fixed.
    • The documentation now points to the new IRC channels on irc.libera.chat instead of the defunct Freenode channels (due to a hostile takeover by Freenode staff).
    • Setting content.headers.user_agent or .accept_language to a value containing non-ascii characters was permitted by qutebrowser, but resulted in a crash when loading a page. Such values are now rejected properly.
    • When quitting qutebrowser on the qute://settings page, a crash could happen, which is now fixed.
    • When :edit-text is used, but the existing text in the input isn't representable in the configured encoding (editor.encoding), qutebrowser would crash. It now shows a proper error instead.
    • The testsuite should now work properly on aarch64.
    • When QtWebEngine is in a "stuck" state while :selection-follow was used, this could cause a crash in qutebrowser. This is now fixed (speculatively, due to lack of a reproducer).
    • When the brave adblock data (adblock-cache.dat) got corrupted, qutebrowser would crash when trying to load it. It now displays an error instead.
    • Combining /S (silent) and /allusers when uninstalling via the Windows installer now works properly.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-2.2.3.tar.gz(5.94 MB)
    qutebrowser-2.2.3.tar.gz.asc(833 bytes)
    qutebrowser-2.2.3.dmg(134.19 MB)
    qutebrowser-2.2.3-amd64.exe(83.37 MB)
    qutebrowser-2.2.3-windows-standalone-amd64.zip(117.79 MB)
    qutebrowser-2.2.3-win32.exe(72.27 MB)
    qutebrowser-2.2.3-windows-standalone-win32.zip(99.67 MB)
  • v2.2.2(May 20, 2021)

    Fixed

    • When awesomewm's "naughty" notification daemon was used with a development version of AwesomeWM and an unknown version number, qutebrowser would crash when trying to parse the version string. This is now fixed.
    • Due to a bug with QtWebEngine 5.15.4, old Service Worker data could cause renderer process crashes. This is now worked around by qutebrowser.
    • When an (broken) binding to set-cmd-text without any argument existed, using : would crash, which is now fixed.
    • New site-specific quirk (again) working around not being able to type accented/composed characters on Google Docs.
    • When running with python -OO (which is not recommended), a notification being shown would result in a crash, which is now fixed.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-2.2.2.tar.gz(6.02 MB)
    qutebrowser-2.2.2.tar.gz.asc(833 bytes)
    qutebrowser-2.2.2.dmg(134.10 MB)
    qutebrowser-2.2.2-amd64.exe(83.29 MB)
    qutebrowser-2.2.2-windows-standalone-amd64.zip(117.67 MB)
    qutebrowser-2.2.2-win32.exe(72.17 MB)
    qutebrowser-2.2.2-windows-standalone-win32.zip(99.55 MB)
  • v2.2.1(Apr 29, 2021)

    Changed

    • When an error occurs in a notification presenter, qutebrowser now shows that error in the statusbar instead of just logging it.
    • New site-specific-quirk for Discord logging users out when using vertical tabs (yes, really)

    Fixed

    • Certain errors from notification daemons are now displayed as non-fatal errors instead of qutebrowser crashing:
      • With the legacy GNOME Flashback notification daemon (not GNOME Shell), when more than 20 notifications are currently shown.
      • With the KDE Plasma notification daemon, when the same notification is shown twice (with <1s delay).
    • The mkvenv.py script now works when ldconfig -p is failing.
    • Running :spawn -u -o broke in v2.2.0 and now works properly again.
    • Fixes in userscripts:
      • The qute-bitwarden userscript now still consumes returned data if the Bitwarden CLI showed a warning but exited with a 0 (successful) exit code.
      • The qute-pass userscript now doesn't try to match a username with --password-only, and error messages with invalid patterns are improved.
      • The qute-pass userscript now avoids running pass twice when --otp-only is used.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-2.2.1.tar.gz(6.00 MB)
    qutebrowser-2.2.1.tar.gz.asc(833 bytes)
    qutebrowser-2.2.1.dmg(134.10 MB)
    qutebrowser-2.2.1-amd64.exe(83.29 MB)
    qutebrowser-2.2.1-windows-standalone-amd64.zip(117.67 MB)
    qutebrowser-2.2.1-win32.exe(72.18 MB)
    qutebrowser-2.2.1-windows-standalone-win32.zip(99.54 MB)
  • v2.2.0(Apr 13, 2021)

    Deprecated

    • Running qutebrowser with Qt 5.12.0 is now unsupported and logs a warning. It should still work - however, a workaround for issues with the Nvidia graphic driver was dropped. Newer Qt 5.12.x versions are still fully supported.
    • The --force argument for :tab-only is deprecated, use --pinned close instead.
    • Using :tab-focus without an argument or count is now deprecated, use :tab-next instead.

    Added

    • New dependency on the QtDBus module. If this requirement is an issue for you or your distribution, please open an issue! Note that a DBus connection at runtime is still optional.
    • New input.media_keys setting which can be used to disable Chromium's handling of media keys.
    • New :process command (and associated qute://process pages) which can be used to view and terminate/kill external processes spawned by qutebrowser.
    • New content.site_specific_quirks.skip setting which can be used to disable individual site-specific quirks.
    • New --pinned argument for :tab-only, which replaces --force (with --pinned close), but also can take --pinned keep to keep pinned tabs without prompting.
    • New fileselect.folder.command which can be used with fileselect.handler = external to customize the command to use to upload directories (<input type="file" webkitdirectory /> elements, which are non-standard but in wide use).
    • New content.notifications.presenter setting with various new ways to show web notifications:
      • auto (default): Automatically detect the best available option
      • qt: Use Qt's built-in mechanism (like before this release)
      • libnotify: Use a libnotify-compatible notification server (i.e. native notifications on Linux)
      • systray: Use a systray icon (very similar to qt but without some of its drawbacks)
      • messages: Use qutebrowser messages
      • herbe: Use herbe
    • New content.notifications.show_origin setting, which can be used to decide for which notifications to show the origin (the URL the notification was sent from).

    Changed

    • The content.ssl_strict setting got renamed to content.tls.certificate_errors, with new values:
      • ask: Prompt on overridable certificate errors (ssl_strict = 'ask')
      • ask-block-thirdparty: See below
      • block: Block the page load (ssl_strict = True)
      • load-insecurely: Load the page despite the error (ssl_strict = False)
    • The new content.tls.certificate_errors setting now also understands the value ask-block-thirdparty, which asks for page loads but automatically blocks resource loads on TLS errors. This behavior is consistent with what other browsers do.
    • The prompt text shown on certificate errors has been improved to make it clearer what kind of error occurred exactly.
    • The content.site_specific_quirks setting got renamed to content.site_specific_quirks.enabled.
    • The content.notifications option got renamed to content.notifications.enabled.
    • The completion now also shows bindings starting with set-cmd-text in its third column, such as o for :open.
    • When :spawn is used with the -m / --output-messages flag, the output now appears live, while the process is running.
    • When a shown message replaces an existing related one (e.g. for zoom levels), the replacing now also works even if a different message was shown in between.
    • The .redirect(...) method on interceptors now supports an ignore_unsupported=True argument which supresses exceptions if a request could not be redirected. Note, however, that it is still not public API.
    • When the --config-py argument is used, no warning about a missing config.load_autoconfig is shown anymore, as the argument is typically used for temporarily testing a config.
    • The internal _autosave session used for crash recovery is now only saved once per minute, since saving it for every page load is a noticable performance issue.
    • The readability-js userscript now displays a small header with page information.
    • When an external file selector is used, some additional validation is done on the picked files now, so that errors are shown if e.g. a directory is selected when a file was expected.
    • The default binding for T (:tab-focus) got changed so that it fills the command line with :tab-focus if used without a count (instead of being equivalent to :tab-next in that case).
    • The :config-unset command now understands the --pattern (-u) flag to unset options customized for a given URL pattern (such as after answering a prompt with "always"/"never").
    • The :config-unset command now shows an error when used on an option which is valid, but was never customized.
    • The statusbar.widgets setting now understands text:... entries which allows adding a hard-coded text to the statusbar.
    • The polyfill for String.replaceAll (required for Nextcloud Calendar < 2.2.0 with QtWebEngine < 5.15.3) is now disabled by default, as it's not fully compliant to the ECMAScript spec and might cause issues on other websites. If you still need it (e.g. if you're still on an old Nextcloud Calendar version), remove js-string-replaceall from content.site_specific_quirks.skip.

    Fixed

    • When an editor exits with a != 0 exit status, the temporary editor file is now persisted. This already was the case when the editor crashed.
    • When a nonexistent file gets passed to --config-py, qutebrowser now complains instead of silently not loading it.
    • With some (rare) setups, opening the report dialog or using a PAC proxy with QtWebKit could result in qutebrowser hanging due to a PyQt bug. There's now a workaround which prevents the hang.
    • QtWebEngine version detection (influencing things like dark mode settings or certain workarounds) now works correctly on OpenBSD.
    • Certain version number formats in /etc/os-release caused qutebrowser to crash. Those are now handled correctly.
    • The macOS releases now properly support Dark Mode for UI elements by setting NSRequiresAquaSystemAppearance to false.

    Removed

    • The qute://spawn-output page used by :spawn -o is now removed, as it's replaced by the new qute://process pages.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-2.2.0.tar.gz(6.00 MB)
    qutebrowser-2.2.0.tar.gz.asc(833 bytes)
    qutebrowser-2.2.0.dmg(132.40 MB)
    qutebrowser-2.2.0-amd64.exe(83.24 MB)
    qutebrowser-2.2.0-windows-standalone-amd64.zip(117.64 MB)
    qutebrowser-2.2.0-win32.exe(72.15 MB)
    qutebrowser-2.2.0-windows-standalone-win32.zip(99.54 MB)
  • v2.1.1(Apr 1, 2021)

    Added

    • Site-specific quirk for krunker.io, which shows a "Socket Error" with qutebrowser's default Accept-Language header. The workaround is equivalent to doing :set -u matchmaker.krunker.io content.headers.accept_language "".

    Changed

    • Clicking the 'x' in the devtools window to hide it now also leaves insert mode.

    Fixed

    • The workaround for black on (almost) black formula images in dark mode now also works with Qt 5.12 and 5.13.
    • When running in Flatpak or with the Windows/macOS releases, the QtWebEngine version is now detected properly. Before, a wrong version was assumed, breaking dark mode and certain workarounds (resulting in crashes on websites like LinkedIn or TradingView).
    • When the metainfo in the completion database doesn't have the expected structure, qutebrowser now tries to gracefully recover from the situation instead of crashing.
    • When qutebrowser displays an error during initialization, opening a second instance would lead to a crash. Instead, qutebrowser now ignores the attempt to open a new page as long as it's not fully initialized yet.
    • When the Brave adblock cache folder was unreadable, qutebrowser crashed. It now displays an error instead.
    • Fixes in the qute-pass userscript for gopass:
      • Generating OTP tokens now works correctly.
      • Storing the username as part of the secret broke in v2.0.0 and now works again.
    • When using bindings.key_mappings to map a key to multiple other keys, qutebrowser would crash. This is now handled correctly - however, note that it's usually better to map keys to commands instead.
    • When a minimized window is selected via :tab-select, it's now un-minimized properly.
    • When a format string in the config (e.g. tabs.title_format) used a value like {current_url.host} (instead of {current_url:host}), qutebrowser would crash. It now correctly reports an invalid config value instead.
    • In rare circumstances, sending URLs/commands to existing instances would result in a crash, which is now fixed.
    • Running the testsuite should now fully work without internet access again.
    • The --asciidoc script for mkvenv.py broke with v1.14.0. It now works correctly again.
    • Various other fixes for running in Flatpak (backported in the Flatpak release even before this qutebrowser release).
    • We are the Knights Who Say... ':Ni!'
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-2.1.1.tar.gz(5.95 MB)
    qutebrowser-2.1.1.dmg(131.80 MB)
    qutebrowser-2.1.1.tar.gz.asc(833 bytes)
    qutebrowser-2.1.1-amd64.exe(82.93 MB)
    qutebrowser-2.1.1-windows-standalone-amd64.zip(117.02 MB)
    qutebrowser-2.1.1-win32.exe(71.84 MB)
    qutebrowser-2.1.1-windows-standalone-win32.zip(98.92 MB)
  • v2.1.0(Mar 12, 2021)

    Removed

    • The following command aliases were deprecated in v2.0.0 and are now removed:
      • run-macro -> macro-run
      • record-macro -> macro-record
      • buffer -> tab-select
      • open-editor -> edit-text
      • toggle-selection -> selection-toggle
      • drop-selection -> selection-drop
      • reverse-selection -> selection-reverse
      • follow-selected -> selection-follow
      • follow-hint -> hint-follow
      • enter-mode -> mode-enter
      • leave-mode -> mode-leave

    Added

    • New :screenshot command which can be used to screenshot the visible part of the page.
    • New optional dependency on the importlib_metadata project on Python 3.7 and below. This is only relevant when PyQtWebEngine is installed via pip - thus, this dependency usually isn't relevant for packagers.
    • New qute-keepassxc userscript integrating with the KeePassXC browser API.

    Changed

    • Initial support for QtWebEngine 5.15.3 and PyQt 5.15.3/.4
    • The colors.webpage.prefers_color_scheme_dark setting got renamed to colors.webpage.preferred_color_scheme and now takes the values auto, light and dark (instead of being True for dark and False for auto). Note that the light value is only supported with Qt 5.15.2+, falling back to the same behavior as auto on older versions.
    • On Linux, qutebrowser now tries harder to find details about the installed QtWebEngine version by inspecting the QtWebEngine binary. This should reduce issues with dark mode (and some workarounds) not working when using differing versions of QtWebEngine/PyQtWebEngine/Qt. This change also prepares qutebrowser for QtWebEngine 5.15.3, which will get released without an updated Qt.
    • When PyQtWebEngine >= 5.15.3 is installed via pip (as is e.g. the case with mkvenv.py), qutebrowser now queries the associated metadata to find out the QtWebEngine version.
    • When doing :hint links yank --rapid, the messages shown now replace each other, thus being less noisy.
    • Newlines in JavaScript messages (confirm, prompt and alert) are now preserved.
    • Messages in prompts are now word-wrapped rather than displaying them in one long line.
    • If a command stats with space (e.g. : open ..., it's now not saved to command history anymore (similar to how some shells work).
    • When a tab is pinned, running :open will now open a new tab instead of displaying an error.
    • The fileselect.*.command settings now support file selectors writing the selected paths to stdout, which is used if no {} placeholder is contained in the configured command.
    • The --debug-flag argument now understands a new log-sensitive-keys value which logs all keypresses (including those in insert/passthrough/prompt/... mode) for debugging.
    • The readability and readability-js userscripts now add a qute-readability CSS class to the page, so that it can be styled easily via a user stylesheet.

    Fixed

    • With QtWebEngine 5.15.3 and some locales, Chromium can't start its subprocesses. As a result, qutebrowser only shows a blank page and logs "Network service crashed, restarting service.". This release adds a qt.workarounds.locale setting working around the issue. It is disabled by default since distributions shipping 5.15.3 will probably have a proper patch for it backported very soon.
    • The colors.webpage.preferred_color_scheme and colors.webpage.darkmode.* settings now work correctly with QtWebEngine 5.15.3 (and Gentoo, which at the time of writing packages 5.15.3 disguised as 5.15.2).
    • When dark mode settings were set, existing blink-features arguments in qt.args (or --qt-flag) were overridden. They are now combined properly.
    • On QtWebEngine 5.15.2, auto detection for the prefers-color-scheme media query is broken and always returns no-preference, which was removed from the CSS WG Specification. This release contains a workaround to always return light instead (as per the spec).
    • When an external file selector deletes the temporary file (like nnn does when quitting the terminal), qutebrowser would crash. It now displays an error instead. The same applies if the temporary file is unreadable for any other reason.
    • On macOS, a change in v2.0.x caused certain shortcuts to not work with Cmd anymore, using Ctrl instead. They now work correctly using Cmd (like usual on macOS) again.
    • On macOS, using F (hint all tab) sometimes would open a context menu instead of following a link. This is now fixed.
    • The quirk added for a missing String.replaceAll did not handle special regexp characters correctly, thus breaking some sites. It now handles them properly.
    • The "try again" button on error pages now works correctly with JavaScript disabled.
    • If a GreaseMonkey script doesn't have a "@run-at" comment, qutebrowser accidentally treated that as "@run-at document-idle". However, other GreaseMonkey implementations default to "@run-at document-end" instead, which is what qutebrowser now does, too.
    • The hist_importer.py script didn't work correctly after qutebrowser v2.0.0 and resulted in a history database qutebrowser couldn't read properly. It now works properly again.
    • With certain QtWebEngine versions (5.15.0 based on Chromium 80 and 5.15.3 based on Chromium 87), Chromium's dark mode doesn't invert certain SVG images, even with colors.wegpage.darkmode.policy.images set to smart. Most notably, this causes formulae on Wikipedia to display black on (almost) black. If content.site_specific_quirks is enabled, qutebrowser now injects some CSS as a workaround, which inverts all math formula images on Wikipedia (and potentially other sites, if they use the same CSS class).
    • When a hint label text started with an apostrophe, it would show an escaped text until the hints first character has been pressed. It now shows up correctly.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-2.1.0.tar.gz(5.95 MB)
    qutebrowser-2.1.0.tar.gz.asc(833 bytes)
    qutebrowser-2.1.0.dmg(131.87 MB)
    qutebrowser-2.1.0-amd64.exe(82.96 MB)
    qutebrowser-2.1.0-windows-standalone-amd64.zip(117.08 MB)
    qutebrowser-2.1.0-win32.exe(71.85 MB)
    qutebrowser-2.1.0-windows-standalone-win32.zip(98.97 MB)
  • v2.0.2(Feb 4, 2021)

    Fixed

    • When right-clicking an empty part of the downloads bar, qutebrowser v2.0.x would crash. This is now fixed.
    • Setting content.cookies.store to false only worked properly when this was done after qutebrowser was already started due to a regression in v2.0.0. It now works as expected again.
    • If qutebrowser was installed as a Python egg with Python 3.8 or 3.9, requesting unavailable resource files (such as PDF.js not being bundled, or a missing changelog file) caused in a crash due to an inconsistent behavior in those versions of Python. This is now handled properly by qutebrowser.
    • In v2.0.0, support for importing the sip dependency as sip rather than PyQt5.sip was dropped, since upstream claims it should be used as PyQt5.sip ever since PyQt 5.11. However, some distributions still package sip as a global sip package. Thus, support for a global sip package is now reintroduced.
    • The changelog for v2.0.0 claimed that hints.leave_on_load was set to true by default. However, the input.insert_mode.leave_on_load setting was instead set to true accidentally. This is now fixed by actually setting hints.leave_on_load to true, and reversing the change to input.insert_mode.leave_on_load so it is set to false by default again.
    • When the importlib_resources package is required but was missing, users would get a Python stacktrace rather than a proper error message. This is now fixed.
    • Site-specific quirk JavaScript files were loaded lazily rather than preloaded at the start of qutebrowser, causing a crash when e.g. switching between versions while qutebrowser is open. Now they are preloaded at the start of qutebrowser again.
    • The link to the keybinding cheatsheet on the internal :help page wasn't displayed correctly. This is now fixed.
    • When the completion rebuilding process was interrupted, qutebrowser did not detect this condition on the next start, thus resulting in a completion with inconsistent data. This is now fixed, with another rebuild being forced with this update, to ensure the data is consistent for all users.
    • In certain scenarios, qutebrowser v2.0.x warned about config.load_autoconfig(...) being missing when loading a secondary config (e.g. via config.source(...)). It now only shows those warnings for the main config.py file.
    • The --enable-webengine-inspector flag is now accepted again, however it's unused and undocumented. It purely exists to make it possible to use :restart between pre-v2.0.x and v2.0.2+ versions.
    • When hints.dictionary pointed to a file not encoded as UTF-8, this resulted in a crash (also in versions before v2.0.0). It now properly displays an error instead.
    • When running qutebrowser with a single empty commandline argument, such as done by open_url_in_instance.sh, this would result in a partially initialized window. Interacting with that window results in a crash (also in versions before v2.0.0). Instead, the startpage is now shown properly.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-2.0.2.tar.gz(5.90 MB)
    qutebrowser-2.0.2.tar.gz.asc(833 bytes)
    qutebrowser-2.0.2.dmg(131.31 MB)
    qutebrowser-2.0.2.post1-amd64.exe(82.89 MB)
    qutebrowser-2.0.2.post1-windows-standalone-amd64.zip(117.00 MB)
    qutebrowser-2.0.2.post1-win32.exe(71.77 MB)
    qutebrowser-2.0.2.post1-windows-standalone-win32.zip(98.88 MB)
  • v2.0.1(Jan 28, 2021)

    Fixed

    • If qutebrowser was installed as a Python egg (similar to a .zip file, via setup.py install under certain conditions), a change in v2.0.0 caused it to not start properly. This is now fixed.
    • If qutebrowser was set up (or packaged) in an unclean environment, this could result in a stale qutebrowser/components/adblock.py file being picked up. That file is not part of the release anymore, but if an old version is still around, causes qutebrowser to crash. It's now explicitly blocked inside qutebrowser so it gets ignored even if it still exists.
    • When the adblocking method was switched using :set, and the adblock dependency was unavailable when qutebrowser started (but was installed while qutebrowser was open), this resulted in a crash. Now a warning prompting for a restart of qutebrowser is shown instead.

    Changed

    • The format_json userscript now uses sh instead of bash again.
    • The add-nextcloud-bookmarks, add-nextcloud-cookbook, readability and ripbang userscripts now use a python3 rather than plain python shebang.
    • When QTWEBENGINE_CHROMIUM_FLAGS is set in the environment, this causes flag handling (including workarounds for QtWebEngine crashes) inside qutebrowser to break. This will be handled properly in a future version, but this release now shows a warning on standard output if this is the case.
    • The config completion for fileselect.*.command now also includes the "nnn" terminal file manager.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-2.0.1.tar.gz(5.89 MB)
    qutebrowser-2.0.1.tar.gz.asc(833 bytes)
    qutebrowser-2.0.1.dmg(131.33 MB)
    qutebrowser-2.0.1-amd64.exe(82.86 MB)
    qutebrowser-2.0.1-windows-standalone-amd64.zip(116.96 MB)
    qutebrowser-2.0.1-win32.exe(71.77 MB)
    qutebrowser-2.0.1-windows-standalone-win32.zip(98.86 MB)
  • v2.0.0(Jan 28, 2021)

    Major changes

    • If the Python adblock library is available, it is now used to integrate Brave's Rust adblocker library for improved adblocking based on ABP-like filter lists (such as EasyList). If it is unavailable, qutebrowser falls back to host-blocking, i.e. the same blocking technique it used before this release. As part of this, various settings got renamed, see "Changed" below. Note: If the adblock dependency is available, qutebrowser will ignore custom host blocking via the blocked-hosts config file or file:/// URLs supplied as host blocking lists. You will need to either migrate those to ABP-like lists, or set content.blocking.method to both.
    • Various dependency upgrades - a quick checklist for packagers (see "Changed" below for details):
      • Ensure you're providing at least Python 3.6.1.
      • Ensure you're providing at least Qt 5.12 and PyQt 5.12.
      • Add a new optional dependency on the Python adblock library (if packaged - if not, consider packaging it, albeit optional it's very useful for users).
      • Remove the cssutils optional dependency (if present).
      • Remove the attrs (attr) dependency.
      • Remove the pypeg2 dependency (and perhaps consider dropping the package if not used elsewhere - it's inactive upstream and the repository was removed by Bitbucket).
      • Move the pygments dependency from required to optional.
      • Move the setuptools dependency from runtime (for pkg_resources) to build-time.
      • For Python 3.6, 3.7 or 3.8, add a dependency on the importlib_resources backport.
      • For Python 3.6 only, add a dependency on the dataclasses backport.
    • Dropped support for old OS versions in binary releases:
      • Support for Windows 7 is dropped in the Windows binaries, the minimum required Windows version is now Windows 8.1.
      • Support for macOS 10.13 High Sierra is dropped in the macOS binaries, the minimum required macOS version is now macOS 10.14 Mojave.
    • Various renamed settings and commands, see "Deprecated" and "Changed" below.

    Removed

    • The --enable-webengine-inspector flag (which was only needed for Qt 5.10 and below) is now dropped. With Qt 5.11 and newer, the inspector/devtools are enabled unconditionally.
    • Support for moving qutebrowser data from versions before v1.0.0 has been removed.
    • The --old flag for :config-diff has been removed. It used to show customized options for the old pre-v1.0 config files (in order to aid migration to v1.0).
    • The :inspector command which was deprecated in v1.13.0 (in favor of :devtools) is now removed.

    Deprecated

    • Several commands have been renamed for consistency and/or easier grouping of related commands. Their old names are still available, but deprecated and will be removed in qutebrowser v2.1.0.
      • run-macro -> macro-run
      • record-macro -> macro-record
      • buffer -> tab-select
      • open-editor -> edit-text
      • toggle-selection -> selection-toggle
      • drop-selection -> selection-drop
      • reverse-selection -> selection-reverse
      • follow-selected -> selection-follow
      • follow-hint -> hint-follow
      • enter-mode -> mode-enter
      • leave-mode -> mode-leave

    Added

    • New settings for the ABP-based adblocker:
      • content.blocking.method to decide which blocker(s) should be used.
      • content.blocking.adblock.lists to configure ABP-like lists to use.
    • New qt.environ setting which makes it easier to set/unset environment variables for qutebrowser.
    • New settings to use an external file picker (such as ranger or vifm):
      • fileselect.handler (default or external)
      • fileselect.multiple_files.command
      • fileselect.single_file.command
    • When QtWebEngine has been updated but PyQtWebEngine hasn't yet, the dark mode settings might stop working. As a (currently undocumented) escape hatch, this version adds a QUTE_DARKMODE_VARIANT=qt_515_2 environment variable which can be set to get the correct behavior in (transitive) situations like this.
    • New --desktop-file-name commandline argument, which can be used to customize the desktop filename passed to Qt (which is used to set the app_id on Wayland).
    • The :open completion now also completes local file paths and file:// URLs, via a new filesystem entry in completion.open_categories. Also, a new completion.favorite_paths setting was added which can be used to add paths to show when :open is used without any input.
    • New QUTE_VERSION variable for userscripts, which can be used to read qutebrowser's version.
    • New "Copy URL" entry in the context menu for downloads.
    • New :bookmark-list command which lists all bookmarks/quickmarks. The corresponding qute://bookmarks URL already existed since v0.8.0, but it was never exposed as a command.
    • New qt.workarounds.remove_service_workers setting which can be used to remove the "Service Workers" directory on every start. Usage of this option is generally discouraged, except in situations where the underlying QtWebEngine bug is a known cause for crashes.
    • Changelogs are now shown after qutebrowser was upgraded. By default, the changelog is only shown after minor upgrades (feature releases) but not patch releases. This can be adjusted (or disabled entirely) via a new changelog_after_upgrade setting.
    • New userscripts:
      • kodi to play videos in Kodi
      • qr to generate a QR code of the current URL
      • add-nextcloud-bookmarks to create bookmarks in Nextcloud's Bookmarks app
      • add-nextcloud-cookbook to add recipes to Nextcloud's Cookbook app

    Changed

    • config.py files now are required to have either config.load_autoconfig(False) (don't load autoconfig.yml) or config.load_autoconfig() (do load autoconfig.yml) in them.
    • Various host-blocking settings have been renamed to accomodate the new ABP-like adblocker:
      • content.host_blocking.enabled -> content.blocking.enabled (controlling both blockers)
      • content.host_blocking.whitelist -> content.blocking.whitelist (controlling both blockers)
      • content.host_blocking.lists -> content.blocking.hosts.lists
    • Changes to default settings:
      • tabs.background is now true by default, so that new tabs get opened in the background.
      • input.partial_timeout is now set to 0 by default, so that partially typed key strings are never cleared.
      • hints.leave_on_load is now false by default, so that hint mode doesn't get left when a page finishes loading. This can lead to stale hints persisting in rare circumstances, but is better than leaving hint mode when the user entered it before loading was completed.
      • The default for tabs.width (tab bar width if vertical) is now 15% of the window width rather than 20%.
      • The default bindings for moving tabs (tab-move - and tab-move +) were changed from gl and gr to gK and gJ, to be consistent with the tab switching bindings.
      • The text color for warning messages is now black instead of white, for increased contrast and thus readability.
      • The default timeout for messages is now raised from 2s to 3s.
    • On the first start, the history completion database is regenerated to remove a few problematic entries (such as long qute://pdfjs URLs). This might take a couple of minutes, but is a one-time operation. This should result in a performance improvement for the completion for affected users.
    • qutebrowser now shows an error if its history database version is newer than expected. This currently should never happen, but allows for potentially backwards-incompatible changes in future versions.
    • At least Python 3.6.1 is now required to run qutebrowser, support for Python 3.5 (and 3.6.0) is dropped. Note that Python 3.5 is no longer supported upstream since September 2020.
    • At least Qt/PyQt 5.12 is now required to run qutebrowser, support for 5.7 to 5.11 (inclusive) is dropped. While Debian Buster ships Qt 5.11, it's based on a Chromium version from 2018 with no Debian security support and unsupported upstream since May 2019. It also has compatibility issues with various websites (GitHub, Twitch, Android Developer documentation, YouTube, ...). Since no newer Debian Stable is released at the time of writing, it's recommended to install qutebrowser in a virtualenv with a newer version of Qt/PyQt.
    • New optional dependency on the Python adblock library (see above for details).
    • The (formerly optional) cssutils dependency is now removed. It was only needed for improved behavior in corner cases when using :download --mhtml with the (non-default) QtWebKit backend, and as such it's unlikely anyone is still relying on it. The cssutils project is also dead upstream, with its repository being gone after Bitbucket removed Mercurial support.
    • The (formerly required) pygments dependency is now optional. It is only used when using :view-source with QtWebKit, or when forcing it via :view-source --pygments on QtWebEngine. If it is unavailable, an unhighlighted fallback version of the page's source is shown.
    • The former runtime dependency on the pkg_resources module (part of the setuptools project) got dropped. Note that setuptools is still required to run setup.py.
    • A new dependency on the importlib_resources module got introduced for Python versions up to and including 3.8. Note that the stdlib importlib.resources module for Python 3.7 and 3.8 is missing the needed APIs, thus requiring the backports for those versions as well.
    • The former dependency on the attrs/attr package is now dropped in favour of dataclasses in the Python standard library. On Python 3.6, a new dependency on the dataclasses backport is now required.
    • The former dependency on the pypeg2 package is now dropped. This might cause some changes for certain corner-cases for suggested filenames when downloading files with the QtWebKit backend.
    • Windows and macOS releases now ship Python 3.9 rather than 3.7.
    • The colors.webpage.darkmode.* settings are now also supported with older Qt versions (Qt 5.12 and 5.13) rather than just with Qt 5.14 and above.
    • For regexes in the config (hints.{prev,next}_regexes), certain patterns which will change meanings in future Python versions are now disallowed. This is the case for character sets starting with a literal [ or containing literal character sequences --, &&, ~~, or ||. To avoid a warning, remove the duplicate characters or escape them with a backslash.
    • If prompt(..., "default") is used via JS, the default text is now pre-selected in the prompt shown by qutebrowser.
    • URLs such as ::1/foo are now handled as a search term or local file rather than IPv6. Use [::1]/foo to force parsing as IPv6 instead.
    • The mkvenv.py script now runs a "smoke test" after setting up the virtual environment to ensure it's working as expected. If necessary, the test can be skipped via a new --skip-smoke-test flag.
    • Both qutebrowser userscripts and Greasemonkey scripts are now additionally picked up from qutebrowser's config directory (the userscripts and greasemonkey subdirectories of e.g. ~/.config/qutebrowser/) rather than only the data directory (the same subdirectories of e.g. ~/.local/share/qutebrowser/).
    • The :later command now understands a time specification like 5m or 1h5m2s, rather than just taking milliseconds.
    • The importer.py script doesn't use a browser argument anymore; instead its --input-format switch can be used to configure the input format. The help also was expanded to explain how to use it properly.
    • If tabs.tabs_are_windows is set, the tabs.last_close setting is now ignored and the window is always closed when using :close (d).
    • With the (default) QtWebEngine backend, if a custom accept header is set via content.headers.custom, the custom value is now ignored for XHR (XMLHttpRequest) requests. Instead, the sent value is now */* or the header set from JavaScript, as it would be if content.headers.custom wasn't set.
    • The :tab-select completion now shows the underlying renderer process PID if doing so is supported (on QtWebEngine 5.15).
    • If tabs.favicons.show is set to never, favicons aren't unnecessarily downloaded anymore. Thus, disabling favicons can help with a possible fingerprinting vector.
    • "Super" is now understood as a modifier (i.e. as alias to "Meta").
    • Initial support for Python 3.10 (currently in Alpha stage).
    • Various performance improvements, including for the startup time.

    Fixed

    • With interpolated color settings (colors.tabs.indicator.* and colors.downloads.*), the alpha channel is now handled correctly.
    • Fixes to userscripts:
      • format_json now uses env in its shebang, making it work correctly on systems where bash isn't located in /bin.
      • qute-pass now handles the MIME output format introduced in gopass 1.10.0.
      • qute-lastpass now types multiple < or > characters correctly.
    • The :undo completion now sorts its entries correctly (by the numerical index rather than lexicographically).
    • The completion.web_history.ignore setting now works properly when set in config.py (rather than via :set). Additionally, a :config-source will not result in a history rebuild if the value wasn't actually changed.
    • When downloading a data: URL, the suggested filename is now improved and contains a proper extension. Before this fix, qutebrowser would use the URL's data contents as filename with QtWebEngine; or "binary blob" with the Qt network stack.
    • When :tab-only is run before a tab is available, an error is now shown instead of crashing.
    • A couple of long URLs (such as qute://pdfjs URLs) are now not added to the history database anymore.
    • A bug in QtWebEngine 5.15.2 causes "renderer process killed" errors on websites like LinkedIn and TradingView. There is now a workaround in qutebrowser to prevent this from happening.
    • Nextcloud Calendars started using String.replaceAll which was only added to Chromium recently (Chrome 85), so won't work with current QtWebEngine versions. This release includes a workaround (a polyfill as a site-specific-quirk).
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-2.0.0.tar.gz(5.89 MB)
    qutebrowser-2.0.0.tar.gz.asc(833 bytes)
    qutebrowser-2.0.0-amd64.exe(82.85 MB)
    qutebrowser-2.0.0-windows-standalone-amd64.zip(116.97 MB)
    qutebrowser-2.0.0-win32.exe(71.79 MB)
    qutebrowser-2.0.0-windows-standalone-win32.zip(98.86 MB)
    qutebrowser-2.0.0.dmg(131.33 MB)
  • v1.14.1(Dec 4, 2020)

    Added

    • With v1.14.0, qutebrowser configures the main window to be transparent, so that it's possible to configure a translucent tab- or statusbar. However, that change introduced various issues, such as performance degradation on some systems or breaking dmenu window embedding with its -w option. To avoid those issues for people who are not using transparency, the default behavior is reverted to versions before v1.14.0 in this release. A new window.transparent setting can be set to true to restore the behavior of v1.14.0.

    Changed

    • Windows and macOS releases now ship Qt 5.15.2, which is based on Chromium 83.0.4103.122 with security fixes up to 86.0.4240.183. This includes CVE-2020-15999 in the bundled freetype library, which is known to be exploited in the wild. It also includes various other bugfixes/features compared to Qt 5.15.0 included in qutebrowser v1.14.0, such as:
      • Correct handling of AltGr on Windows
      • Fix for content.cookies.accept not working properly
      • Fixes for screen sharing (some websites are still broken until an upcoming Qt 5.15.3)
      • Support for FIDO U2F / WebAuth
      • Fix for the unwanted creation of directories such as databases-incognito in the home directory
      • Proper autocompletion in the devtools console
      • Proper signalisation of a tab's audible status ([A])
      • Fix for a hang when opening the context menu on macOS Big Sur (11.0)
      • Hardware accelerated graphics on macOS

    Fixed

    • Setting the content.headers.referer setting to same-domain (the default) was supposed to truncate referers to only the host with QtWebEngine. Unfortunately, this functionality broke in Qt 5.14. It works properly again with this release, including a test so this won't happen again.
    • With QtWebEngine 5.15, setting the content.headers.referer setting to never did still send referers. This is now fixed as well.
    • In v1.14.0, a regression was introduced, causing a crash when qutebrowser was closed after opening a download with PDF.js. This is now fixed.
    • With Qt 5.12, the Object.fromEntries JavaScript API is unavailable (it was introduced in Chromium 73, while Qt 5.12 is based on 69). This caused https://www.vr.fi/en and possibly other websites to break when accessed with Qt 5.12. A suitable polyfill is now included with qutebrowser if content.site_specific_quirks is enabled (which is the default).
    • While XDG startup notifications (e.g. launch feedback via the bouncy cursor in KDE Plasma) were supported ever since Qt 5.1, qutebrowser's desktop file accidentally declared that it wasn't supported. This is now fixed.
    • The dmenu_qutebrowser and qutedmenu userscripts now correctly read the qutebrowser sqlite history which has been in use since v1.0.0.
    • With Python 3.8+ and vertical tabs, a deprecation warning for an implicit int conversion was shown. This is now fixed.
    • Ever since Qt 5.11, fetching more completion data when that data is loaded lazily (such as with history) and the last visible item is selected was broken. The exact reason is currently unknown, but this release adds a tenative fix.
    • When PgUp/PgDown were used to go beyond the last visible item, the above issue caused a crash, which is now also fixed.
    • As a workaround for an overzealous Microsoft Defender false-positive detecting a "trojan" in the (unprocessed) adblock list, :adblock-update now doesn't cache the HTTP response anymore.
    • With the QtWebKit backend and content.headers set to same-domain (the default), origins with the same domain but different schemes or ports were treated as the same domain. They now are correctly treated as different domains.
    • When a URL path uses percent escapes (such as https://example.com/embedded%2Fpath), using :navigate up would treat the %2F as a path separator and replace any remaining percent escapes by their unescaped equivalents. Those are now handled correctly.
    • On macOS 11.0 (Big Sur), the default monospace font name caused a parsing error, thus resulting in broken styling for the completion, hints, and other UI components. They now look properly again.
    • Due to a Qt bug, installing Qt/PyQt from prebuilt binaries on systems with a very old libxcb-utils version (notably, Debian Stable, but not Ubuntu since 16.04 LTS) results in a setup which fails to start. This also affects the mkvenv.py script, which now includes a workaround for this case.
    • The open_url_instance.sh userscript now complains when socat is not installed, rather than silencing the error.
    • The example AppArmor profile in misc/ was outdated and written for the older QtWebKit backend. It is now updated to serve as an useful starting point with QtWebEngine.
    • When running :devtools on Fedora without the needed (optional) dependency installed, it was suggested to install qt5-webengine-devtools, which does not, in fact, exist. It's now correctly suggested to install qt5-qtwebengine-devtools instead.
    • With Qt 5.15.2, lines/borders coming from the readability-js userscript were invisible. This is now fixed by changing the border color to grey (with all Qt versions).
    • Due to changes in the underlying Chromium, the colors.webpage.prefers_color_scheme_dark setting broke with Qt 5.15.2. It now works properly again.
    • A bug in the pkg_resources module used by qutebrowser caused deprecation warnings to appear on start with Python 3.9 on some setups. Those are now hidden.
    • Minor performance improvements.
    • Fix for various functionality breaking in private windows with v1.14.0, after the last private window is closed. This includes:
      • Ad blocking
      • Downloads
      • Site-specific quirks (e.g. for Google login)
      • Certain settings such as content.javascript.enabled
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.14.1.tar.gz(3.96 MB)
    qutebrowser-1.14.1.tar.gz.asc(833 bytes)
    qutebrowser-1.14.1.dmg(141.16 MB)
    qutebrowser-1.14.1-win32.exe(70.72 MB)
    qutebrowser-1.14.1-amd64.exe(81.80 MB)
    qutebrowser-1.14.1-windows-standalone-win32.zip(97.31 MB)
    qutebrowser-1.14.1-windows-standalone-amd64.zip(115.39 MB)
  • v1.14.0(Oct 15, 2020)

    Note: The QtWebEngine version bundled with the Windows/macOS releases is still based on Qt 5.15.0 (like with qutebrowser v1.12.0 and v1.13.0) rather than Qt 5.15.1 because of a Qt bug causing frequent renderer process crashes. When Qt 5.15.2 is released (planned for November 3rd, 2020), a qutebrowser v1.14.x patch release with an updated QtWebEngine will be released.

    Furthermore, this release still only contains partial session support for QtWebEngine 5.15. It's still recommended to run against Qt 5.15 due to the security patches contained in it -- for most users, the added workarounds seem to work out fine. A rewritten session support will be part of qutebrowser v2.0.0, tentatively planned for the end of the year or early 2021.

    Changed

    • The content.media_capture setting got split up into three more fine-grained settings, content.media.audio_capture, .video_capture and .audio_video_capture. Before this change, answering "always" to a prompt about e.g. audio capturing would set the content.media_capture setting, which would also allow the same website to capture video on a future visit. Now every prompt will set the appropriate setting, though existing content.media_capture settings in autoconfig.yml will be migrated to set all three settings. To review/change previously granted permissions, use :config-diff and e.g. :config-unset -u example.org content.media.video_capture.
    • The main window's (invisible) background color is now set to transparent. This allows using the alpha channel in statusbar/tabbar colors to get a partially transparent qutebrowser window on a setup which supports doing so.
    • If QtWebEngine is compiled with PipeWire support and libpipewire is installed, qutebrowser will now support screen sharing on Wayland. Note that QtWebEngine 5.15.1 is needed.
    • When :undo is used with a count, it now reopens the count-th to last tab instead of the last one. The depth can instead be passed as an argument, which is also completed.
    • The default completion.timestamp_format now also shows the time.
    • :back and :forward now take an optional index which is completed using the current tab's history.
    • The time a website in a tab was visited is now saved/restored in sessions.
    • When attempting to download a file to a location for which there's already a still-running download, a confirmation prompt is now displayed.
    • :completion-item-focus now understands next-page and prev-page with corresponding <PgDown> / <PgUp> default bindings.
    • When the last private window is closed, all private browsing data is now cleared.
    • When config.source(...) is used with a --config-py argument given, qutebrowser used to search relative files in the config basedir, leading to them not being found when using a shared config.py for different basedirs. Instead, they are now searched relative to the given config.py file.
    • navigate prev ([[) and navigate next (]]) now recognize links with nav-prev and nav-next classes, such as those used by the Hugo static site generator.
    • When tabs.favicons is disabled but tabs.tabs_are_windows is set, the window icon is still set to the page's favicon now.
    • The --asciidoc argument to src2asciidoc.py and build_release.py now only takes the path to asciidoc.py, using the current Python interpreter by default. To configure the Python interpreter as well, use --asciidoc-python path/to/python --asciidoc path/to/asciidoc.py instead of the former --asciidoc path/to/python path/to/asciidoc.py.
    • Dark mode (colors.webpage.darkmode.*) is now supported with Qt 5.15.2 (which is not released yet).
    • The default for the darkmode policy.images setting is now set to smart which fixes issues with e.g. formulas on Wikipedia.
    • The readability-js userscript now adds some CSS to improve the reader mode styling in various scenarios:
      • Images are now shrinked to the page width, similarly to what Firefox' reader mode does.
      • Some images ore now displayed as block (rather than inline) which is what Firefox' reader mode does as well.
      • Blockquotes are now styled more distinctively, again based on the Firefox reader mode.
      • Code blocks are now easier to distinguish from text and tables have visible cell margins.
    • The readability-js userscript now supports hint userscript mode.

    Added

    • New argument strip for :navigate which removes queries and fragments from the current URL.
    • :undo now has a new -w / --window argument, which can be used to restore closed windows (rather than tabs). This is bound to U by default.
    • :jseval can now take javascript:... URLs via a new --url flag.
    • New replacement {aligned_index} for tabs.title.format and format_pinned which behaves like {index}, but space-pads the index based on the total numbers of tabs. This can be used to get aligned tab texts with vertical tabs.
    • New command :devtools-focus (bound to wIf) to toggle keyboard focus between the devtools and web page.
    • The --target argument to qutebrowser now understands a new private-window value, which can be used to open a private window in an existing instance from the commandline.
    • The :download-open command now has a new --dir flag, which can be used to open the directory containing the downloaded file. An entry to do the same was also added to the context menu.
    • Messages are now wrapped when they are too long to be displayed on a single line.
    • New possible --debug-flag values:
      • wait-renderer-process waits for a SIGUSR1 in the renderer process so a debugger can be attached.
      • avoid-chromium-init allows using --version without needing a working QtWebEngine/Chromium.

    Fixed

    • A URL pattern with a *. host was considered valid and matched all hosts. Due to keybindings like tsH toggling scripts for *://*.{url:host}/*, invoking them on pages without a host (e.g. about:blank) could result in accidentally allowing/blocking JavaScript for all pages. Such patterns are now considered invalid, with existing patterns being automatically removed from autoconfig.yml.
    • When scrolling.bar was set to overlay (the default), qutebrowser would internally override any enable-features=... flags passed via qt.args or --qt-flag. It now correctly combines existing enable-feature flags with internal ones.
    • Elements with an inherited contenteditable attribute now trigger insert mode and get hints assigned correctly.
    • When checkmarks, radio buttons and some other elements are styled via the Bootstrap CSS framework, they now get hints correctly.
    • When the session file isn't writable when qutebrowser exits, an error is now logged instead of crashing.
    • When using -m with the qute-lastpass userscript, it accidentally matched URLs containing the match as substring. This is now fixed.
    • When a filename is derived from a page's title, it's now shortened to the maximum filename length permitted by the filesystem.
    • :enter-mode register crashed since v1.13.0, it now displays an error instead.
    • With the QtWebKit backend, webpage resources loading certain invalid URLs could cause a crash, which is now fixed.
    • When :config-edit is used but no config.py exists yet, the file is now created (and watched for changes properly) before spawning the external editor.
    • When hint mode was entered from outside normal mode, the status bar was empty instead of displaying the proper text. This is now fixed.
    • When entering different modes too quickly (e.g. pressing fV), the statusbar could end up in a confusing state. This is now fixed.
    • When qutebrowser quits, running downloads are now cancelled properly.
    • The site-specific quirk for web.whatsapp.com has been updated to work after recent changes in WhatsApp.
    • Highlighting in the completion now works properly when UTF-16 surrogate pairs (such as emoji) are involved.
    • When a windowed inspector is clicked, insert mode now isn't entered anymore.
    • When :undo is used to re-open a tab, but tabs.tabs_are_windows was set between closing and undoing the close, qutebrowser crashed. This is now fixed.
    • With QtWebEngine 5.15.0, setting the darkmode image policy to smart leads to renderer process crashes. The offending setting value is now ignored with a warning.
    • Fixes for the qute-pass userscript:
      • With newer gopass versions, a deprecation notice was copied as password due to qute-pass using it in a deprecated way.
      • The --password-store argument didn't actually set PASSWORD_STORE_DIR for pass, resulting in qute-pass finding matches but the underlying pass not finding matching passwords.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.14.0.tar.gz(3.95 MB)
    qutebrowser-1.14.0.tar.gz.asc(833 bytes)
    qutebrowser-1.14.0-win32.exe(69.53 MB)
    qutebrowser-1.14.0-amd64.exe(80.19 MB)
    qutebrowser-1.14.0-windows-standalone-win32.zip(96.20 MB)
    qutebrowser-1.14.0-windows-standalone-amd64.zip(113.60 MB)
    qutebrowser-1.14.0.dmg(139.34 MB)
  • v1.13.1(Jul 17, 2020)

    Fixed

    • With Qt 5.14, shared workers are now disabled. This works around a crash in QtWebEngine on certain sites (like the Epic Games Store or the Unreal Engine page).
    • When a window is closed, the tab it contains are now correctly shut down (closing e.g. any dialogs which are still open for those tabs).
    • The Qt 5.15 session workaround now loads the correct (rather than the last) page when :back was used before saving a session.
    • In certain situations on Windows, qutebrowser fails to find the username of the user launching qutebrowser (most likely due to a bug in the application launching it). When this happens, an error is now displayed instead of crashing.
    • Certain autoconfig.yml with an invalid structure could lead to crashes, which are now fixed.
    • Generating docs with asciidoc2html.py (e.g. via mkvenv.py) now works correctly without Pygments being installed system-wide.
    • Ever since Qt 5.9, when input.mouse.rocker_gestures was enabled, the context menu still was shown when clicking the right mouse button, thus preventing the rocker gestures. This is now fixed.
    • Clicking the inspector switched from existing modes (such as passthrough) to normal mode since v1.13.0. Now insert mode is only entered when the inspector is clicked in normal mode.
    • Pulseaudio now shows qutebrowser's audio streams as qutebrowser correctly, rather than showing them as Chromium with some Qt versions.
    • If :help was called with a deprecated command (e.g. :help :inspector), the help page would show despite deprecated commands not being documented. This now shows an error instead.
    • The qute-lastpass userscript now filters out duplicate entries with --merge-candidates.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.13.1.tar.gz(3.84 MB)
    qutebrowser-1.13.1.tar.gz.asc(833 bytes)
    qutebrowser-1.13.1-win32.exe(75.00 MB)
    qutebrowser-1.13.1-amd64.exe(85.80 MB)
    qutebrowser-1.13.1-windows-standalone-win32.zip(101.85 MB)
    qutebrowser-1.13.1-windows-standalone-amd64.zip(119.35 MB)
    qutebrowser-1.13.1.dmg(144.04 MB)
  • v1.13.0(Jun 26, 2020)

    Deprecated

    • The :inspector command is deprecated and has been replaced by a new :devtools command (see below).

    Removed

    • The :debug-log-level command was removed as it's replaced by the new logging.level.console setting.
    • The qute://plainlog special page got replaced by qute://log?plain - the names of those pages is considered an implementation detail, and :messages --plain should be used instead.

    Changed

    • Changes to commands:
      • :config-write-py now adds a note about config.py files being targeted at advanced users.
      • :report now takes two optional arguments for bug/contact information, so that it can be used without the report window popping up.
      • :message now takes a --logfilter / -f argument, which is a list of logging categories to show.
      • :debug-log-filter now understands the full logfilter syntax.
    • Changes to settings:
      • fonts.tabs has been split into fonts.tabs.{selected,unselected} (see below).
      • statusbar.hide has been renamed to statusbar.show with the possible values being always (hide = False), never (hide = True) or in-mode (new, only show statusbar outside of normal mode.
      • The QtFont config type formerly used for fonts.tabs and fonts.debug_console is now removed and entirely replaced by Font. The former distinction was mainly an implementation detail, and the accepted values shouldn't have changed.
      • input.rocker_gestures has been renamed to input.mouse.rocker_gestures.
      • content.dns_prefetch is now enabled by default again, since the crashes it caused are now fixed (Qt 5.15) or worked around.
      • scrolling.bar supports a new overlay value to show an overlay scrollbar, which is now the default. On unsupported configurations (on Qt < 5.11, with QtWebKit or on macOS), the value falls back to when-searching or never (QtWebKit).
      • url.auto_search supports a new schemeless value which always opens a search unless the given URL includes an explicit scheme.
    • New handling of bindings in hint mode which fixes various bugs and allows for single-letter keybindings in hint mode.
    • The statusbar now shows partial keychains in all modes (e.g. while hinting).
    • New t[Cc][Hh] default bindings which work similarly to the t[Ss][Hh] bindings for JavaScript but toggle cookie permissions.
    • The tor_identity userscript now takes the password via a -p flag and has a new -c flag to customize the Tor control port.
    • Small performance improvements.

    Added

    • New settings:
      • logging.level.ram and logging.level.console to configure the default logging levels via the config.
      • fonts.tabs.selected and fonts.tabs.unselected to set the font of the selected tab independently from unselected tabs (e.g. to make it bold).
      • input.mouse.back_forward_buttons which can be set to false to disable back/forward mouse buttons.
    • New :devtools command (replacing :inspector) with various improved functionality:
      • The devtools can now be docked to the main window, by running :devtools left (wIh), bottom (wIj), top (wIk) or right (wIl). To show them in a new window, use :devtools window (wIw). Using :devtools (wi) will open them at the last used position.
      • The devtool window now has a "qutebrowser developer tools" window title.
      • When a resource is opened from the devtools, it now opens in a proper qutebrowser tab.
      • On Fedora, when the qt5-webengine-devtools package is missing, an error is now shown instead of a blank inspector window.
      • If opened as a window, the devtools are now closed properly when the associated tab is closed.
      • When the devtools are clicked, insert mode is entered automatically.

    Fixed

    • Crash when tabs.focus_stack_size is set to -1.
    • Crash when a pdf.js file for PDF.js exists, but viewer.html does not.
    • Crash when :completion-item-yank --sel is used on a platform without primary selection support (e.g. Windows/macOS).
    • Crash when there's a feature permission request from Qt with an invalid URL (which happens due to a Qt bug with Qt 5.15 in private browsing mode).
    • Crash in rare cases where QtWebKit/QtWebEngine imports fail in unexpected ways.
    • Crash when something removed qutebrowser's IPC socket file and it's been running for 6 hours.
    • :config-write-py now works with paths starting with ~/... again.
    • New site-specific quirk for a missing globalThis in Qt <= 5.12 on Reddit and Spotify.
    • When ; is added to hints.chars, using hint labels containing ;; now works properly.
    • Hint letters outside of ASCII should now work.
    • When bindings.key_mappings is used with hints, it now works properly with letters outside of ASCII as well.
    • With Qt 5.15, the audible/muted indicators are not updated properly due to a Qt bug. This release adds a workaround so that at least the muted indicator is shown properly.
    • As a workaround for crashes with QtWebEngine versions between 5.12 and 5.14 (inclusive), changing the user agent (content.headers.user_agent) exposed to JS now requires a restart. The corresponding HTTP header is not affected.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.13.0.tar.gz(3.82 MB)
    qutebrowser-1.13.0.tar.gz.asc(833 bytes)
    qutebrowser-1.13.0.dmg(144.03 MB)
    qutebrowser-1.13.0-win32.exe(74.96 MB)
    qutebrowser-1.13.0-amd64.exe(85.54 MB)
    qutebrowser-1.13.0-windows-standalone-win32.zip(101.77 MB)
    qutebrowser-1.13.0-windows-standalone-amd64.zip(119.08 MB)
  • v1.12.0(Jun 1, 2020)

    Removed

    • tox -e mkvenv which was deprecated in qutebrowser v1.10.0 is now removed. Use the mkvenv.py script instead.
    • Support for using config.bind(key, None) in config.py to unbind a key was deprecated in v1.8.2 and is now removed. Use config.unbind(key) instead.
    • :yank markdown was deprecated in v1.7.0 and is now removed. Use :yank inline [{title}]({url}) instead.

    Added

    • New :debug-keytester command, which shows a "key tester" widget. Previously, that was only available as a separate application via python3 -m scripts.keytester.
    • New :config-diff command which opens the qute://configdiff page.
    • New --debug-flag log-cookies to log cookies to the debug log.
    • New colors.contextmenu.disabled.{fg,bg} settings to customize colors for disabled items in the context menu.
    • New line selection mode (:toggle-selection --line), bound to Shift-V in caret mode.
    • New colors.webpage.darkmode.* settings to control Chromium's dark mode. Note that those settings only work with QtWebEngine on Qt >= 5.14 and require a restart of qutebrowser.

    Changed

    • Windows and macOS releases now ship Qt 5.15, which is based on Chromium 80.0.3987.163 with security fixes up to 81.0.4044.138.
    • The content.cookies.accept setting now accepts URL patterns.
    • Tests are now included in release tarballs. Note that only running them with the exact dependencies listed in misc/requirements/requirements-tests.txt{,-raw} is supported.
    • The :tab-focus command now has completion for tabs in the current window.
    • The bindings.key_mappings setting now maps <Ctrl+I> to the tab key by default.
    • :tab-give --private now detaches a tab into a new private window.

    Fixed

    • Using :open -s now only rewrites http:// in URLs to https://, not other schemes like qute://.
    • When an unhandled exception happens in certain parts of the code (outside of the main thread), qutebrowser did crash or freeze when trying to show its exception handler. This is now fixed.
    • :inspector now works correctly when cookies are disabled globally.
    • Added workaround for a (Gentoo?) PyQt/packaging issue related to the QWebEngineFindTextResult handling added in v1.11.0.
    • When entering caret selection mode (v, v) very early before a page is loaded, an error is now shown instead of a crash happening.
    • The workaround for session loading with Qt 5.15 now handles sessions.lazy_restore so that the saved page is loaded instead of the "stub" page with no possibility to get to the web page.
    • A site specific quirk to allow typing accented characters on Google Docs was active for docs.google.com, but not drive.google.com. It is now applied for both subdomains.
    • With older graphics hardware (OpenGL < 4.3) with Qt 5.14 on Wayland, WebGL causes segfaults. Now qutebrowser detects that combination and suggests to disable WebGL or use XWayland.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.12.0.tar.gz(3.79 MB)
    qutebrowser-1.12.0.tar.gz.asc(833 bytes)
    qutebrowser-1.12.0.dmg(144.04 MB)
    qutebrowser-1.12.0-win32.exe(74.95 MB)
    qutebrowser-1.12.0-amd64.exe(85.55 MB)
    qutebrowser-1.12.0-windows-standalone-win32.zip(101.77 MB)
    qutebrowser-1.12.0-windows-standalone-amd64.zip(119.07 MB)
  • v1.11.1(May 7, 2020)

    Security

    • CVE-2020-11054: After a certificate error was overridden by the user, qutebrowser displays the URL as yellow (colors.statusbar.url.warn.fg). However, when the affected website was subsequently loaded again, the URL was mistakenly displayed as green (colors.statusbar.url.success_https). While the user already has seen a certificate error prompt at this point (or set content.ssl_strict to false which is not recommended), this could still provide a false sense of security. This is now fixed.

    Note: The original source release accidentally contained a Python virtual environment in misc/requirements/testenv as well as some other files (doc/changelog.html, doc/faq.html, misc/requirements/requirements-pyqt-5.15.txt-raw). In the post1 release, those files are deleted, with no other changes.

    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.11.1.tar.gz(6.47 MB)
    qutebrowser-1.11.1.tar.gz.asc(833 bytes)
    qutebrowser-1.11.1.dmg(133.87 MB)
    qutebrowser-1.11.1-win32.exe(66.03 MB)
    qutebrowser-1.11.1-amd64.exe(76.66 MB)
    qutebrowser-1.11.1-windows-standalone-win32.zip(92.36 MB)
    qutebrowser-1.11.1-windows-standalone-amd64.zip(109.86 MB)
    qutebrowser-1.11.1.post1.tar.gz.asc(833 bytes)
    qutebrowser-1.11.1.post1.tar.gz(2.89 MB)
  • v1.11.0(Apr 27, 2020)

    Added

    • New settings:
      • search.wrap which can be set to false to prevent wrapping around the page when searching. With QtWebEngine, Qt 5.14 or newer is required.
      • content.unknown_url_scheme_policy which allows controlling when an external application is opened for external links (never, from user interaction, always).
      • content.fullscreen.overlay_timeout to configure how long the fullscreen overlay should be displayed. If set to 0, no overlay is displayed.
      • hints.padding to add additional padding for hints.
      • hints.radius to set a border radius for hints (set to 3 by default).
    • New placeholders for url.searchengines values:
      • {unquoted} inserts the search term without any quoting.
      • {semiquoted} (same as {}) quotes most special characters, but slashes remain unquoted.
      • {quoted} (same as {} in earlier releases) also quotes slashes.

    Changed

    • First adaptions to Qt 5.15, including a stop-gap measure for session loading not working properly with it.
    • Searching now wraps around the page by default with QtWebKit (where it didn't before). Set search.wrap to false to restore the old behavior.
    • The {} placeholder for search engines (the url.searchengines setting) now does not quote slashes anymore, but other characters typically encoded in URLs still get encoded. This matches the behavior of search engines in Chromium. To revert to the old behavior, use {quoted} instead.
    • The content.windowed_fullscreen setting got renamed to content.fullscreen.window.
    • Mouse-wheel scrolling is now prevented while hints are active.
    • Changes to userscripts:
      • qute-bitwarden now has an optional --totp flag which can be used to copy TOTP codes to clipboard (requires the pyperclip module).
      • readability-js now opens readability tabs next to the original tab (using the :open --related flag).
      • readability-js now displays a favicon for readability tabs.
      • password_fill now triggers a change JavaScript event after filling the data.
    • The dictcli.py script now shows better error messages.
    • Various improvements to the mkvenv.py script (mainly useful for development).
    • Minor performance improvements.

    Deprecated

    • A warning about old Qt versions is now also shown with Qt 5.9 and 5.10, as support for Qt < 5.11 will be dropped in qutebrowser v2.0.

    Fixed

    • unsafeWindow is now defined for Greasemonkey scripts with QtWebKit.
    • The proxied window global is now shared between different Greasemonkey scripts (but still separate from the page's window), to match the original Greasemonkey implementation.
    • The --output-messages (-m) flag added in v1.9.0 now also works correctly when using :spawn --userscript.
    • :version and --version now don't crash if there's an (invalid) /etc/os-release file which has non-comment lines without a = character.
    • Scripts in scripts/ now report errors to stderr correctly, instead of using stdout.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.11.0.tar.gz(2.96 MB)
    qutebrowser-1.11.0.tar.gz.asc(833 bytes)
    qutebrowser-1.11.0.dmg(133.87 MB)
    qutebrowser-1.11.0-win32.exe(66.03 MB)
    qutebrowser-1.11.0-amd64.exe(76.69 MB)
    qutebrowser-1.11.0-windows-standalone-win32.zip(92.36 MB)
    qutebrowser-1.11.0-windows-standalone-amd64.zip(109.86 MB)
  • v1.10.2(Apr 17, 2020)

    Changed

    • Windows and macOS releases now bundle Qt 5.14.2, including security fixes up to Chromium 80.0.3987.132.

    Fixed

    • The WhatsApp workaround now also works when using WhatsApp in languages other than English.
    • The mkvenv.py script now also works properly on Windows.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.10.2.tar.gz(2.95 MB)
    qutebrowser-1.10.2.tar.gz.asc(833 bytes)
    qutebrowser-1.10.2-win32.exe(66.03 MB)
    qutebrowser-1.10.2-amd64.exe(76.66 MB)
    qutebrowser-1.10.2-windows-standalone-win32.zip(92.35 MB)
    qutebrowser-1.10.2-windows-standalone-amd64.zip(109.85 MB)
    qutebrowser-1.10.2.dmg(133.87 MB)
  • v1.10.1(Feb 15, 2020)

    Fixed

    • Crash when saving data fails during shutdown (which was a regression introduced in v1.9.0).
    • Error while reading config.py when fonts.tabs or fonts.debug_console is set to a value including default_size.
    • When a state file contains invalid UTF-8 data, a proper error is now displayed.

    Changed

    • When the Qt version changes (and also on the first start of v1.10.1 on Qt 5.14), service workers registered by websites are now deleted. This is done as a workaround for QtWebEngine issues causing crashes when visiting pages using service workers (such as Google Mail/Drive). No persistent data should be affected as websites can re-register their service workers, but a (single) backup is kept at webengine/Service Worker-bak in qutebrowser's data directory.
    • Better output on stdout when config errors occur.
    • The mkvenv.py now ensures the latest versions of setuptools and wheel are installed in the virtual environment, which should speed up installation and fix install issues.
    • The default for colors.statusbar.command.private.bg has been changed to a slightly different gray, as a workaround for a Qt issue where the cursor was invisible in that case.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.10.1.tar.gz(2.95 MB)
    qutebrowser-1.10.1.tar.gz.asc(833 bytes)
    qutebrowser-1.10.1-win32.exe(65.90 MB)
    qutebrowser-1.10.1-amd64.exe(76.59 MB)
    qutebrowser-1.10.1-windows-standalone-win32.zip(92.29 MB)
    qutebrowser-1.10.1-windows-standalone-amd64.zip(109.89 MB)
    qutebrowser-1.10.1.dmg(123.50 MB)
  • v1.10.0(Feb 2, 2020)

    Added

    • New colors.webpage.prefers_color_scheme_dark setting which allows forcing prefers-color-scheme: dark colors for websites (QtWebEngine with Qt 5.14 or newer).
    • New fonts.default_size setting which can be used to set a bigger font size for all UI fonts.

    Changed

    • The fonts.monospace setting has been removed and replaced by fonts.default_family. The new default_family setting is improved in various ways:
      • It accepts a list of font families (or a single font family) rather than a comma-separated string. As an example, instead of fonts.monospace = "Courier, Monaco", use fonts.default_family = ["Courier", "Monaco"].
      • Since a list is now accepted as value, no quoting of font names with spaces is required anymore. As an example, instead of fonts.monospace = '"xos4 Terminus"', use fonts.default_family = 'xos4 Terminus'.
      • It is now empty by default rather than having a long list of font names in the default config. When the value is empty, the system's default monospaced font is used.
    • If monospace is now used in a font value, it's used literally and not replaced anymore. Instead, default_family is replaced as explained above.
    • The default content.headers.accept_language value now adds a ;q=0.9 classifier which should make the value sent more in-line with what other browsers do.
    • The qute-pass userscript now has a new --mode gopass switch which uses gopass rather than pass.
    • The tox -e mkvenv (or mkvenv-pypi) way of installing qutebrowser is now replaced by a mkvenv.py script. See the updated link:install{outfilesuffix}#tox[install instructions] for details.
    • macOS and Windows releases now ship with Qt/QtWebEngine 5.14.1
      • Based on Chromium 77.0.3865.129 with security fixes up to Chromium 79.0.3945.117.
      • Sandboxing is now enabled on Windows.
      • Monospace fonts are now used when a website requests them on macOS 10.15.
      • Web notifications are now supported.

    Fixed

    • When quitting qutebrowser, components are now cleaned up differently. This should fix certain (rare) segmentation faults and exceptions when quitting, especially with the new exit scheme introduced in in PyQt5 5.13.1.
    • Added a workaround for per-domain settings (e.g. a JavaScript whitelist) not being applied in some scenarios with Qt 5.13 and above.
    • Added additional site-specific quirk for WhatsApp Web.
    • The qute-pass userscript now works correctly when a PASSWORD_STORE_DIR ending with a trailing slash is given.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.10.0.tar.gz(2.95 MB)
    qutebrowser-1.10.0.tar.gz.asc(833 bytes)
    qutebrowser-1.10.0.dmg(123.50 MB)
    qutebrowser-1.10.0-win32.exe(65.88 MB)
    qutebrowser-1.10.0-amd64.exe(76.59 MB)
    qutebrowser-1.10.0-windows-standalone-win32.zip(92.28 MB)
    qutebrowser-1.10.0-windows-standalone-amd64.zip(109.89 MB)
  • v1.9.0(Jan 8, 2020)

    Added

    • Initial support for Qt 5.14.
    • New content.site_specific_quirks setting which enables workarounds for websites with broken user agent parsing (enabled by default, see the "Fixed" section for fixed websites).
    • New qt.force_platformtheme setting to force Qt to use a given platform theme.
    • New tabs.tooltips setting which can be used to disable hover tooltips for tabs.
    • New settings to configure the appearance of context menus:
      • fonts.contextmenu
      • colors.contextmenu.menu.bg
      • colors.contextmenu.menu.fg
      • colors.contextmenu.selected.bg
      • colors.contextmenu.selected.fg

    Changed

    • The macOS binaries now require macOS 10.13 High Sierra or newer. Support for macOS 10.12 Sierra has been dropped.
    • The content.headers.user_agent setting now is a format string with the default value resembling the behavior of it being set to null before. This slightly changes the sent user agent for QtWebKit: Instead of mentioning qutebrowser and its version it now mentions the Qt version.
    • The qute-pass userscript now has a new --extra-url-suffixes (-s) argument which passes extra URL suffixes to the tldextract library.
    • A stack is now used for :tab-focus last rather than just saving one tab. Additionally, :tab-focus now understands stack-prev and stack-next arguments to traverse that stack.
    • :hint now has a new right-click target which allows right-clicking elements via hints.
    • The Terminus font has been removed from the default monospace fonts since it caused trouble with HighDPI setups. To get it back, add either "xos4 Terminus" or Terminus (depending on fontconfig version) to the beginning of the fonts.monospace setting.
    • As a workaround for a Qt bug causing a segfault, desktop sharing is now automatically rejected on Qt versions before 5.13.2. Note that screen sharing still won't work on Linux before Qt 5.14.
    • Comment lines in quickmarks/bookmarks files are now ignored. However, note that qutebrowser will overwrite those files if bookmark/quickmark commands are used.
    • Reopening PDF.js pages from e.g. a session file will now re-download and display those PDFs.
    • Improved behavior when using :open-download in a sandboxed environment (KDE Flatpak).
    • qutebrowser now enables the new PyQt exit scheme, which should result in things being cleaned up more properly (e.g. cookies being saved even without a timeout) on PyQt 5.13.1 and newer.
    • The :spawn command has a new -m / --output-messages argument which shows qutebrowser messages based on a command's standard output/error.
    • Improved insert mode detection for some CodeMirror usages (e.g. in JupyterLab and Jupyter Notebook).
    • If JavaScript is disabled globally, file://* now doesn't automatically have it enabled anymore. Run :set -u file://* content.javascript.enabled true to restore the previous behavior.
    • Settings with URL patterns can now be used to affect the behavior of the QtWebEngine inspector. Note that the underlying URL is chrome-devtools://* from Qt 5.11 to Qt 5.13, but devtools://* with Qt 5.14.
    • Improvements when tabs.tabs_are_windows is set:
      • Using :tab-take and :tab-give now shows an error, as the effect of doing so would be equal to :tab-clone.
      • The :buffer completion doesn't show any window sections anymore, only a flat list of tabs.
    • Improved parsing in some corner cases for the QtFont type (used for fonts.tabs and fonts.debug_console).
    • Performance improvements for the following areas:
      • Adding settings with URL patterns
      • Matching of settings using URL patterns

    Fixed

    • Downloads (e.g. via :download) now see the same user agent header as webpages, which fixes cases where overly restrictive servers/WAFs closed the connection before.
    • dictcli.py now works correctly on Windows again.
    • The logic for :restart has been revisited, which should fix issues with relative basedirs.
    • Remaining issues related to Python 3.8 are now fixed (mostly warnings, especially on QtWebKit).
    • Workaround for a Qt bug where a page never finishes loading with a non-overridable TLS error (e.g. due to HSTS).
    • The qute://configdiff page now doesn't show built-in settings (e.g. javascript being enabled for qute:// and chrome:// pages) anymore.
    • The qute-lastpass userscript now stops prompting for passwords when cancelling the password input.
    • The tab hover text now shows ampersands (&) correctly.
    • With QtWebEngine and Qt >= 5.11, the inspector now shows its icons correctly even if loading of images is disabled via the content.images setting.
    • Entering a very long string (over 50k characters) in the completion used to crash, now it shows an error message instead.
    • Various improvements for URL/searchengine detection:
      • Strings with a dot but with characters not allowed in a URL (e.g. an underscore) are now not treated as URL anymore.
      • Strings like "5/8" are now not treated as IP anymore.
      • URLs with an explicit scheme and a space (%20) are correctly treated as URLs.
      • Mail addresses are now treated as search terms.
      • With url.open_base_url set, searching for a search engine name now works.
      • url.open_base_url = True together with url.auto_search = 'never' is now handled correctly.
      • Fixed crash when a search engine URL turns out to be invalid.
    • New "site specific quirks", which work around some broken websites:
      • WhatsApp Web
      • Google Accounts
      • Slack (with older QtWebEngine versions)
      • Dell.com support pages (with Qt 5.7)
      • Google Docs (fixes broken IME/compose key)
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.9.0.tar.gz(2.89 MB)
    qutebrowser-1.9.0.tar.gz.asc(833 bytes)
    qutebrowser-1.9.0.dmg(103.00 MB)
    qutebrowser-1.9.0-win32.exe(61.51 MB)
    qutebrowser-1.9.0-amd64.exe(71.41 MB)
    qutebrowser-1.9.0-windows-standalone-win32.zip(89.17 MB)
    qutebrowser-1.9.0-windows-standalone-amd64.zip(105.87 MB)
  • v1.8.2(Nov 22, 2019)

    Changed

    • Windows/macOS releases now ship with Qt 5.12.6. This includes security fixes up to Chromium 77.0.3865.120 plus a security fix for CVE-2019-13720 from Chromium 78.

    Fixed

    • Unbinding keys via config.bind(key, None) accidentally worked in v1.7.0 but raises an exception in v1.8.0. It now works again, but is deprecated and shows an error. Note that :config-py-write did write such invalid lines before v1.8.0, so existing config files might need adjustments.
    • The readability-js userscript now handles encodings correctly (which it didn't before for some websites).
    • can now be used to paste text starting with a hyphen.
    • Following hints via the number keypad now works properly again.
    • Errors while reading the state file are now displayed instead of causing a crash.
    • Crash when using :debug-log-level without a console attached.
    • Downloads are now hidden properly when the browser is in fullscreen mode.
    • Crash when setting colors.webpage.bg to an empty value with QtWebKit.
    • Crash when the history database file is not a proper sqlite database.
    • Workaround for missing/broken error pages on Debian.
    • A deprecation warning (caused by pywin32) about the imp module on Windows is now hidden.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.8.2.tar.gz(3.46 MB)
    qutebrowser-1.8.2.tar.gz.asc(833 bytes)
    qutebrowser-1.8.2.dmg(103.22 MB)
    qutebrowser-1.8.2-win32.exe(61.69 MB)
    qutebrowser-1.8.2-amd64.exe(71.57 MB)
    qutebrowser-1.8.2-windows-standalone-win32.zip(89.39 MB)
    qutebrowser-1.8.2-windows-standalone-amd64.zip(106.10 MB)
  • v1.8.1(Sep 27, 2019)

    • No code changes - this release only repackages the Windows/macOS releases due to issues with the v1.8.0 release.
    • Updated dependencies for Windows/macOS releases:
      • macOS and Windows releases now ship with Qt/QtWebEngine 5.12.5. Those are based on Chromium 69.0.3497.128 with security fixes up to Chromium 76.0.3809.87.
      • Qt 5.13 couldn't be used yet due to various bugs in Qt 5.13.0 and .1.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.8.1.tar.gz(3.43 MB)
    qutebrowser-1.8.1.tar.gz.asc(833 bytes)
    qutebrowser-1.8.1.dmg(103.25 MB)
    qutebrowser-1.8.1-win32.exe(61.66 MB)
    qutebrowser-1.8.1-amd64.exe(71.53 MB)
    qutebrowser-1.8.1-windows-standalone-win32.zip(89.37 MB)
    qutebrowser-1.8.1-windows-standalone-amd64.zip(106.09 MB)
  • v1.8.0(Sep 25, 2019)

    The Windows/macOS releases were pulled because of issues with the bundled Qt versions. Use the v1.8.1 release there instead.

    Added

    • New userscripts:
      • readability-js which uses Mozilla's node.js readability library.
      • qute-bitwarden which integrates the Bitwarden CLI.

    Changed

    • Updated dependencies for Windows/macOS releases:
      • macOS releases now ship with Qt 5.13.0 and QtWebEngine 5.13.1. Those are based on Chromium 73.0.3683.105 with security fixes up to Chromium 76.0.3809.87.
      • Windows releases now ship with Qt/QtWebEngine 5.12.5. Those are based on Chromium 69.0.3497.128 with security fixes up to Chromium 76.0.3809.87.
      • Those specific combinations were chosen due to various issues with newer Qt releases. Hopefully, those will be unified again with Qt 5.13.2.
    • The statusbar text for passthrough mode now shows all configured bindings to leave the mode, not only one.
    • When :config-source is used with a relative filename, the file is now searched in the config directory instead of the current working directory.
    • HTML5 inputs with date/time types now enter insert mode when selected.
    • dictcli.py now shows where dictionaries are installed to and complains when running it as root if doing so would result in a wrong installation path.
    • The Makefile now can also run setup.py build when invoked without a target.
    • Changes to userscripts:
      • qute-pass: Don't run pass if only a username is requested.
      • qute-pass: Support private domains like myrouter.local.
      • readability: Improved CSS styling.
    • Performance improvements in various areas:
      • Loading config files
      • Typing without any completion matches
      • General keyboard handling
      • Scrolling
    • :version now shows details about the loaded autoconfig.yml/config.py.
    • Hosts are now additionally looked up including their ports in netrc files.
    • With Qt 5.10 or newer, qutebrowser now doesn't force software rendering with Nouveau drivers anymore. However, QtWebEngine/Chromium still do so.
    • The XSS Auditor is now disabled by default (content.xss_auditing = false). This reflects a similar change in Chromium, see their XSS Auditor Design Document for details.

    Fixed

    • :config-write-py now correctly writes config.unbind(...) lines (instead of config.bind(..., None)) when unbinding a default keybinding.
    • Prevent repeat keyup events for JavaScript when a key is held down.
    • The Makefile now rebuilds the manpage correctly.
    • ~/.config/qutebrowser/blocked-hosts can now also contain /etc/hosts-like lines, not just simple hostnames.
    • Restored compatibility with Jinja2 2.8 (e.g. used on Debian Stretch or Ubuntu 16.04 LTS).
    • Fixed implicit type conversion warning with Python 3.8.
    • The desktop file now sets StartupWMClass correctly, so the qutebrowser icon is no longer shown twice in the Gnome dock when pinned.
    • Bindings involving keys which need the AltGr key now work properly.
    • Fixed crash (caused by a Qt bug) when typing characters above the Unicode BMP (such as certain emoji or CJK characters).
    • dictcli.py now works properly again.
    • Shift can now be used while typing hint keystrings, which e.g. allows typing number hints on French keyboards.
    • With rapid hinting in number mode, backspace now edits the filter text after following a hint.
    • A certain type of error ("locking protocol") while initializing sqlite now isn't handled as crash anymore.
    • Crash when showing a permission request in certain scenarios.

    Removed

    • At least Python 3.5.2 is now required to run qutebrowser, support for 3.5.0 and 3.5.1 was dropped.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.8.0.tar.gz(3.43 MB)
    qutebrowser-1.8.0.tar.gz.asc(833 bytes)
  • v1.7.0(Jul 18, 2019)

    Added

    • New settings:
      • colors.tabs.pinned.* to control colors of pinned tabs.
      • hints.leave_on_load which allows disabling leaving of hint mode when a new page is loaded.
      • colors.completion.item.selected.match.fg which allows configuring the text color for the matching text in the currently selected completion item.
      • tabs.undo_stack_size to limit how many undo entries are kept for closed tabs.
    • New commands:
      • :reverse-selection (o in caret mode) to swap the stationary/moving ends of a selection.
    • New commandline replacements:
      • {url:domain}, {url:auth}, {url:scheme}, {url:username}, {url:password}, {url:host}, {url:port}, {url:path}, {url:query} for the respective parts of the current URL.
      • {title} for the current page title.
    • The {title} field in tabs.title.format, tabs.title.format_pinned and window.title_format got renamed to {current_title} (mirroring {current_url}) in order to not conflict with the new {title} commandline replacement.
    • New delete target for :hint which removes the hinted element from the DOM.
    • New --config-py commandline argument to use a custom config.py file.
    • Qt 5.13: Support for notifications (shown via system tray).

    Changed

    • Updated dependencies for Windows/macOS releases:
      • PyQt5 5.12.3 / PyQtWebEngine 5.12.1
      • Qt 5.12.4, which includes security fixes up to Chromium 74.0.3729.157
      • Python 3.7.4
      • OpenSSL 1.1.1
      • Note: This release includes Qt 5.12.4 instead of Qt 5.13.0 due to QTBUG-76913 causing frequent segfaults with Qt 5.13. After Qt 5.13.1 is released, qutebrowser v1.8.0 will be released with an updated Qt.
    • Completely revamped Windows installer which allows installing without admin permissions and allows setting qutebrowser as default browser.
    • The desktop file qutebrowser.desktop is now renamed to org.qutebrowser.qutebrowser.desktop.
    • Pinned tabs now always show a favicon (even if the site doesn't provide one) when shrinking.
    • Setting downloads.location.directory now changes the directory displayed in the download prompt even if downloads.location.remember is set.
    • The yank command gained a new inline argument, which allows to e.g. use :yank inline [{title}]({url}).
    • Duplicate consecutive history entries with the same URL are now ignored.
    • More detailed error messages when spawning a process failed.
    • The content.pdfjs setting now supports domain patterns.
    • Improved process status output with :spawn -o.
    • The colors.tabs.bar.bg setting is now of type QssColor and thus supports gradients.
    • The :fullscreen command now understands a new --enter flag which causes it to always enter fullscreen instead of toggling the current state.
    • --debug-flag stack is now needed to show stack traces on renderer process crashes.
    • --debug-flag chromium can be used to easily turn on verbose Chromium logging.
    • For runtime data (such as the IPC socket), a proper runtime path is now used on BSD; only macOS/Windows continue to use the temporary directory.
    • PDF.js is now also searched in /app/share/pdf.js/ (for Flatpak)
    • Permission prompts can now be answered with Y (:prompt-accept --save yes) and N (:prompt-accept --save no) to save the answer as a per-domain setting.
    • content.dns_prefetch is now turned off by default, as it causes crashes inside QtWebEngine.
    • The (still unofficial) interceptor plugin API now contains resource_type for a request and allows redirecting requests.
    • :bookmark-remove now shows a message for consistency with :bookmark-add.
    • Very early segfaults are now also caught by the crash handler.
    • The appdata XML now contains proper release information and an (empty) OARS content rating.
    • Improved Linux distribution detection.
    • Qt 5.13: Request filtering now happens in the UI rather than IO thread.
    • Qt 5.13: Support for PDFium (Chromium's PDF viewer) is disabled for now so that PDFs can still be downloaded (or shown with PDF.js) properly.
    • Various performance improvements (e.g. for showing hints or the :open completion).

    Deprecated

    • :yank markdown got deprecated, as :yank inline [{title}]({url}) can now be used instead.

    Fixed

    • Various QtWebEngine load signals are now handled differently, which should fix issues with insert mode being left while typing on sites like Google Translate.
    • Race condition causing a colored statusbar in normal mode when entering/exiting caret mode quickly.
    • Using 100% for a hue in a hsv(...) config value now corresponds to 359 (rather than 255), matching the fixed behavior in Qt 5.13.
    • Chaining commands with ;; used to abort with some failing commands. It now runs the second command no matter whether the first one succeeded or not.
    • Handling of profiles and private windows (and resulting crashes with Qt 5.12.2).
    • Fixes for corner-cases when using :navigate increment/decrement.
    • The type for the colors.hints.match.fg setting was changed to QtColor. Gradients were never supported for this setting, and with this change, values like rgb(0, 0, 0) now work as well.
    • Permission prompts now show a properly normalized URL with QtWebKit.
    • Crash on start when PyQt was built without SSL support with Qt >= 5.12.
    • Minor memory leaks.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.7.0.tar.gz(3.42 MB)
    qutebrowser-1.7.0.tar.gz.asc(833 bytes)
    qutebrowser-1.7.0.dmg(102.89 MB)
    qutebrowser-1.7.0-amd64.exe(71.48 MB)
    qutebrowser-1.7.0-win32.exe(61.65 MB)
    qutebrowser-1.7.0-windows-standalone-win32.zip(89.35 MB)
    qutebrowser-1.7.0-windows-standalone-amd64.zip(106.06 MB)
  • v1.6.3(Jun 18, 2019)

    Fixed

    • Crash when hinting and changing/closing the tab before hints are displayed.
    • Crash on redirects with Qt 5.13.
    • Hide bogus AA_ShareOpenGLContexts warning with Qt 5.12.4.
    • Workaround for renderer process crashes with Qt 5.12.4. If you're unable to update, you can remove ~/.cache/qutebrowser for the same result.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.6.3.tar.gz(3.41 MB)
    qutebrowser-1.6.3.tar.gz.asc(833 bytes)
    qutebrowser-1.6.3.dmg(102.74 MB)
    qutebrowser-1.6.3-windows-standalone-amd64.zip(100.97 MB)
    qutebrowser-1.6.3-amd64.exe(70.73 MB)
  • v1.6.2(May 6, 2019)

    Changed

    • Windows/macOS releases now ship with Qt 5.12.3, which includes security fixes up to Chromium 73.0.3683.75.

    Fixed

    • Crash when SQL errors occur while using the completion.
    • Crash when cancelling a download prompt started in an already closed window.
    • Crash when many prompts are opened at the same time.
    • Running without Qt installed now displays a proper error again.
    • High CPU usage when using the keyhint widget with a low delay.
    Source code(tar.gz)
    Source code(zip)
    qutebrowser-1.6.2.dmg(102.77 MB)
    qutebrowser-1.6.2.tar.gz(3.41 MB)
    qutebrowser-1.6.2.tar.gz.asc(833 bytes)
    qutebrowser-1.6.2-win32.exe(61.67 MB)
    qutebrowser-1.6.2-amd64.exe(71.13 MB)
    qutebrowser-1.6.2-windows-standalone-win32.zip(87.04 MB)
    qutebrowser-1.6.2-windows-standalone-amd64.zip(101.83 MB)
Owner
qutebrowser
A keyboard-driven, vim-like browser based on PyQt5.
qutebrowser
A tf publisher gui tool for ROS, which publish /tf_static message. The software is based on PyQt5.

tf_publisher_gui for ROS Introduction How to use cd catkin_ws/src git clone https://github.com/yinwu33/tf_publisher_gui.git cd catkin_ws catkin_make s

yinwu33 2 Nov 18, 2021
A small pomodoro GUI for Windows/Linux created in Python with PyQt5.

Pomodoro A small pomodoro GUI for Windows/Linux created with PyQt5. Features The "Timer" tab allows you to set your desired work and rest times aswell

Burak Martin 74 Nov 22, 2021
GUI for Volatility forensics tool written in PyQT5

Volatility GUI This is a GUI for Volatility forensics tool written in PyQT5 Prerequisites: 1- Installed version of Volatility. 2- Install PyQT5. sudo

Hamza Megahed 54 Nov 9, 2021
Uma interfáce de usuário relativamente simples em pyqt5 + escolha de dispositivos

Interface para Scrcpy Uma interfáce de usuário relativamente simples em pyqt5 para sistemas UNIX Requerimentos: Python3 PyQt5 adb scrcpy Você pode ins

hayukimori 7 Nov 22, 2021
Custom Widgets For PyQt5

pyqtCuWi Custom Widgets Icon Button Documentation Rank Widget Documentation PopUp OuterRadius PopUp Documentation OuterRadius Documentation Producer:

.CODE 0 Aug 30, 2021
This is a rip off of the classical iPhone Calculator . This project has been made with PyQT5

iPhoneCalcRIP-OFF This is a rip off of the classical iPhone Calculator . This project has been made with PyQT5

Juss Patel 7 Nov 19, 2021
Web-Broswer simple using PyQt5 tools

Web-Broswer Simple web broswer made using PyQt Completely simple and easy to use How to set it up git clone https://github.com/AsjadOooO/Web-Broswer.g

Asjad 3 Nov 13, 2021
A simple desktop news application written using python created using PyQt5

News-Application---Python This is a news application created using PyQt5. News is fetched through API from newsapi.org. Available top headlines from c

Sritiman Adak 1 Nov 14, 2021
PyQT5 app for LOLBAS and GTFOBins

LOLBins PyQT app to list all Living Off The Land Binaries and Scripts for Windows from LOLBAS and Unix binaries that can be used to bypass local secur

Hamza Megahed 23 Nov 26, 2021
A system tray application written in python that will assist you with your keyboard endeavors.

A system tray application written in python that will assist you with your keyboard endeavors. It has features such as abbreviation, email autofill, media control, writing from clipboard ,typing current date and time etc.

Mach50 1 Dec 1, 2021
A little Python library for making simple Electron-like HTML/JS GUI apps

Eel Eel is a little Python library for making simple Electron-like offline HTML/JS GUI apps, with full access to Python capabilities and libraries. Ee

Chris Knott 4.7k Dec 1, 2021
A html canvas based screencasting server with occasional ground-truth updates via screenshots and very fast input drawing

rm2canvas A html canvas based screencasting server for the reMarkable 1/2 digital paper systems. It draws live on the canvas from the remarkables touc

null 42 Nov 9, 2021
A Python based Connect 4 game made with DearPyGUI

Ultimate-Connect-4 A Python based Connect 4 game made with DearPyGUI NOTICE: If you connect to the game server hosted by Jah-On and attempt to send ma

null 3 Oct 9, 2021
This is a GUI based text and image messenger. Other functionalities will be added soon.

Pigeon-Messenger (Requires Python and Kivy) Pigeon is a GUI based text and image messenger using Kivy and Python. Currently the layout is built. Funct

null 3 Jul 29, 2021
A desktop application for JupyterLab, based on Electron.

A desktop application for JupyterLab, based on Electron.

JupyterLab 1.5k Nov 28, 2021
A Python Tkinter based Inventory managment System

Inventory Management System Using Python Tkinter Introduction Inventory managemrnt system is an open source platform for manage business. It has a com

Amit Kumar Datta 2 Oct 14, 2021
`rosbag filter` with Gooey-based GUI

rosbag_filter_gui rosbag filter with Gooey-based GUI Test-passed Ubuntu 20.04 ROS Noetic Python 3.8 Installation

Yujie He 2 Nov 20, 2021
edgedressing leverages a Windows "feature" in order to force a target's Edge browser to open. This browser is then directed to a URL of choice.

edgedressing One day while experimenting with airpwn-ng, I noticed unexpected GET requests on the target node. The node in question happened to be a W

stryngs 43 Aug 14, 2021
Browser - A GTK browser trying to follow the GNOME Human Interface Guidelines.

A simple GTK browser trying to follow the GNOME Human Interface Guidelines.

Cleo Menezes 12 Sep 9, 2021
Dot Browser is a privacy-conscious web browser with smarts built-in for protection against trackers and advertisments online.

?? Take back your privacy with Dot Browser, the privacy-conscious web browser that protects you from being tracked and monitored online.

Dot HQ 937 Nov 26, 2021
lfb (light file browser) is a terminal file browser

lfb (light file browser) is a terminal file browser. The whole program is a mess as of now. In the feature I will remove the need for external dependencies, tidy up the code, make an actual readme, add documentation, and change the name.

null 1 Nov 19, 2021
Using the jedi autocompletion library for VIM.

jedi-vim - awesome Python autocompletion with VIM jedi-vim is a VIM binding to the autocompletion library Jedi. Here are some pictures: Completion for

Dave Halter 4.9k Nov 29, 2021
Vim python-mode. PyLint, Rope, Pydoc, breakpoints from box.

Python-mode, a Python IDE for Vim This project needs contributors. Documentation: :help pymode https://github.com/python-mode/python-mode/wiki Importa

The Python-Mode 5.3k Nov 17, 2021
A code-completion engine for Vim

YouCompleteMe: a code-completion engine for Vim NOTE: Minimum Requirements Have Changed Our policy is to support the Vim version that's in the latest

null 23.4k Nov 24, 2021
Seamlessly run Python code in IPython from Vim

Seamlessly run Python code from Vim in IPython, including executing individual code cells similar to Jupyter notebooks and MATLAB. This plugin also supports other languages and REPLs such as Julia.

Hans Chen 192 Nov 27, 2021
Vvim - Keyboardless Vim interactions

This is done via a hardware glove that the user wears. The glove detects the finger's positions and translates them into key presses. It's currently a work in progress.

Boyd Kane 7 Aug 17, 2021
Freaky fast fuzzy Denite/CtrlP matcher for vim/neovim

Freaky fast fuzzy Denite/CtrlP matcher for vim/neovim This is a matcher plugin for denite.nvim and CtrlP.

Raghu 112 Aug 31, 2021
A minimalist Vim plugin manager.

A minimalist Vim plugin manager. Pros. Easy to set up: Single file. No boilerplate code required. Easy to use: Concise, intuitive syntax Super-fast pa

Junegunn Choi 25.5k Dec 3, 2021