1foot.ini(5) File Formats Manual foot.ini(5)
2
3
4
6 foot.ini - configuration file for foot(1)
7
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
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
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
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
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
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
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
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
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
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
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
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
851 foot(1), footclient(1)
852
853
854
855 2021-03-28 foot.ini(5)