]> git.rmz.io Git - dotfiles.git/commitdiff
qutebrowser: update defaults
authorSamir Benmendil <me@rmz.io>
Sat, 23 Jan 2021 16:09:35 +0000 (16:09 +0000)
committerSamir Benmendil <me@rmz.io>
Sun, 24 Jan 2021 21:35:32 +0000 (21:35 +0000)
qutebrowser/config.py

index 097a061fd10462a30578d45a2d00f7126d82c764..a7d422b6c5bc264898b515820ba24964b237f77a 100644 (file)
@@ -47,7 +47,12 @@ c.aliases = {'w':    'session-save',
 ## Type: Int
 # c.auto_save.interval = 15000
 
-## Always restore open sites when qutebrowser is reopened.
+## Always restore open sites when qutebrowser is reopened. Without this
+## option set, `:wq` (`:quit --save`) needs to be used to save open tabs
+## (and restore them), while quitting qutebrowser in any other way will
+## not save/restore the session. By default, this will save to the
+## session which was last loaded. This behavior can be customized via the
+## `session.default_name` setting.
 ## Type: Bool
 c.auto_save.session = True
 
@@ -72,7 +77,7 @@ c.auto_save.session = True
 ## when a key is bound (via `bindings.default` or `bindings.commands`),
 ## the mapping is ignored.
 ## Type: Dict
-# c.bindings.key_mappings = {'<Ctrl-[>': '<Escape>', '<Ctrl-6>': '<Ctrl-^>', '<Ctrl-M>': '<Return>', '<Ctrl-J>': '<Return>', '<Shift-Return>': '<Return>', '<Enter>': '<Return>', '<Shift-Enter>': '<Return>', '<Ctrl-Enter>': '<Ctrl-Return>'}
+# c.bindings.key_mappings = {'<Ctrl-[>': '<Escape>', '<Ctrl-6>': '<Ctrl-^>', '<Ctrl-M>': '<Return>', '<Ctrl-J>': '<Return>', '<Ctrl-I>': '<Tab>', '<Shift-Return>': '<Return>', '<Enter>': '<Return>', '<Shift-Enter>': '<Return>', '<Ctrl-Enter>': '<Ctrl-Return>'}
 
 ## Background color of the completion widget category headers.
 ## Type: QssColor
@@ -135,6 +140,16 @@ c.auto_save.session = True
 ## Type: QssColor
 # c.colors.completion.scrollbar.fg = 'white'
 
+## Background color of disabled items in the context menu. If set to
+## null, the Qt default is used.
+## Type: QssColor
+# c.colors.contextmenu.disabled.bg = None
+
+## Foreground color of disabled items in the context menu. If set to
+## null, the Qt default is used.
+## Type: QssColor
+# c.colors.contextmenu.disabled.fg = None
+
 ## Background color of the context menu. If set to null, the Qt default
 ## is used.
 ## Type: QssColor
@@ -466,6 +481,79 @@ c.colors.prompts.bg = '#333333'
 ## Type: QtColor
 # c.colors.webpage.bg = 'white'
 
+## Which algorithm to use for modifying how colors are rendered with
+## darkmode. The `lightness-cielab` value was added with QtWebEngine 5.14
+## and is treated like `lightness-hsl` with older QtWebEngine versions.
+## Type: String
+## Valid values:
+##   - lightness-cielab: Modify colors by converting them to CIELAB color space and inverting the L value. Not available with Qt < 5.14.
+##   - lightness-hsl: Modify colors by converting them to the HSL color space and inverting the lightness (i.e. the "L" in HSL).
+##   - brightness-rgb: Modify colors by subtracting each of r, g, and b from their maximum value.
+# c.colors.webpage.darkmode.algorithm = 'lightness-cielab'
+
+## Contrast for dark mode. This only has an effect when
+## `colors.webpage.darkmode.algorithm` is set to `lightness-hsl` or
+## `brightness-rgb`.
+## Type: Float
+# c.colors.webpage.darkmode.contrast = 0.0
+
+## Render all web contents using a dark theme. Example configurations
+## from Chromium's `chrome://flags`:  - "With simple HSL/CIELAB/RGB-based
+## inversion": Set   `colors.webpage.darkmode.algorithm` accordingly.  -
+## "With selective image inversion": Set
+## `colors.webpage.darkmode.policy.images` to `smart`.  - "With selective
+## inversion of non-image elements": Set
+## `colors.webpage.darkmode.threshold.text` to 150 and
+## `colors.webpage.darkmode.threshold.background` to 205.  - "With
+## selective inversion of everything": Combines the two variants   above.
+## Type: Bool
+# c.colors.webpage.darkmode.enabled = False
+
+## Render all colors as grayscale. This only has an effect when
+## `colors.webpage.darkmode.algorithm` is set to `lightness-hsl` or
+## `brightness-rgb`.
+## Type: Bool
+# c.colors.webpage.darkmode.grayscale.all = False
+
+## Desaturation factor for images in dark mode. If set to 0, images are
+## left as-is. If set to 1, images are completely grayscale. Values
+## between 0 and 1 desaturate the colors accordingly.
+## Type: Float
+# c.colors.webpage.darkmode.grayscale.images = 0.0
+
+## Which images to apply dark mode to. With QtWebEngine 5.15.0, this
+## setting can cause frequent renderer process crashes due to a
+## https://codereview.qt-project.org/c/qt/qtwebengine-
+## chromium/+/304211[bug in Qt].
+## Type: String
+## Valid values:
+##   - always: Apply dark mode filter to all images.
+##   - never: Never apply dark mode filter to any images.
+##   - smart: Apply dark mode based on image content. Not available with Qt 5.15.0.
+# c.colors.webpage.darkmode.policy.images = 'smart'
+
+## Which pages to apply dark mode to.
+## Type: String
+## Valid values:
+##   - always: Apply dark mode filter to all frames, regardless of content.
+##   - smart: Apply dark mode filter to frames based on background color.
+# c.colors.webpage.darkmode.policy.page = 'smart'
+
+## Threshold for inverting background elements with dark mode. Background
+## elements with brightness above this threshold will be inverted, and
+## below it will be left as in the original, non-dark-mode page. Set to
+## 256 to never invert the color or to 0 to always invert it. Note: This
+## behavior is the opposite of `colors.webpage.darkmode.threshold.text`!
+## Type: Int
+# c.colors.webpage.darkmode.threshold.background = 0
+
+## Threshold for inverting text with dark mode. Text colors with
+## brightness below this threshold will be inverted, and above it will be
+## left as in the original, non-dark-mode page. Set to 256 to always
+## invert text color or to 0 to never invert text color.
+## Type: Int
+# c.colors.webpage.darkmode.threshold.text = 256
+
 ## Force `prefers-color-scheme: dark` colors for websites.
 ## Type: Bool
 c.colors.webpage.prefers_color_scheme_dark = True
@@ -480,6 +568,12 @@ c.colors.webpage.prefers_color_scheme_dark = True
 ## Type: Int
 # c.completion.delay = 0
 
+## Default filesystem autocomplete suggestions for :open. The elements of
+## this list show up in the completion window under the Filesystem
+## category when the command line contains `:open` but no argument.
+## Type: List of String
+# c.completion.favorite_paths = []
+
 ## Height (in pixels or as percentage of the window) of the completion.
 ## Type: PercOrInt
 c.completion.height = 150
@@ -495,7 +589,8 @@ c.completion.height = 150
 ##   - quickmarks
 ##   - bookmarks
 ##   - history
-# c.completion.open_categories = ['searchengines', 'quickmarks', 'bookmarks', 'history']
+##   - filesystem
+# c.completion.open_categories = ['searchengines', 'quickmarks', 'bookmarks', 'history', 'filesystem']
 
 ## Move on to the next part when there's only one possible completion
 ## left.
@@ -524,9 +619,12 @@ c.completion.quick = False
 c.completion.shrink = True
 
 ## Format of timestamps (e.g. for the history completion). See
-## https://sqlite.org/lang_datefunc.html for allowed substitutions.
+## https://sqlite.org/lang_datefunc.html and
+## https://docs.python.org/3/library/datetime.html#strftime-strptime-
+## behavior for allowed substitutions, qutebrowser uses both sqlite and
+## Python to format its timestamps.
 ## Type: String
-# c.completion.timestamp_format = '%Y-%m-%d'
+# c.completion.timestamp_format = '%Y-%m-%d %H:%M'
 
 ## Execute the best-matching command on a partial match.
 ## Type: Bool
@@ -554,11 +652,61 @@ c.completion.shrink = True
 ##   - never: Never show a confirmation.
 c.confirm_quit = ['downloads']
 
-## Automatically start playing `<video>` elements. Note: On Qt < 5.11,
-## this option needs a restart and does not support URL patterns.
+## Automatically start playing `<video>` elements.
 ## Type: Bool
 # c.content.autoplay = True
 
+## List of URLs to ABP-style adblocking rulesets.  Only used when Brave's
+## ABP-style adblocker is used (see `content.blocking.method`).  You can
+## find an overview of available lists here:
+## https://adblockplus.org/en/subscriptions - note that the special
+## `subscribe.adblockplus.org` links aren't handled by qutebrowser, you
+## will instead need to find the link to the raw `.txt` file (e.g. by
+## extracting it from the `location` parameter of the subscribe URL and
+## URL-decoding it).
+## Type: List of Url
+# c.content.blocking.adblock.lists = ['https://easylist.to/easylist/easylist.txt', 'https://easylist.to/easylist/easyprivacy.txt']
+
+## Enable the ad/host blocker
+## Type: Bool
+# c.content.blocking.enabled = True
+
+## List of URLs to host blocklists for the host blocker.  Only used when
+## the simple host-blocker is used (see `content.blocking.method`).  The
+## file can be in one of the following formats:  - An `/etc/hosts`-like
+## file - One host per line - A zip-file of any of the above, with either
+## only one file, or a file   named `hosts` (with any extension).  It's
+## also possible to add a local file or directory via a `file://` URL. In
+## case of a directory, all files in the directory are read as adblock
+## lists.  The file `~/.config/qutebrowser/blocked-hosts` is always read
+## if it exists.
+## Type: List of Url
+# c.content.blocking.hosts.lists = ['https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts']
+
+## Which method of blocking ads should be used.  Support for Adblock Plus
+## (ABP) syntax blocklists using Brave's Rust library requires the
+## `adblock` Python package to be installed, which is an optional
+## dependency of qutebrowser. It is required when either `adblock` or
+## `both` are selected.
+## Type: String
+## Valid values:
+##   - auto: Use Brave's ABP-style adblocker if available, host blocking otherwise
+##   - adblock: Use Brave's ABP-style adblocker
+##   - hosts: Use hosts blocking
+##   - both: Use both hosts blocking and Brave's ABP-style adblocker
+# c.content.blocking.method = 'auto'
+
+## A list of patterns that should always be loaded, despite being blocked
+## by the ad-/host-blocker. Local domains are always exempt from
+## adblocking. Note this whitelists otherwise blocked requests, not
+## first-party URLs. As an example, if `example.org` loads an ad from
+## `ads.example.org`, the whitelist entry could be
+## `https://ads.example.org/*`. If you want to disable the adblocker on a
+## given page, use the `content.blocking.enabled` setting with a URL
+## pattern instead.
+## Type: List of UrlPattern
+# c.content.blocking.whitelist = []
+
 ## Enable support for the HTML 5 web application cache feature. An
 ## application cache acts like an HTTP cache in some sense. For documents
 ## that use the application cache via JavaScript, the loader engine will
@@ -586,10 +734,15 @@ c.confirm_quit = ['downloads']
 ## Type: Bool
 # c.content.canvas_reading = True
 
-## Which cookies to accept. Note that with QtWebKit, only `all` and
-## `never` are supported as per-domain values. Setting `no-3rdparty` or
-## `no-unknown-3rdparty` per-domain on QtWebKit will have the same effect
-## as `all`.
+## Which cookies to accept. With QtWebEngine, this setting also controls
+## other features with tracking capabilities similar to those of cookies;
+## including IndexedDB, DOM storage, filesystem API, service workers, and
+## AppCache. Note that with QtWebKit, only `all` and `never` are
+## supported as per-domain values. Setting `no-3rdparty` or `no-
+## unknown-3rdparty` per-domain on QtWebKit will have the same effect as
+## `all`. If this setting is used with URL patterns, the pattern gets
+## applied to the origin/first party URL of the page making the request,
+## not the request URL.
 ## Type: String
 ## Valid values:
 ##   - all: Accept all cookies.
@@ -598,8 +751,7 @@ c.confirm_quit = ['downloads']
 ##   - never: Don't accept cookies at all.
 c.content.cookies.accept = 'never'
 
-## Store cookies. Note this option needs a restart with QtWebEngine on Qt
-## < 5.9.
+## Store cookies.
 ## Type: Bool
 # c.content.cookies.store = True
 
@@ -608,8 +760,7 @@ c.content.cookies.accept = 'never'
 ## Type: String
 # c.content.default_encoding = 'iso-8859-1'
 
-## Allow websites to share screen content. On Qt < 5.10, a dialog box is
-## always displayed, even if this is set to "true".
+## Allow websites to share screen content.
 ## Type: BoolAsk
 ## Valid values:
 ##   - true
@@ -679,7 +830,9 @@ c.content.headers.accept_language = 'en-UK;q=1.0, en;q=0.9, de;q=0.7, fr;q=0.7,
 ## Safari/Chrome version. * `{qutebrowser_version}`: The currently
 ## running qutebrowser version.  The default value is equal to the
 ## unchanged user agent of QtWebKit/QtWebEngine.  Note that the value
-## read from JavaScript is always the global value.
+## read from JavaScript is always the global value. With QtWebEngine
+## between 5.12 and 5.14 (inclusive), changing the value exposed to
+## JavaScript requires a restart.
 ## Type: FormatString
 # c.content.headers.user_agent = 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {qt_key}/{qt_version} {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}'
 
@@ -768,13 +921,29 @@ c.content.headers.accept_language = 'en-UK;q=1.0, en;q=0.9, de;q=0.7, fr;q=0.7,
 ## Type: Bool
 # c.content.local_storage = True
 
-## Allow websites to record audio/video.
+## Allow websites to record audio.
+## Type: BoolAsk
+## Valid values:
+##   - true
+##   - false
+##   - ask
+# c.content.media.audio_capture = 'ask'
+
+## Allow websites to record audio and video.
 ## Type: BoolAsk
 ## Valid values:
 ##   - true
 ##   - false
 ##   - ask
-# c.content.media_capture = 'ask'
+# c.content.media.audio_video_capture = 'ask'
+
+## Allow websites to record video.
+## Type: BoolAsk
+## Valid values:
+##   - true
+##   - false
+##   - ask
+# c.content.media.video_capture = 'ask'
 
 ## Allow websites to lock your mouse pointer.
 ## Type: BoolAsk
@@ -833,7 +1002,9 @@ config.set('content.notifications', True, '*://*.google.com/*')
 # c.content.private_browsing = False
 
 ## Proxy to use. In addition to the listed values, you can use a
-## `socks://...` or `http://...` URL.
+## `socks://...` or `http://...` URL. Note that with QtWebEngine, it will
+## take a couple of seconds until the change is applied, if this value is
+## changed at runtime.
 ## Type: Proxy
 ## Valid values:
 ##   - system: Use the system wide proxy.
@@ -886,8 +1057,7 @@ with config.pattern('*://calendar.google.com/*') as p:
 ## Type: Bool
 # c.content.webgl = True
 
-## Which interfaces to expose via WebRTC. On Qt 5.10, this option doesn't
-## work because of a Qt bug.
+## Which interfaces to expose via WebRTC.
 ## Type: String
 ## Valid values:
 ##   - all-interfaces: WebRTC has the right to enumerate all interfaces and bind them to discover public interfaces.
@@ -897,7 +1067,7 @@ with config.pattern('*://calendar.google.com/*') as p:
 # c.content.webrtc_ip_handling_policy = 'all-interfaces'
 
 ## Monitor load requests for cross-site scripting attempts. Suspicious
-## scripts will be blocked and reported in the inspector's JavaScript
+## scripts will be blocked and reported in the devtools JavaScript
 ## console. Note that bypasses for the XSS auditor are widely known and
 ## it can be abused for cross-site info leaks in some scenarios, see:
 ## https://www.chromium.org/developers/design-documents/xss-auditor
@@ -944,10 +1114,10 @@ c.downloads.open_dispatcher = "rifle"
 ## Type: Int
 # c.downloads.remove_finished = -1
 
-## Editor (and arguments) to use for the `open-editor` command. The
-## following placeholders are defined:  * `{file}`: Filename of the file
-## to be edited. * `{line}`: Line in which the caret is found in the
-## text. * `{column}`: Column in which the caret is found in the text. *
+## Editor (and arguments) to use for the `edit-*` commands. The following
+## placeholders are defined:  * `{file}`: Filename of the file to be
+## edited. * `{line}`: Line in which the caret is found in the text. *
+## `{column}`: Column in which the caret is found in the text. *
 ## `{line0}`: Same as `{line}`, but starting from index 0. * `{column0}`:
 ## Same as `{column}`, but starting from index 0.
 ## Type: ShellCommand
@@ -957,6 +1127,30 @@ c.editor.command = ['urxvtc', '-e', 'vim', '{file}', '-c', 'normal {line}G{colum
 ## Type: Encoding
 # c.editor.encoding = 'utf-8'
 
+## Handler for selecting file(s) in forms. If `external`, then the
+## commands specified by `fileselect.single_file.command` and
+## `fileselect.multiple_files.command` are used to select one or multiple
+## files respectively.
+## Type: String
+## Valid values:
+##   - default: Use the default file selector.
+##   - external: Use an external command.
+# c.fileselect.handler = 'default'
+
+## Command (and arguments) to use for selecting multiple files in forms.
+## The command should write the selected file paths to the specified
+## file, separated by newlines. The following placeholders are defined: *
+## `{}`: Filename of the file to be written to.
+## Type: ShellCommand
+# c.fileselect.multiple_files.command = ['xterm', '-e', 'ranger', '--choosefiles={}']
+
+## Command (and arguments) to use for selecting a single file in forms.
+## The command should write the selected file path to the specified file.
+## The following placeholders are defined: * `{}`: Filename of the file
+## to be written to.
+## Type: ShellCommand
+# c.fileselect.single_file.command = ['xterm', '-e', 'ranger', '--choosefile={}']
+
 ## Font used in the completion categories.
 ## Type: Font
 # c.fonts.completion.category = 'bold default_size default_family'
@@ -971,7 +1165,7 @@ c.editor.command = ['urxvtc', '-e', 'vim', '{file}', '-c', 'normal {line}G{colum
 # c.fonts.contextmenu = None
 
 ## Font used for the debugging console.
-## Type: QtFont
+## Type: Font
 # c.fonts.debug_console = 'default_size default_family'
 
 ## Default font families to use. Whenever "default_family" is used in a
@@ -1019,9 +1213,13 @@ c.fonts.default_family = ["Hack"]
 ## Type: Font
 # c.fonts.statusbar = 'default_size default_family'
 
-## Font used in the tab bar.
-## Type: QtFont
-# c.fonts.tabs = 'default_size default_family'
+## Font used for selected tabs.
+## Type: Font
+# c.fonts.tabs.selected = 'default_size default_family'
+
+## Font used for unselected tabs.
+## Type: Font
+# c.fonts.tabs.unselected = 'default_size default_family'
 
 ## Font family for cursive fonts.
 ## Type: FontFamily
@@ -1141,7 +1339,7 @@ c.hints.scatter = False
 ## CSS selectors used to determine which elements on a page should have
 ## hints.
 ## Type: Dict
-# c.hints.selectors = {'all': ['a', 'area', 'textarea', 'select', 'input:not([type="hidden"])', 'button', 'frame', 'iframe', 'img', 'link', 'summary', '[onclick]', '[onmousedown]', '[role="link"]', '[role="option"]', '[role="button"]', '[ng-click]', '[ngClick]', '[data-ng-click]', '[x-ng-click]', '[tabindex]'], 'links': ['a[href]', 'area[href]', 'link[href]', '[role="link"][href]'], 'images': ['img'], 'media': ['audio', 'img', 'video'], 'url': ['[src]', '[href]'], 'inputs': ['input[type="text"]', 'input[type="date"]', 'input[type="datetime-local"]', 'input[type="email"]', 'input[type="month"]', 'input[type="number"]', 'input[type="password"]', 'input[type="search"]', 'input[type="tel"]', 'input[type="time"]', 'input[type="url"]', 'input[type="week"]', 'input:not([type])', 'textarea']}
+# c.hints.selectors = {'all': ['a', 'area', 'textarea', 'select', 'input:not([type="hidden"])', 'button', 'frame', 'iframe', 'img', 'link', 'summary', '[contenteditable]:not([contenteditable="false"])', '[onclick]', '[onmousedown]', '[role="link"]', '[role="option"]', '[role="button"]', '[ng-click]', '[ngClick]', '[data-ng-click]', '[x-ng-click]', '[tabindex]'], 'links': ['a[href]', 'area[href]', 'link[href]', '[role="link"][href]'], 'images': ['img'], 'media': ['audio', 'img', 'video'], 'url': ['[src]', '[href]'], 'inputs': ['input[type="text"]', 'input[type="date"]', 'input[type="datetime-local"]', 'input[type="email"]', 'input[type="month"]', 'input[type="number"]', 'input[type="password"]', 'input[type="search"]', 'input[type="tel"]', 'input[type="time"]', 'input[type="url"]', 'input[type="week"]', 'input:not([type])', '[contenteditable]:not([contenteditable="false"])', 'textarea']}
 
 ## Make characters in hint strings uppercase.
 ## Type: Bool
@@ -1183,7 +1381,7 @@ c.hints.scatter = False
 ## unreliable on this setting, and they may match the url you are
 ## navigating to, or the URL you are navigating from.
 ## Type: Bool
-# c.input.insert_mode.leave_on_load = True
+# c.input.insert_mode.leave_on_load = False
 
 ## Switch to insert mode when clicking flash and other plugins.
 ## Type: Bool
@@ -1193,16 +1391,21 @@ c.hints.scatter = False
 ## Type: Bool
 # c.input.links_included_in_focus_chain = True
 
-## Timeout (in milliseconds) for partially typed key bindings. If the
-## current input forms only partial matches, the keystring will be
-## cleared after this time.
-## Type: Int
-# c.input.partial_timeout = 5000
+## Enable back and forward buttons on the mouse.
+## Type: Bool
+# c.input.mouse.back_forward_buttons = True
 
 ## Enable Opera-like mouse rocker gestures. This disables the context
 ## menu.
 ## Type: Bool
-# c.input.rocker_gestures = False
+# c.input.mouse.rocker_gestures = False
+
+## Timeout (in milliseconds) for partially typed key bindings. If the
+## current input forms only partial matches, the keystring will be
+## cleared after this time. If set to 0, partially typed bindings are
+## never cleared.
+## Type: Int
+c.input.partial_timeout = 5000
 
 ## Enable spatial navigation. Spatial navigation consists in the ability
 ## to navigate between focusable elements in a Web page, such as
@@ -1228,6 +1431,29 @@ c.hints.scatter = False
 ## Type: Int
 # c.keyhint.radius = 6
 
+## Level for console (stdout/stderr) logs. Ignored if the `--loglevel` or
+## `--debug` CLI flags are used.
+## Type: LogLevel
+## Valid values:
+##   - vdebug
+##   - debug
+##   - info
+##   - warning
+##   - error
+##   - critical
+# c.logging.level.console = 'info'
+
+## Level for in-memory logs.
+## Type: LogLevel
+## Valid values:
+##   - vdebug
+##   - debug
+##   - info
+##   - warning
+##   - error
+##   - critical
+# c.logging.level.ram = 'debug'
+
 ## Duration (in milliseconds) to show messages in the statusbar for. Set
 ## to 0 to never clear messages.
 ## Type: Int
@@ -1244,6 +1470,7 @@ c.hints.scatter = False
 ##   - tab-silent: Open a new tab in the existing window without activating the window.
 ##   - tab-bg-silent: Open a new background tab in the existing window without activating the window.
 ##   - window: Open in a new window.
+##   - private-window: Open in a new private window.
 # c.new_instance_open_target = 'tab'
 
 ## Which window to choose when opening links as new tabs. When
@@ -1271,6 +1498,11 @@ c.hints.scatter = False
 ## Type: List of String
 # c.qt.args = []
 
+## Additional environment variables to set. Setting an environment
+## variable to null/None will unset it.
+## Type: Dict
+# c.qt.environ = {}
+
 ## Force a Qt platform to use. This sets the `QT_QPA_PLATFORM`
 ## environment variable and is useful to force using the XCB plugin when
 ## running QtWebEngine on Wayland.
@@ -1324,13 +1556,14 @@ c.hints.scatter = False
 ##   - single-process: Run all tabs in a single process. This should be used for debugging purposes only, and it disables `:open --private`.
 # c.qt.process_model = 'process-per-site-instance'
 
-## When to show the scrollbar.
+## When/how to show the scrollbar.
 ## Type: String
 ## Valid values:
 ##   - always: Always show the scrollbar.
 ##   - never: Never show the scrollbar.
 ##   - when-searching: Show the scrollbar when searching for text in the webpage. With the QtWebKit backend, this is equal to `never`.
-c.scrolling.bar = 'when-searching'
+##   - overlay: Show an overlay scrollbar. On macOS, this is unavailable and equal to `when-searching`; with the QtWebKit backend, this is equal to `never`. Enabling/disabling overlay scrollbars requires a restart.
+# c.scrolling.bar = 'overlay'
 
 ## Enable smooth scrolling for web pages. Note smooth scrolling does not
 ## work with the `:scroll-px` command.
@@ -1364,6 +1597,16 @@ c.scrolling.bar = 'when-searching'
 ## Type: Bool
 c.session.lazy_restore = True
 
+## Whether to automatically save a session when it is closed.
+## Type: Bool
+# c.session.save_when_close = True
+
+## Which sessions to load on startup. None will load the last saved
+## sessions from the sate file, if you want to not load any sessions,
+## pass an empty list.
+## Type: List of String
+# c.session.startup_sessions = None
+
 ## Languages to use for spell checking. You can check for available
 ## languages and install dictionaries using scripts/dictcli.py. Run the
 ## script with -h/--help for instructions.
@@ -1414,10 +1657,6 @@ c.session.lazy_restore = True
 ##   - vi-VN: Vietnamese (Viet Nam)
 c.spellcheck.languages = ['en-GB']
 
-## Hide the statusbar unless a message is shown.
-## Type: Bool
-# c.statusbar.hide = False
-
 ## Padding (in pixels) for the statusbar.
 ## Type: Padding
 # c.statusbar.padding = {'top': 1, 'bottom': 1, 'left': 0, 'right': 0}
@@ -1429,6 +1668,14 @@ c.spellcheck.languages = ['en-GB']
 ##   - bottom
 # c.statusbar.position = 'bottom'
 
+## When to show the statusbar.
+## Type: String
+## Valid values:
+##   - always: Always show the statusbar.
+##   - never: Always hide the statusbar.
+##   - in-mode: Show the statusbar when in modes other than normal mode.
+# c.statusbar.show = 'always'
+
 ## List of widgets displayed in the statusbar.
 ## Type: List of String
 ## Valid values:
@@ -1443,7 +1690,7 @@ c.spellcheck.languages = ['en-GB']
 
 ## Open new tabs (middleclick/ctrl+click) in the background.
 ## Type: Bool
-# c.tabs.background = False
+# c.tabs.background = True
 
 ## Mouse button with which to close tabs.
 ## Type: String
@@ -1467,7 +1714,9 @@ c.spellcheck.languages = ['en-GB']
 ## Type: Float
 # c.tabs.favicons.scale = 1.0
 
-## When to show favicons in the tab bar.
+## When to show favicons in the tab bar. When switching this from never
+## to always/pinned, note that favicons might not be loaded yet, thus
+## tabs might require a reload to display them.
 ## Type: String
 ## Valid values:
 ##   - always: Always show favicons.
@@ -1487,7 +1736,9 @@ c.spellcheck.languages = ['en-GB']
 ## Type: Int
 # c.tabs.indicator.width = 3
 
-## How to behave when the last tab is closed.
+## How to behave when the last tab is closed. If the
+## `tabs.tabs_are_windows` setting is set, this is ignored and the
+## behavior is always identical to the `close` value.
 ## Type: String
 ## Valid values:
 ##   - ignore: Don't do anything.
@@ -1610,12 +1861,13 @@ c.tabs.select_on_remove = 'prev'
 ##   * `{perc}`: Percentage as a string like `[10%]`.
 ##   * `{perc_raw}`: Raw percentage, e.g. `10`.
 ##   * `{current_title}`: Title of the current web page.
-##   * `{title_sep}`: The string ` - ` if a title is set, empty otherwise.
+##   * `{title_sep}`: The string `" - "` if a title is set, empty otherwise.
 ##   * `{index}`: Index of this tab.
+##   * `{aligned_index}`: Index of this tab padded with spaces to have the same width.
 ##   * `{id}`: Internal tab ID of this tab.
 ##   * `{scroll_pos}`: Page scroll position.
 ##   * `{host}`: Host of the current web page.
-##   * `{backend}`: Either ''webkit'' or ''webengine''
+##   * `{backend}`: Either `webkit` or `webengine`
 ##   * `{private}`: Indicates when private mode is enabled.
 ##   * `{current_url}`: URL of the current web page.
 ##   * `{protocol}`: Protocol (http/https/...) of the current web page.
@@ -1633,15 +1885,15 @@ c.tabs.select_on_remove = 'prev'
 ## Type: Bool
 # c.tabs.tooltips = True
 
-## Number of close tab actions to remember, per window (-1 for no
-## maximum).
+## Number of closed tabs (per window) and closed windows to remember for
+## :undo (-1 for no maximum).
 ## Type: Int
 # c.tabs.undo_stack_size = 100
 
 ## Width (in pixels or as percentage of the window) of the tab bar if
 ## it's vertical.
 ## Type: PercOrInt
-# c.tabs.width = '20%'
+# c.tabs.width = '15%'
 
 ## Wrap when changing tabs.
 ## Type: Bool
@@ -1653,6 +1905,7 @@ c.tabs.select_on_remove = 'prev'
 ##   - naive: Use simple/naive check.
 ##   - dns: Use DNS requests (might be slow!).
 ##   - never: Never search automatically.
+##   - schemeless: Always search automatically unless URL explicitly contains a scheme.
 # c.url.auto_search = 'naive'
 
 ## Page to open if :open -t/-b/-w is used without URL. Use `about:blank`
@@ -1689,10 +1942,11 @@ c.url.default_page = 'https://duckduckgo.com/?t=chakra'
 ##    placeholder   expands to `slash%2Fand%26amp`).
 ##  * `{unquoted}` quotes nothing (for `slash/and&amp` this placeholder
 ##    expands to `slash/and&amp`).
-## The search engine named `DEFAULT` is used when
+##  * `{0}` means the same as `{}`, but can be used multiple times.  The search
+##    engine named `DEFAULT` is used when
 ## `url.auto_search` is turned on and something else than a URL was
 ## entered to be opened. Other search engines can be used by prepending
-## the search engine name to the search term, e.g.  `:open google
+## the search engine name to the search term, e.g. `:open google
 ## qutebrowser`.
 ## Type: Dict
 c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?t=chakra&q={}',
@@ -1719,6 +1973,15 @@ c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?t=chakra&q={}',
 ## Type: FormatString
 # c.window.title_format = '{perc}{current_title}{title_sep}qutebrowser'
 
+## Set the main window background to transparent.  This allows having a
+## transparent tab- or statusbar (might require a compositor such as
+## picom). However, it breaks some functionality such as dmenu embedding
+## via its `-w` option. On some systems, it was additionally reported
+## that main window transparency negatively affects performance.  Note
+## this setting only affects windows opened after setting it.
+## Type: Bool
+# c.window.transparent = False
+
 ## Default zoom level.
 ## Type: Perc
 # c.zoom.default = '100%'
@@ -1736,7 +1999,7 @@ c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?t=chakra&q={}',
 # c.zoom.text_only = False
 
 ## Bindings for normal mode
-# config.bind("'", 'enter-mode jump_mark')
+# config.bind("'", 'mode-enter jump_mark')
 # config.bind('+', 'zoom-in')
 # config.bind('-', 'zoom-out')
 # config.bind('.', 'repeat-command')
@@ -1775,7 +2038,7 @@ c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?t=chakra&q={}',
 # config.bind('<Ctrl-PgDown>', 'tab-next')
 # config.bind('<Ctrl-PgUp>', 'tab-prev')
 # config.bind('<Ctrl-Q>', 'quit')
-# config.bind('<Ctrl-Return>', 'follow-selected -t')
+# config.bind('<Ctrl-Return>', 'selection-follow -t')
 # config.bind('<Ctrl-Shift-N>', 'open -p')
 # config.bind('<Ctrl-Shift-T>', 'undo')
 # config.bind('<Ctrl-Shift-Tab>', 'nop')
@@ -1783,7 +2046,7 @@ c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?t=chakra&q={}',
 # config.bind('<Ctrl-T>', 'open -t')
 # config.bind('<Ctrl-Tab>', 'tab-focus last')
 # config.bind('<Ctrl-U>', 'scroll-page 0 -0.5')
-# config.bind('<Ctrl-V>', 'enter-mode passthrough')
+# config.bind('<Ctrl-V>', 'mode-enter passthrough')
 # config.bind('<Ctrl-W>', 'tab-close')
 # config.bind('<Ctrl-X>', 'navigate decrement')
 # config.bind('<Ctrl-^>', 'tab-focus last')
@@ -1793,12 +2056,12 @@ c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?t=chakra&q={}',
 config.bind('<Escape>', 'clear-keychain ;; search ;; fullscreen --leave ;; fake-key <Escape>')
 # config.bind('<F11>', 'fullscreen')
 # config.bind('<F5>', 'reload')
-# config.bind('<Return>', 'follow-selected')
+# config.bind('<Return>', 'selection-follow')
 # config.bind('<back>', 'back')
 # config.bind('<forward>', 'forward')
 # config.bind('=', 'zoom')
 # config.bind('?', 'set-cmd-text ?')
-# config.bind('@', 'run-macro')
+# config.bind('@', 'macro-run')
 # config.bind('B', 'set-cmd-text -s :quickmark-load -t')
 # config.bind('D', 'tab-close -o')
 # config.bind('F', 'hint all tab')
@@ -1818,11 +2081,13 @@ config.bind('J', 'tab-prev')
 # config.bind('Sq', 'open qute://bookmarks')
 # config.bind('Ss', 'open qute://settings')
 # config.bind('T', 'tab-focus')
+# config.bind('U', 'undo -w')
+# config.bind('V', 'mode-enter caret ;; selection-toggle --line')
 # config.bind('ZQ', 'quit')
 # config.bind('ZZ', 'quit --save')
 # config.bind('[[', 'navigate prev')
 # config.bind(']]', 'navigate next')
-# config.bind('`', 'enter-mode set_mark')
+# config.bind('`', 'mode-enter set_mark')
 # config.bind('ad', 'download-cancel')
 # config.bind('b', 'set-cmd-text -s :quickmark-load')
 # config.bind('cd', 'download-clear')
@@ -1835,6 +2100,8 @@ config.bind('co', 'download-open')
 # config.bind('gB', 'set-cmd-text -s :bookmark-load -t')
 # config.bind('gC', 'tab-clone')
 # config.bind('gD', 'tab-give')
+# config.bind('gJ', 'tab-move +')
+# config.bind('gK', 'tab-move -')
 # config.bind('gO', 'set-cmd-text :open -t -r {url:pretty}')
 # config.bind('gU', 'navigate up -t')
 # config.bind('g^', 'tab-focus 1')
@@ -1844,14 +2111,11 @@ config.bind('co', 'download-open')
 # config.bind('gf', 'view-source')
 # config.bind('gg', 'scroll-to-perc 0')
 # config.bind('gi', 'hint inputs --first')
-# config.bind('gl', 'tab-move -')
 # config.bind('gm', 'tab-move')
 # config.bind('go', 'set-cmd-text :open {url:pretty}')
-# config.bind('gr', 'tab-move +')
-# config.bind('gt', 'set-cmd-text -s :buffer')
 # config.bind('gu', 'navigate up')
 # config.bind('h', 'scroll left')
-# config.bind('i', 'enter-mode insert')
+# config.bind('i', 'mode-enter insert')
 # config.bind('j', 'scroll down')
 # config.bind('k', 'scroll up')
 # config.bind('l', 'scroll right')
@@ -1861,7 +2125,7 @@ config.bind('m', 'spawn mpv {url}')
 # config.bind('o', 'set-cmd-text -s :open')
 # config.bind('pP', 'open -- {primary}')
 # config.bind('pp', 'open -- {clipboard}')
-# config.bind('q', 'record-macro')
+# config.bind('q', 'macro-record')
 # config.bind('r', 'reload')
 # config.bind('sf', 'save')
 # config.bind('sk', 'set-cmd-text -s :bind')
@@ -1892,14 +2156,20 @@ config.bind('tgh', 'spawn --userscript config-cycle-tld -p -t content.geolocatio
 # config.bind('tsh', 'config-cycle -p -t -u *://{url:host}/* content.javascript.enabled ;; reload')
 # config.bind('tsu', 'config-cycle -p -t -u {url} content.javascript.enabled ;; reload')
 # config.bind('u', 'undo')
-# config.bind('v', 'enter-mode caret')
+# config.bind('v', 'mode-enter caret')
 # config.bind('wB', 'set-cmd-text -s :bookmark-load -w')
+# config.bind('wIf', 'devtools-focus')
+# config.bind('wIh', 'devtools left')
+# config.bind('wIj', 'devtools bottom')
+# config.bind('wIk', 'devtools top')
+# config.bind('wIl', 'devtools right')
+# config.bind('wIw', 'devtools window')
 # config.bind('wO', 'set-cmd-text :open -w {url:pretty}')
 # config.bind('wP', 'open -w -- {primary}')
 # config.bind('wb', 'set-cmd-text -s :quickmark-load -w')
 # config.bind('wf', 'hint all window')
 # config.bind('wh', 'back -w')
-# config.bind('wi', 'inspector')
+# config.bind('wi', 'devtools')
 # config.bind('wl', 'forward -w')
 # config.bind('wo', 'set-cmd-text -s :open -w')
 # config.bind('wp', 'open -w -- {clipboard}')
@@ -1924,28 +2194,29 @@ config.bind('zpl', 'spawn --userscript qute-pass --password-only')
 ## Bindings for caret mode
 # config.bind('$', 'move-to-end-of-line', mode='caret')
 # config.bind('0', 'move-to-start-of-line', mode='caret')
-# config.bind('<Ctrl-Space>', 'drop-selection', mode='caret')
-# config.bind('<Escape>', 'leave-mode', mode='caret')
+# config.bind('<Ctrl-Space>', 'selection-drop', mode='caret')
+# config.bind('<Escape>', 'mode-leave', mode='caret')
 # config.bind('<Return>', 'yank selection', mode='caret')
-# config.bind('<Space>', 'toggle-selection', mode='caret')
+# config.bind('<Space>', 'selection-toggle', mode='caret')
 # config.bind('G', 'move-to-end-of-document', mode='caret')
 # config.bind('H', 'scroll left', mode='caret')
 # config.bind('J', 'scroll down', mode='caret')
 # config.bind('K', 'scroll up', mode='caret')
 # config.bind('L', 'scroll right', mode='caret')
+# config.bind('V', 'selection-toggle --line', mode='caret')
 # config.bind('Y', 'yank selection -s', mode='caret')
 # config.bind('[', 'move-to-start-of-prev-block', mode='caret')
 # config.bind(']', 'move-to-start-of-next-block', mode='caret')
 # config.bind('b', 'move-to-prev-word', mode='caret')
-# config.bind('c', 'enter-mode normal', mode='caret')
+# config.bind('c', 'mode-enter normal', mode='caret')
 # config.bind('e', 'move-to-end-of-word', mode='caret')
 # config.bind('gg', 'move-to-start-of-document', mode='caret')
 # config.bind('h', 'move-to-prev-char', mode='caret')
 # config.bind('j', 'move-to-next-line', mode='caret')
 # config.bind('k', 'move-to-prev-line', mode='caret')
 # config.bind('l', 'move-to-next-char', mode='caret')
-# config.bind('o', 'reverse-selection', mode='caret')
-# config.bind('v', 'toggle-selection', mode='caret')
+# config.bind('o', 'selection-reverse', mode='caret')
+# config.bind('v', 'selection-toggle', mode='caret')
 # config.bind('w', 'move-to-next-word', mode='caret')
 # config.bind('y', 'yank selection', mode='caret')
 # config.bind('{', 'move-to-end-of-prev-block', mode='caret')
@@ -1975,7 +2246,9 @@ config.bind('zpl', 'spawn --userscript qute-pass --password-only')
 # config.bind('<Ctrl-W>', 'rl-unix-word-rubout', mode='command')
 # config.bind('<Ctrl-Y>', 'rl-yank', mode='command')
 # config.bind('<Down>', 'completion-item-focus --history next', mode='command')
-# config.bind('<Escape>', 'leave-mode', mode='command')
+# config.bind('<Escape>', 'mode-leave', mode='command')
+# config.bind('<PgDown>', 'completion-item-focus next-page', mode='command')
+# config.bind('<PgUp>', 'completion-item-focus prev-page', mode='command')
 # config.bind('<Return>', 'command-accept', mode='command')
 # config.bind('<Shift-Delete>', 'completion-item-del', mode='command')
 # config.bind('<Shift-Tab>', 'completion-item-focus prev', mode='command')
@@ -1986,16 +2259,16 @@ config.bind('zpl', 'spawn --userscript qute-pass --password-only')
 # config.bind('<Ctrl-B>', 'hint all tab-bg', mode='hint')
 # config.bind('<Ctrl-F>', 'hint links', mode='hint')
 # config.bind('<Ctrl-R>', 'hint --rapid links tab-bg', mode='hint')
-# config.bind('<Escape>', 'leave-mode', mode='hint')
-# config.bind('<Return>', 'follow-hint', mode='hint')
+# config.bind('<Escape>', 'mode-leave', mode='hint')
+# config.bind('<Return>', 'hint-follow', mode='hint')
 
 ## Bindings for insert mode
-# config.bind('<Ctrl-E>', 'open-editor', mode='insert')
-# config.bind('<Escape>', 'leave-mode', mode='insert')
+# config.bind('<Ctrl-E>', 'edit-text', mode='insert')
+# config.bind('<Escape>', 'mode-leave', mode='insert')
 # config.bind('<Shift-Ins>', 'insert-text -- {primary}', mode='insert')
 
 ## Bindings for passthrough mode
-# config.bind('<Shift-Escape>', 'leave-mode', mode='passthrough')
+# config.bind('<Shift-Escape>', 'mode-leave', mode='passthrough')
 
 ## Bindings for prompt mode
 # config.bind('<Alt-B>', 'rl-backward-word', mode='prompt')
@@ -2017,19 +2290,19 @@ config.bind('zpl', 'spawn --userscript qute-pass --password-only')
 # config.bind('<Ctrl-X>', 'prompt-open-download', mode='prompt')
 # config.bind('<Ctrl-Y>', 'rl-yank', mode='prompt')
 # config.bind('<Down>', 'prompt-item-focus next', mode='prompt')
-# config.bind('<Escape>', 'leave-mode', mode='prompt')
+# config.bind('<Escape>', 'mode-leave', mode='prompt')
 # config.bind('<Return>', 'prompt-accept', mode='prompt')
 # config.bind('<Shift-Tab>', 'prompt-item-focus prev', mode='prompt')
 # config.bind('<Tab>', 'prompt-item-focus next', mode='prompt')
 # config.bind('<Up>', 'prompt-item-focus prev', mode='prompt')
 
 ## Bindings for register mode
-# config.bind('<Escape>', 'leave-mode', mode='register')
+# config.bind('<Escape>', 'mode-leave', mode='register')
 
 ## Bindings for yesno mode
 # config.bind('<Alt-Shift-Y>', 'prompt-yank --sel', mode='yesno')
 # config.bind('<Alt-Y>', 'prompt-yank', mode='yesno')
-# config.bind('<Escape>', 'leave-mode', mode='yesno')
+# config.bind('<Escape>', 'mode-leave', mode='yesno')
 # config.bind('<Return>', 'prompt-accept', mode='yesno')
 # config.bind('N', 'prompt-accept --save no', mode='yesno')
 # config.bind('Y', 'prompt-accept --save yes', mode='yesno')