2020-08-27 20:02:30 +02:00
|
|
|
foot.ini(5)
|
2019-08-12 20:00:09 +02:00
|
|
|
|
|
|
|
|
# NAME
|
2020-08-27 20:02:30 +02:00
|
|
|
foot.ini - configuration file
|
2019-08-12 20:00:09 +02:00
|
|
|
|
|
|
|
|
# DESCRIPTION
|
|
|
|
|
|
|
|
|
|
*foot* uses the standard _unix configuration format_, with section based
|
|
|
|
|
key/value pairs. The default section is unnamed (i.e. not prefixed
|
|
|
|
|
with a _[section]_).
|
|
|
|
|
|
|
|
|
|
foot will search for a configuration file in the following locations,
|
|
|
|
|
in this order:
|
|
|
|
|
|
2020-08-27 21:09:54 +02:00
|
|
|
- *XDG_CONFIG_HOME/foot/foot.ini*
|
|
|
|
|
- *~/.config/foot/foot.ini*
|
|
|
|
|
- *XDG_CONFIG_HOME/footrc*
|
|
|
|
|
- *~/.config/footrc*
|
2020-10-08 19:53:30 +02:00
|
|
|
- *XDG_CONFIG_DIRS/foot/foot.ini*
|
2019-08-12 20:00:09 +02:00
|
|
|
|
|
|
|
|
# SECTION: default
|
|
|
|
|
|
2020-10-20 21:04:47 +02:00
|
|
|
*font*, *font-bold*, *font-italic*, *font-bold-italic*
|
2019-09-21 19:50:16 +02:00
|
|
|
Comma separated list of fonts to use, in fontconfig format (see
|
|
|
|
|
*FONT FORMAT*).
|
|
|
|
|
|
2020-10-20 21:04:47 +02:00
|
|
|
For each option, the first font is the primary font. The remaining
|
|
|
|
|
fonts are fallback fonts that will be used whenever a glyph cannot
|
|
|
|
|
be found in the primary font.
|
2019-09-21 19:50:16 +02:00
|
|
|
|
|
|
|
|
The fallback fonts are searched in the order they appear. If a
|
|
|
|
|
glyph cannot be found in any of the fallback fonts, the dynamic
|
|
|
|
|
fallback list from fontconfig (for the primary font) is
|
|
|
|
|
searched.
|
|
|
|
|
|
2020-10-20 21:04:47 +02:00
|
|
|
*font-bold*, *font-italic* and *font-bold-italic* allow custom
|
|
|
|
|
fonts to be used for bold/italic/bold+italic fonts. If left
|
|
|
|
|
unconfigured, the bold/italic variants of the regular font(s)
|
|
|
|
|
specified in *font* are used. *Note*: you _may_ have to tweak the
|
|
|
|
|
size(s) of the custom bold/italic fonts to match the regular font.
|
|
|
|
|
|
2020-10-20 21:12:25 +02:00
|
|
|
To disable bold and/or italic fonts, set e.g. *font-bold* to
|
|
|
|
|
_exactly_ the same value as *font*.
|
|
|
|
|
|
2020-10-20 21:04:47 +02:00
|
|
|
Default: _monospace_ (*font*), _not set_ (*font-bold*,
|
|
|
|
|
*font-italic*, *font-bold-italic*).
|
2019-08-12 20:00:09 +02:00
|
|
|
|
2020-02-15 19:02:05 +01:00
|
|
|
*pad*
|
2020-04-25 22:39:53 +02:00
|
|
|
Padding between border and glyphs, in pixels (subject to output
|
|
|
|
|
scaling), on the form _XxY_. Default: _2x2_.
|
2019-08-23 17:26:41 +02:00
|
|
|
|
2020-09-08 19:17:29 +02:00
|
|
|
*initial-window-size-pixels*
|
|
|
|
|
Initial window width and height in _pixels_ (subject to output
|
|
|
|
|
scaling), on the form _WIDTHxHEIGHT_. The height _includes_ the
|
|
|
|
|
titlebar when using CSDs. Mutually exclusive to
|
|
|
|
|
*initial-window-size-chars*. Default: _700x500_.
|
|
|
|
|
|
|
|
|
|
*initial-window-size-chars*
|
|
|
|
|
Initial window width and height in _characters_, on the form
|
|
|
|
|
_WIDTHxHEIGHT_. Mutually exclusive to
|
2020-09-14 17:34:04 +02:00
|
|
|
*initial-window-size-pixels*.'
|
|
|
|
|
|
|
|
|
|
Note that if you have a multi-monitor setup, with different
|
|
|
|
|
scaling factors, there is a possibility the window size will not
|
|
|
|
|
be set correctly. If that is the case, use
|
|
|
|
|
*initial-window-size-pixels* instead.
|
|
|
|
|
|
|
|
|
|
Default: _not set_.
|
2020-09-08 19:17:29 +02:00
|
|
|
|
2020-03-28 12:04:00 +01:00
|
|
|
*initial-window-mode*
|
|
|
|
|
Initial window mode for each newly spawned window: *windowed*,
|
|
|
|
|
*maximized* or *fullscreen*. Default: _windowed_.
|
2020-03-26 19:39:12 +01:00
|
|
|
|
2020-09-08 19:17:29 +02:00
|
|
|
*geometry*
|
|
|
|
|
Deprecated. Alias for *initial-window-size-pixels*.
|
|
|
|
|
|
2019-08-12 20:00:09 +02:00
|
|
|
*shell*
|
2020-03-02 18:45:38 +01:00
|
|
|
Executable to launch. Typically a shell. Default: _$SHELL_ if set,
|
|
|
|
|
otherwise the user's default shell (as specified in
|
|
|
|
|
_/etc/passwd_). You can also pass arguments. For example
|
|
|
|
|
"/bin/bash --norc".
|
2020-02-20 18:49:23 +01:00
|
|
|
|
|
|
|
|
*login-shell*
|
2020-06-30 17:46:35 +02:00
|
|
|
Boolean. If enabled, the shell will be launched as a login shell,
|
|
|
|
|
by prepending a '-' to argv[0]. Default: _no_.
|
2019-08-12 20:00:09 +02:00
|
|
|
|
|
|
|
|
*term*
|
|
|
|
|
Value to set the environment variable *TERM* to. Default: _foot_.
|
|
|
|
|
|
2020-04-01 19:59:47 +02:00
|
|
|
*title*
|
|
|
|
|
Initial window title. Default: _foot_.
|
|
|
|
|
|
2020-04-01 18:40:51 +02:00
|
|
|
*app-id*
|
|
|
|
|
Value to set the *app-id* property on the Wayland window to. The
|
|
|
|
|
compositor can use this value to e.g. group multiple windows, or
|
|
|
|
|
apply window management rules. Default: _foot_.
|
|
|
|
|
|
2020-07-29 17:41:24 +02:00
|
|
|
*workers*
|
|
|
|
|
Number of threads to use for rendering. Set to 0 to disable
|
|
|
|
|
multithreading. Default: the number of available logical CPUs
|
|
|
|
|
(including SMT). Note that this is not always the best value. In
|
|
|
|
|
some cases, the number of physical _cores_ is better.
|
|
|
|
|
|
2020-10-08 19:55:32 +02:00
|
|
|
*bell*
|
|
|
|
|
Action to perform when receiving a *BEL* character. Can be set to
|
|
|
|
|
either *set-urgency* or *none*.
|
|
|
|
|
|
|
|
|
|
When set to *set-urgency*, the margins will be painted in red
|
|
|
|
|
whenever *BEL* is received while the window does *not* have
|
|
|
|
|
keyboard focus. Note that Wayland currently does not have an
|
|
|
|
|
_urgency_ hint like X11. The value *set-urgency* was chosen for
|
|
|
|
|
forward-compatibility in the hopes that a corresponding Wayland
|
|
|
|
|
protocol is added in the future (in which case foot will use that
|
|
|
|
|
instead of painting its margins red).
|
2020-10-09 07:39:53 +02:00
|
|
|
|
2020-10-11 17:44:29 +02:00
|
|
|
Applications can enable/disable this feature programatically with
|
|
|
|
|
the *CSI ? 1042 h* and *CSI ? 1042 l* escape sequences.
|
|
|
|
|
|
2020-10-09 07:39:53 +02:00
|
|
|
_Note_: expect this feature to be *replaced* with proper
|
|
|
|
|
compositor urgency support once/if that gets implemented.
|
|
|
|
|
|
2020-10-08 19:55:32 +02:00
|
|
|
When set to *none*, no special action is taken when receiving *BEL*.
|
|
|
|
|
|
|
|
|
|
Default: _none_.
|
|
|
|
|
|
2020-10-09 19:44:23 +02:00
|
|
|
*word-delimiters*
|
|
|
|
|
String of characters that act as word delimiters when selecting
|
2020-10-09 19:50:56 +02:00
|
|
|
text. Note that whitespace characters are _always_ word
|
|
|
|
|
delimiters, regardless of this setting. Default: _,│`|:"'()[]{}<>_
|
2020-10-09 19:44:23 +02:00
|
|
|
|
2020-07-29 17:41:24 +02:00
|
|
|
|
|
|
|
|
# SECTION: scrollback
|
|
|
|
|
|
|
|
|
|
*lines*
|
2020-10-08 19:54:06 +02:00
|
|
|
Number of scrollback lines. The maximum number of allocated lines
|
|
|
|
|
will be this value plus the number of visible lines, rounded up to
|
|
|
|
|
the nearest power of 2. Default: _1000_.
|
2019-08-12 20:00:09 +02:00
|
|
|
|
2020-08-03 19:43:06 +02:00
|
|
|
*multiplier*
|
|
|
|
|
Amount to multiply mouse scrolling with. It is a decimal number,
|
2020-09-29 09:50:17 +02:00
|
|
|
i.e. fractions are allowed. Default: _3.0_.
|
2020-08-03 19:43:06 +02:00
|
|
|
|
2020-07-29 17:41:24 +02:00
|
|
|
*indicator-position*
|
2020-07-25 14:31:45 +02:00
|
|
|
Configures the style of the scrollback position indicator. One of
|
2020-07-25 14:40:46 +02:00
|
|
|
*none*, *fixed* or *relative*. *none* disables the indicator
|
2020-10-08 19:53:49 +02:00
|
|
|
completely. *fixed* always renders the indicator near the top of
|
2020-07-25 14:38:36 +02:00
|
|
|
the window, and *relative* renders the indicator at the position
|
2020-07-25 14:31:45 +02:00
|
|
|
corresponding to the current scrollback position. Default:
|
2020-07-25 14:38:36 +02:00
|
|
|
_relative_.
|
2020-07-24 18:20:26 +02:00
|
|
|
|
2020-07-29 17:41:24 +02:00
|
|
|
*indicator-format*
|
2020-07-24 18:34:19 +02:00
|
|
|
Which format to use when displaying the scrollback position
|
2020-07-28 19:56:53 +02:00
|
|
|
indicator. Either _percentage_, _line_, or a custom fixed
|
|
|
|
|
string. This option is ignored if
|
2020-07-29 17:41:24 +02:00
|
|
|
*indicator-position=none*. Default: _empty string_.
|
2019-08-12 20:00:09 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
# SECTION: cursor
|
|
|
|
|
|
2020-03-02 18:47:48 +01:00
|
|
|
This section controls the cursor style and color. Note that
|
2020-07-12 20:23:54 +02:00
|
|
|
applications can change these at runtime.
|
2020-03-02 18:47:48 +01:00
|
|
|
|
2019-08-12 20:00:09 +02:00
|
|
|
*style*
|
2019-11-03 16:28:00 +01:00
|
|
|
Configures the default cursor style, and is one of: _block_, _bar_
|
2020-06-30 17:45:34 +02:00
|
|
|
or _underline_. Note that this can be overridden by
|
|
|
|
|
applications. Default: _block_.
|
|
|
|
|
|
|
|
|
|
*blink*
|
|
|
|
|
Boolean. Enables blinking cursor. Note that this can be overridden
|
|
|
|
|
by applications. Default: _no_.
|
2019-08-12 20:00:09 +02:00
|
|
|
|
|
|
|
|
*color*
|
|
|
|
|
Two RRGGBB values specifying the foreground (text) and background
|
|
|
|
|
(cursor) colors for the cursor. Default: inversed foreground and
|
|
|
|
|
background colors. Note that this value only applies to the block
|
|
|
|
|
cursor. The other cursor styles are always rendered with the
|
|
|
|
|
foreground color.
|
|
|
|
|
|
2020-08-04 07:33:15 +02:00
|
|
|
|
|
|
|
|
# SECTION: mouse
|
|
|
|
|
|
|
|
|
|
*hide-when-typing*
|
|
|
|
|
Boolean. When enabled, the mouse cursor is hidden while typing.
|
|
|
|
|
|
2020-09-15 19:09:00 +02:00
|
|
|
*alternate-scroll-mode*
|
|
|
|
|
Boolean. This option controls the initial value for the _alternate
|
|
|
|
|
scroll mode_. When this mode is enabled, mouse scroll events are
|
|
|
|
|
translated to _up_/_down_ key events when displaying the alternate
|
|
|
|
|
screen.
|
|
|
|
|
|
|
|
|
|
This lets you scroll with the mouse in e.g. pagers (like _less_)
|
|
|
|
|
without enabling native mouse support in them.
|
|
|
|
|
|
|
|
|
|
Alternate scrolling is *not* used if the application enables
|
|
|
|
|
native mouse support.
|
|
|
|
|
|
|
|
|
|
This option can be modified by applications at run-time using the
|
2020-09-16 08:05:38 +02:00
|
|
|
escape sequences *CSI ? 1007 h* (enable) and *CSI ? 1007 l*
|
2020-09-15 19:09:00 +02:00
|
|
|
(disable).
|
|
|
|
|
|
|
|
|
|
Default: _yes_.
|
|
|
|
|
|
2020-08-04 07:33:15 +02:00
|
|
|
|
2019-08-12 20:00:09 +02:00
|
|
|
# SECTION: colors
|
|
|
|
|
|
2020-03-02 18:47:48 +01:00
|
|
|
This section controls the 16 ANSI colors and the default foreground
|
2020-07-12 20:23:54 +02:00
|
|
|
and background colors. Note that applications can change these at
|
|
|
|
|
runtime.
|
2020-03-02 18:47:48 +01:00
|
|
|
|
2020-03-02 20:29:28 +01:00
|
|
|
The colors are in RRGGBB format. That is, they do *not* have an alpha
|
|
|
|
|
component. You can configure the background transparency with the
|
|
|
|
|
_alpha_ option.
|
|
|
|
|
|
2019-08-12 20:00:09 +02:00
|
|
|
*foreground*
|
|
|
|
|
Default RRGGBB foreground color. This is the color used when no
|
|
|
|
|
ANSI color is being used. Default: _dcdccc_.
|
|
|
|
|
|
|
|
|
|
*background*
|
|
|
|
|
Default RRGGBB background color. This is the color used when no
|
|
|
|
|
ANSI color is being used. Default: _111111_.
|
|
|
|
|
|
|
|
|
|
*regular0*, *regular1* *..* *regular7*
|
2019-09-21 12:09:50 +02:00
|
|
|
The eight basic ANSI colors. Default: _222222_, _cc9393_,
|
2019-08-12 20:00:09 +02:00
|
|
|
_7f9f7f_, _d0bf8f_, _6ca0a3_, _dc8cc3_, _93e0e3_ and _dcdccc_ (a
|
|
|
|
|
variant of the _zenburn_ theme).
|
|
|
|
|
|
|
|
|
|
*bright0*, *bright1* *..* *bright7*
|
2019-08-23 19:42:14 +02:00
|
|
|
The eight bright ANSI colors. Default: _666666_, _dca3a3_,
|
2019-09-21 12:09:50 +02:00
|
|
|
_bfebbf_, _f0dfaf_, _8cd0d3_, _fcace3_, _b3ffff_ and _ffffff_ (a
|
2019-08-12 20:00:09 +02:00
|
|
|
variant of the _zenburn_ theme).
|
|
|
|
|
|
2019-08-15 18:15:43 +02:00
|
|
|
*alpha*
|
|
|
|
|
Background translucency. A value in the range 0.0-1.0, where 0.0
|
|
|
|
|
means completely transparent, and 1.0 is opaque. Default: _1.0_.
|
|
|
|
|
|
2020-08-12 18:53:32 +02:00
|
|
|
*selection-foreground*, *selection-background*
|
|
|
|
|
Foreground (text) and background color to use in selected
|
|
|
|
|
text. Note that *both* options must be set, or the default will be
|
|
|
|
|
used. Default: _inverse foreground/background_.
|
|
|
|
|
|
2020-08-04 07:33:15 +02:00
|
|
|
|
2020-03-02 18:42:49 +01:00
|
|
|
# SECTION: csd
|
|
|
|
|
|
|
|
|
|
This section controls the look of the _CSDs_ (Client Side
|
|
|
|
|
Decorations). Note that the default is to *not* use CSDs, but instead
|
|
|
|
|
to use _SSDs_ (Server Side Decorations) when the compositor supports
|
|
|
|
|
it.
|
|
|
|
|
|
2020-03-02 20:29:28 +01:00
|
|
|
Note that unlike the colors defined in the _colors_ section, the color
|
|
|
|
|
values here are in AARRGGBB format. I.e. they contain an alpha
|
|
|
|
|
component.
|
|
|
|
|
|
2020-03-02 18:42:49 +01:00
|
|
|
*preferred*
|
2020-10-10 11:04:17 +02:00
|
|
|
Which type of window decorations to prefer: *client* (CSD),
|
|
|
|
|
*server* (SSD) or *none*.
|
|
|
|
|
|
|
|
|
|
Note that this is only a hint to the compositor. Depending on
|
|
|
|
|
compositor support, and how it has been configured, it may
|
|
|
|
|
instruct foot to use CSDs even though this option has been set to
|
2020-10-10 11:12:48 +02:00
|
|
|
*server*, or render SSDs despite *client* or *none* being set.
|
2020-10-10 11:14:01 +02:00
|
|
|
|
|
|
|
|
Default: _server_.
|
2020-03-02 18:42:49 +01:00
|
|
|
|
2020-03-03 18:18:59 +01:00
|
|
|
*size*
|
|
|
|
|
Height, in pixels (subject to output scaling), of the
|
|
|
|
|
titlebar. Default: _26_.
|
2020-03-02 18:42:49 +01:00
|
|
|
|
2020-03-03 18:18:59 +01:00
|
|
|
*color*
|
2020-03-02 20:29:28 +01:00
|
|
|
Titlebar AARRGGBB color. Default: use the default _foreground_
|
|
|
|
|
color.
|
2020-03-02 18:42:49 +01:00
|
|
|
|
2020-03-02 20:29:28 +01:00
|
|
|
*button-width*
|
2020-03-03 18:18:59 +01:00
|
|
|
Width, in pixels (subject to output scaling), of the
|
2020-03-06 19:11:31 +01:00
|
|
|
minimize/maximize/close buttons. Default: _26_.
|
2020-03-02 20:29:28 +01:00
|
|
|
|
|
|
|
|
*button-minimize-color*
|
2020-04-29 20:06:16 +02:00
|
|
|
Minimize button's AARRGGBB color. Default: use the default
|
|
|
|
|
_regular4_ color (blue).
|
2020-03-02 20:29:28 +01:00
|
|
|
|
|
|
|
|
*button-maximize-color*
|
2020-04-29 20:06:16 +02:00
|
|
|
Maximize button's AARRGGBB color. Default: use the default
|
|
|
|
|
_regular2_ color (green).
|
2020-03-02 20:29:28 +01:00
|
|
|
|
|
|
|
|
*button-close-color*
|
2020-04-29 20:06:16 +02:00
|
|
|
Close button's AARRGGBB color. Default: use the default _regular1_
|
|
|
|
|
color (red).
|
2020-03-02 18:42:49 +01:00
|
|
|
|
2020-08-04 07:33:15 +02:00
|
|
|
|
2020-03-09 20:22:04 +01:00
|
|
|
# SECTION: key-bindings
|
|
|
|
|
|
|
|
|
|
This section lets you override the default key bindings.
|
|
|
|
|
|
2020-03-12 17:42:27 +01:00
|
|
|
The general format is _action=combo1...comboN_. That is, each action
|
|
|
|
|
may have one or more key combinations, space separated. Each
|
|
|
|
|
combination is on the form _mod1+mod2+key_. The names of the modifiers
|
2020-07-27 16:45:34 +02:00
|
|
|
and the key *must* be valid XKB key names.
|
2020-03-09 20:22:04 +01:00
|
|
|
|
|
|
|
|
Note that if *Shift* is one of the modifiers, the _key_ *must* be in
|
2020-03-12 17:42:27 +01:00
|
|
|
upper case. For example, *Control+Shift+v* will never trigger -
|
|
|
|
|
*Control+Shift+V* is the correct way to write it.
|
2020-03-09 20:22:04 +01:00
|
|
|
|
2020-03-12 10:46:27 +01:00
|
|
|
Note that *Alt* is usually called *Mod1*.
|
2020-03-09 20:22:04 +01:00
|
|
|
|
2020-03-12 17:16:35 +01:00
|
|
|
A key combination can only be mapped to *one* action. Lets say you
|
2020-03-12 17:42:27 +01:00
|
|
|
want to bind *Control+Shift+R* to *fullscreen*. Since this is the
|
2020-03-12 17:16:35 +01:00
|
|
|
default shortcut for *search-start*, you first need to unmap the
|
2020-03-18 14:52:04 +01:00
|
|
|
default binding. This can be done by setting _action=none_;
|
|
|
|
|
e.g. *search-start=none*.
|
2020-03-12 17:16:35 +01:00
|
|
|
|
2020-09-10 18:17:47 +02:00
|
|
|
*scrollback-up-page*
|
2020-09-09 19:40:48 +02:00
|
|
|
Scrolls up/back one page in history. Default: _Shift+Page\_Up_.
|
|
|
|
|
|
2020-09-10 18:17:47 +02:00
|
|
|
*scrollback-up-half-page*
|
|
|
|
|
Scrolls up/back half of a page in history. Default: _not set_.
|
2020-03-09 20:22:04 +01:00
|
|
|
|
2020-09-10 18:17:47 +02:00
|
|
|
*scrollback-up-line*
|
|
|
|
|
Scrolls up/back a single line in history. Default: _not set_.
|
|
|
|
|
|
|
|
|
|
*scrollback-down-page*
|
2020-09-09 19:40:48 +02:00
|
|
|
Scroll down/forward one page in history. Default:
|
|
|
|
|
_Shift+Page\_Down_.
|
|
|
|
|
|
2020-09-10 18:17:47 +02:00
|
|
|
*scrollback-down-half-page*
|
|
|
|
|
Scroll down/forward half of a page in history. Default: _not set_.
|
|
|
|
|
|
|
|
|
|
*scrollback-down-line*
|
|
|
|
|
Scroll down/forward a single line in history. Default: _not set_.
|
2020-03-09 20:22:04 +01:00
|
|
|
|
|
|
|
|
*clipboard-copy*
|
|
|
|
|
Copies the current selection into the _clipboard_. Default: _Control+Shift+C_.
|
|
|
|
|
|
|
|
|
|
*clipboard-paste*
|
|
|
|
|
Pastes from the _clipboard_. Default: _Control+Shift+V_.
|
|
|
|
|
|
|
|
|
|
*primary-paste*
|
2020-10-10 10:27:42 +02:00
|
|
|
Pastes from the _primary selection_. Default: _Shift+Insert_ (also
|
|
|
|
|
defined in *mouse-bindings*).
|
2020-03-09 20:22:04 +01:00
|
|
|
|
|
|
|
|
*search-start*
|
|
|
|
|
Starts a scrollback/history search. Default: _Control+Shift+R_.
|
|
|
|
|
|
|
|
|
|
*font-increase*
|
|
|
|
|
Increases the font size by 0.5pt. Default: _Control+plus
|
|
|
|
|
Control+equal Control+KP\_Add_.
|
|
|
|
|
|
|
|
|
|
*font-decrease*
|
|
|
|
|
Decreases the font size by 0.5pt. Default: _Control+minus
|
|
|
|
|
Control+KP\_Subtract_.
|
|
|
|
|
|
|
|
|
|
*font-reset*
|
|
|
|
|
Resets the font size to the default. Default: _Control+0 Control+KP\_0_.
|
|
|
|
|
|
|
|
|
|
*spawn-terminal*
|
2020-03-17 21:53:26 +01:00
|
|
|
Spawns a new terminal. If the shell has been configured to emit
|
|
|
|
|
the OSC 7 escape sequence, the new terminal will start in the
|
|
|
|
|
current working directory. Default: _Control+Shift+N_.
|
2020-03-09 20:22:04 +01:00
|
|
|
|
2020-03-12 09:34:09 +01:00
|
|
|
*minimize*
|
|
|
|
|
Minimizes the window. Default: _not bound_.
|
|
|
|
|
|
|
|
|
|
*maximize*
|
|
|
|
|
Toggle the maximized state. Default: _not bound_.
|
|
|
|
|
|
|
|
|
|
*fullscreen*
|
|
|
|
|
Toggles the fullscreen state. Default: _not bound_.
|
|
|
|
|
|
2020-07-31 17:02:53 +02:00
|
|
|
*pipe-visible*, *pipe-scrollback*, *pipe-selected*
|
|
|
|
|
Pipes the currently visible text, the entire scrollback, or the
|
|
|
|
|
currently selected text to an external tool. The syntax for this
|
|
|
|
|
option is a bit special; the first part of the value is the
|
|
|
|
|
command to execute enclosed in "[]", followed by the binding(s).
|
2020-07-15 17:48:37 +02:00
|
|
|
|
|
|
|
|
You can configure multiple pipes as long as the command strings
|
|
|
|
|
are different and the key bindings are unique.
|
|
|
|
|
|
|
|
|
|
Note that the command is *not* automatically run inside a shell;
|
|
|
|
|
use *sh -c "command line"* if you need that.
|
|
|
|
|
|
|
|
|
|
Example:
|
2020-07-29 17:32:55 +02:00
|
|
|
*pipe-visible=[sh -c "xurls | uniq | tac | bemenu | xargs -r
|
|
|
|
|
firefox"] Control+Print*
|
2020-07-15 17:48:37 +02:00
|
|
|
|
|
|
|
|
Default: _not bound_
|
|
|
|
|
|
2020-08-04 07:33:15 +02:00
|
|
|
|
2020-07-29 17:27:01 +02:00
|
|
|
# SECTION: search-bindings
|
|
|
|
|
|
|
|
|
|
This section lets you override the default key bindings used in
|
|
|
|
|
scrollback search mode. The syntax is exactly the same as the regular
|
|
|
|
|
**key-bindings**.
|
|
|
|
|
|
|
|
|
|
*cancel*
|
|
|
|
|
Aborts the search. The viewport is restored and the _primary
|
|
|
|
|
selection_ is **not** updated. Default: _Control+g Escape_.
|
|
|
|
|
|
|
|
|
|
*commit*
|
|
|
|
|
Exit search mode and copy current selection into the _primary
|
|
|
|
|
selection_. Viewport is **not** restored. To copy the selection to
|
|
|
|
|
the regular _clipboard_, use *Control+Shift+C*. Default: _Return_.
|
|
|
|
|
|
|
|
|
|
*find-prev*
|
|
|
|
|
Search **backwards** in the scrollback history for the next
|
|
|
|
|
match. Default: _Control+r_.
|
|
|
|
|
|
|
|
|
|
*find-next*
|
2020-08-15 17:44:11 +02:00
|
|
|
Searches **forwards** in the scrollback history for the next
|
2020-07-29 17:27:01 +02:00
|
|
|
match. Default: _Control+s_.
|
|
|
|
|
|
|
|
|
|
*cursor-left*
|
|
|
|
|
Moves the cursor in the search box one **character** to the
|
|
|
|
|
left. Default: _Left Control+b_.
|
|
|
|
|
|
|
|
|
|
*cursor-left-word*
|
|
|
|
|
Moves the cursor in the search box one **word** to the
|
|
|
|
|
left. Default: _Control+Left Mod1+b_.
|
|
|
|
|
|
|
|
|
|
*cursor-right*
|
|
|
|
|
Moves the cursor in the search box one **character** to the
|
|
|
|
|
right. Default: _Right Control+f_.
|
|
|
|
|
|
|
|
|
|
*cursor-right-word*
|
|
|
|
|
Moves the cursor in the search box one **word** to the
|
|
|
|
|
right. Default: _Control+Left Mod1+b_.
|
|
|
|
|
|
|
|
|
|
*cursor-home*
|
|
|
|
|
Moves the cursor in the search box to the beginning of the
|
|
|
|
|
input. Default: _Home Control+a_.
|
|
|
|
|
|
|
|
|
|
*cursor-end*
|
|
|
|
|
Moves the cursor in the search box to the end of the
|
|
|
|
|
input. Default: _End Control+e_.
|
|
|
|
|
|
|
|
|
|
*delete-prev*
|
|
|
|
|
Deletes the **character before** the cursor. Default: _BackSpace_.
|
|
|
|
|
|
|
|
|
|
*delete-prev-word*
|
|
|
|
|
Deletes the **word before** the cursor. Default: _Mod1+BackSpace
|
|
|
|
|
Control+BackSpace_.
|
|
|
|
|
|
|
|
|
|
*delete-next*
|
|
|
|
|
Deletes the **character after** the cursor. Default: _Delete_.
|
|
|
|
|
|
|
|
|
|
*delete-next-word*
|
|
|
|
|
Deletes the **word after** the cursor. Default: _Mod1+b
|
|
|
|
|
Control+Delete_.
|
|
|
|
|
|
|
|
|
|
*extend-to-word-boundary*
|
|
|
|
|
Extend current selection to the next word boundary. Default:
|
|
|
|
|
_Control+w_.
|
|
|
|
|
|
|
|
|
|
*extend-to-next-whitespace*
|
|
|
|
|
Extend the current selection to the next whitespace. Default:
|
|
|
|
|
_Control+Shift+W_.
|
|
|
|
|
|
2020-11-01 12:39:57 +01:00
|
|
|
*clipboard-paste*
|
|
|
|
|
Paste from the _clipboard_ into the search buffer. Default:
|
|
|
|
|
_Control+v Control+y_.
|
|
|
|
|
|
|
|
|
|
*primary-paste*
|
|
|
|
|
Paste from the _primary selection_ into the search
|
|
|
|
|
buffer. Default: _Shift+Insert_.
|
2020-07-29 17:27:01 +02:00
|
|
|
|
2020-03-12 10:20:05 +01:00
|
|
|
# SECTION: mouse-bindings
|
|
|
|
|
|
|
|
|
|
This section lets you override the default mouse bindings.
|
|
|
|
|
|
2020-08-10 19:41:27 +02:00
|
|
|
The general format is _action=combo1...comboN_. That is, each action
|
|
|
|
|
may have one or more key combinations, space separated. Each
|
2020-08-11 10:30:27 +02:00
|
|
|
combination is on the form _mod1+mod2+BTN\_<name>[-COUNT]_. The names
|
|
|
|
|
of the modifiers *must* be valid XKB key names, and the button name
|
|
|
|
|
*must* be a valid libinput name. You can find the button names using
|
|
|
|
|
*libinput debug-events*.
|
2020-08-10 19:44:01 +02:00
|
|
|
|
2020-08-11 10:44:27 +02:00
|
|
|
Note that *Shift* cannot be used as a modifier in mouse bindings since
|
|
|
|
|
it is used to enable selection when the client application is grabbing
|
|
|
|
|
the mouse.
|
|
|
|
|
|
2020-08-10 19:44:01 +02:00
|
|
|
The trailing *COUNT* is optional and specifies the click count
|
2020-08-11 10:30:27 +02:00
|
|
|
required to trigger the binding. The default if *COUNT* is omitted is
|
2020-08-10 19:44:01 +02:00
|
|
|
_1_.
|
|
|
|
|
|
2020-08-11 10:30:27 +02:00
|
|
|
A modifier+button combination can only be mapped to *one* action. Lets
|
|
|
|
|
say you want to bind *BTN\_MIDDLE* to *fullscreen*. Since
|
|
|
|
|
*BTN\_MIDDLE* is the default binding for *primary-paste*, you first
|
|
|
|
|
need to unmap the default binding. This can be done by setting
|
|
|
|
|
_action=none_; e.g. *primary-paste=none*.
|
2020-03-12 10:46:27 +01:00
|
|
|
|
2020-03-12 17:24:54 +01:00
|
|
|
All actions listed under *key-bindings* can be user here as well.
|
|
|
|
|
|
2020-08-11 10:03:14 +02:00
|
|
|
*select-begin*
|
|
|
|
|
Begin an interactive selection. The selection is finalized, and
|
|
|
|
|
copied to the _primary selection_, when the button is
|
2020-08-11 10:17:19 +02:00
|
|
|
released. Default: _BTN\_LEFT_.
|
|
|
|
|
|
|
|
|
|
*select-begin-block*
|
|
|
|
|
Begin an interactive block selection. The selection is finalized,
|
|
|
|
|
and copied to the _primary selection_, when the button is
|
|
|
|
|
released. Default: _Control+BTN\_LEFT_.
|
2020-08-11 10:03:14 +02:00
|
|
|
|
|
|
|
|
*select-extend*
|
|
|
|
|
Interactively extend an existing selection. The selection is
|
|
|
|
|
finalized, and copied to the _primary selection_, when the button
|
|
|
|
|
is released. Default: _BTN\_RIGHT_.
|
|
|
|
|
|
|
|
|
|
*select-word*
|
|
|
|
|
Select the _word_ (separated by spaces, period, comma, parenthesis
|
|
|
|
|
etc) under the pointer. Default: _BTN\_LEFT-2_.
|
|
|
|
|
|
|
|
|
|
*select-word-whitespace*
|
|
|
|
|
Select the _word_ (separated by spaces _only_) under the
|
|
|
|
|
pointer. Default: Control+_BTN\_LEFT-2_.
|
|
|
|
|
|
2020-08-11 10:17:19 +02:00
|
|
|
*select-row*
|
|
|
|
|
Select the whole row under the pointer. Default: _BTN\_LEFT-3_.
|
|
|
|
|
|
2020-03-12 10:20:05 +01:00
|
|
|
*primary-paste*
|
2020-03-12 17:42:27 +01:00
|
|
|
Pastes from the _primary selection_. Default: _BTN\_MIDDLE_.
|
2020-03-12 10:20:05 +01:00
|
|
|
|
|
|
|
|
|
2019-08-12 20:00:09 +02:00
|
|
|
# FONT FORMAT
|
|
|
|
|
|
|
|
|
|
The font is specified in FontConfig syntax. That is, a colon-separated
|
|
|
|
|
list of font name and font options.
|
|
|
|
|
|
|
|
|
|
_Examples_:
|
|
|
|
|
- Dina:weight=bold:slant=italic
|
2019-09-21 20:43:29 +02:00
|
|
|
- Courier New:size=12
|
2020-03-30 17:31:31 +02:00
|
|
|
|
2020-10-07 18:38:54 +02:00
|
|
|
# TWEAK
|
2020-03-30 17:31:31 +02:00
|
|
|
|
2020-04-25 22:40:19 +02:00
|
|
|
This section is for advanced users and describes configuration options
|
2020-03-30 17:31:31 +02:00
|
|
|
that can be used to tweak foot's low-level behavior.
|
|
|
|
|
|
|
|
|
|
These options are *not* included in the example configuration. You
|
|
|
|
|
should not change these unless you understand what they do and note
|
|
|
|
|
that changing the default values *will* print a warning when launching
|
|
|
|
|
foot.
|
|
|
|
|
|
2020-09-13 17:59:56 +02:00
|
|
|
Note that these options may change, or be removed at any time, without
|
|
|
|
|
prior notice.
|
|
|
|
|
|
2020-03-30 17:31:31 +02:00
|
|
|
When reporting bugs, please mention if, and to what, you have changed
|
|
|
|
|
any of these options.
|
|
|
|
|
|
2020-09-13 17:59:56 +02:00
|
|
|
*scaling-filter*
|
|
|
|
|
Overrides the default scaling filter used when down-scaling bitmap
|
|
|
|
|
fonts (e.g. emoji fonts). Possible values are *none*, *nearest*,
|
|
|
|
|
*bilinear*, *cubic* or *lanczos3*. *cubic* and *lanczos3* produce
|
|
|
|
|
the best results, but are slower (with *lanczos3* being the best
|
|
|
|
|
_and_ slowest).
|
|
|
|
|
|
|
|
|
|
Default: _lanczos3_.
|
|
|
|
|
|
2020-09-03 17:37:44 +02:00
|
|
|
*allow-overflowing-double-width-glyphs*
|
2020-09-06 17:52:07 +02:00
|
|
|
Boolean. when enabled, double width glyphs with a character width
|
|
|
|
|
of 1 are allowed to overflow into the neighbouring cell.
|
2020-09-03 17:37:44 +02:00
|
|
|
|
|
|
|
|
One use case for this is fonts "icon" characters in the Unicode
|
|
|
|
|
private usage area, e.g. Nerd Fonts, or Powerline Fonts. Without
|
|
|
|
|
this option, such glyphs will appear "cut off".
|
2020-09-05 09:38:48 +02:00
|
|
|
|
2020-09-03 17:37:44 +02:00
|
|
|
Another use case are legacy emoji characters like *WHITE FROWNING
|
|
|
|
|
FACE*.
|
|
|
|
|
|
|
|
|
|
Note: this feature uses _heuristics_ to determine *which* glyphs
|
|
|
|
|
should be allowed to overflow.
|
|
|
|
|
|
|
|
|
|
Default: _false_.
|
|
|
|
|
|
2020-08-13 18:35:17 +02:00
|
|
|
*render-timer*
|
|
|
|
|
Enables a frame rendering timer, that prints the time it takes to
|
|
|
|
|
render each frame, in microseconds, either on-screen, to stderr,
|
|
|
|
|
or both. Valid values are *none*, *osd*, *log* and
|
|
|
|
|
*both*. Default: _none_.
|
|
|
|
|
|
2020-03-30 17:31:31 +02:00
|
|
|
*delayed-render-lower*, *delayed-render-upper*
|
|
|
|
|
These two values control the timeouts (in nanoseconds) that are
|
|
|
|
|
used to mitigate screen flicker caused by clients writing large,
|
|
|
|
|
non-atomic screen updates.
|
2020-03-30 20:21:23 +02:00
|
|
|
|
2020-04-25 22:40:29 +02:00
|
|
|
If a client splits up a screen update over multiple *write*(3)
|
|
|
|
|
calls, we may end up rendering an intermediate frame, quickly
|
2020-03-30 17:31:31 +02:00
|
|
|
followed by another frame with the final screen content. For
|
|
|
|
|
example, the client may erase part of the screen (or scroll) in
|
|
|
|
|
one write, and then write new content in one or more subsequent
|
|
|
|
|
writes. Rendering the frame when the screen has been erased, but
|
|
|
|
|
not yet filled with new content will be perceived as screen
|
|
|
|
|
flicker.
|
|
|
|
|
|
|
|
|
|
The *real* solution to this is _Application Synchronized Updates_
|
|
|
|
|
(https://gitlab.freedesktop.org/terminal-wg/specifications/-/merge_requests/2).
|
|
|
|
|
|
|
|
|
|
The problem with this is twofold - first, it has not yet been
|
|
|
|
|
standardized, and thus there are not many terminal emulators that
|
|
|
|
|
implement it (foot *does* implement it), and second, applications
|
|
|
|
|
must be patched to use it.
|
|
|
|
|
|
|
|
|
|
Until this has happened, foot offers an interim workaround; an
|
|
|
|
|
attempt to mitigate the screen flicker *without* affecting neither
|
|
|
|
|
performance nor latency.
|
|
|
|
|
|
|
|
|
|
It is based on the fact that the screen is updated at a fixed
|
|
|
|
|
interval (typically 60Hz). For us, this means it does not matter
|
|
|
|
|
if we render a new frame at the *beginning* of a frame interval,
|
|
|
|
|
or at the *end*. Thus, the goal is to introduce a delay between
|
|
|
|
|
receiving client data and rendering the resulting state, but
|
|
|
|
|
without causing a frame skip.
|
|
|
|
|
|
|
|
|
|
While it should be possible to estimate the amount of time left
|
|
|
|
|
until the next frame, foot's algorithm is currently not that
|
|
|
|
|
advanced, but is based on statistics I guess you could say - the
|
2020-03-30 20:21:23 +02:00
|
|
|
delay we introduce is so small that the risk of pushing the frame
|
|
|
|
|
over to the next frame interval is also very small.
|
2020-03-30 17:31:31 +02:00
|
|
|
|
2020-08-15 23:29:38 +02:00
|
|
|
Now, that was a lot of text. But what is it foot actually does?
|
2020-03-30 17:31:31 +02:00
|
|
|
|
|
|
|
|
When receiving client data, it schedules a timer, the
|
2020-07-25 09:41:50 +02:00
|
|
|
*delayed-render-lower*. If we do not receive any more client data
|
2020-03-30 17:31:31 +02:00
|
|
|
before the timer has run out, we render the frame. If however, we
|
|
|
|
|
do receive more data, the timer is re-scheduled. That is, each
|
|
|
|
|
time we receive client data, frame rendering is delayed another
|
|
|
|
|
*delayed-render-lower* nanoseconds.
|
|
|
|
|
|
|
|
|
|
Now, while this works very well with most clients, it would be
|
|
|
|
|
possible to construct a malicious client that keeps writing data
|
|
|
|
|
at a slow pace. To the user, this would look like foot has frozen
|
|
|
|
|
as we never get to render a new frame. To prevent this, an upper
|
|
|
|
|
limit is set - *delayed-render-upper*. If this timer runs out, we
|
|
|
|
|
render the frame regardless of what the client is doing.
|
|
|
|
|
|
|
|
|
|
If changing these values, note that the lower timeout *must* be
|
|
|
|
|
set lower than the upper timeout, but that this is not verified by
|
|
|
|
|
foot. Furthermore, both values must be less than 16ms (that is,
|
|
|
|
|
16000000 nanoseconds).
|
|
|
|
|
|
2020-08-15 23:29:38 +02:00
|
|
|
You can disable the feature altogether by setting either value to
|
2020-03-30 17:31:31 +02:00
|
|
|
0. In this case, frames are rendered "as soon as possible".
|
|
|
|
|
|
|
|
|
|
Default: lower=_500000_ (0.5ms), upper=_8333333_ (8.3ms - half a
|
|
|
|
|
frame interval).
|
|
|
|
|
|
2020-09-06 17:52:07 +02:00
|
|
|
*damage-whole-window*
|
|
|
|
|
Boolean. When enabled, foot will 'damage' the entire window each
|
|
|
|
|
time a frame has been rendered. This forces the compositor to
|
|
|
|
|
redraw the entire window. If disabled, foot will only 'damage'
|
|
|
|
|
updated rows.
|
|
|
|
|
|
|
|
|
|
There is normally *no* reason to enable this. However, it has been
|
|
|
|
|
seen to workaround an issue with _fractional scaling_ in _Gnome_.
|
|
|
|
|
|
|
|
|
|
Note that enabling this option is likely to increase CPU and/or
|
|
|
|
|
GPU usage (by the compositor, not by foot), and may have a
|
|
|
|
|
negative impact on battery life.
|
|
|
|
|
|
|
|
|
|
Default: _false_.
|
|
|
|
|
|
2020-03-30 17:31:31 +02:00
|
|
|
*max-shm-pool-size-mb*
|
|
|
|
|
This option controls the amount of *virtual* memory used by the
|
2020-03-30 20:21:23 +02:00
|
|
|
pixmap memory to which the terminal screen content is rendered.
|
2020-03-30 17:31:31 +02:00
|
|
|
|
|
|
|
|
It does *not* change how much physical memory foot uses.
|
|
|
|
|
|
|
|
|
|
Foot uses a memory mapping trick to implement fast rendering of
|
2020-03-30 20:21:23 +02:00
|
|
|
interactive scrolling (typically, but applies to "slow" scrolling
|
|
|
|
|
in general). Example: holding down the 'up' or 'down' arrow key to
|
2020-03-30 17:31:31 +02:00
|
|
|
scroll in a text editor.
|
|
|
|
|
|
|
|
|
|
For this to work, it needs a large amount of virtual address
|
|
|
|
|
space. Again, note that this is *not* physical memory.
|
|
|
|
|
|
|
|
|
|
On a normal x64 based computer, each process has 128TB of virtual
|
|
|
|
|
address space, and newer ones have 64PB. This is an insane amount
|
|
|
|
|
and most applications do not use anywhere near that amount.
|
|
|
|
|
|
|
|
|
|
Each foot terminal window can allocate up to 2GB of virtual
|
|
|
|
|
address space. With 128TB of address space, that means a maximum
|
|
|
|
|
of 65536 windows in server/daemon mode (for 2GB). That should be
|
|
|
|
|
enough, yes?
|
2020-03-30 20:21:23 +02:00
|
|
|
|
2020-03-30 17:31:31 +02:00
|
|
|
However, the Wayland compositor *also* needs to allocate the same
|
|
|
|
|
amount of virtual address space. Thus, it has a slightly higher
|
|
|
|
|
chance of running out of address space since it needs to host
|
|
|
|
|
*all* running Wayland clients in the same way, at the same time.
|
|
|
|
|
|
|
|
|
|
In the off chance that this becomes a problem for you, you can
|
|
|
|
|
reduce the amount used with this option.
|
|
|
|
|
|
|
|
|
|
Or, for optimal performance, you can increase it to the maximum
|
|
|
|
|
allowed value, 2GB (but note that you most likely will not notice
|
|
|
|
|
any difference compared to the default value).
|
|
|
|
|
|
2020-09-06 09:34:58 +02:00
|
|
|
Setting it to 0 disables the feature.
|
|
|
|
|
|
2020-03-30 20:21:23 +02:00
|
|
|
Note: this feature is always disabled in 32-bit.
|
|
|
|
|
|
2020-03-30 17:31:31 +02:00
|
|
|
Default: _512_. Maximum allowed: _2048_ (2GB).
|
2020-07-27 20:06:54 +02:00
|
|
|
|
|
|
|
|
# SEE ALSO
|
|
|
|
|
|
|
|
|
|
*foot*(1), *footclient*(1)
|