Bring back old whitespaces

This commit is contained in:
Utkarsh Verma 2022-06-02 13:39:28 +05:30
parent 1b8cb9ef91
commit 4c0701368d
No known key found for this signature in database
GPG key ID: 817656CF818EFCCC

View file

@ -44,77 +44,77 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
options. Most noteworthy is *:size=n*, which is used to set the options. Most noteworthy is *:size=n*, which is used to set the
font size. Note that the font size is also affected by the font size. Note that the font size is also affected by the
*dpi-aware* option. *dpi-aware* option.
Examples: Examples:
- Dina:weight=bold:slant=italic - Dina:weight=bold:slant=italic
- Courier New:size=12 - Courier New:size=12
- Fantasque Sans Mono:fontfeatures=ss01 - Fantasque Sans Mono:fontfeatures=ss01
For each option, the first font is the primary font. The remaining For each option, the first font is the primary font. The remaining
fonts are fallback fonts that will be used whenever a glyph cannot fonts are fallback fonts that will be used whenever a glyph cannot
be found in the primary font. be found in the primary font.
The fallback fonts are searched in the order they appear. If a The fallback fonts are searched in the order they appear. If a
glyph cannot be found in any of the fallback fonts, the dynamic glyph cannot be found in any of the fallback fonts, the dynamic
fallback list from fontconfig (for the primary font) is fallback list from fontconfig (for the primary font) is
searched. searched.
*font-bold*, *font-italic* and *font-bold-italic* allow custom *font-bold*, *font-italic* and *font-bold-italic* allow custom
fonts to be used for bold/italic/bold+italic fonts. If left fonts to be used for bold/italic/bold+italic fonts. If left
unconfigured, the bold/italic variants of the regular font(s) unconfigured, the bold/italic variants of the regular font(s)
specified in *font* are used. *Note*: you _may_ have to tweak the 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. size(s) of the custom bold/italic fonts to match the regular font.
To disable bold and/or italic fonts, set e.g. *font-bold* to To disable bold and/or italic fonts, set e.g. *font-bold* to
_exactly_ the same value as *font*. _exactly_ the same value as *font*.
Default: _monospace:size=8_ (*font*), _not set_ (*font-bold*, Default: _monospace:size=8_ (*font*), _not set_ (*font-bold*,
*font-italic*, *font-bold-italic*). *font-italic*, *font-bold-italic*).
*include* *include*
Absolute path to configuration file to import. Absolute path to configuration file to import.
The import file has its own section scope. I.e. the including The import file has its own section scope. I.e. the including
configuration is still in the default section after the include, configuration is still in the default section after the include,
regardless of which section the included file ends in. regardless of which section the included file ends in.
- The path must be an absolute path, or start with *~/*. - The path must be an absolute path, or start with *~/*.
- Multiple include directives are allowed, but only one path per - Multiple include directives are allowed, but only one path per
directive. directive.
- Nested imports are allowed. - Nested imports are allowed.
Default: _not set_. Default: _not set_.
*line-height* *line-height*
An absolute value, in _points_, that override line height from the An absolute value, in _points_, that override line height from the
font metrics. font metrics.
You can specify a height in _pixels_ by using the *px* suffix: You can specify a height in _pixels_ by using the *px* suffix:
e.g. *line-height=12px*. e.g. *line-height=12px*.
See also: *vertical-letter-offset*. See also: *vertical-letter-offset*.
Default: _not set_. Default: _not set_.
*letter-spacing* *letter-spacing*
Spacing between letters, in _points_. A positive value will Spacing between letters, in _points_. A positive value will
increase the cell size, and a negative value shrinks it. increase the cell size, and a negative value shrinks it.
You can specify a letter spacing in _pixels_ by using the *px* You can specify a letter spacing in _pixels_ by using the *px*
suffix: e.g. *letter-spacing=2px*. suffix: e.g. *letter-spacing=2px*.
See also: *horizontal-letter-offset*. See also: *horizontal-letter-offset*.
Default: _0_. Default: _0_.
*horizontal-letter-offset*, *vertical-letter-offset* *horizontal-letter-offset*, *vertical-letter-offset*
Configure the horizontal and vertical offsets used when Configure the horizontal and vertical offsets used when
positioning glyphs within cells, in _points_, relative to the top positioning glyphs within cells, in _points_, relative to the top
left corner. left corner.
To specify an offset in _pixels_, append *px*: To specify an offset in _pixels_, append *px*:
e.g. *horizontal-letter-offset=2px*. e.g. *horizontal-letter-offset=2px*.
Default: _0_. Default: _0_.
*underline-offset* *underline-offset*
@ -122,20 +122,20 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
_points_ and relative the font's baseline. A positive value _points_ and relative the font's baseline. A positive value
positions the underline under the baseline, while a negative value positions the underline under the baseline, while a negative value
positions it above the baseline. positions it above the baseline.
To specify an offset in _pixels_, append *px*: To specify an offset in _pixels_, append *px*:
*underline-offset=2px*. *underline-offset=2px*.
If left unset (the default), the offset specified in the font is If left unset (the default), the offset specified in the font is
used, or estimated by foot if the font lacks underline positioning used, or estimated by foot if the font lacks underline positioning
information. information.
Default: _unset_. Default: _unset_.
*box-drawings-uses-font-glyphs* Boolean. When disabled, foot generates *box-drawings-uses-font-glyphs* Boolean. When disabled, foot generates
box/line drawing characters itself. The are several advantages to box/line drawing characters itself. The are several advantages to
doing this instead of using font glyphs: doing this instead of using font glyphs:
- No antialiasing effects where e.g. line endpoints appear - No antialiasing effects where e.g. line endpoints appear
dimmed down, or blurred. dimmed down, or blurred.
- Line- and box characters are guaranteed to span the entire cell, - Line- and box characters are guaranteed to span the entire cell,
@ -144,60 +144,60 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
- Many fonts lack some, or all, of the line- and box drawing - Many fonts lack some, or all, of the line- and box drawing
characters, causing fallback fonts to be used, which results characters, causing fallback fonts to be used, which results
in out-of-place looking glyphs (for example, badly sized). in out-of-place looking glyphs (for example, badly sized).
When enabled, box/line drawing characters are rendered using font When enabled, box/line drawing characters are rendered using font
glyphs. This may result in a more uniform look, in some use cases. glyphs. This may result in a more uniform look, in some use cases.
Default: _no_. Default: _no_.
*dpi-aware* *dpi-aware*
*auto*, *yes*, or *no*. *auto*, *yes*, or *no*.
When set to *yes*, fonts are sized using the monitor's DPI, making When set to *yes*, fonts are sized using the monitor's DPI, making
a font of a given size have the same physical size, regardless of a font of a given size have the same physical size, regardless of
monitor. In other words, if you drag a foot window between monitor. In other words, if you drag a foot window between
different monitors, the font size remains the same. different monitors, the font size remains the same.
In this mode, the monitor's scaling factor is ignored; doubling In this mode, the monitor's scaling factor is ignored; doubling
the scaling factor will *not* double the font size. the scaling factor will *not* double the font size.
When set to *no*, the monitor's DPI is ignored. The font is When set to *no*, the monitor's DPI is ignored. The font is
instead sized using the monitor's scaling factor; doubling the instead sized using the monitor's scaling factor; doubling the
scaling factor *does* double the font size. scaling factor *does* double the font size.
Finally, if set to *auto*, fonts will be sized using the monitor's Finally, if set to *auto*, fonts will be sized using the monitor's
DPI if _all_ monitors have a scaling factor of 1. If at least one DPI if _all_ monitors have a scaling factor of 1. If at least one
monitor as a scaling factor larger than 1 (regardless of whether monitor as a scaling factor larger than 1 (regardless of whether
the foot window is mapped on that monitor or not), fonts will be the foot window is mapped on that monitor or not), fonts will be
scaled using the scaling factor. scaled using the scaling factor.
Note that this option typically does not work with bitmap fonts, Note that this option typically does not work with bitmap fonts,
which only contains a pre-defined set of sizes, and cannot be which only contains a pre-defined set of sizes, and cannot be
dynamically scaled. Whichever size (of the available ones) that dynamically scaled. Whichever size (of the available ones) that
best matches the DPI or scaling factor, will be used. best matches the DPI or scaling factor, will be used.
Also note that if the font size has been specified in pixels Also note that if the font size has been specified in pixels
(*:pixelsize=*_N_, instead of *:size=*_N_), DPI scaling (*:pixelsize=*_N_, instead of *:size=*_N_), DPI scaling
(*dpi-aware=yes*) will have no effect (the specified pixel size (*dpi-aware=yes*) will have no effect (the specified pixel size
will be used as is). But, if the monitor's scaling factor is used will be used as is). But, if the monitor's scaling factor is used
to size the font (*dpi-aware=no*), the font's pixel size will be to size the font (*dpi-aware=no*), the font's pixel size will be
multiplied with the scaling factor. multiplied with the scaling factor.
Default: _auto_ Default: _auto_
*pad* *pad*
Padding between border and glyphs, in pixels (subject to output Padding between border and glyphs, in pixels (subject to output
scaling), in the form _XxY_. scaling), in the form _XxY_.
This will add _at least_ X pixels on both the left and right This will add _at least_ X pixels on both the left and right
sides, and Y pixels on the top and bottom sides. The grid content sides, and Y pixels on the top and bottom sides. The grid content
will be anchored in the top left corner. I.e. if the window will be anchored in the top left corner. I.e. if the window
manager forces an odd window size on foot, the additional pixels manager forces an odd window size on foot, the additional pixels
will be added to the right and bottom sides. will be added to the right and bottom sides.
To instead center the grid content, append *center* (e.g. *pad=5x5 To instead center the grid content, append *center* (e.g. *pad=5x5
center*). center*).
Default: _2x2_. Default: _2x2_.
*resize-delay-ms* *resize-delay-ms*
@ -205,18 +205,18 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
window dimensions to the client application while doing an window dimensions to the client application while doing an
interactive resize of a foot window. Idle time in this context is interactive resize of a foot window. Idle time in this context is
a period of time where the window size is not changing. a period of time where the window size is not changing.
In other words, while you are fiddling with the window size, foot In other words, while you are fiddling with the window size, foot
does not send the updated dimensions to the client. Only when you does not send the updated dimensions to the client. Only when you
pause the fiddling for *resize-delay-ms* milliseconds is the pause the fiddling for *resize-delay-ms* milliseconds is the
client updated. client updated.
Emphasis is on _while_ here; as soon as the interactive resize Emphasis is on _while_ here; as soon as the interactive resize
ends (i.e. when you let go of the window border), the final ends (i.e. when you let go of the window border), the final
dimensions is sent to the client, without any delays. dimensions is sent to the client, without any delays.
Setting it to 0 disables the delay completely. Setting it to 0 disables the delay completely.
Default: _100_. Default: _100_.
*initial-window-size-pixels* *initial-window-size-pixels*
@ -229,12 +229,12 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
Initial window width and height in _characters_, in the form Initial window width and height in _characters_, in the form
_WIDTHxHEIGHT_. Mutually exclusive to _WIDTHxHEIGHT_. Mutually exclusive to
*initial-window-size-pixels*.' *initial-window-size-pixels*.'
Note that if you have a multi-monitor setup, with different Note that if you have a multi-monitor setup, with different
scaling factors, there is a possibility the window size will not scaling factors, there is a possibility the window size will not
be set correctly. If that is the case, use be set correctly. If that is the case, use
*initial-window-size-pixels* instead. *initial-window-size-pixels* instead.
Default: _not set_. Default: _not set_.
*initial-window-mode* *initial-window-mode*
@ -257,12 +257,12 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
Semi-boolean. When enabled, bold text is rendered in a brighter Semi-boolean. When enabled, bold text is rendered in a brighter
color (in addition to using a bold font). The color is brightened color (in addition to using a bold font). The color is brightened
by increasing its luminance. by increasing its luminance.
If set to *palette-based*, rather than a simple *yes|true*, colors If set to *palette-based*, rather than a simple *yes|true*, colors
matching one of the 8 regular palette colors will be brightened matching one of the 8 regular palette colors will be brightened
using the corresponding bright palette color. Other colors will using the corresponding bright palette color. Other colors will
not be brightened. not be brightened.
Default: _no_. Default: _no_.
*word-delimiters* *word-delimiters*
@ -274,19 +274,19 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
Command to execute to display a notification. _${title}_ and Command to execute to display a notification. _${title}_ and
_${body}_ will be replaced with the notification's actual _title_ _${body}_ will be replaced with the notification's actual _title_
and _body_ (message content). and _body_ (message content).
_${app-id}_ is replaced with the value of the command line option _${app-id}_ is replaced with the value of the command line option
_--app-id_, and defaults to *foot*. _--app-id_, and defaults to *foot*.
_${window-title}_ is replaced with the current window title. _${window-title}_ is replaced with the current window title.
Applications can trigger notifications in the following ways: Applications can trigger notifications in the following ways:
- OSC 777: *\\e]777;notify;<title>;<body>\\e\\\\* - OSC 777: *\\e]777;notify;<title>;<body>\\e\\\\*
By default, notifications are *inhibited* if the foot window By default, notifications are *inhibited* if the foot window
has keyboard focus. See _notify-focus-inhibit_. has keyboard focus. See _notify-focus-inhibit_.
Default: _notify-send -a ${app-id} -i ${app-id} ${title} ${body}_. Default: _notify-send -a ${app-id} -i ${app-id} ${title} ${body}_.
*notify-focus-inhibit* *notify-focus-inhibit*
@ -311,13 +311,13 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
When set to _yes_, foot will signal urgency to the compositor When set to _yes_, foot will signal urgency to the compositor
through the XDG activation protocol whenever *BEL* is received, through the XDG activation protocol whenever *BEL* is received,
and the window does NOT have keyboard foccus. and the window does NOT have keyboard foccus.
If the compositor does not implement this protocol, the margins If the compositor does not implement this protocol, the margins
will be painted in red instead. will be painted in red instead.
Applications can enable/disable this feature programmatically with Applications can enable/disable this feature programmatically with
the *CSI ? 1042 h* and *CSI ? 1042 l* escape sequences. the *CSI ? 1042 h* and *CSI ? 1042 l* escape sequences.
Default: _no_ Default: _no_
*notify* *notify*
@ -370,24 +370,24 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
*osc8-underline* *osc8-underline*
When to underline OSC-8 URLs. Possible values are *url-mode* and When to underline OSC-8 URLs. Possible values are *url-mode* and
*always*. *always*.
When set to *url-mode*, OSC-8 URLs are only highlighted in URL When set to *url-mode*, OSC-8 URLs are only highlighted in URL
mode, just like auto-detected URLs. mode, just like auto-detected URLs.
When set to *always*, OSC-8 URLs are always highlighted, When set to *always*, OSC-8 URLs are always highlighted,
regardless of their other attributes (bold, italic etc). Note that regardless of their other attributes (bold, italic etc). Note that
this does _not_ make them clickable. this does _not_ make them clickable.
Default: _url-mode_ Default: _url-mode_
*label-letters* *label-letters*
String of characters to use when generating key sequences for URL String of characters to use when generating key sequences for URL
jump labels. jump labels.
If you change this option to include the letter *t*, you should If you change this option to include the letter *t*, you should
also change the default *[url-bindings].toggle-url-visible* key also change the default *[url-bindings].toggle-url-visible* key
binding to avoid a clash. binding to avoid a clash.
Default: _sadfjklewcmpgh_. Default: _sadfjklewcmpgh_.
*protocols* *protocols*
@ -400,7 +400,7 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
*uri-characters* *uri-characters*
Set of characters allowed in auto-detected URLs. Any character not Set of characters allowed in auto-detected URLs. Any character not
included in this set constitutes a URL delimiter. included in this set constitutes a URL delimiter.
Default: Default:
_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-\_.,~:;/?#@!$&%\*+="'()[]_ _abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-\_.,~:;/?#@!$&%\*+="'()[]_
@ -422,7 +422,7 @@ applications can change these at runtime.
Two RRGGBB values (i.e. plain old 6-digit hex values, without Two RRGGBB values (i.e. plain old 6-digit hex values, without
prefix) specifying the foreground (text) and background (cursor) prefix) specifying the foreground (text) and background (cursor)
colors for the cursor. colors for the cursor.
Default: _inverse foreground/background colors_. Default: _inverse foreground/background colors_.
Note that this value only applies to the block cursor. The other Note that this value only applies to the block cursor. The other
@ -437,13 +437,13 @@ applications can change these at runtime.
*underline-thickness* *underline-thickness*
Thickness (height) of the underline styled cursor. The value is in Thickness (height) of the underline styled cursor. The value is in
points, and its exact value thus depends on the monitor's DPI. points, and its exact value thus depends on the monitor's DPI.
To instead specify a thickness in pixels, use the *px* suffix: To instead specify a thickness in pixels, use the *px* suffix:
e.g. *underline-thickness=2px*. e.g. *underline-thickness=2px*.
Note that if left unset, the cursor's thickness will scale with Note that if left unset, the cursor's thickness will scale with
the font size, while if set, the size is fixed. the font size, while if set, the size is fixed.
Default: _font underline thickness_. Default: _font underline thickness_.
# SECTION: mouse # SECTION: mouse
@ -457,17 +457,17 @@ applications can change these at runtime.
scroll mode_. When this mode is enabled, mouse scroll events are scroll mode_. When this mode is enabled, mouse scroll events are
translated to _up_/_down_ key events when displaying the alternate translated to _up_/_down_ key events when displaying the alternate
screen. screen.
This lets you scroll with the mouse in e.g. pagers (like _less_) This lets you scroll with the mouse in e.g. pagers (like _less_)
without enabling native mouse support in them. without enabling native mouse support in them.
Alternate scrolling is *not* used if the application enables Alternate scrolling is *not* used if the application enables
native mouse support. native mouse support.
This option can be modified by applications at run-time using the This option can be modified by applications at run-time using the
escape sequences *CSI ? 1007 h* (enable) and *CSI ? 1007 l* escape sequences *CSI ? 1007 h* (enable) and *CSI ? 1007 l*
(disable). (disable).
Default: _yes_. Default: _yes_.
# SECTION: colors # SECTION: colors
@ -502,30 +502,30 @@ can configure the background transparency with the _alpha_ option.
Custom colors to use with dimmed colors. Dimmed colors do not have Custom colors to use with dimmed colors. Dimmed colors do not have
an entry in the color palette. Applications emit them by combining an entry in the color palette. Applications emit them by combining
a color value, and a "dim" attribute. a color value, and a "dim" attribute.
By default, foot implements this by reducing the luminance of the By default, foot implements this by reducing the luminance of the
current color. This is a generic approach that applies to both current color. This is a generic approach that applies to both
colors from the 256-color palette, as well as 24-bit RGB colors. colors from the 256-color palette, as well as 24-bit RGB colors.
You can change this behavior by setting the *dimN* options. When You can change this behavior by setting the *dimN* options. When
set, foot will match the current color against the color palette, set, foot will match the current color against the color palette,
and if it matches one of the *regularN* colors, the corresponding and if it matches one of the *regularN* colors, the corresponding
*dimN* color will be used. *dimN* color will be used.
If instead the current color matches one of the *brightN* colors, If instead the current color matches one of the *brightN* colors,
the corresponding *regularN* color will be used. the corresponding *regularN* color will be used.
If the current color does not match any known color, it is dimmed If the current color does not match any known color, it is dimmed
by reducing the luminance (i.e. the same behavior as if the *dimN* by reducing the luminance (i.e. the same behavior as if the *dimN*
options are unconfigured). 24-bit RGB colors will typically fall options are unconfigured). 24-bit RGB colors will typically fall
into this category. into this category.
Note that applications can change the *regularN* and *brighN* Note that applications can change the *regularN* and *brighN*
colors at runtime. However, they have no way of changing the colors at runtime. However, they have no way of changing the
*dimN* colors. If an application has changed the *regularN* *dimN* colors. If an application has changed the *regularN*
colors, foot will still use the corresponding *dimN* color, as colors, foot will still use the corresponding *dimN* color, as
configured in foot.ini. configured in foot.ini.
Default: _not set_. Default: _not set_.
*0* *..* *255* *0* *..* *255*
@ -579,12 +579,12 @@ Examples:
*preferred* *preferred*
Which type of window decorations to prefer: *client* (CSD), Which type of window decorations to prefer: *client* (CSD),
*server* (SSD) or *none*. *server* (SSD) or *none*.
Note that this is only a hint to the compositor. Depending on Note that this is only a hint to the compositor. Depending on
compositor support, and how it has been configured, it may compositor support, and how it has been configured, it may
instruct foot to use CSDs even though this option has been set to instruct foot to use CSDs even though this option has been set to
*server*, or render SSDs despite *client* or *none* being set. *server*, or render SSDs despite *client* or *none* being set.
Default: _server_. Default: _server_.
*size* *size*
@ -742,17 +742,17 @@ e.g. *search-start=none*.
currently selected text to an external tool. The syntax for this currently selected text to an external tool. The syntax for this
option is a bit special; the first part of the value is the option is a bit special; the first part of the value is the
command to execute enclosed in "[]", followed by the binding(s). command to execute enclosed in "[]", followed by the binding(s).
You can configure multiple pipes as long as the command strings You can configure multiple pipes as long as the command strings
are different and the key bindings are unique. are different and the key bindings are unique.
Note that the command is *not* automatically run inside a shell; Note that the command is *not* automatically run inside a shell;
use *sh -c "command line"* if you need that. use *sh -c "command line"* if you need that.
Example: Example:
*pipe-visible=[sh -c "xurls | uniq | tac | fuzzel | xargs -r *pipe-visible=[sh -c "xurls | uniq | tac | fuzzel | xargs -r
firefox"] Control+Print* firefox"] Control+Print*
Default: _not bound_ Default: _not bound_
*show-urls-launch* *show-urls-launch*
@ -863,14 +863,14 @@ Be careful; do not use single-letter keys that are also used in
By default, the jump label only shows the key sequence required to By default, the jump label only shows the key sequence required to
activate it. This is fine as long as the URL is visible in the activate it. This is fine as long as the URL is visible in the
original text. original text.
But with e.g. OSC-8 URLs (the terminal version of HTML anchors, But with e.g. OSC-8 URLs (the terminal version of HTML anchors,
i.e. "links"), the text on the screen can be something completey i.e. "links"), the text on the screen can be something completey
different than the URL. different than the URL.
This action toggles between showing and hiding the URL on the jump This action toggles between showing and hiding the URL on the jump
label. label.
Default: _t_. Default: _t_.
# SECTION: text-bindings # SECTION: text-bindings
@ -1002,25 +1002,25 @@ any of these options.
*bilinear*, *cubic* or *lanczos3*. *cubic* and *lanczos3* produce *bilinear*, *cubic* or *lanczos3*. *cubic* and *lanczos3* produce
the best results, but are slower (with *lanczos3* being the best the best results, but are slower (with *lanczos3* being the best
_and_ slowest). _and_ slowest).
Default: _lanczos3_. Default: _lanczos3_.
*overflowing-glyphs* *overflowing-glyphs*
Boolean. When enabled, glyphs wider than their cell(s) are allowed Boolean. When enabled, glyphs wider than their cell(s) are allowed
to render into one additional neighbouring cell. to render into one additional neighbouring cell.
One use case for this are fonts with wide italic characters that One use case for this are fonts with wide italic characters that
"bend" into the next cell. Without this option, such glyphs will "bend" into the next cell. Without this option, such glyphs will
appear "cut off". appear "cut off".
Another use case are fonts with "icon" characters in the Unicode Another use case are fonts with "icon" characters in the Unicode
private usage area, e.g. Nerd Fonts, or Powerline Fonts and legacy private usage area, e.g. Nerd Fonts, or Powerline Fonts and legacy
emoji characters like *WHITE FROWNING FACE*. emoji characters like *WHITE FROWNING FACE*.
Note: might impact performance depending on the font used. Note: might impact performance depending on the font used.
Especially small font sizes can cause many overflowing glyphs Especially small font sizes can cause many overflowing glyphs
because of subpixel rendering. because of subpixel rendering.
Default: _yes_. Default: _yes_.
*render-timer* *render-timer*
@ -1040,17 +1040,17 @@ any of these options.
Boolean. When enabled, box drawing "shades" (e.g. LIGHT SHADE, Boolean. When enabled, box drawing "shades" (e.g. LIGHT SHADE,
MEDIUM SHADE and DARK SHADE) are rendered as solid blocks using a MEDIUM SHADE and DARK SHADE) are rendered as solid blocks using a
darker variant of the current foreground color. darker variant of the current foreground color.
When disabled, they are instead rendered as checker box pattern, When disabled, they are instead rendered as checker box pattern,
using the current foreground color as is. using the current foreground color as is.
Default: _yes_. Default: _yes_.
*delayed-render-lower*, *delayed-render-upper* *delayed-render-lower*, *delayed-render-upper*
These two values control the timeouts (in nanoseconds) that are These two values control the timeouts (in nanoseconds) that are
used to mitigate screen flicker caused by clients writing large, used to mitigate screen flicker caused by clients writing large,
non-atomic screen updates. non-atomic screen updates.
If a client splits up a screen update over multiple *write*(3) If a client splits up a screen update over multiple *write*(3)
calls, we may end up rendering an intermediate frame, quickly calls, we may end up rendering an intermediate frame, quickly
followed by another frame with the final screen content. For followed by another frame with the final screen content. For
@ -1059,56 +1059,56 @@ any of these options.
writes. Rendering the frame when the screen has been erased, but writes. Rendering the frame when the screen has been erased, but
not yet filled with new content will be perceived as screen not yet filled with new content will be perceived as screen
flicker. flicker.
The *real* solution to this is _Application Synchronized Updates_ The *real* solution to this is _Application Synchronized Updates_
(https://gitlab.freedesktop.org/terminal-wg/specifications/-/merge_requests/2). (https://gitlab.freedesktop.org/terminal-wg/specifications/-/merge_requests/2).
The problem with this is twofold - first, it has not yet been The problem with this is twofold - first, it has not yet been
standardized, and thus there are not many terminal emulators that standardized, and thus there are not many terminal emulators that
implement it (foot *does* implement it), and second, applications implement it (foot *does* implement it), and second, applications
must be patched to use it. must be patched to use it.
Until this has happened, foot offers an interim workaround; an Until this has happened, foot offers an interim workaround; an
attempt to mitigate the screen flicker *without* affecting neither attempt to mitigate the screen flicker *without* affecting neither
performance nor latency. performance nor latency.
It is based on the fact that the screen is updated at a fixed 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 interval (typically 60Hz). For us, this means it does not matter
if we render a new frame at the *beginning* of a frame interval, 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 or at the *end*. Thus, the goal is to introduce a delay between
receiving client data and rendering the resulting state, but receiving client data and rendering the resulting state, but
without causing a frame skip. without causing a frame skip.
While it should be possible to estimate the amount of time left While it should be possible to estimate the amount of time left
until the next frame, foot's algorithm is currently not that until the next frame, foot's algorithm is currently not that
advanced, but is based on statistics I guess you could say - the advanced, but is based on statistics I guess you could say - the
delay we introduce is so small that the risk of pushing the frame delay we introduce is so small that the risk of pushing the frame
over to the next frame interval is also very small. over to the next frame interval is also very small.
Now, that was a lot of text. But what is it foot actually does? Now, that was a lot of text. But what is it foot actually does?
When receiving client data, it schedules a timer, the When receiving client data, it schedules a timer, the
*delayed-render-lower*. If we do not receive any more client data *delayed-render-lower*. If we do not receive any more client data
before the timer has run out, we render the frame. If however, we 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 do receive more data, the timer is re-scheduled. That is, each
time we receive client data, frame rendering is delayed another time we receive client data, frame rendering is delayed another
*delayed-render-lower* nanoseconds. *delayed-render-lower* nanoseconds.
Now, while this works very well with most clients, it would be Now, while this works very well with most clients, it would be
possible to construct a malicious client that keeps writing data possible to construct a malicious client that keeps writing data
at a slow pace. To the user, this would look like foot has frozen 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 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 limit is set - *delayed-render-upper*. If this timer runs out, we
render the frame regardless of what the client is doing. render the frame regardless of what the client is doing.
If changing these values, note that the lower timeout *must* be If changing these values, note that the lower timeout *must* be
set lower than the upper timeout, but that this is not verified by set lower than the upper timeout, but that this is not verified by
foot. Furthermore, both values must be less than 16ms (that is, foot. Furthermore, both values must be less than 16ms (that is,
16000000 nanoseconds). 16000000 nanoseconds).
You can disable the feature altogether by setting either value to You can disable the feature altogether by setting either value to
0. In this case, frames are rendered "as soon as possible". 0. In this case, frames are rendered "as soon as possible".
Default: lower=_500000_ (0.5ms), upper=_8333333_ (8.3ms - half a Default: lower=_500000_ (0.5ms), upper=_8333333_ (8.3ms - half a
frame interval). frame interval).
@ -1117,14 +1117,14 @@ any of these options.
time a frame has been rendered. This forces the compositor to time a frame has been rendered. This forces the compositor to
redraw the entire window. If disabled, foot will only 'damage' redraw the entire window. If disabled, foot will only 'damage'
updated rows. updated rows.
There is normally *no* reason to enable this. However, it has been There is normally *no* reason to enable this. However, it has been
seen to workaround an issue with _fractional scaling_ in _Gnome_. seen to workaround an issue with _fractional scaling_ in _Gnome_.
Note that enabling this option is likely to increase CPU and/or Note that enabling this option is likely to increase CPU and/or
GPU usage (by the compositor, not by foot), and may have a GPU usage (by the compositor, not by foot), and may have a
negative impact on battery life. negative impact on battery life.
Default: _no_. Default: _no_.
*grapheme-shaping* *grapheme-shaping*
@ -1132,90 +1132,90 @@ any of these options.
cluster segmentation while parsing "printed" text. Then, when cluster segmentation while parsing "printed" text. Then, when
rendering, it will use _fcft_ (if compiled with _HarfBuzz_ rendering, it will use _fcft_ (if compiled with _HarfBuzz_
support) to shape the grapheme clusters. support) to shape the grapheme clusters.
This is required to render e.g. flag (emoji) sequences, keycap This is required to render e.g. flag (emoji) sequences, keycap
sequences, modifier sequences, zero-width-joiner (ZWJ) sequences sequences, modifier sequences, zero-width-joiner (ZWJ) sequences
and emoji tag sequences. It might also improve rendering of and emoji tag sequences. It might also improve rendering of
composed characters, depending on font. composed characters, depending on font.
- foot must have been compiled with utf8proc support - foot must have been compiled with utf8proc support
- fcft must have been compiled with HarfBuzz support - fcft must have been compiled with HarfBuzz support
See also: *grapheme-width-method*. See also: *grapheme-width-method*.
Default: _yes_ Default: _yes_
*grapheme-width-method* *grapheme-width-method*
Selects which method to use when calculating the width Selects which method to use when calculating the width
(i.e. number of columns) of a grapheme cluster. One of (i.e. number of columns) of a grapheme cluster. One of
*wcswidth*, *double-width* and *max*. *wcswidth*, *double-width* and *max*.
*wcswidth* simply adds together the individual width of all *wcswidth* simply adds together the individual width of all
codepoints making up the cluster. codepoints making up the cluster.
*double-width* does the same, but limits the maximum number of *double-width* does the same, but limits the maximum number of
columns to 2. This is more correct, but may break some columns to 2. This is more correct, but may break some
applications since applications typically use *wcswidth*(3) applications since applications typically use *wcswidth*(3)
internally to calculate the width. This results in cursor internally to calculate the width. This results in cursor
de-synchronization issues. de-synchronization issues.
*max* uses the width of the largest codepoint in the cluster. *max* uses the width of the largest codepoint in the cluster.
Default: _wcswidth_ Default: _wcswidth_
*font-monospace-warn* *font-monospace-warn*
Boolean. When enabled, foot will use heuristics to try to verify Boolean. When enabled, foot will use heuristics to try to verify
the primary font is a monospace font, and warn if it is not. the primary font is a monospace font, and warn if it is not.
Disable this if you still want to use the font, even if foot Disable this if you still want to use the font, even if foot
thinks it is not monospaced. thinks it is not monospaced.
You may also want to disable it to get slightly faster startup times. You may also want to disable it to get slightly faster startup times.
Default: _yes_ Default: _yes_
*max-shm-pool-size-mb* *max-shm-pool-size-mb*
This option controls the amount of virtual address space used by This option controls the amount of virtual address space used by
the pixmap memory to which the terminal screen content is the pixmap memory to which the terminal screen content is
rendered. rendered.
It does not change how much physical memory foot uses. It does not change how much physical memory foot uses.
Foot uses a memory mapping trick to implement fast rendering of Foot uses a memory mapping trick to implement fast rendering of
interactive scrolling (typically, but applies to "slow" scrolling interactive scrolling (typically, but applies to "slow" scrolling
in general). Example: holding down the 'up' or 'down' arrow key to in general). Example: holding down the 'up' or 'down' arrow key to
scroll in a text editor. scroll in a text editor.
For this to work, it needs a large amount of virtual address For this to work, it needs a large amount of virtual address
space. Again, note that this is not physical memory. space. Again, note that this is not physical memory.
On a normal x64 based computer, each process has 128TB of virtual On a normal x64 based computer, each process has 128TB of virtual
address space, and newer ones have 64PB. This is an insane amount address space, and newer ones have 64PB. This is an insane amount
and most applications do not use anywhere near that amount. and most applications do not use anywhere near that amount.
Each foot terminal window can allocate up to 2GB of virtual Each foot terminal window can allocate up to 2GB of virtual
address space. With 128TB of address space, that means a maximum address space. With 128TB of address space, that means a maximum
of 65536 windows in server/daemon mode (for 2GB). That should be of 65536 windows in server/daemon mode (for 2GB). That should be
enough, yes? enough, yes?
However, the Wayland compositor also needs to allocate the same However, the Wayland compositor also needs to allocate the same
amount of virtual address space. Thus, it has a slightly higher amount of virtual address space. Thus, it has a slightly higher
chance of running out of address space since it needs to host chance of running out of address space since it needs to host
all running Wayland clients in the same way, at the same time. 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 In the off chance that this becomes a problem for you, you can
reduce the amount used with this option. reduce the amount used with this option.
Or, for optimal performance, you can increase it to the maximum Or, for optimal performance, you can increase it to the maximum
allowed value, 2GB (but note that you most likely will not notice allowed value, 2GB (but note that you most likely will not notice
any difference compared to the default value). any difference compared to the default value).
Setting it to 0 disables the feature. Setting it to 0 disables the feature.
Limitations: Limitations:
- only supported on 64-bit architectures - only supported on 64-bit architectures
- only supported on Linux - only supported on Linux
Default: _512_. Maximum allowed: _2048_ (2GB). Default: _512_. Maximum allowed: _2048_ (2GB).
*sixel* *sixel*