Change Log =========== // http://keepachangelog.com/ All notable changes to this project will be documented in this file. This project adheres to http://semver.org/[Semantic Versioning], though minor breaking changes (such as renamed commands) can happen in minor releases. // tags: // `Added` for new features. // `Changed` for changes in existing functionality. // `Deprecated` for once-stable features removed in upcoming releases. // `Removed` for deprecated features removed in this release. // `Fixed` for any bug fixes. // `Security` to invite users to upgrade in case of vulnerabilities. v1.13.0 (unreleased) -------------------- Changed ~~~~~~~ - The `tor_identity` userscript now takes the password via a `-p` flag and has a new `-c` flag to customize the Tor control port. - `: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. - New `t[Cc][Hh]` default bindings which work similarly to the `t[Ss][Hh]` bindings for JavaScript but toggle cookie permissions. - 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. 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). 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. - `: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 v1.12.0 (2020-06-01) -------------------- 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 `` 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. v1.11.1 (2020-05-07) -------------------- 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. v1.11.0 (2020-04-27) -------------------- 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`. v1.10.2 (2020-04-17) -------------------- 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. v1.10.1 (2020-02-15) -------------------- 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. v1.10.0 (2020-02-02) -------------------- 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. v1.9.0 (2020-01-08) ------------------- 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) v1.8.3 (2019-12-05) ------------------- Fixed ~~~~~ - Segmentation fault introduced in v1.8.2 when a tab gets closed immediately after it has finished loading (e.g. with certain login flows). v1.8.2 (2019-11-22) ------------------- 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. v1.8.1 (2019-09-27) ------------------- Changed ~~~~~~~ - 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. v1.8.0 (2019-09-25) ------------------- Added ~~~~~ - New userscripts: * `readability-js` which uses Mozilla's node.js readability library. * `qute-bitwarden` which integrates the Bitwarden CLI. Changed ~~~~~~~ - 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 https://www.chromium.org/developers/design-documents/xss-auditor[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. v1.7.0 (2019-07-18) ------------------- 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 https://bugreports.qt.io/browse/QTBUG-76913[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. v1.6.3 (2019-06-18) ------------------- 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. v1.6.2 (2019-05-06) ------------------- 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. - Crash with Qt >= 5.14 on redirects. v1.6.1 (2019-03-20) ------------------- Changed ~~~~~~~ - Windows/macOS releases now ship with Qt 5.12.2, which includes security fixes up to Chromium 72.0.3626.121 (including CVE-2019-5786 which is known to be exploited in the wild). Fixed ~~~~~ - Crash when using `:config-{dict,list}-{add,remove}` with an invalid setting. - Functionality like hinting on pages with an element with ID `_qutebrowser` (such as qutebrowser.org) on Qt 5.12. - The .desktop file in v1.6.0 was missing the "Actions" key, which is now fixed. - The SVG icon now has a size of 256x256px set to comply with freedesktop standards. - Setting `colors.statusbar.*.bg` to a gradient now has the expected effect of the gradient spanning the entire statusbar. v1.6.0 (2019-02-25) ------------------- Added ~~~~~ - New settings: * `tabs.new_position.stacking` which controls whether new tabs opened from a page should stack on each other or not. * `completion.open_categories` which allows to configure which categories are shown in the `:open` completion, and how they are ordered. * `tabs.pinned.frozen` to allow/deny navigating in pinned tabs. * `hints.selectors` which allows to configure what CSS selectors are used for hints, and also allows adding custom hint groups. * `input.insert_mode.leave_on_load` to turn off leaving insert mode when a new page is loaded. - New config manipulation commands: * `:config-dict-add` and `:config-list-add` to a new element to a dict/list setting. * `:config-dict-remove` and `:config-list-remove` to remove an element from a dict/list setting. - New `:yank markdown` feature which yanks the current URL and title in markdown format. - Support for new QtWebEngine features in Qt 5.12: * Basic support for client certificates. Selecting the certificate to use when there are multiple matching certificates isn't implemented yet. * Support for DNS prefetching (plus new `content.dns_prefetch` setting). Changed ~~~~~~~ - Various changes to the Windows and macOS builds: * Bundling Qt 5.12.1, based on Chromium 69.0.3497.128 with security fixes up to 71.0.3578.94. * Windows: A 32-bit build is available again. * Windows: The builds now bundle the Universal CRT DLLs, causing them to work on earlier versions of Windows 10. * macOS: Support for OS X 10.11 El Capitan was dropped, requiring macOS 10.12 Sierra or newer. * macOS: The IPC socket path used to communicate with existing instances changed due to changes in Qt 5.12. Please make sure to quit qutebrowser before upgrading. - `:q` now closes the current window instead of quitting qutebrowser completely (`:close`), while `:qa` quits (`:quit`). The behavior of `:wq` remains unchanged (`:quit --save`), as closing a window while saving the session doesn't make sense. - Completion highlighting is now done differently (using `QSyntaxHighlighter`), which should fix some highlighting corner-cases. - The `QtColor` config type now also understands colors like `rgb(...)`. - `:yank` now has a `--quiet` option which causes it to not display a message. - The `:open` completion now also shows search engines by default. - The `content.host_blocking.enabled` setting now supports URL patterns, so the adblocker can be disabled on a given page. - Elements with a `tabindex` attribute now also get hints by default. - Various small performance improvements for hints and the completion. - The Wayland check for QtWebEngine is now disabled on Qt >= 5.11.2, as those versions should work without any issues. - The JavaScript `console` object is now available in PAC files. - PAC proxies currently don't work properly on QtWebEngine (and never did), so an error is now shown when trying to configure a PAC proxy. - The metainfo file `qutebrowser.appdata.xml` is now renamed to `org.qutebrowser.qutebrowser.appdata.xml`. - The `qute-pass` userscript now understands domains in gpg filenames in addition to directory names. - The autocompletion for `content.headers.user_agent` got updated to only include the default and Chrome, as setting the UA to Firefox has various bad side-effects. - Combining Qt 5.12 with an older PyQt can lead to issues, so a warning is now shown when starting qutebrowser with that combination. Fixed ~~~~~ - Invalid world IDs now get rejected for `:jseval` and GreaseMonkey scripts. - When websites suggest download filenames with invalid characters, those are now correctly replaced. - Invalid hint length calculation in certain rare cases. - Dragging tabs in the tab bar (which was broken in v1.5.0) - Using Shift-Home in command mode now works properly. - Workaround for a Qt bug which prevented `content.cookies.accept = no-3rdparty` from working properly on some pages like GMail. However, the default for `content.cookies.accept` is still `all` to be in line with what other browsers do. - `:navigate` not incrementing in anchors or queries. - Crash when trying to use a proxy requiring authentication with QtWebKit. - Slashes in search terms are now percent-escaped. - When `scrolling.bar = True` was set in versions before v1.5.0, this now correctly gets migrated to `always` instead of `when-searching`. - Completion highlighting now works again on Qt 5.11.3 and 5.12.1. - The non-standard header `X-Do-Not-Track` is no longer sent. - PAC proxies were never correctly supported with QtWebEngine, but are now explicitly disallowed. - macOS: Context menus for download items now show in the correct macOS style. - Issues with fullscreen handling when exiting a video player. - Various fixes for Qt 5.12 issues: * A javascript error on page load was fixed. * `window.print()` works with Qt 5.12 now. * Fixed handling of duplicate download filenames. * Fixed broken `qute://history` page. * Fixed PDF.js not working properly. * The download button in PDF.js now works (it's not possible to make it work with earlier Qt versions). * Since Greasemonkey scripts modifying the DOM fail when being run at document-start, some known-broken scripts (Iridium, userstyles.org) are now forced to run at document-end. v1.5.2 (2018-10-26) ------------------- Changed ~~~~~~~ - The `content.cookies.accept` setting is now set to `all` instead of `no-3rdparty` by default, as `no-3rdparty` breaks various pages such as GMail. v1.5.1 (2018-10-10) ------------------- Fixed ~~~~~ - Flickering when opening/closing tabs (as soon as more than 10 are open) on some pages. - PDF.js is now bundled again with the macOS/Windows release. - PDF.js is now searched in the correct path (if not installed system-wide) instead of hardcoding `~/.local/share/qutebrowser`. - Improved logging for PDF.js resources which fail to load. - Crash when closing a tab after doing a search. - Tabs appearing when hidden after e.g. closing tabs. v1.5.0 (2018-10-03) ------------------- Added ~~~~~ - Rewritten PDF.js support: * PDF.js support and the `content.pdfjs` setting are now also available with QtWebEngine. * Opening a PDF file now doesn't start a second request anymore. * Opening PDFs on https:// sites now works properly. * New `--pdfjs` flag for `prompt-open-download`, so PDFs can be opened in PDF.js with `` in the download prompt. - New settings: * `content.mouse_lock` to handle HTML5 pointer locking. * `completion.web_history.exclude` which hides a list of URL patterns from the completion. * `qt.process_model` which can be used to change Chromium's process model. * `qt.low_end_device_mode` which turns on Chromium's low-end device mode. This mode uses less RAM, but the expense of performance. * `content.webrtc_ip_handling_policy`, which allows more fine-grained/restrictive control about which IPs are exposed via WebRTC. * `tabs.max_width` which allows to have a more "normal" look for tabs. * `content.mute` which allows to mute pages (or all tabs) by default. - Running qutebrowser with QtWebKit or Qt < 5.9 now shows a warning (only once), as support for those is going to be removed in a future release. - New t[iI][hHu] default bindings (similar to `tsh` etc.) to toggle images. - The qute-pass userscript now has optional OTP support. - When `:spawn --userscript` is called with a count, that count is now passed to userscripts as `$QUTE_COUNT`. Changed ~~~~~~~ - Windows and macOS releases now bundle Python 3.7, PyQt 5.11.3 and Qt 5.11.2. QtWebEngine includes security fixes up to Chromium 68.0.3440.75 and http://code.qt.io/cgit/qt/qtwebengine.git/tree/dist/changes-5.11.2/?h=v5.11.2[various other fixes]. - Various performance improvements when many tabs are opened. - The `content.headers.referer` setting now works on QtWebEngine. - The `:repeat` command now takes a count which is multiplied with the given "times" argument. - The default keybinding to leave passthrough mode was changed from `` to ``, which makes pasting from the clipboard easier in passthrough mode and is also unlikely to conflict with webpage bindings. - The `app_id` is now set to `qutebrowser` for Wayland. - `Command` or `Cmd` can now be used (instead of `Meta`) to map the Command key on macOS. - Using `:set option` now shows the value of the setting (like `:set option?` already did). - The `completion.web_history_max_items` setting got renamed to `completion.web_history.max_items`. - The Makefile shipped with qutebrowser now supports overriding variables `DATADIR` and `MANDIR`. - Regenerating completion history now shows a progress dialog. - The `content.autoplay` setting now supports URL patterns on Qt >= 5.11. - The `content.host_blocking.whitelist` setting now takes a list of URL patterns instead of globs. - In passthrough mode, Ctrl + Mousewheel now also gets passed through to the page instead of zooming. - Editing text in an external editor now simulates a JS "input" event, which improves compatibility with websites reacting via JS to input. - The `qute://settings` page is now properly sorted on Python 3.5. - `:zoom`, `:zoom-in` and `:zoom-out` now have a `--quiet` switch which causes them to not display a message. - The `scrolling.bar` setting now takes three values instead of being a boolean: `always`, `never`, and `when-searching` (which only displays it while a search is active). - '@@' now repeats the last run macro. - The `content.host_blocking.lists` setting now accepts a `file://` URL to a directory, and reads all files in that directory. - The `:tab-give` and `:tab-take` command now have a new flag `--keep` which causes them to keep the old tab around. - `:navigate` now clears the URL query. Fixed ~~~~~ - `qute://` pages now work properly on Qt 5.11.2 - Error when passing a substring with spaces to `:tab-take`. - Greasemonkey scripts which start with an UTF-8 BOM are now handled correctly. - When no documentation has been generated, the plaintext documentation now can be shown for more files such as `qute://help/userscripts.html`. - Crash when doing initial run on Wayland without XWayland. - Crash when trying to load an empty session file. - `:hint` with an invalid `--mode=` value now shows a proper error. - Rare crash on Qt 5.11.2 when clicking on `