1foot.ini(5)                   File Formats Manual                  foot.ini(5)
2
3
4

NAME

6       foot.ini - configuration file for foot(1)
7

DESCRIPTION

9       foot uses the standard unix configuration format, with section based
10       key/value pairs. The default section is unnamed (i.e. not prefixed with
11       a [section]).
12
13       foot will search for a configuration file in the following locations,
14       in this order:
15
16       ·   XDG_CONFIG_HOME/foot/foot.ini
17       ·   ~/.config/foot/foot.ini
18       ·   XDG_CONFIG_DIRS/foot/foot.ini
19
20

SECTION: default

22       shell
23           Executable to launch. Typically a shell. Default: $SHELL if set,
24           otherwise the user's default shell (as specified in /etc/passwd).
25           You can also pass arguments. For example /bin/bash --norc.
26
27       login-shell
28           Boolean. If enabled, the shell will be launched as a login shell,
29           by prepending a '-' to argv[0]. Default: no.
30
31       term
32           Value to set the environment variable TERM to. Default: foot or
33           xterm-256color if built with -Dterminfo=disabled
34
35       font, font-bold, font-italic, font-bold-italic
36           Comma separated list of fonts to use, in fontconfig format. That
37           is, a font name followed by a list of colon-separated options. Most
38           noteworthy is :size=n, which is used to set the font size.
39
40           Examples:
41           ·   Dina:weight=bold:slant=italic
42           ·   Courier New:size=12
43           ·   Fantasque Sans Mono:fontfeatures=ss01
44
45
46           For each option, the first font is the primary font. The remaining
47           fonts are fallback fonts that will be used whenever a glyph cannot
48           be found in the primary font.
49
50           The fallback fonts are searched in the order they appear. If a
51           glyph cannot be found in any of the fallback fonts, the dynamic
52           fallback list from fontconfig (for the primary font) is searched.
53
54           font-bold, font-italic and font-bold-italic allow custom fonts to
55           be used for bold/italic/bold+italic fonts. If left unconfigured,
56           the bold/italic variants of the regular font(s) specified in font
57           are used. Note: you may have to tweak the size(s) of the custom
58           bold/italic fonts to match the regular font.
59
60           To disable bold and/or italic fonts, set e.g. font-bold to exactly
61           the same value as font.
62
63           Default: monospace:size=8 (font), not set (font-bold, font-italic,
64           font-bold-italic).
65
66       line-height
67           An absolute value, in points, that override line height from the
68           font metrics.
69
70           You can specify a height in pixels by using the px suffix: e.g.
71           line-height=12px.
72
73           See also: vertical-letter-offset.
74
75           Default: not set.
76
77       letter-spacing
78           Spacing between letters, in points. A positive value will increase
79           the cell size, and a negative value shrinks it.
80
81           You can specify a letter spacing in pixels by using the px suffix:
82           e.g. letter-spacing=2px.
83
84           See also: horizontal-letter-offset.
85
86           Default: 0.
87
88       horizontal-letter-offset, vertical-letter-offset
89           Configure the horizontal and vertical offsets used when positioning
90           glyphs within cells, in points, relative to the top left corner.
91
92           To specify an offset in pixels, append px: e.g. horizontal-letter-
93           offset=2px.
94
95           Default: 0.
96
97       dpi-aware
98           auto, yes, or no. When set to yes, fonts are sized using the moni‐
99           tor's DPI, making a font of a given size have the same physical
100           size, regardless of monitor. In other words, if you drag a foot
101           window between different monitors, the font size remains the same.
102
103           In this mode, the monitor's scaling factor is ignored; doubling the
104           scaling factor will not double the font size.
105
106           When set to no, the monitor's DPI is ignored. The font is instead
107           sized using the monitor's scaling factor; doubling the scaling fac‐
108           tor does double the font size.
109
110           Finally, if set to auto, fonts will be sized using the monitor's
111           DPI on monitors with a scaling factor of 1, but otherwise using the
112           scaling factor.
113
114           Default: auto
115
116       pad
117           Padding between border and glyphs, in pixels (subject to output
118           scaling), on the form XxY.
119
120           This will add at least X pixels on both the left and right sides,
121           and Y pixels on the top and bottom sides. The grid content will be
122           anchored in the top left corner. I.e. if the window manager forces
123           an odd window size on foot, the additional pixels will be added to
124           the right and bottom sides.
125
126           To instead center the grid content, append center (e.g. pad=5x5
127           center).
128
129           Default: 2x2.
130
131       resize-delay-ms
132           Time, in milliseconds, of "idle time" "before foot sends the new
133           window dimensions to the client application while doing an interac‐
134           tive resize of a foot window. Idle time in this context is a period
135           of time where the window size is not changing.
136
137           In other words, while you are fiddling with the window size, foot
138           does not send the updated dimensions to the client. Only when you
139           pause the fiddling for relay-size-ms milliseconds is the client
140           updated.
141
142           Emphasis is on while here; as soon as the interactive resize ends
143           (i.e. when you let go of the window border), the final dimensions
144           is sent to the client, without any delays.
145
146           Setting it to 0 disables the delay completely.
147
148           Default: 100.
149
150       initial-window-size-pixels
151           Initial window width and height in pixels (subject to output scal‐
152           ing), on the form WIDTHxHEIGHT. The height includes the titlebar
153           when using CSDs. Mutually exclusive to initial-window-size-chars.
154           Default: 700x500.
155
156       initial-window-size-chars
157           Initial window width and height in characters, on the form WIDTHx‐
158           HEIGHT. Mutually exclusive to initial-window-size-pixels.'
159
160           Note that if you have a multi-monitor setup, with different scaling
161           factors, there is a possibility the window size will not be set
162           correctly. If that is the case, use initial-window-size-pixels
163           instead.
164
165           Default: not set.
166
167       initial-window-mode
168           Initial window mode for each newly spawned window: windowed, maxi‐
169           mized or fullscreen. Default: windowed.
170
171       title
172           Initial window title. Default: foot.
173
174       app-id
175           Value to set the app-id property on the Wayland window to. The com‐
176           positor can use this value to e.g. group multiple windows, or apply
177           window management rules. Default: foot.
178
179       bold-text-in-bright
180           Boolean. When enabled, bold text is rendered in a brighter color
181           (in addition to using a bold font). Default: no.
182
183       bell
184           Action to perform when receiving a BEL character. Can be set to
185           either set-urgency, notify or none.
186
187           When set to set-urgency, the margins will be painted in red when‐
188           ever BEL is received while the window does not have keyboard focus.
189           Note that Wayland currently does not have an urgency hint like X11.
190           The value set-urgency was chosen for forward-compatibility in the
191           hopes that a corresponding Wayland protocol is added in the future
192           (in which case foot will use that instead of painting its margins
193           red).
194
195           Applications can enable/disable this feature programmatically with
196           the CSI ? 1042 h and CSI ? 1042 l escape sequences.
197
198           Note: expect this feature to be replaced with proper compositor
199           urgency support once/if that gets implemented.
200
201           When set to notify, foot will emit a desktop notification using the
202           command specified in the notify option, but only if the foot window
203           does not have keyboard focus.
204
205           When set to none, no special action is taken when receiving BEL.
206
207           Default: none.
208
209       word-delimiters
210           String of characters that act as word delimiters when selecting
211           text. Note that whitespace characters are always word delimiters,
212           regardless of this setting. Default: ,│`|:"'()[]{}<>
213
214       jump-label-letters
215           String of characters that will be when generating key sequences for
216           URL jump labels. Default: sadfjklewcmpgh.
217
218       notify
219           Command to execute to display a notification. ${title} and ${body}
220           will be replaced with the notification's actual title and body
221           (message content).
222
223           Applications can trigger notifications in the following ways:
224
225           ·   OSC 777: \e]777;notify;<title>;<body>\e\\
226
227
228           Notifications are inhibited if the foot window has keyboard focus.
229
230           Default: notify-send -a foot -i foot ${title} ${body}.
231
232       url-launch
233           Command to execute when opening URLs. ${url} will be replaced with
234           the actual URL. Default: xdg-open ${url}.
235
236       selection-target
237           Clipboard target to automatically copy selected text to. One of
238           none, primary, clipboard or both. Default: primary.
239
240       workers
241           Number of threads to use for rendering. Set to 0 to disable multi‐
242           threading. Default: the number of available logical CPUs (including
243           SMT). Note that this is not always the best value. In some cases,
244           the number of physical cores is better.
245
246       osc8-underline
247           When to underline OSC-8 URLs. Possible values are url-mode and
248           always.
249
250           When set to url-mode, OSC-8 URLs are only highlighted in URL mode,
251           just like auto-detected URLs.
252
253           When set to always, OSC-8 URLs are always highlighted, regardless
254           of their other attributes (bold, italic etc). Note that this does
255           not make them clickable.
256
257           Default: url-mode
258

SECTION: scrollback

260       lines
261           Number of scrollback lines. The maximum number of allocated lines
262           will be this value plus the number of visible lines, rounded up to
263           the nearest power of 2. Default: 1000.
264
265       multiplier
266           Amount to multiply mouse scrolling with. It is a decimal number,
267           i.e. fractions are allowed. Default: 3.0.
268
269       indicator-position
270           Configures the style of the scrollback position indicator. One of
271           none, fixed or relative. none disables the indicator completely.
272           fixed always renders the indicator near the top of the window, and
273           relative renders the indicator at the position corresponding to the
274           current scrollback position. Default: relative.
275
276       indicator-format
277           Which format to use when displaying the scrollback position indica‐
278           tor. Either percentage, line, or a custom fixed string. This option
279           is ignored if indicator-position=none. Default: empty string.
280

SECTION: cursor

282       This section controls the cursor style and color. Note that applica‐
283       tions can change these at runtime.
284
285       style
286           Configures the default cursor style, and is one of: block, bar or
287           underline. Note that this can be overridden by applications.
288           Default: block.
289
290       blink
291           Boolean. Enables blinking cursor. Note that this can be overridden
292           by applications. Default: no.
293
294       color
295           Two RRGGBB values specifying the foreground (text) and background
296           (cursor) colors for the cursor. Default: inversed foreground and
297           background colors. Note that this value only applies to the block
298           cursor. The other cursor styles are always rendered with the fore‐
299           ground color.
300

SECTION: mouse

302       hide-when-typing
303           Boolean. When enabled, the mouse cursor is hidden while typing.
304           Default: no.
305
306       alternate-scroll-mode
307           Boolean. This option controls the initial value for the alternate
308           scroll mode. When this mode is enabled, mouse scroll events are
309           translated to up/down key events when displaying the alternate
310           screen.
311
312           This lets you scroll with the mouse in e.g. pagers (like less)
313           without enabling native mouse support in them.
314
315           Alternate scrolling is not used if the application enables native
316           mouse support.
317
318           This option can be modified by applications at run-time using the
319           escape sequences CSI ? 1007 h (enable) and CSI ? 1007 l (disable).
320
321           Default: yes.
322

SECTION: colors

324       This section controls the 16 ANSI colors and the default foreground and
325       background colors. Note that applications can change these at runtime.
326
327       The colors are in RRGGBB format. That is, they do not have an alpha
328       component. You can configure the background transparency with the alpha
329       option.
330
331       foreground
332           Default RRGGBB foreground color. This is the color used when no
333           ANSI color is being used. Default: dcdccc.
334
335       background
336           Default RRGGBB background color. This is the color used when no
337           ANSI color is being used. Default: 111111.
338
339       regular0, regular1 .. regular7
340           The eight basic ANSI colors. Default: 222222, cc9393, 7f9f7f,
341           d0bf8f, 6ca0a3, dc8cc3, 93e0e3 and dcdccc (a variant of the zenburn
342           theme).
343
344       bright0, bright1 .. bright7
345           The eight bright ANSI colors. Default: 666666, dca3a3, bfebbf,
346           f0dfaf, 8cd0d3, fcace3, b3ffff and ffffff (a variant of the zenburn
347           theme).
348
349       alpha
350           Background translucency. A value in the range 0.0-1.0, where 0.0
351           means completely transparent, and 1.0 is opaque. Default: 1.0.
352
353       selection-foreground, selection-background
354           Foreground (text) and background color to use in selected text.
355           Note that both options must be set, or the default will be used.
356           Default: inverse foreground/background.
357
358       jump-labels
359           To RRGGBB values specifying the foreground (text) and background
360           colors to use when rendering jump labels in URL mode. Default: reg‐
361           ular0 regular3.
362
363       urls
364           Color to use for the underline used to highlight URLs in URL mode.
365           Default: regular3.
366

SECTION: csd

368       This section controls the look of the CSDs (Client Side Decorations).
369       Note that the default is to not use CSDs, but instead to use SSDs
370       (Server Side Decorations) when the compositor supports it.
371
372       Note that unlike the colors defined in the colors section, the color
373       values here are in AARRGGBB format. I.e. they contain an alpha compo‐
374       nent.
375
376       preferred
377           Which type of window decorations to prefer: client (CSD), server
378           (SSD) or none.
379
380           Note that this is only a hint to the compositor. Depending on com‐
381           positor support, and how it has been configured, it may instruct
382           foot to use CSDs even though this option has been set to server, or
383           render SSDs despite client or none being set.
384
385           Default: server.
386
387       size
388           Height, in pixels (subject to output scaling), of the titlebar.
389           Default: 26.
390
391       color
392           Titlebar AARRGGBB color. Default: use the default foreground color.
393
394       button-width
395           Width, in pixels (subject to output scaling), of the minimize/maxi‐
396           mize/close buttons. Default: 26.
397
398       button-minimize-color
399           Minimize button's AARRGGBB color. Default: use the default regular4
400           color (blue).
401
402       button-maximize-color
403           Maximize button's AARRGGBB color. Default: use the default regular2
404           color (green).
405
406       button-close-color
407           Close button's AARRGGBB color. Default: use the default regular1
408           color (red).
409

SECTION: key-bindings

411       This section lets you override the default key bindings.
412
413       The general format is action=combo1...comboN. That is, each action may
414       have one or more key combinations, space separated. Each combination is
415       on the form mod1+mod2+key. The names of the modifiers and the key must
416       be valid XKB key names.
417
418       Note that if Shift is one of the modifiers, the key must not be in
419       upper case. For example, Control+Shift+V will never trigger, but Con‐
420       trol+Shift+v will.
421
422       Note that Alt is usually called Mod1.
423
424       A key combination can only be mapped to one action. Lets say you want
425       to bind Control+Shift+R to fullscreen. Since this is the default short‐
426       cut for search-start, you first need to unmap the default binding. This
427       can be done by setting action=none; e.g. search-start=none.
428
429       scrollback-up-page
430           Scrolls up/back one page in history. Default: Shift+Page_Up.
431
432       scrollback-up-half-page
433           Scrolls up/back half of a page in history. Default: not set.
434
435       scrollback-up-line
436           Scrolls up/back a single line in history. Default: not set.
437
438       scrollback-down-page
439           Scroll down/forward one page in history. Default: Shift+Page_Down.
440
441       scrollback-down-half-page
442           Scroll down/forward half of a page in history. Default: not set.
443
444       scrollback-down-line
445           Scroll down/forward a single line in history. Default: not set.
446
447       clipboard-copy
448           Copies the current selection into the clipboard. Default: Con‐
449           trol+Shift+c.
450
451       clipboard-paste
452           Pastes from the clipboard. Default: Control+Shift+v.
453
454       primary-paste
455           Pastes from the primary selection. Default: Shift+Insert (also
456           defined in mouse-bindings).
457
458       search-start
459           Starts a scrollback/history search. Default: Control+Shift+r.
460
461       font-increase
462           Increases the font size by 0.5pt. Default: Control+plus Con‐
463           trol+equal Control+KP_Add.
464
465       font-decrease
466           Decreases the font size by 0.5pt. Default: Control+minus Con‐
467           trol+KP_Subtract.
468
469       font-reset
470           Resets the font size to the default. Default: Control+0 Con‐
471           trol+KP_0.
472
473       spawn-terminal
474           Spawns a new terminal. If the shell has been configured to emit the
475           OSC 7 escape sequence, the new terminal will start in the current
476           working directory. Default: Control+Shift+n.
477
478       minimize
479           Minimizes the window. Default: not bound.
480
481       maximize
482           Toggle the maximized state. Default: not bound.
483
484       fullscreen
485           Toggles the fullscreen state. Default: not bound.
486
487       pipe-visible, pipe-scrollback, pipe-selected
488           Pipes the currently visible text, the entire scrollback, or the
489           currently selected text to an external tool. The syntax for this
490           option is a bit special; the first part of the value is the command
491           to execute enclosed in "[]", followed by the binding(s).
492
493           You can configure multiple pipes as long as the command strings are
494           different and the key bindings are unique.
495
496           Note that the command is not automatically run inside a shell; use
497           sh -c "command line" if you need that.
498
499           Example:
500               pipe-visible=[sh -c "xurls | uniq | tac | fuzzel | xargs -r
501               firefox"] Control+Print
502
503           Default: not bound
504
505       show-urls-launch
506           Enter URL mode, where all currently visible URLs are tagged with a
507           jump label with a key sequence that will open the URL. Default:
508           Control+Shift+u.
509
510       show-urls-copy
511           Enter URL mode, where all currently visible URLs are tagged with a
512           jump label with a key sequence that will place the URL in the clip‐
513           board. Default: none.
514

SECTION: search-bindings

516       This section lets you override the default key bindings used in scroll‐
517       back search mode. The syntax is exactly the same as the regular key-
518       bindings.
519
520       cancel
521           Aborts the search. The viewport is restored and the primary selec‐
522           tion is not updated. Default: Control+g Escape.
523
524       commit
525           Exit search mode and copy current selection into the primary selec‐
526           tion. Viewport is not restored. To copy the selection to the regu‐
527           lar clipboard, use Control+Shift+c. Default: Return.
528
529       find-prev
530           Search backwards in the scrollback history for the next match.
531           Default: Control+r.
532
533       find-next
534           Searches forwards in the scrollback history for the next match.
535           Default: Control+s.
536
537       cursor-left
538           Moves the cursor in the search box one character to the left.
539           Default: Left Control+b.
540
541       cursor-left-word
542           Moves the cursor in the search box one word to the left. Default:
543           Control+Left Mod1+b.
544
545       cursor-right
546           Moves the cursor in the search box one character to the right.
547           Default: Right Control+f.
548
549       cursor-right-word
550           Moves the cursor in the search box one word to the right. Default:
551           Control+Left Mod1+b.
552
553       cursor-home
554           Moves the cursor in the search box to the beginning of the input.
555           Default: Home Control+a.
556
557       cursor-end
558           Moves the cursor in the search box to the end of the input.
559           Default: End Control+e.
560
561       delete-prev
562           Deletes the character before the cursor. Default: BackSpace.
563
564       delete-prev-word
565           Deletes the word before the cursor. Default: Mod1+BackSpace Con‐
566           trol+BackSpace.
567
568       delete-next
569           Deletes the character after the cursor. Default: Delete.
570
571       delete-next-word
572           Deletes the word after the cursor. Default: Mod1+b Control+Delete.
573
574       extend-to-word-boundary
575           Extend current selection to the next word boundary. Default: Con‐
576           trol+w.
577
578       extend-to-next-whitespace
579           Extend the current selection to the next whitespace. Default: Con‐
580           trol+Shift+w.
581
582       clipboard-paste
583           Paste from the clipboard into the search buffer. Default: Control+v
584           Control+y.
585
586       primary-paste
587           Paste from the primary selection into the search buffer. Default:
588           Shift+Insert.
589

SECTION: url-bindings

591       This section lets you override the default key bindings used in URL
592       mode. The syntax is exactly the same as the regular key-bindings.
593
594       cancel
595           Exits URL mode without opening an URL. Default: Control+g Control+d
596           Escape.
597
598       toggle-url-visible
599           By default, the jump label only shows the key sequence required to
600           activate it. This is fine as long as the URL is visible in the
601           original text.
602
603           But with e.g. OSC-8 URLs (the terminal version of HTML anchors,
604           i.e. "links"), the text on the screen can be something completey
605           different than the URL.
606
607           This action toggles between showing and hiding the URL on the jump
608           label.
609
610           Default: t.
611

SECTION: mouse-bindings

613       This section lets you override the default mouse bindings.
614
615       The general format is action=combo1...comboN. That is, each action may
616       have one or more key combinations, space separated. Each combination is
617       on the form mod1+mod2+BTN_<name>[-COUNT]. The names of the modifiers
618       must be valid XKB key names, and the button name must be a valid libin‐
619       put name. You can find the button names using libinput debug-events.
620
621       Note that Shift cannot be used as a modifier in mouse bindings since it
622       is used to enable selection when the client application is grabbing the
623       mouse.
624
625       The trailing COUNT is optional and specifies the click count required
626       to trigger the binding. The default if COUNT is omitted is 1.
627
628       A modifier+button combination can only be mapped to one action. Lets
629       say you want to bind BTN_MIDDLE to fullscreen. Since BTN_MIDDLE is the
630       default binding for primary-paste, you first need to unmap the default
631       binding. This can be done by setting action=none; e.g. primary-
632       paste=none.
633
634       All actions listed under key-bindings can be user here as well.
635
636       select-begin
637           Begin an interactive selection. The selection is finalized, and
638           copied to the primary selection, when the button is released.
639           Default: BTN_LEFT.
640
641       select-begin-block
642           Begin an interactive block selection. The selection is finalized,
643           and copied to the primary selection, when the button is released.
644           Default: Control+BTN_LEFT.
645
646       select-word
647           Begin an interactive word-wise selection, where words are separated
648           by whitespace and all characters defined by the word-delimiters
649           option. The selection is finalized, and copied to the primary
650           selection, when the button is released. Default: BTN_LEFT-2.
651
652       select-word-whitespace
653           Same as select-word, but the characters in the word-delimiters
654           option are ignored. I.e only whitespace characters act as delim‐
655           iters. The selection is finalized, and copied to the primary selec‐
656           tion, when the button is released. Default: Control+_BTN_LEFT-2.
657
658       select-row
659           Begin an interactive row-wise selection. The selection is final‐
660           ized, and copied to the primary selection, when the button is
661           released. Default: BTN_LEFT-3.
662
663       select-extend
664           Interactively extend an existing selection, using the original
665           selection mode (normal, block, word-wise or row-wise). The selec‐
666           tion is finalized, and copied to the primary selection, when the
667           button is released. Default: BTN_RIGHT.
668
669       select-extend-character-wise
670           Same as select-extend, but forces the selection mode to normal
671           (i.e. character wise). Note that this causes subsequent select-
672           extend operations to be character wise. This action is ignored for
673           block selections. Default: Control+BTN_RIGHT.
674
675       primary-paste
676           Pastes from the primary selection. Default: BTN_MIDDLE.
677

TWEAK

679       This section is for advanced users and describes configuration options
680       that can be used to tweak foot's low-level behavior.
681
682       These options are not included in the example configuration. You should
683       not change these unless you understand what they do and note that
684       changing the default values will print a warning when launching foot.
685
686       Note that these options may change, or be removed at any time, without
687       prior notice.
688
689       When reporting bugs, please mention if, and to what, you have changed
690       any of these options.
691
692       scaling-filter
693           Overrides the default scaling filter used when down-scaling bitmap
694           fonts (e.g. emoji fonts). Possible values are none, nearest, bilin‐
695           ear, cubic or lanczos3. cubic and lanczos3 produce the best
696           results, but are slower (with lanczos3 being the best and slowest).
697
698           Default: lanczos3.
699
700       allow-overflowing-double-width-glyphs
701           Boolean. when enabled, double width glyphs with a character width
702           of 1 are allowed to overflow into the neighbouring cell.
703
704           One use case for this is fonts "icon" characters in the Unicode
705           private usage area, e.g. Nerd Fonts, or Powerline Fonts. Without
706           this option, such glyphs will appear "cut off".
707
708           Another use case are legacy emoji characters like WHITE FROWNING
709           FACE.
710
711           Note: this feature uses heuristics to determine which glyphs should
712           be allowed to overflow.
713
714           Default: yes.
715
716       render-timer
717           Enables a frame rendering timer, that prints the time it takes to
718           render each frame, in microseconds, either on-screen, to stderr, or
719           both. Valid values are none, osd, log and both. Default: none.
720
721       box-drawing-base-thickness
722           Line thickness to use for LIGHT box drawing line characters, in
723           points. This value is converted to pixels using the monitor's DPI,
724           and then multiplied with the cell size. The end result is that a
725           larger font (and thus larger cells) result in thicker lines.
726           Default: 0.04.
727
728       delayed-render-lower, delayed-render-upper
729           These two values control the timeouts (in nanoseconds) that are
730           used to mitigate screen flicker caused by clients writing large,
731           non-atomic screen updates.
732
733           If a client splits up a screen update over multiple write(3) calls,
734           we may end up rendering an intermediate frame, quickly followed by
735           another frame with the final screen content. For example, the
736           client may erase part of the screen (or scroll) in one write, and
737           then write new content in one or more subsequent writes. Rendering
738           the frame when the screen has been erased, but not yet filled with
739           new content will be perceived as screen flicker.
740
741           The real solution to this is Application Synchronized Updates
742           (https://gitlab.freedesktop.org/terminal-wg/specifica
743           tions/-/merge_requests/2).
744
745           The problem with this is twofold - first, it has not yet been stan‐
746           dardized, and thus there are not many terminal emulators that
747           implement it (foot does implement it), and second, applications
748           must be patched to use it.
749
750           Until this has happened, foot offers an interim workaround; an
751           attempt to mitigate the screen flicker without affecting neither
752           performance nor latency.
753
754           It is based on the fact that the screen is updated at a fixed
755           interval (typically 60Hz). For us, this means it does not matter if
756           we render a new frame at the beginning of a frame interval, or at
757           the end. Thus, the goal is to introduce a delay between receiving
758           client data and rendering the resulting state, but without causing
759           a frame skip.
760
761           While it should be possible to estimate the amount of time left
762           until the next frame, foot's algorithm is currently not that
763           advanced, but is based on statistics I guess you could say - the
764           delay we introduce is so small that the risk of pushing the frame
765           over to the next frame interval is also very small.
766
767           Now, that was a lot of text. But what is it foot actually does?
768
769           When receiving client data, it schedules a timer, the delayed-ren‐
770           der-lower. If we do not receive any more client data before the
771           timer has run out, we render the frame. If however, we do receive
772           more data, the timer is re-scheduled. That is, each time we receive
773           client data, frame rendering is delayed another delayed-render-
774           lower nanoseconds.
775
776           Now, while this works very well with most clients, it would be pos‐
777           sible to construct a malicious client that keeps writing data at a
778           slow pace. To the user, this would look like foot has frozen as we
779           never get to render a new frame. To prevent this, an upper limit is
780           set - delayed-render-upper. If this timer runs out, we render the
781           frame regardless of what the client is doing.
782
783           If changing these values, note that the lower timeout must be set
784           lower than the upper timeout, but that this is not verified by
785           foot. Furthermore, both values must be less than 16ms (that is,
786           16000000 nanoseconds).
787
788           You can disable the feature altogether by setting either value to
789           0. In this case, frames are rendered "as soon as possible".
790
791           Default: lower=500000 (0.5ms), upper=8333333 (8.3ms - half a frame
792           interval).
793
794       damage-whole-window
795           Boolean. When enabled, foot will 'damage' the entire window each
796           time a frame has been rendered. This forces the compositor to
797           redraw the entire window. If disabled, foot will only 'damage'
798           updated rows.
799
800           There is normally no reason to enable this. However, it has been
801           seen to workaround an issue with fractional scaling in Gnome.
802
803           Note that enabling this option is likely to increase CPU and/or GPU
804           usage (by the compositor, not by foot), and may have a negative
805           impact on battery life.
806
807           Default: no.
808
809       max-shm-pool-size-mb
810           This option controls the amount of virtual memory used by the
811           pixmap memory to which the terminal screen content is rendered.
812
813           It does not change how much physical memory foot uses.
814
815           Foot uses a memory mapping trick to implement fast rendering of
816           interactive scrolling (typically, but applies to "slow" scrolling
817           in general). Example: holding down the 'up' or 'down' arrow key to
818           scroll in a text editor.
819
820           For this to work, it needs a large amount of virtual address space.
821           Again, note that this is not physical memory.
822
823           On a normal x64 based computer, each process has 128TB of virtual
824           address space, and newer ones have 64PB. This is an insane amount
825           and most applications do not use anywhere near that amount.
826
827           Each foot terminal window can allocate up to 2GB of virtual address
828           space. With 128TB of address space, that means a maximum of 65536
829           windows in server/daemon mode (for 2GB). That should be enough,
830           yes?
831
832           However, the Wayland compositor also needs to allocate the same
833           amount of virtual address space. Thus, it has a slightly higher
834           chance of running out of address space since it needs to host all
835           running Wayland clients in the same way, at the same time.
836
837           In the off chance that this becomes a problem for you, you can
838           reduce the amount used with this option.
839
840           Or, for optimal performance, you can increase it to the maximum
841           allowed value, 2GB (but note that you most likely will not notice
842           any difference compared to the default value).
843
844           Setting it to 0 disables the feature.
845
846           Note: this feature is always disabled in 32-bit.
847
848           Default: 512. Maximum allowed: 2048 (2GB).
849

SEE ALSO

851       foot(1), footclient(1)
852
853
854
855                                  2021-03-28                       foot.ini(5)
Impressum