# vim: ft=conf
#
# In this config file, qutebrowser's key bindings are configured.
# The format looks like this:
#
# [keymode]
#
# command
#   keychain
#   keychain2
#   ...
#
# All blank lines and lines starting with '#' are ignored.
# Inline-comments are not permitted.
#
# keymode is a comma separated list of modes in which the key binding should be
# active. If keymode starts with !, the key binding is active in all modes
# except the listed modes.
#
# For special keys (can't be part of a keychain), enclose them in `<`...`>`.
# For modifiers, you can use either `-` or `+` as delimiters, and these names:
#
#  * Control: `Control`, `Ctrl`
#  * Meta:    `Meta`, `Windows`, `Mod4`
#  * Alt:     `Alt`, `Mod1`
#  * Shift:   `Shift`
#
# For simple keys (no `<>`-signs), a capital letter means the key is pressed
# with Shift. For special keys (with `<>`-signs), you need to explicitly add
# `Shift-` to match a key pressed with shift.  You can bind multiple commands
# by separating them with `;;`.
#
# Note that default keybindings are always bound, and need to be explicitly
# unbound if you wish to remove them:
#
# <unbound>
#   keychain
#   keychain2
#   ...

[!normal]

clear-keychain ;; leave-mode
    <Escape>
    <Ctrl-[>

[normal]
# Keybindings for normal mode.

clear-keychain ;; search
    <Escape>

set-cmd-text -s :goto
    o

set-cmd-text -s :open
    gh

set-cmd-text :goto {url}
    go

set-cmd-text -s :goto -t
    O

set-cmd-text -s :open -t
    gH

set-cmd-text :goto -t {url}
    gO

set-cmd-text -s :open -b
    xo

set-cmd-text :open -b {url}
    xO

set-cmd-text -s :open -w
    wo

set-cmd-text :open -w {url}
    wO

open -t
    ga
    <Ctrl-T>

tab-close
    d
    <Ctrl-W>

tab-close -o
    D

tab-only
    co

tab-focus
    T

tab-move
    gm

tab-move -
    gl

tab-move +
    gr

tab-next
    J
    gt

tab-prev
    K
    gT

tab-clone
    gC

reload
    r

reload -f
    R

back
    H
    <Backspace>

back -t
    th

back -w
    wh

forward
    L

forward -t
    tl

forward -w
    wl

fullscreen
    <F11>

hint
    f

hint all tab
    F

hint all window
    wf

hint all tab-bg
    ;b

hint all tab-fg
    ;f

hint all hover
    ;h

hint images
    ;i

hint images tab
    ;I

hint images tab-bg
    .i

hint links fill ":open {hint-url}"
    ;o

hint links fill ":open -t {hint-url}"
    ;O

hint links fill ":open -b {hint-url}"
    .o

hint links yank
    ;y

hint links yank-primary
    ;Y

hint --rapid links tab-bg
    ;r

hint --rapid links window
    ;R

hint links download
    ;d

scroll left
    h

scroll down
    j

scroll up
    k

scroll right
    l

undo
    u
    <Ctrl-Shift-T>

scroll-perc 0
    gg

scroll-perc
    G

search-next
    n

search-prev
    N

enter-mode insert
    i

enter-mode caret
    v

yank
    yy

yank -s
    yY

yank -t
    yt

yank -ts
    yT

yank -d
    yd

yank -ds
    yD

paste
    pp

paste -s
    pP

paste -t
    Pp

paste -ts
    PP

paste -w
    wp

paste -ws
    wP

quickmark-save
    m

set-cmd-text -s :quickmark-load
    b

set-cmd-text -s :quickmark-load -t
    B

set-cmd-text -s :quickmark-load -w
    wb

save
    sf

set-cmd-text -s :set
    ss

set-cmd-text -s :set -t
    sl

set-cmd-text -s :set keybind
    sk

zoom-out
    -

zoom-in
    +

zoom
    =

navigate prev
    [[

navigate next
    ]]

navigate prev -t
    {{

navigate next -t
    }}

navigate up
    gu

navigate up -t
    gU

navigate increment
    <Ctrl-A>

navigate decrement
    <Ctrl-X>

inspector
    wi

download
    gd

download-cancel
    ad

download-clear
    cd

view-source
    gf

tab-focus last
    <Ctrl-Tab>

enter-mode passthrough
    <Ctrl-V>

quit
    <Ctrl-Q>

scroll-page 0 1
    <Ctrl-F>

scroll-page 0 -1
    <Ctrl-B>

scroll-page 0 0.5
    <Ctrl-D>

scroll-page 0 -0.5
    <Ctrl-U>

tab-focus 1
    <Alt-1>

tab-focus 2
    <Alt-2>

tab-focus 3
    <Alt-3>

tab-focus 4
    <Alt-4>

tab-focus 5
    <Alt-5>

tab-focus 6
    <Alt-6>

tab-focus 7
    <Alt-7>

tab-focus 8
    <Alt-8>

tab-focus 9
    <Alt-9>

home
    <Ctrl-h>

stop
    <Ctrl-s>

print
    <Ctrl-Alt-p>

open qute:settings
    Ss

follow-selected
    <Return>
    <Ctrl-M>
    <Ctrl-J>
    <Shift-Return>
    <Enter>
    <Shift-Enter>

follow-selected -t
    <Ctrl-Return>
    <Ctrl-Enter>

bookmark-add
    M

set-cmd-text -s :bookmark-load
    gb

set-cmd-text -s :bookmark-load -t
    gB

set-cmd-text -s :bookmark-load -w
    wB

spawn youtube-viewer {url}
    x

hint links spawn youtube-viewer {hint-url}
    ;x

[insert]
# Keybindings for insert mode.
# Since normal keypresses are passed through, only special keys are
# supported in this mode.
# Useful hidden commands to map in this section:
#  * `open-editor`: Open a texteditor with the focused field.

open-editor
    <Ctrl-E>

[hint]
# Keybindings for hint mode.
# Since normal keypresses are passed through, only special keys are
# supported in this mode.
# Useful hidden commands to map in this section:
#  * `follow-hint`: Follow the currently selected hint.

follow-hint
    <Return>
    <Ctrl-M>
    <Ctrl-J>
    <Shift-Return>
    <Enter>
    <Shift-Enter>

hint --rapid links tab-bg
    <Ctrl-R>

hint links
    <Ctrl-F>

hint all tab-bg
    <Ctrl-B>

[command]
# Keybindings for command mode.
# Since normal keypresses are passed through, only special keys are
# supported in this mode.
# Useful hidden commands to map in this section:
#  * `command-history-prev`: Switch to previous command in history.
#  * `command-history-next`: Switch to next command in history.
#  * `completion-item-prev`: Select previous item in completion.
#  * `completion-item-next`: Select next item in completion.
#  * `command-accept`: Execute the command currently in the commandline.

command-history-prev
    <Ctrl-P>

command-history-next
    <Ctrl-N>

completion-item-prev
    <Shift-Tab>
    <Up>

completion-item-next
    <Tab>
    <Down>

command-accept
    <Return>
    <Ctrl-M>
    <Ctrl-J>
    <Shift-Return>
    <Enter>
    <Shift-Enter>

completion-item-del
    <Ctrl-D>

[prompt]
# Keybindings for prompts in the status line.
# You can bind normal keys in this mode, but they will be only active
# when a yes/no-prompt is asked. For other prompt modes, you can only
# bind special keys.
# Useful hidden commands to map in this section:
#  * `prompt-accept`: Confirm the entered value.
#  * `prompt-yes`: Answer yes to a yes/no question.
#  * `prompt-no`: Answer no to a yes/no question.

prompt-accept
    <Return>
    <Ctrl-M>
    <Ctrl-J>
    <Shift-Return>
    <Enter>
    <Shift-Enter>

prompt-yes
    y

prompt-no
    n

[command,prompt]

rl-backward-char
    <Ctrl-B>

rl-forward-char
    <Ctrl-F>

rl-backward-word
    <Alt-B>

rl-forward-word
    <Alt-F>

rl-beginning-of-line
    <Ctrl-A>

rl-end-of-line
    <Ctrl-E>

rl-unix-line-discard
    <Ctrl-U>

rl-kill-line
    <Ctrl-K>

rl-kill-word
    <Alt-D>

rl-unix-word-rubout
    <Ctrl-W>
    <Alt-Backspace>

rl-yank
    <Ctrl-Y>

rl-delete-char
    <Ctrl-?>

rl-backward-delete-char
    <Ctrl-H>

[caret]

toggle-selection
    v
    <Space>

drop-selection
    <Ctrl-Space>

enter-mode normal
    c

move-to-next-line
    j

move-to-prev-line
    k

move-to-next-char
    l

move-to-prev-char
    h

move-to-end-of-word
    e

move-to-next-word
    w

move-to-prev-word
    b

move-to-start-of-next-block
    ]

move-to-start-of-prev-block
    [

move-to-end-of-next-block
    }

move-to-end-of-prev-block
    {

move-to-start-of-line
    0

move-to-end-of-line
    $

move-to-start-of-document
    gg

move-to-end-of-document
    G

yank-selected -p
    Y

yank-selected
    y
    <Return>
    <Ctrl-M>
    <Ctrl-J>
    <Shift-Return>
    <Enter>
    <Shift-Enter>

scroll left
    H

scroll down
    J

scroll up
    K

scroll right
    L

