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 box-drawings-uses-font-glyphs
98 Boolean. When disabled, foot generates box/line drawing characters
99 itself. The are several advantages to doing this instead of using
100 font glyphs:
101
102 • No antialiasing effects where e.g. line endpoints appear
103 dimmed down, or blurred.
104 • Line- and box characters are guaranteed to span the entire
105 cell, resulting in a gap-less appearance.
106 • No alignment issues, i.e. lines are centered when they
107 should be.
108 • Many fonts lack some, or all, of the line- and box drawing
109 characters, causing fallback fonts to be used, which re‐
110 sults in out-of-place looking glyphs (for example, badly
111 sized).
112
113
114 When enabled, box/line drawing characters are rendered using font
115 glyphs. This may result in a more uniform look, in some use cases.
116
117 Default: no.
118
119 dpi-aware
120 auto, yes, or no. When set to yes, fonts are sized using the moni‐
121 tor's DPI, making a font of a given size have the same physical
122 size, regardless of monitor. In other words, if you drag a foot
123 window between different monitors, the font size remains the same.
124
125 In this mode, the monitor's scaling factor is ignored; doubling the
126 scaling factor will not double the font size.
127
128 When set to no, the monitor's DPI is ignored. The font is instead
129 sized using the monitor's scaling factor; doubling the scaling fac‐
130 tor does double the font size.
131
132 Finally, if set to auto, fonts will be sized using the monitor's
133 DPI on monitors with a scaling factor of 1, but otherwise using the
134 scaling factor.
135
136 Default: auto
137
138 pad
139 Padding between border and glyphs, in pixels (subject to output
140 scaling), on the form XxY.
141
142 This will add at least X pixels on both the left and right sides,
143 and Y pixels on the top and bottom sides. The grid content will be
144 anchored in the top left corner. I.e. if the window manager forces
145 an odd window size on foot, the additional pixels will be added to
146 the right and bottom sides.
147
148 To instead center the grid content, append center (e.g. pad=5x5
149 center).
150
151 Default: 2x2.
152
153 resize-delay-ms
154 Time, in milliseconds, of "idle time" "before foot sends the new
155 window dimensions to the client application while doing an interac‐
156 tive resize of a foot window. Idle time in this context is a period
157 of time where the window size is not changing.
158
159 In other words, while you are fiddling with the window size, foot
160 does not send the updated dimensions to the client. Only when you
161 pause the fiddling for relay-size-ms milliseconds is the client up‐
162 dated.
163
164 Emphasis is on while here; as soon as the interactive resize ends
165 (i.e. when you let go of the window border), the final dimensions
166 is sent to the client, without any delays.
167
168 Setting it to 0 disables the delay completely.
169
170 Default: 100.
171
172 initial-window-size-pixels
173 Initial window width and height in pixels (subject to output scal‐
174 ing), on the form WIDTHxHEIGHT. The height includes the titlebar
175 when using CSDs. Mutually exclusive to initial-window-size-chars.
176 Default: 700x500.
177
178 initial-window-size-chars
179 Initial window width and height in characters, on the form WIDTHx‐
180 HEIGHT. Mutually exclusive to initial-window-size-pixels.'
181
182 Note that if you have a multi-monitor setup, with different scaling
183 factors, there is a possibility the window size will not be set
184 correctly. If that is the case, use initial-window-size-pixels in‐
185 stead.
186
187 Default: not set.
188
189 initial-window-mode
190 Initial window mode for each newly spawned window: windowed, maxi‐
191 mized or fullscreen. Default: windowed.
192
193 title
194 Initial window title. Default: foot.
195
196 app-id
197 Value to set the app-id property on the Wayland window to. The com‐
198 positor can use this value to e.g. group multiple windows, or apply
199 window management rules. Default: foot.
200
201 bold-text-in-bright
202 Semi-boolean. When enabled, bold text is rendered in a brighter
203 color (in addition to using a bold font). The color is brightened
204 by increasing its luminance.
205
206 If set to palette-based, rather than a simple yes|true, colors
207 matching one of the 8 regular palette colors will be brightened us‐
208 ing the corresponding bright palette color. Other colors will be
209 brightened by increasing the luminance.
210
211 Default: no.
212
213 bell
214 Action to perform when receiving a BEL character. Can be set to ei‐
215 ther set-urgency, notify or none.
216
217 When set to set-urgency, the margins will be painted in red when‐
218 ever BEL is received while the window does not have keyboard focus.
219 Note that Wayland currently does not have an urgency hint like X11.
220 The value set-urgency was chosen for forward-compatibility in the
221 hopes that a corresponding Wayland protocol is added in the future
222 (in which case foot will use that instead of painting its margins
223 red).
224
225 Applications can enable/disable this feature programmatically with
226 the CSI ? 1042 h and CSI ? 1042 l escape sequences.
227
228 Note: expect this feature to be replaced with proper compositor ur‐
229 gency support once/if that gets implemented.
230
231 When set to notify, foot will emit a desktop notification using the
232 command specified in the notify option, but only if the foot window
233 does not have keyboard focus.
234
235 When set to none, no special action is taken when receiving BEL.
236
237 Default: none.
238
239 word-delimiters
240 String of characters that act as word delimiters when selecting
241 text. Note that whitespace characters are always word delimiters,
242 regardless of this setting. Default: ,│`|:"'()[]{}<>
243
244 jump-label-letters
245 String of characters that will be when generating key sequences for
246 URL jump labels. Default: sadfjklewcmpgh.
247
248 notify
249 Command to execute to display a notification. ${title} and ${body}
250 will be replaced with the notification's actual title and body
251 (message content).
252
253 Applications can trigger notifications in the following ways:
254
255 • OSC 777: \e]777;notify;<title>;<body>\e\\
256
257
258 Notifications are inhibited if the foot window has keyboard focus.
259
260 Default: notify-send -a foot -i foot ${title} ${body}.
261
262 url-launch
263 Command to execute when opening URLs. ${url} will be replaced with
264 the actual URL. Default: xdg-open ${url}.
265
266 selection-target
267 Clipboard target to automatically copy selected text to. One of
268 none, primary, clipboard or both. Default: primary.
269
270 workers
271 Number of threads to use for rendering. Set to 0 to disable multi‐
272 threading. Default: the number of available logical CPUs (including
273 SMT). Note that this is not always the best value. In some cases,
274 the number of physical cores is better.
275
276 osc8-underline
277 When to underline OSC-8 URLs. Possible values are url-mode and al‐
278 ways.
279
280 When set to url-mode, OSC-8 URLs are only highlighted in URL mode,
281 just like auto-detected URLs.
282
283 When set to always, OSC-8 URLs are always highlighted, regardless
284 of their other attributes (bold, italic etc). Note that this does
285 not make them clickable.
286
287 Default: url-mode
288
290 lines
291 Number of scrollback lines. The maximum number of allocated lines
292 will be this value plus the number of visible lines, rounded up to
293 the nearest power of 2. Default: 1000.
294
295 multiplier
296 Amount to multiply mouse scrolling with. It is a decimal number,
297 i.e. fractions are allowed. Default: 3.0.
298
299 indicator-position
300 Configures the style of the scrollback position indicator. One of
301 none, fixed or relative. none disables the indicator completely.
302 fixed always renders the indicator near the top of the window, and
303 relative renders the indicator at the position corresponding to the
304 current scrollback position. Default: relative.
305
306 indicator-format
307 Which format to use when displaying the scrollback position indica‐
308 tor. Either percentage, line, or a custom fixed string. This option
309 is ignored if indicator-position=none. Default: empty string.
310
312 This section controls the cursor style and color. Note that applica‐
313 tions can change these at runtime.
314
315 style
316 Configures the default cursor style, and is one of: block, bar or
317 underline. Note that this can be overridden by applications. De‐
318 fault: block.
319
320 blink
321 Boolean. Enables blinking cursor. Note that this can be overridden
322 by applications. Default: no.
323
324 color
325 Two RRGGBB values specifying the foreground (text) and background
326 (cursor) colors for the cursor. Default: inversed foreground and
327 background colors. Note that this value only applies to the block
328 cursor. The other cursor styles are always rendered with the fore‐
329 ground color.
330
332 hide-when-typing
333 Boolean. When enabled, the mouse cursor is hidden while typing. De‐
334 fault: no.
335
336 alternate-scroll-mode
337 Boolean. This option controls the initial value for the alternate
338 scroll mode. When this mode is enabled, mouse scroll events are
339 translated to up/down key events when displaying the alternate
340 screen.
341
342 This lets you scroll with the mouse in e.g. pagers (like less)
343 without enabling native mouse support in them.
344
345 Alternate scrolling is not used if the application enables native
346 mouse support.
347
348 This option can be modified by applications at run-time using the
349 escape sequences CSI ? 1007 h (enable) and CSI ? 1007 l (disable).
350
351 Default: yes.
352
354 This section controls the 16 ANSI colors and the default foreground and
355 background colors. Note that applications can change these at runtime.
356
357 The colors are in RRGGBB format. That is, they do not have an alpha
358 component. You can configure the background transparency with the alpha
359 option.
360
361 foreground
362 Default RRGGBB foreground color. This is the color used when no
363 ANSI color is being used. Default: dcdccc.
364
365 background
366 Default RRGGBB background color. This is the color used when no
367 ANSI color is being used. Default: 111111.
368
369 regular0, regular1 .. regular7
370 The eight basic ANSI colors. Default: 222222, cc9393, 7f9f7f,
371 d0bf8f, 6ca0a3, dc8cc3, 93e0e3 and dcdccc (a variant of the zenburn
372 theme).
373
374 bright0, bright1 .. bright7
375 The eight bright ANSI colors. Default: 666666, dca3a3, bfebbf,
376 f0dfaf, 8cd0d3, fcace3, b3ffff and ffffff (a variant of the zenburn
377 theme).
378
379 alpha
380 Background translucency. A value in the range 0.0-1.0, where 0.0
381 means completely transparent, and 1.0 is opaque. Default: 1.0.
382
383 selection-foreground, selection-background
384 Foreground (text) and background color to use in selected text.
385 Note that both options must be set, or the default will be used.
386 Default: inverse foreground/background.
387
388 jump-labels
389 To RRGGBB values specifying the foreground (text) and background
390 colors to use when rendering jump labels in URL mode. Default: reg‐
391 ular0 regular3.
392
393 urls
394 Color to use for the underline used to highlight URLs in URL mode.
395 Default: regular3.
396
398 This section controls the look of the CSDs (Client Side Decorations).
399 Note that the default is to not use CSDs, but instead to use SSDs
400 (Server Side Decorations) when the compositor supports it.
401
402 Note that unlike the colors defined in the colors section, the color
403 values here are in AARRGGBB format. I.e. they contain an alpha compo‐
404 nent.
405
406 preferred
407 Which type of window decorations to prefer: client (CSD), server
408 (SSD) or none.
409
410 Note that this is only a hint to the compositor. Depending on com‐
411 positor support, and how it has been configured, it may instruct
412 foot to use CSDs even though this option has been set to server, or
413 render SSDs despite client or none being set.
414
415 Default: server.
416
417 size
418 Height, in pixels (subject to output scaling), of the titlebar. De‐
419 fault: 26.
420
421 color
422 Titlebar AARRGGBB color. Default: use the default foreground color.
423
424 button-width
425 Width, in pixels (subject to output scaling), of the minimize/maxi‐
426 mize/close buttons. Default: 26.
427
428 button-minimize-color
429 Minimize button's AARRGGBB color. Default: use the default regular4
430 color (blue).
431
432 button-maximize-color
433 Maximize button's AARRGGBB color. Default: use the default regular2
434 color (green).
435
436 button-close-color
437 Close button's AARRGGBB color. Default: use the default regular1
438 color (red).
439
441 This section lets you override the default key bindings.
442
443 The general format is action=combo1...comboN. That is, each action may
444 have one or more key combinations, space separated. Each combination is
445 on the form mod1+mod2+key. The names of the modifiers and the key must
446 be valid XKB key names.
447
448 Note that if Shift is one of the modifiers, the key must not be in up‐
449 per case. For example, Control+Shift+V will never trigger, but Con‐
450 trol+Shift+v will.
451
452 Note that Alt is usually called Mod1.
453
454 A key combination can only be mapped to one action. Lets say you want
455 to bind Control+Shift+R to fullscreen. Since this is the default short‐
456 cut for search-start, you first need to unmap the default binding. This
457 can be done by setting action=none; e.g. search-start=none.
458
459 scrollback-up-page
460 Scrolls up/back one page in history. Default: Shift+Page_Up.
461
462 scrollback-up-half-page
463 Scrolls up/back half of a page in history. Default: not set.
464
465 scrollback-up-line
466 Scrolls up/back a single line in history. Default: not set.
467
468 scrollback-down-page
469 Scroll down/forward one page in history. Default: Shift+Page_Down.
470
471 scrollback-down-half-page
472 Scroll down/forward half of a page in history. Default: not set.
473
474 scrollback-down-line
475 Scroll down/forward a single line in history. Default: not set.
476
477 clipboard-copy
478 Copies the current selection into the clipboard. Default: Con‐
479 trol+Shift+c.
480
481 clipboard-paste
482 Pastes from the clipboard. Default: Control+Shift+v.
483
484 primary-paste
485 Pastes from the primary selection. Default: Shift+Insert (also de‐
486 fined in mouse-bindings).
487
488 search-start
489 Starts a scrollback/history search. Default: Control+Shift+r.
490
491 font-increase
492 Increases the font size by 0.5pt. Default: Control+plus Con‐
493 trol+equal Control+KP_Add.
494
495 font-decrease
496 Decreases the font size by 0.5pt. Default: Control+minus Con‐
497 trol+KP_Subtract.
498
499 font-reset
500 Resets the font size to the default. Default: Control+0 Con‐
501 trol+KP_0.
502
503 spawn-terminal
504 Spawns a new terminal. If the shell has been configured to emit the
505 OSC 7 escape sequence, the new terminal will start in the current
506 working directory. Default: Control+Shift+n.
507
508 minimize
509 Minimizes the window. Default: not bound.
510
511 maximize
512 Toggle the maximized state. Default: not bound.
513
514 fullscreen
515 Toggles the fullscreen state. Default: not bound.
516
517 pipe-visible, pipe-scrollback, pipe-selected
518 Pipes the currently visible text, the entire scrollback, or the
519 currently selected text to an external tool. The syntax for this
520 option is a bit special; the first part of the value is the command
521 to execute enclosed in "[]", followed by the binding(s).
522
523 You can configure multiple pipes as long as the command strings are
524 different and the key bindings are unique.
525
526 Note that the command is not automatically run inside a shell; use
527 sh -c "command line" if you need that.
528
529 Example:
530 pipe-visible=[sh -c "xurls | uniq | tac | fuzzel | xargs -r
531 firefox"] Control+Print
532
533 Default: not bound
534
535 show-urls-launch
536 Enter URL mode, where all currently visible URLs are tagged with a
537 jump label with a key sequence that will open the URL. Default:
538 Control+Shift+u.
539
540 show-urls-copy
541 Enter URL mode, where all currently visible URLs are tagged with a
542 jump label with a key sequence that will place the URL in the clip‐
543 board. Default: none.
544
546 This section lets you override the default key bindings used in scroll‐
547 back search mode. The syntax is exactly the same as the regular key-
548 bindings.
549
550 cancel
551 Aborts the search. The viewport is restored and the primary selec‐
552 tion is not updated. Default: Control+g Escape.
553
554 commit
555 Exit search mode and copy current selection into the primary selec‐
556 tion. Viewport is not restored. To copy the selection to the regu‐
557 lar clipboard, use Control+Shift+c. Default: Return.
558
559 find-prev
560 Search backwards in the scrollback history for the next match. De‐
561 fault: Control+r.
562
563 find-next
564 Searches forwards in the scrollback history for the next match. De‐
565 fault: Control+s.
566
567 cursor-left
568 Moves the cursor in the search box one character to the left. De‐
569 fault: Left Control+b.
570
571 cursor-left-word
572 Moves the cursor in the search box one word to the left. Default:
573 Control+Left Mod1+b.
574
575 cursor-right
576 Moves the cursor in the search box one character to the right. De‐
577 fault: Right Control+f.
578
579 cursor-right-word
580 Moves the cursor in the search box one word to the right. Default:
581 Control+Left Mod1+b.
582
583 cursor-home
584 Moves the cursor in the search box to the beginning of the input.
585 Default: Home Control+a.
586
587 cursor-end
588 Moves the cursor in the search box to the end of the input. De‐
589 fault: End Control+e.
590
591 delete-prev
592 Deletes the character before the cursor. Default: BackSpace.
593
594 delete-prev-word
595 Deletes the word before the cursor. Default: Mod1+BackSpace Con‐
596 trol+BackSpace.
597
598 delete-next
599 Deletes the character after the cursor. Default: Delete.
600
601 delete-next-word
602 Deletes the word after the cursor. Default: Mod1+d Control+Delete.
603
604 extend-to-word-boundary
605 Extend current selection to the next word boundary. Default: Con‐
606 trol+w.
607
608 extend-to-next-whitespace
609 Extend the current selection to the next whitespace. Default: Con‐
610 trol+Shift+w.
611
612 clipboard-paste
613 Paste from the clipboard into the search buffer. Default: Control+v
614 Control+y.
615
616 primary-paste
617 Paste from the primary selection into the search buffer. Default:
618 Shift+Insert.
619
621 This section lets you override the default key bindings used in URL
622 mode. The syntax is exactly the same as the regular key-bindings.
623
624 cancel
625 Exits URL mode without opening an URL. Default: Control+g Control+d
626 Escape.
627
628 toggle-url-visible
629 By default, the jump label only shows the key sequence required to
630 activate it. This is fine as long as the URL is visible in the
631 original text.
632
633 But with e.g. OSC-8 URLs (the terminal version of HTML anchors,
634 i.e. "links"), the text on the screen can be something completey
635 different than the URL.
636
637 This action toggles between showing and hiding the URL on the jump
638 label.
639
640 Default: t.
641
643 This section lets you override the default mouse bindings.
644
645 The general format is action=combo1...comboN. That is, each action may
646 have one or more key combinations, space separated. Each combination is
647 on the form mod1+mod2+BTN_<name>[-COUNT]. The names of the modifiers
648 must be valid XKB key names, and the button name must be a valid libin‐
649 put name. You can find the button names using libinput debug-events.
650
651 Note that Shift cannot be used as a modifier in mouse bindings since it
652 is used to enable selection when the client application is grabbing the
653 mouse.
654
655 The trailing COUNT is optional and specifies the click count required
656 to trigger the binding. The default if COUNT is omitted is 1.
657
658 A modifier+button combination can only be mapped to one action. Lets
659 say you want to bind BTN_MIDDLE to fullscreen. Since BTN_MIDDLE is the
660 default binding for primary-paste, you first need to unmap the default
661 binding. This can be done by setting action=none; e.g. primary-
662 paste=none.
663
664 All actions listed under key-bindings can be user here as well.
665
666 select-begin
667 Begin an interactive selection. The selection is finalized, and
668 copied to the primary selection, when the button is released. De‐
669 fault: BTN_LEFT.
670
671 select-begin-block
672 Begin an interactive block selection. The selection is finalized,
673 and copied to the primary selection, when the button is released.
674 Default: Control+BTN_LEFT.
675
676 select-word
677 Begin an interactive word-wise selection, where words are separated
678 by whitespace and all characters defined by the word-delimiters op‐
679 tion. The selection is finalized, and copied to the primary selec‐
680 tion, when the button is released. Default: BTN_LEFT-2.
681
682 select-word-whitespace
683 Same as select-word, but the characters in the word-delimiters op‐
684 tion are ignored. I.e only whitespace characters act as delimiters.
685 The selection is finalized, and copied to the primary selection,
686 when the button is released. Default: Control+_BTN_LEFT-2.
687
688 select-row
689 Begin an interactive row-wise selection. The selection is final‐
690 ized, and copied to the primary selection, when the button is re‐
691 leased. Default: BTN_LEFT-3.
692
693 select-extend
694 Interactively extend an existing selection, using the original se‐
695 lection mode (normal, block, word-wise or row-wise). The selection
696 is finalized, and copied to the primary selection, when the button
697 is released. Default: BTN_RIGHT.
698
699 select-extend-character-wise
700 Same as select-extend, but forces the selection mode to normal
701 (i.e. character wise). Note that this causes subsequent select-ex‐
702 tend operations to be character wise. This action is ignored for
703 block selections. Default: Control+BTN_RIGHT.
704
705 primary-paste
706 Pastes from the primary selection. Default: BTN_MIDDLE.
707
709 This section is for advanced users and describes configuration options
710 that can be used to tweak foot's low-level behavior.
711
712 These options are not included in the example configuration. You should
713 not change these unless you understand what they do and note that
714 changing the default values will print a warning when launching foot.
715
716 Note that these options may change, or be removed at any time, without
717 prior notice.
718
719 When reporting bugs, please mention if, and to what, you have changed
720 any of these options.
721
722 scaling-filter
723 Overrides the default scaling filter used when down-scaling bitmap
724 fonts (e.g. emoji fonts). Possible values are none, nearest, bilin‐
725 ear, cubic or lanczos3. cubic and lanczos3 produce the best re‐
726 sults, but are slower (with lanczos3 being the best and slowest).
727
728 Default: lanczos3.
729
730 allow-overflowing-double-width-glyphs
731 Boolean. when enabled, double width glyphs with a character width
732 of 1 are allowed to overflow into the neighbouring cell.
733
734 One use case for this is fonts "icon" characters in the Unicode
735 private usage area, e.g. Nerd Fonts, or Powerline Fonts. Without
736 this option, such glyphs will appear "cut off".
737
738 Another use case are legacy emoji characters like WHITE FROWNING
739 FACE.
740
741 Note: this feature uses heuristics to determine which glyphs should
742 be allowed to overflow.
743
744 Default: yes.
745
746 render-timer
747 Enables a frame rendering timer, that prints the time it takes to
748 render each frame, in microseconds, either on-screen, to stderr, or
749 both. Valid values are none, osd, log and both. Default: none.
750
751 box-drawing-base-thickness
752 Line thickness to use for LIGHT box drawing line characters, in
753 points. This value is converted to pixels using the monitor's DPI,
754 and then multiplied with the cell size. The end result is that a
755 larger font (and thus larger cells) result in thicker lines. De‐
756 fault: 0.04.
757
758 delayed-render-lower, delayed-render-upper
759 These two values control the timeouts (in nanoseconds) that are
760 used to mitigate screen flicker caused by clients writing large,
761 non-atomic screen updates.
762
763 If a client splits up a screen update over multiple write(3) calls,
764 we may end up rendering an intermediate frame, quickly followed by
765 another frame with the final screen content. For example, the
766 client may erase part of the screen (or scroll) in one write, and
767 then write new content in one or more subsequent writes. Rendering
768 the frame when the screen has been erased, but not yet filled with
769 new content will be perceived as screen flicker.
770
771 The real solution to this is Application Synchronized Updates
772 (https://gitlab.freedesktop.org/terminal-wg/specifica‐
773 tions/-/merge_requests/2).
774
775 The problem with this is twofold - first, it has not yet been stan‐
776 dardized, and thus there are not many terminal emulators that im‐
777 plement it (foot does implement it), and second, applications must
778 be patched to use it.
779
780 Until this has happened, foot offers an interim workaround; an at‐
781 tempt to mitigate the screen flicker without affecting neither per‐
782 formance nor latency.
783
784 It is based on the fact that the screen is updated at a fixed in‐
785 terval (typically 60Hz). For us, this means it does not matter if
786 we render a new frame at the beginning of a frame interval, or at
787 the end. Thus, the goal is to introduce a delay between receiving
788 client data and rendering the resulting state, but without causing
789 a frame skip.
790
791 While it should be possible to estimate the amount of time left un‐
792 til the next frame, foot's algorithm is currently not that ad‐
793 vanced, but is based on statistics I guess you could say - the de‐
794 lay we introduce is so small that the risk of pushing the frame
795 over to the next frame interval is also very small.
796
797 Now, that was a lot of text. But what is it foot actually does?
798
799 When receiving client data, it schedules a timer, the delayed-ren‐
800 der-lower. If we do not receive any more client data before the
801 timer has run out, we render the frame. If however, we do receive
802 more data, the timer is re-scheduled. That is, each time we receive
803 client data, frame rendering is delayed another delayed-render-
804 lower nanoseconds.
805
806 Now, while this works very well with most clients, it would be pos‐
807 sible to construct a malicious client that keeps writing data at a
808 slow pace. To the user, this would look like foot has frozen as we
809 never get to render a new frame. To prevent this, an upper limit is
810 set - delayed-render-upper. If this timer runs out, we render the
811 frame regardless of what the client is doing.
812
813 If changing these values, note that the lower timeout must be set
814 lower than the upper timeout, but that this is not verified by
815 foot. Furthermore, both values must be less than 16ms (that is,
816 16000000 nanoseconds).
817
818 You can disable the feature altogether by setting either value to
819 0. In this case, frames are rendered "as soon as possible".
820
821 Default: lower=500000 (0.5ms), upper=8333333 (8.3ms - half a frame
822 interval).
823
824 damage-whole-window
825 Boolean. When enabled, foot will 'damage' the entire window each
826 time a frame has been rendered. This forces the compositor to re‐
827 draw the entire window. If disabled, foot will only 'damage' up‐
828 dated rows.
829
830 There is normally no reason to enable this. However, it has been
831 seen to workaround an issue with fractional scaling in Gnome.
832
833 Note that enabling this option is likely to increase CPU and/or GPU
834 usage (by the compositor, not by foot), and may have a negative im‐
835 pact on battery life.
836
837 Default: no.
838
839 max-shm-pool-size-mb
840 This option controls the amount of virtual memory used by the
841 pixmap memory to which the terminal screen content is rendered.
842
843 It does not change how much physical memory foot uses.
844
845 Foot uses a memory mapping trick to implement fast rendering of in‐
846 teractive scrolling (typically, but applies to "slow" scrolling in
847 general). Example: holding down the 'up' or 'down' arrow key to
848 scroll in a text editor.
849
850 For this to work, it needs a large amount of virtual address space.
851 Again, note that this is not physical memory.
852
853 On a normal x64 based computer, each process has 128TB of virtual
854 address space, and newer ones have 64PB. This is an insane amount
855 and most applications do not use anywhere near that amount.
856
857 Each foot terminal window can allocate up to 2GB of virtual address
858 space. With 128TB of address space, that means a maximum of 65536
859 windows in server/daemon mode (for 2GB). That should be enough,
860 yes?
861
862 However, the Wayland compositor also needs to allocate the same
863 amount of virtual address space. Thus, it has a slightly higher
864 chance of running out of address space since it needs to host all
865 running Wayland clients in the same way, at the same time.
866
867 In the off chance that this becomes a problem for you, you can re‐
868 duce the amount used with this option.
869
870 Or, for optimal performance, you can increase it to the maximum al‐
871 lowed value, 2GB (but note that you most likely will not notice any
872 difference compared to the default value).
873
874 Setting it to 0 disables the feature.
875
876 Note: this feature is always disabled in 32-bit.
877
878 Default: 512. Maximum allowed: 2048 (2GB).
879
881 foot(1), footclient(1)
882
883
884
885 2021-04-18 foot.ini(5)