# 3.4. Key Bindings

If you want to bind a command to a key you can do so by adding the pair to the [bindings] section. This will introduce a global binding, that works in all modes. To make a binding specific to a mode you have to add the pair under the subsection named like the mode. For instance, if you want to bind T to open a new search for threads tagged with ‘todo’, and be able to toggle this tag in search mode, you’d add this to your config

    [bindings]
      T = search tag:todo

      [[search]]
      t = toggletags todo

Known modes are:

- bufferlist

- envelope

- namedqueries

- search

- taglist

- thread

Have a look at the urwid User Input documentation on how key strings are formatted.

## 3.4.1. Default bindings

User-defined bindings are combined with the default bindings listed below.

    up = move up
    down = move down
    page up = move page up
    page down = move page down
    mouse press 4 = move up
    mouse press 5 = move down
    j = move down
    k = move up
    'g g' = move first
    G = move last
    ' ' = move page down
    'ctrl d' = move halfpage down
    'ctrl u' = move halfpage up
    @ = refresh
    ? = help bindings
    I = search tag:inbox AND NOT tag:killed
    '#' = taglist
    shift tab = bprevious
    U = search tag:unread
    tab = bnext
    \ = prompt 'search '
    d = bclose
    $ = flush
    m = compose
    o = prompt 'search '
    q = exit
    ';' = bufferlist
    ':' = prompt
    . = repeat

    [bufferlist]
        x = close
        enter = open

    [search]
        enter = select
        a = toggletags inbox
        & = toggletags killed
        ! = toggletags flagged
        s = toggletags unread
        l = retagprompt
        O = refineprompt
        | = refineprompt

    [envelope]
        a = prompt 'attach ~/'
        y = send
        P = save
        s = 'refine Subject'
        f = prompt 'set From '
        t = 'refine To'
        b = 'refine Bcc'
        c = 'refine Cc'
        S = togglesign
        enter = edit
        'g f' = togglesource

    [taglist]
        enter = select

    [namedqueries]
        enter = select

    [thread]
        enter = select
        C = fold *
        E = unfold *
        c = fold
        e = unfold
        < = fold
        > = unfold
        [ = indent -
        ] = indent +
        'g f' = togglesource
        H = toggleheaders
        P = print --all --separately --add_tags
        S = save --all
        g = reply --all
        f = forward
        p = print --add_tags
        n = editnew
        b= bounce
        s = save
        r = reply
        | = prompt 'pipeto '
        t = togglemimetree
        h = togglemimepart

        'g j' = move next sibling
        'g k' = move previous sibling
        'g h' = move parent
        'g l' = move first reply
        ' ' = move next

In prompts the following hardcoded bindings are available.

Key | Function
--- | ---
Ctrl-f/b | Moves the curser one character to the right/left
Alt-f/b Shift-right/left | Moves the cursor one word to the right/left
Ctrl-a/e | Moves the curser to the beginning/end of the line
Ctrl-d | Deletes the character under the cursor
Alt-d | Deletes everything from the cursor to the end of the current or next word
Alt-Delete/Backspace Ctrl-w | Deletes everything from the cursor to the beginning of the current or previous word
Ctrl-k | Deletes everything from the cursor to the end of the line
Ctrl-u | Deletes everything from the cursor to the beginning of the line

## 3.4.2. Overwriting defaults

To disable a global binding you can redefine it in your config to point to an empty command string. For example, to add a new global binding for key a, which is bound to toggletags inbox in search mode by default, you can remap it as follows.

    [bindings]
      a = NEW GLOBAL COMMAND

      [[search]]
        a =

If you omit the last two lines, a will still be bound to the default binding in search mode.