qutebrowser v1.2.0 released!
I'm happy to announce that I just released qutebrowser v1.2.0!
qutebrowser is a keyboard driven browser with a vim-like, minimalistic interface. It's written using PyQt and cross-platform.
This release comes with a long changelog, but the most interesting changes are probably initial support for per-domain settings (I've had JavaScript disabled globally for a while myself now) and a big refactoring of how keybindings are handled (allowing for emacs-like key chains with modifiers).
Here's the complete changelog:
Added
- Initial implementation of per-domain settings:
- :set and :config-cycle now have a -u/--pattern argument taking a URL match pattern for supported settings.
- config.set in config.py now takes a third argument which is the pattern.
- New with config.pattern('...') as p: context manager for config.py to use the shorthand syntax with a pattern.
- New tsh keybinding to toggle scripts for the current host. With a capital S, the toggle is saved. With a capital H, subdomains are included. With u instead of h, the exact current URL is used.
- New tph keybinding to toggle plugins, with the same additional binding described above.
- New QtWebEngine features:
- Caret/visual mode
- Authentication via ~/.netrc
- Retrying downloads with Qt 5.10 or newer
- Hinting and other features inside same-origin frames
- New flags for existing commands:
- :session-load has a new --delete flag which deletes the session after loading it.
- New --no-last flag for :tab-focus to not focus the last tab when focusing the currently focused one.
- New --edit flag for :view-source to open the source in an external editor.
- New --select flag for :follow-hint which acts like the given string was entered but doesn't necessary follow the hint.
- New special pages:
- qute://bindings (opened via :bind) which shows all keybindings.
- qute://tabs (opened via :buffer) which lists all tabs.
- New settings:
- statusbar.widgets to configure which widgets should be shown in which order in the statusbar.
- tabs.mode_on_change which replaces tabs.persist_mode_on_change. It can now be set to restore which remembers input modes (input/passthrough) per tab.
- input.insert_mode.auto_enter which makes it possible to disable entering insert mode automatically when an editable element was clicked. Together with input.forward_unbound_keys, this should allow for emacs-like "modeless" keybindings.
- New :prompt-yank command (bound to Alt-y by default) to yank URLs referenced in prompts.
- The hostblock_blame script which was removed in v1.0 was updated for the new config and re-added.
- New cycle-inputs.js script in scripts/ which can be used with :jseval -f to cycle through inputs.
Changed
- Complete refactoring of key input handling, with various effects:
- emacs-like keychains such as <Ctrl-X><Ctrl-C> can now be bound.
- Key chains can now be bound in any mode (this allows binding unused keys in hint mode).
- Yes/no prompts don't use keybindings from the prompt section anymore, they have their own yesno section instead.
- Trying to bind invalid keys now shows an error.
- The bindings.default setting can now only be set in a config.py, and existing values in autoconfig.yml are ignored.
- Improvements for GreaseMonkey support:
- @include and @exclude now support regex matches. With QtWebEngine and Qt 5.8 and newer, Qt handles the matching, but similar functionality will be added in Qt 5.11.
- Support for @requires
- Support for the GreaseMonkey 4.0 API
- The sqlite history now uses write-ahead logging which should be a performance and stability improvement.
- When an editor is spawned with :open-editor and :config-edit, the changes are now applied as soon as the file is saved in the editor.
- The hist_importer.py script now only imports URL schemes qutebrowser can handle.
- Deleting a prefix (:, / or ?) via backspace now leaves command mode.
- Angular 1 elements and <summary>/<details> now get hints assigned.
- :tab-only with pinned tabs now still closes unpinned tabs.
- The url.incdec_segments option now also can take port as possible segment.
- QtWebEngine: :view-source now uses Chromium's view-source: scheme.
- Tabs now show their full title as tooltip.
- When there are multiple unknown keys in a autoconfig.yml, they now all get reported in one error.
- More performance improvements when opening/closing many tabs.
- The :version page now has a button to pastebin the information.
- Replacements like {url} can now be escaped as {{url}}.
Fixed
- QtWebEngine bugfixes:
- Improved fullscreen handling with Qt 5.10.
- Hinting and scrolling now works properly on special view-source: pages.
- Scroll positions are now restored correctly from sessions.
- :follow-selected should now work in more cases with Qt > 5.10.
- Incremental search now flickers less and doesn't move to the second result when pressing Enter.
- Keys like Ctrl-V or Shift-Insert are now correctly handled/filtered with Qt 5.10.
- Fixed hangs/segfaults on exit with Qt 5.10.1.
- Fixed favicons sometimes getting cleared with Qt 5.10.
- Qt download objects are now cleaned up properly when a download is removed.
- JavaScript messages are now not double-HTML escaped anymore on Qt < 5.11
- QtWebKit bugfixes:
- Fixed GreaseMonkey-related crashes.
- :view-source now displays a valid URL.
- URLs containing ampersands and other special chars are now shown correctly when filtering them in the completion.
- :bookmark-add "" foo can now be used to save the current URL with a custom title.
- :spawn -o now waits until the process has finished before trying to show the output. Previously, it incorrectly showed the previous output immediately.
- Suspended pages now should always load the correct page when being un-suspended.
- Exception types are now shown properly with :config-source and :config-edit.
- When using :bookmark-add --toggle, bookmarks are now saved properly.
- Crash when opening an invalid URL from an application on macOS.
- Crash with an empty completion.timestamp_format.
- Crash when completion.min_chars is set in some cases.
- HTML/JS resource files are now read into RAM on start to avoid crashes when changing qutebrowser versions while it's open.
- Setting bindings.key_mappings to an empty value is now allowed.
- Bindings to an empty commands are now ignored rather than crashing.
Removed
- QUTE_SELECTED_HTML is now not set for userscripts anymore except when called via hints.
- The qutebrowser_viewsource userscript has been removed as :view-source --edit can now be used.
- The tabs.persist_mode_on_change setting has been removed and replaced by tabs.mode_on_change.