# 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.
#
# Note that default keybindings are always bound, and need to be explicitly
# unbound if you wish to remove them:
#
# <unbound>
#   keychain
#   keychain2
#   ...

[!normal]

leave-mode
    <escape>
    <ctrl-[>

[normal]
# Keybindings for normal mode.

clear-keychain ;; search ;; fullscreen --leave
    <escape>
    <ctrl-[>

set-cmd-text -s :open
    o

set-cmd-text :open {url:pretty}
    go
    O

set-cmd-text :open -t -i {url:pretty}
    gO

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

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

set-cmd-text /
    /

set-cmd-text ?
    ?

set-cmd-text :
    :

open -t
    ga
    <ctrl-t>

open -w
    <ctrl-n>

tab-close
    d
    <ctrl-w>

tab-close -o
    D

tab-only
    co

tab-move
    gm

tab-next
    <ctrl-pgdown>
    K

tab-prev
    <ctrl-pgup>
    J

tab-clone
    gC

reload
    r
    <f5>

reload -f
    R
    <ctrl-f5>

back
    H
    <back>

forward
    L
    <forward>

fullscreen
    <f11>

hint
    f

hint all tab
    F

hint all tab-bg
    ;b

hint all tab-fg
    ;f

hint all hover
    ;h

hint images
    ;i

hint images tab
    ;I

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

hint links fill :open -t -i {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

hint inputs
    ;t

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

enter-mode set_mark
    `

enter-mode jump_mark
    '

yank
    yy

yank -s
    yY

yank title
    yt

yank title -s
    yT

yank domain
    yd

yank domain -s
    yD

yank pretty-url
    yp

yank pretty-url -s
    yP

open -- {clipboard}
    pp

open -- {primary}
    pP

open -t -- {clipboard}
    Pp

open -t -- {primary}
    PP

quickmark-save
    m

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

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

bookmark-add
    M

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

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

save
    sf

set-cmd-text -s :set
    ss

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

set-cmd-text -s :bind
    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>

download
    gd

download-cancel
    ad

download-clear
    cd

view-source
    gf

set-cmd-text -s :buffer
    gt

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>

repeat-command
    .

record-macro
    q

run-macro
    @

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

<unbound>
    th
    wh
    tl
    wl
    gl
    gr
    wp
    wP
    wb
    wB
    wi
    wo
    wO
    wf

tab-move -
    <

tab-move +
    >

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

set-cmd-text :open -t {url:pretty}
    T

set-cmd-text :open -w {url:pretty}
    W

[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.
#  * `paste-primary`: Paste primary selection at cursor position.

open-editor
    <ctrl-e>

insert-text {primary}
    <shift-ins>

[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-focus`: Select another item in completion.
#  * `command-accept`: Execute the command currently in the commandline.

command-history-prev
    <ctrl-p>

command-history-next
    <ctrl-n>

completion-item-focus prev
    <shift-tab>
    <up>

completion-item-focus next
    <tab>
    <down>

completion-item-focus next-category
    <ctrl-tab>

completion-item-focus prev-category
    <ctrl-shift-tab>

completion-item-del
    <ctrl-d>

command-accept
    <return>
    <ctrl-m>
    <ctrl-j>
    <shift-return>
    <enter>
    <shift-enter>

[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-accept yes`: Answer yes to a yes/no question.
#  * `prompt-accept no`: Answer no to a yes/no question.

prompt-accept
    <return>
    <ctrl-m>
    <ctrl-j>
    <shift-return>
    <enter>
    <shift-enter>

prompt-accept yes
    y

prompt-accept no
    n

prompt-open-download
    <ctrl-x>

prompt-item-focus prev
    <shift-tab>
    <up>

prompt-item-focus next
    <tab>
    <down>

[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>

rl-backward-kill-word
    <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 selection -s
    Y

yank selection
    y
    <return>
    <ctrl-m>
    <ctrl-j>
    <shift-return>
    <enter>
    <shift-enter>

scroll left
    H

scroll down
    J

scroll up
    K

scroll right
    L

