---
name: "infokey"
section: "1"
platform: "openbsd"
package: "man"
version: "8.0-current-20261101"
release: "OpenBSD 8.0-current (2026-11-01)"
platforms: ["linux", "openbsd"]
url: "https://new.carta.tech/infokey"
---

# infokey(1)

compile custom key bindings file

## NAME

**infokey** – compile custom key bindings file

## SYNOPSIS

**infokey** \[**--help**\] \[**--version**\] \[**--output** *file*\] \[*input* *file*\]

## DESCRIPTION

The **infokey** utility compiles a source file (*$HOME/.infokey*\
  by default) containing [info(1)](/info/1.md) customizations into a binary format (*$HOME/.info*\
  by default). [info(1)](/info/1.md) reads the binary file at startup to override the default key bindings and variable definitions.

Besides the standard **--help** and **--version** options, the only option is **--output** *file*. This tells **infokey** to write the binary data to *file* instead of *$HOME/.info*.

The format of the source file read by **infokey** is most easily illustrated by example. For instance, here is a sample *.infokey* source file suitable for aficionados of [vi(1)](/vi/1.md) or [less(1)](/less/1.md):

```
#info
j       next-line
k       prev-line
l       forward-char
h       backward-char
\kd     next-line
\ku     prev-line
\kr     forward-char
\kl     backward-char
\       scroll-forward
\kD     scroll-forward-page-only
b       scroll-backward
\kU     scroll-backward-page-only
g       beginning-of-node
\kh     beginning-of-node
G       end-of-node
\ke     end-of-node
\t      select-reference-this-line
-       history-node
n       next-node
p       prev-node
u       up-node
t       top-node
d       dir-node
#var
scroll-step=1
```

The source file consists of one or more "sections". Each section starts with a line that identifies the type of section. Possible sections are:

- \#info

  Key bindings for [info(1)](/info/1.md) windows. The start of this section is indicated by a line containing just \`#info' by itself. If this is the first section in the source file, the \`#info' line can be omitted. The rest of this section consists of lines of the form:

  ```
  STRING whitespace ACTION [ whitespace [ # comment ] ] newline
  ```

  Whitespace is any sequence of one or more spaces and/or tabs. Comment is any sequence of any characters, excluding newline.

  STRING is the key sequence which invokes the action. ACTION is the name of an [info(1)](/info/1.md) command. The characters in STRING are interpreted literally or prefixed by a caret (\`^') to indicate a control character. A backslash followed by certain characters specifies input keystrokes as follows:

  - \\b

    Backspace

  - \\e

    Escape (ESC)

  - \\n

    Newline

  - \\r

    Return

  - \\t

    Tab

  - \\ku

    Up arrow

  - \\kd

    Down arrow

  - \\kl

    Left arrow

  - \\kr

    Right arrow

  - \\kU

    Page Up

  - \\kD

    Page Down

  - \\kh

    HOME

  - \\ke

    END

  - \\kx

    Delete (DEL)

  - \\mX

    Meta-X, where X is any character as described above

    Backslash followed by any other character indicates that character is to be taken literally. Characters which must be preceded by a backslash include caret, space, tab, and backslash itself.

- \#echo-area

  Key bindings for the echo area. The start of this section is indicated by a line containing just \`#echo-area' by itself. The rest of this section has a syntax identical to that for the key definitions for the [info(1)](/info/1.md) area, described above.

- \#var

  Variable initializations. The start of this section is indicated by a line containing just \`#var' by itself. Following this line is a list of variable assignments, one per line. Each line consists of a variable name followed by \`=', followed by a value. There may be no whitespace between the variable name and the \`=', and all characters following the \`=', including whitespace, are included in the value.

Blank lines and lines starting with \`#' are ignored, except for the special section header lines.

Key bindings defined in the *.info* file take precedence over info's default key bindings, whether or not **--vi-keys** is used. A default key binding may be disabled by overriding it in the *.info* file with the action \`invalid'. In addition, *all* default key bindings can be disabled by adding this line *anywhere* in the relevant section:

```
#stop
```

This will cause [info(1)](/info/1.md) to ignore all the default key commands for that section.

**Beware**: \`#stop' can be dangerous. Since it disables all default key bindings, you must supply enough new key bindings to enable all necessary actions. Failure to bind any key to the \`quit' command, for example, can lead to frustration.

The order in which key bindings are defined in the *.info* file is not important, except that the command summary produced by the \`get-help-window' command only displays the *first* key that is bound to each command.

## FILES

- $HOME/.infokey

  Default souce file for customizations.

- $HOME/.info

  Default binary file for customizations.

## SEE ALSO

[info(1)](/info/1.md)

## BUGS

bug-texinfo@gnu.org
