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 usually unnamed, i.e. not pre‐
11 fixed with a [section]. However it can also be explicitly named [main],
12 say if it needs to be reopened after any of the other sections.
13
14 foot will search for a configuration file in the following locations,
15 in this order:
16
17 • XDG_CONFIG_HOME/foot/foot.ini (defaulting to ~/.con‐
18 fig/foot/foot.ini if unset)
19 • XDG_CONFIG_DIRS/foot/foot.ini (defaulting to
20 /etc/xdg/foot/foot.ini if unset)
21
22
23 An example configuration file containing all options with their default
24 value commented out will usually be installed to
25 /etc/xdg/foot/foot.ini.
26
28 shell
29 Executable to launch. Typically a shell. Default: $SHELL if set,
30 otherwise the user's default shell (as specified in /etc/passwd).
31 You can also pass arguments. For example /bin/bash --norc.
32
33 login-shell
34 Boolean. If enabled, the shell will be launched as a login shell,
35 by prepending a '-' to argv[0]. Default: no.
36
37 term
38 Value to set the environment variable TERM to. Default: foot
39
40 font, font-bold, font-italic, font-bold-italic
41 Comma separated list of fonts to use, in fontconfig format. That
42 is, a font name followed by a list of colon-separated options. Most
43 noteworthy is :size=n, which is used to set the font size. Note
44 that the font size is also affected by the dpi-aware option.
45
46 Examples:
47 • Dina:weight=bold:slant=italic
48 • Courier New:size=12
49 • Fantasque Sans Mono:fontfeatures=ss01
50
51
52 For each option, the first font is the primary font. The remaining
53 fonts are fallback fonts that will be used whenever a glyph cannot
54 be found in the primary font.
55
56 The fallback fonts are searched in the order they appear. If a
57 glyph cannot be found in any of the fallback fonts, the dynamic
58 fallback list from fontconfig (for the primary font) is searched.
59
60 font-bold, font-italic and font-bold-italic allow custom fonts to
61 be used for bold/italic/bold+italic fonts. If left unconfigured,
62 the bold/italic variants of the regular font(s) specified in font
63 are used. Note: you may have to tweak the size(s) of the custom
64 bold/italic fonts to match the regular font.
65
66 To disable bold and/or italic fonts, set e.g. font-bold to exactly
67 the same value as font.
68
69 Default: monospace:size=8 (font), not set (font-bold, font-italic,
70 font-bold-italic).
71
72 include
73 Absolute path to configuration file to import.
74
75 The import file has its own section scope. I.e. the including con‐
76 figuration is still in the default section after the include, re‐
77 gardless of which section the included file ends in.
78
79 • The path must be an absolute path, or start with ~/.
80 • Multiple include directives are allowed, but only one path
81 per directive.
82 • Nested imports are allowed.
83
84
85 Default: not set.
86
87 line-height
88 An absolute value, in points, that override line height from the
89 font metrics.
90
91 You can specify a height in pixels by using the px suffix: e.g.
92 line-height=12px.
93
94 See also: vertical-letter-offset.
95
96 Default: not set.
97
98 letter-spacing
99 Spacing between letters, in points. A positive value will increase
100 the cell size, and a negative value shrinks it.
101
102 You can specify a letter spacing in pixels by using the px suffix:
103 e.g. letter-spacing=2px.
104
105 See also: horizontal-letter-offset.
106
107 Default: 0.
108
109 horizontal-letter-offset, vertical-letter-offset
110 Configure the horizontal and vertical offsets used when positioning
111 glyphs within cells, in points, relative to the top left corner.
112
113 To specify an offset in pixels, append px: e.g. horizontal-letter-
114 offset=2px.
115
116 Default: 0.
117
118 underline-offset
119 Use a custom offset for underlines. The offset is, by default, in
120 points and relative the font's baseline. A positive value positions
121 the underline under the baseline, while a negative value positions
122 it above the baseline.
123
124 To specify an offset in pixels, append px: underline-offset=2px.
125
126 If left unset (the default), the offset specified in the font is
127 used, or estimated by foot if the font lacks underline positioning
128 information.
129
130 Default: unset.
131
132 box-drawings-uses-font-glyphs Boolean. When disabled, foot generates
133 box/line drawing characters itself. The are several advantages to
134 doing this instead of using font glyphs:
135
136 • No antialiasing effects where e.g. line endpoints appear
137 dimmed down, or blurred.
138 • Line- and box characters are guaranteed to span the entire
139 cell, resulting in a gap-less appearance.
140 • No alignment issues, i.e. lines are centered when they
141 should be.
142 • Many fonts lack some, or all, of the line- and box drawing
143 characters, causing fallback fonts to be used, which re‐
144 sults in out-of-place looking glyphs (for example, badly
145 sized).
146
147
148 When enabled, box/line drawing characters are rendered using font
149 glyphs. This may result in a more uniform look, in some use cases.
150
151 Default: no.
152
153 dpi-aware
154 auto, yes, or no.
155
156 When set to yes, fonts are sized using the monitor's DPI, making a
157 font of a given size have the same physical size, regardless of
158 monitor. In other words, if you drag a foot window between differ‐
159 ent monitors, the font size remains the same.
160
161 In this mode, the monitor's scaling factor is ignored; doubling the
162 scaling factor will not double the font size.
163
164 When set to no, the monitor's DPI is ignored. The font is instead
165 sized using the monitor's scaling factor; doubling the scaling fac‐
166 tor does double the font size.
167
168 Finally, if set to auto, fonts will be sized using the monitor's
169 DPI if all monitors have a scaling factor of 1. If at least one
170 monitor as a scaling factor larger than 1 (regardless of whether
171 the foot window is mapped on that monitor or not), fonts will be
172 scaled using the scaling factor.
173
174 Note that this option typically does not work with bitmap fonts,
175 which only contains a pre-defined set of sizes, and cannot be dy‐
176 namically scaled. Whichever size (of the available ones) that best
177 matches the DPI or scaling factor, will be used.
178
179 Also note that if the font size has been specified in pixels (:pix‐
180 elsize=N, instead of :size=N), DPI scaling (dpi-aware=yes) will
181 have no effect (the specified pixel size will be used as is). But,
182 if the monitor's scaling factor is used to size the font (dpi-
183 aware=no), the font's pixel size will be multiplied with the scal‐
184 ing factor.
185
186 Default: auto
187
188 pad
189 Padding between border and glyphs, in pixels (subject to output
190 scaling), in the form XxY.
191
192 This will add at least X pixels on both the left and right sides,
193 and Y pixels on the top and bottom sides. The grid content will be
194 anchored in the top left corner. I.e. if the window manager forces
195 an odd window size on foot, the additional pixels will be added to
196 the right and bottom sides.
197
198 To instead center the grid content, append center (e.g. pad=5x5
199 center).
200
201 Default: 2x2.
202
203 resize-delay-ms
204 Time, in milliseconds, of "idle time" before foot sends the new
205 window dimensions to the client application while doing an interac‐
206 tive resize of a foot window. Idle time in this context is a period
207 of time where the window size is not changing.
208
209 In other words, while you are fiddling with the window size, foot
210 does not send the updated dimensions to the client. Only when you
211 pause the fiddling for resize-delay-ms milliseconds is the client
212 updated.
213
214 Emphasis is on while here; as soon as the interactive resize ends
215 (i.e. when you let go of the window border), the final dimensions
216 is sent to the client, without any delays.
217
218 Setting it to 0 disables the delay completely.
219
220 Default: 100.
221
222 initial-window-size-pixels
223 Initial window width and height in pixels (subject to output scal‐
224 ing), in the form WIDTHxHEIGHT. The height includes the titlebar
225 when using CSDs. Mutually exclusive to initial-window-size-chars.
226 Default: 700x500.
227
228 initial-window-size-chars
229 Initial window width and height in characters, in the form WIDTHx‐
230 HEIGHT. Mutually exclusive to initial-window-size-pixels.'
231
232 Note that if you have a multi-monitor setup, with different scaling
233 factors, there is a possibility the window size will not be set
234 correctly. If that is the case, use initial-window-size-pixels in‐
235 stead.
236
237 Default: not set.
238
239 initial-window-mode
240 Initial window mode for each newly spawned window: windowed, maxi‐
241 mized or fullscreen. Default: windowed.
242
243 title
244 Initial window title. Default: foot.
245
246 locked-title
247 Boolean. If enabled, applications are not allowed to change the ti‐
248 tle at run-time. Default: no.
249
250 app-id
251 Value to set the app-id property on the Wayland window to. The com‐
252 positor can use this value to e.g. group multiple windows, or apply
253 window management rules. Default: foot.
254
255 bold-text-in-bright
256 Semi-boolean. When enabled, bold text is rendered in a brighter
257 color (in addition to using a bold font). The color is brightened
258 by increasing its luminance.
259
260 If set to palette-based, rather than a simple yes|true, colors
261 matching one of the 8 regular palette colors will be brightened us‐
262 ing the corresponding bright palette color. Other colors will not
263 be brightened.
264
265 Default: no.
266
267 word-delimiters
268 String of characters that act as word delimiters when selecting
269 text. Note that whitespace characters are always word delimiters,
270 regardless of this setting. Default: ,│`|:"'()[]{}<>
271
272 notify
273 Command to execute to display a notification. ${title} and ${body}
274 will be replaced with the notification's actual title and body
275 (message content).
276
277 ${app-id} is replaced with the value of the command line option
278 --app-id, and defaults to foot.
279
280 ${window-title} is replaced with the current window title.
281
282 Applications can trigger notifications in the following ways:
283
284 • OSC 777: \e]777;notify;<title>;<body>\e\\
285
286
287 By default, notifications are inhibited if the foot window has key‐
288 board focus. See notify-focus-inhibit.
289
290 Default: notify-send -a ${app-id} -i ${app-id} ${title} ${body}.
291
292 notify-focus-inhibit
293 Boolean. If enabled, foot will not display notifications if the
294 terminal window has keyboard focus.
295
296 Default: yes
297
298 selection-target
299 Clipboard target to automatically copy selected text to. One of
300 none, primary, clipboard or both. Default: primary.
301
302 workers
303 Number of threads to use for rendering. Set to 0 to disable multi‐
304 threading. Default: the number of available logical CPUs (including
305 SMT). Note that this is not always the best value. In some cases,
306 the number of physical cores is better.
307
309 urgent
310 When set to yes, foot will signal urgency to the compositor through
311 the XDG activation protocol whenever BEL is received, and the win‐
312 dow does NOT have keyboard foccus.
313
314 If the compositor does not implement this protocol, the margins
315 will be painted in red instead.
316
317 Applications can enable/disable this feature programmatically with
318 the CSI ? 1042 h and CSI ? 1042 l escape sequences.
319
320 Default: no
321
322 notify
323 When set to yes, foot will emit a desktop notification using the
324 command specified in the notify option whenever BEL is received. By
325 default, bell notifications are shown only when the window does not
326 have keyboard focus. See notify-focus-inhibit.
327
328 Default: no
329
330 command
331 When set, foot will execute this command when BEL is received. De‐
332 fault: none
333
334 command-focused
335 Whether to run the command on BEL even while focused. Default: no
336
338 lines
339 Number of scrollback lines. The maximum number of allocated lines
340 will be this value plus the number of visible lines, rounded up to
341 the nearest power of 2. Default: 1000.
342
343 multiplier
344 Amount to multiply mouse scrolling with. It is a decimal number,
345 i.e. fractions are allowed. Default: 3.0.
346
347 indicator-position
348 Configures the style of the scrollback position indicator. One of
349 none, fixed or relative. none disables the indicator completely.
350 fixed always renders the indicator near the top of the window, and
351 relative renders the indicator at the position corresponding to the
352 current scrollback position. Default: relative.
353
354 indicator-format
355 Which format to use when displaying the scrollback position indica‐
356 tor. Either percentage, line, or a custom fixed string. This option
357 is ignored if indicator-position=none. Default: empty string.
358
360 launch
361 Command to execute when opening URLs. ${url} will be replaced with
362 the actual URL. Default: xdg-open ${url}.
363
364 osc8-underline
365 When to underline OSC-8 URLs. Possible values are url-mode and al‐
366 ways.
367
368 When set to url-mode, OSC-8 URLs are only highlighted in URL mode,
369 just like auto-detected URLs.
370
371 When set to always, OSC-8 URLs are always highlighted, regardless
372 of their other attributes (bold, italic etc). Note that this does
373 not make them clickable.
374
375 Default: url-mode
376
377 label-letters
378 String of characters to use when generating key sequences for URL
379 jump labels.
380
381 If you change this option to include the letter t, you should also
382 change the default [url-bindings].toggle-url-visible key binding to
383 avoid a clash.
384
385 Default: sadfjklewcmpgh.
386
387 protocols
388 Comma separated list of protocols (schemes) that should be recog‐
389 nized in URL mode. Note that only auto-detected URLs are affected
390 by this option. OSC-8 URLs are always enabled, regardless of proto‐
391 col. Default: http, https, ftp, ftps, file, gemini, gopher, irc,
392 ircs.
393
394 uri-characters
395 Set of characters allowed in auto-detected URLs. Any character not
396 included in this set constitutes a URL delimiter.
397
398 Default: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU‐
399 VWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[]
400
402 This section controls the cursor style and color. Note that applica‐
403 tions can change these at runtime.
404
405 style
406 Configures the default cursor style, and is one of: block, beam or
407 underline. Note that this can be overridden by applications. De‐
408 fault: block.
409
410 blink
411 Boolean. Enables blinking cursor. Note that this can be overridden
412 by applications. Default: no.
413
414 color
415 Two RRGGBB values (i.e. plain old 6-digit hex values, without pre‐
416 fix) specifying the foreground (text) and background (cursor) col‐
417 ors for the cursor.
418
419 Default: inverse foreground/background colors.
420
421 Note that this value only applies to the block cursor. The other
422 cursor styles are always rendered with the foreground color.
423
424 beam-thickness
425 Thickness (width) of the beam styled cursor. The value is in
426 points, and its exact value thus depends on the monitor's DPI. To
427 instead specify a thickness in pixels, use the px suffix: e.g.
428 beam-thickness=2px. Default: 1.5
429
430 underline-thickness
431 Thickness (height) of the underline styled cursor. The value is in
432 points, and its exact value thus depends on the monitor's DPI.
433
434 To instead specify a thickness in pixels, use the px suffix: e.g.
435 underline-thickness=2px.
436
437 Note that if left unset, the cursor's thickness will scale with the
438 font size, while if set, the size is fixed.
439
440 Default: font underline thickness.
441
443 hide-when-typing
444 Boolean. When enabled, the mouse cursor is hidden while typing. De‐
445 fault: no.
446
447 alternate-scroll-mode
448 Boolean. This option controls the initial value for the alternate
449 scroll mode. When this mode is enabled, mouse scroll events are
450 translated to up/down key events when displaying the alternate
451 screen.
452
453 This lets you scroll with the mouse in e.g. pagers (like less)
454 without enabling native mouse support in them.
455
456 Alternate scrolling is not used if the application enables native
457 mouse support.
458
459 This option can be modified by applications at run-time using the
460 escape sequences CSI ? 1007 h (enable) and CSI ? 1007 l (disable).
461
462 Default: yes.
463
465 This section controls the 16 ANSI colors, the default foreground and
466 background colors, and the extended 256 color palette. Note that appli‐
467 cations can change these at runtime.
468
469 The colors are in RRGGBB format (i.e. plain old 6-digit hex values,
470 without prefix). That is, they do not have an alpha component. You can
471 configure the background transparency with the alpha option.
472
473 foreground
474 Default foreground color. This is the color used when no ANSI color
475 is being used. Default: dcdccc.
476
477 background
478 Default background color. This is the color used when no ANSI color
479 is being used. Default: 111111.
480
481 regular0, regular1 .. regular7
482 The eight basic ANSI colors (Black, Red, Green, Yellow, Blue, Ma‐
483 genta, Cyan, White). Default: 222222, cc9393, 7f9f7f, d0bf8f,
484 6ca0a3, dc8cc3, 93e0e3 and dcdccc (a variant of the zenburn theme).
485
486 bright0, bright1 .. bright7
487 The eight bright ANSI colors (Black, Red, Green, Yellow, Blue, Ma‐
488 genta, Cyan, White). Default: 666666, dca3a3, bfebbf, f0dfaf,
489 8cd0d3, fcace3, b3ffff and ffffff (a variant of the zenburn theme).
490
491 dim0, dim1 .. dim7
492 Custom colors to use with dimmed colors. Dimmed colors do not have
493 an entry in the color palette. Applications emit them by combining
494 a color value, and a "dim" attribute.
495
496 By default, foot implements this by reducing the luminance of the
497 current color. This is a generic approach that applies to both col‐
498 ors from the 256-color palette, as well as 24-bit RGB colors.
499
500 You can change this behavior by setting the dimN options. When set,
501 foot will match the current color against the color palette, and if
502 it matches one of the regularN colors, the corresponding dimN color
503 will be used.
504
505 If instead the current color matches one of the brightN colors, the
506 corresponding regularN color will be used.
507
508 If the current color does not match any known color, it is dimmed
509 by reducing the luminance (i.e. the same behavior as if the dimN
510 options are unconfigured). 24-bit RGB colors will typically fall
511 into this category.
512
513 Note that applications can change the regularN and brighN colors at
514 runtime. However, they have no way of changing the dimN colors. If
515 an application has changed the regularN colors, foot will still use
516 the corresponding dimN color, as configured in foot.ini.
517
518 Default: not set.
519
520 0 .. 255
521 Arbitrary colors in the 256-color palette. Default: for 0 .. 15,
522 see regular and bright defaults above; see
523 https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit for an expla‐
524 nation of the remainder.
525
526 alpha
527 Background translucency. A value in the range 0.0-1.0, where 0.0
528 means completely transparent, and 1.0 is opaque. Default: 1.0.
529
530 selection-foreground, selection-background
531 Foreground (text) and background color to use in selected text.
532 Note that both options must be set, or the default will be used.
533 Default: inverse foreground/background.
534
535 jump-labels
536 Two color values specifying the foreground (text) and background
537 colors to use when rendering jump labels in URL mode. Default: reg‐
538 ular0 regular3.
539
540 scrollback-indicator
541 Two color values specifying the foreground (text) and background
542 (indicator itself) colors for the scrollback indicator. Default:
543 regular0 bright4.
544
545 urls
546 Color to use for the underline used to highlight URLs in URL mode.
547 Default: regular3.
548
550 This section controls the look of the CSDs (Client Side Decorations).
551 Note that the default is to not use CSDs, but instead to use SSDs
552 (Server Side Decorations) when the compositor supports it.
553
554 Note that unlike the colors defined in the colors section, the color
555 values here are in AARRGGBB (i.e. plain old 8-digit hex values) format.
556 I.e. they contain an alpha component - 00 means completely transparent,
557 and ff fully opaque.
558
559 Examples:
560
561 • ffffffff: white, fully opaque
562 • ff000000: black, fully opaque
563 • 7fffffff: white, semi-transparent
564 • ff00ff00: green, fully opaque
565
566
567 preferred
568 Which type of window decorations to prefer: client (CSD), server
569 (SSD) or none.
570
571 Note that this is only a hint to the compositor. Depending on com‐
572 positor support, and how it has been configured, it may instruct
573 foot to use CSDs even though this option has been set to server, or
574 render SSDs despite client or none being set.
575
576 Default: server.
577
578 size
579 Height, in pixels (subject to output scaling), of the titlebar.
580 Setting it to 0 will hide the titlebar, while still showing the
581 border (if border-width is set to a non-zero value). Default: 26.
582
583 color
584 Titlebar color. Default: use the default foreground color.
585
586 font
587 Font to use for the title bar. This is a list of fonts, similar to
588 the main font option. Note that the font will be sized using the
589 title bar size. That is, all :size and :pixelsize attributes will
590 be ignored. Default: primary font.
591
592 hide-when-maximized
593 Boolean. When enabled, the CSD titlebar is hidden when the window
594 is maximized. The completely disable the titlebar, set size to 0
595 instead. Default: no.
596
597 border-width
598 Width of the border, in pixels (subject to output scaling). Note
599 that the border encompasses the entire window, including the title
600 bar. Default: 0.
601
602 border-color
603 Color of border. By default, the title bar color is used. If the
604 title bar color has not been set, the default foreground color
605 (from the color scheme) is used. Default: titlebar color.
606
607 button-width
608 Width, in pixels (subject to output scaling), of the minimize/maxi‐
609 mize/close buttons. Default: 26.
610
611 button-color
612 Foreground color on the minimize/maximize/close buttons. Default:
613 use the default background color.
614
615 button-minimize-color
616 Minimize button's background color. Default: use the default regu‐
617 lar4 color (blue).
618
619 button-maximize-color
620 Maximize button's background color. Default: use the default regu‐
621 lar2 color (green).
622
623 button-close-color
624 Close button's background color. Default: use the default regular1
625 color (red).
626
628 This section lets you override the default key bindings.
629
630 The general format is action=combo1...comboN. That is, each action may
631 have one or more key combinations, space separated. Each combination is
632 in the form mod1+mod2+key. The names of the modifiers and the key must
633 be valid XKB key names.
634
635 Note that if Shift is one of the modifiers, the key must not be in up‐
636 per case. For example, Control+Shift+V will never trigger, but Con‐
637 trol+Shift+v will.
638
639 Note that Alt is usually called Mod1.
640
641 xkbcli interactive-wayland can be useful for finding keysym names.
642
643 A key combination can only be mapped to one action. Lets say you want
644 to bind Control+Shift+R to fullscreen. Since this is the default short‐
645 cut for search-start, you first need to unmap the default binding. This
646 can be done by setting action=none; e.g. search-start=none.
647
648 noop
649 All key combinations listed here will not be sent to the applica‐
650 tion. Default: not bound.
651
652 scrollback-up-page
653 Scrolls up/back one page in history. Default: Shift+Page_Up.
654
655 scrollback-up-half-page
656 Scrolls up/back half of a page in history. Default: not bound.
657
658 scrollback-up-line
659 Scrolls up/back a single line in history. Default: not bound.
660
661 scrollback-down-page
662 Scroll down/forward one page in history. Default: Shift+Page_Down.
663
664 scrollback-down-half-page
665 Scroll down/forward half of a page in history. Default: not bound.
666
667 scrollback-down-line
668 Scroll down/forward a single line in history. Default: not bound.
669
670 scrollback-home
671 Scroll to the beginning of the scrollback. Default: not bound.
672
673 scrollback-end
674 Scroll to the end (bottom) of the scrollback. Default: not bound.
675
676 clipboard-copy
677 Copies the current selection into the clipboard. Default: Con‐
678 trol+Shift+c XF86Copy.
679
680 clipboard-paste
681 Pastes from the clipboard. Default: Control+Shift+v XF86Paste.
682
683 primary-paste
684 Pastes from the primary selection. Default: Shift+Insert (also de‐
685 fined in mouse-bindings).
686
687 search-start
688 Starts a scrollback/history search. Default: Control+Shift+r.
689
690 font-increase
691 Increases the font size by 0.5pt. Default: Control+plus Con‐
692 trol+equal Control+KP_Add.
693
694 font-decrease
695 Decreases the font size by 0.5pt. Default: Control+minus Con‐
696 trol+KP_Subtract.
697
698 font-reset
699 Resets the font size to the default. Default: Control+0 Con‐
700 trol+KP_0.
701
702 spawn-terminal
703 Spawns a new terminal. If the shell has been configured to emit the
704 OSC 7 escape sequence, the new terminal will start in the current
705 working directory. Default: Control+Shift+n.
706
707 minimize
708 Minimizes the window. Default: not bound.
709
710 maximize
711 Toggle the maximized state. Default: not bound.
712
713 fullscreen
714 Toggles the fullscreen state. Default: not bound.
715
716 pipe-visible, pipe-scrollback, pipe-selected
717 Pipes the currently visible text, the entire scrollback, or the
718 currently selected text to an external tool. The syntax for this
719 option is a bit special; the first part of the value is the command
720 to execute enclosed in "[]", followed by the binding(s).
721
722 You can configure multiple pipes as long as the command strings are
723 different and the key bindings are unique.
724
725 Note that the command is not automatically run inside a shell; use
726 sh -c "command line" if you need that.
727
728 Example:
729 pipe-visible=[sh -c "xurls | uniq | tac | fuzzel | xargs -r
730 firefox"] Control+Print
731
732 Default: not bound
733
734 show-urls-launch
735 Enter URL mode, where all currently visible URLs are tagged with a
736 jump label with a key sequence that will open the URL (and exit URL
737 mode). Default: Control+Shift+u.
738
739 show-urls-persistent
740 Similar to show-urls-launch, but does not automatically exit URL
741 mode after activating an URL. Default: none.
742
743 show-urls-copy
744 Enter URL mode, where all currently visible URLs are tagged with a
745 jump label with a key sequence that will place the URL in the clip‐
746 board. Default: none.
747
749 This section lets you override the default key bindings used in scroll‐
750 back search mode. The syntax is exactly the same as the regular key-
751 bindings.
752
753 cancel
754 Aborts the search. The viewport is restored and the primary selec‐
755 tion is not updated. Default: Control+g Control+c Escape.
756
757 commit
758 Exit search mode and copy current selection into the primary selec‐
759 tion. Viewport is not restored. To copy the selection to the regu‐
760 lar clipboard, use Control+Shift+c. Default: Return.
761
762 find-prev
763 Search backwards in the scrollback history for the next match. De‐
764 fault: Control+r.
765
766 find-next
767 Searches forwards in the scrollback history for the next match. De‐
768 fault: Control+s.
769
770 cursor-left
771 Moves the cursor in the search box one character to the left. De‐
772 fault: Left Control+b.
773
774 cursor-left-word
775 Moves the cursor in the search box one word to the left. Default:
776 Control+Left Mod1+b.
777
778 cursor-right
779 Moves the cursor in the search box one character to the right. De‐
780 fault: Right Control+f.
781
782 cursor-right-word
783 Moves the cursor in the search box one word to the right. Default:
784 Control+Right Mod1+f.
785
786 cursor-home
787 Moves the cursor in the search box to the beginning of the input.
788 Default: Home Control+a.
789
790 cursor-end
791 Moves the cursor in the search box to the end of the input. De‐
792 fault: End Control+e.
793
794 delete-prev
795 Deletes the character before the cursor. Default: BackSpace.
796
797 delete-prev-word
798 Deletes the word before the cursor. Default: Mod1+BackSpace Con‐
799 trol+BackSpace.
800
801 delete-next
802 Deletes the character after the cursor. Default: Delete.
803
804 delete-next-word
805 Deletes the word after the cursor. Default: Mod1+d Control+Delete.
806
807 extend-to-word-boundary
808 Extend current selection to the next word boundary. Default: Con‐
809 trol+w.
810
811 extend-to-next-whitespace
812 Extend the current selection to the next whitespace. Default: Con‐
813 trol+Shift+w.
814
815 clipboard-paste
816 Paste from the clipboard into the search buffer. Default: Control+v
817 Control+y.
818
819 primary-paste
820 Paste from the primary selection into the search buffer. Default:
821 Shift+Insert.
822
824 This section lets you override the default key bindings used in URL
825 mode. The syntax is exactly the same as the regular key-bindings.
826
827 Be careful; do not use single-letter keys that are also used in
828 [url].label-letters, as doing so will make some URLs inaccessible.
829
830 cancel
831 Exits URL mode without opening a URL. Default: Control+g Control+c
832 Control+d Escape.
833
834 toggle-url-visible
835 By default, the jump label only shows the key sequence required to
836 activate it. This is fine as long as the URL is visible in the
837 original text.
838
839 But with e.g. OSC-8 URLs (the terminal version of HTML anchors,
840 i.e. "links"), the text on the screen can be something completey
841 different than the URL.
842
843 This action toggles between showing and hiding the URL on the jump
844 label.
845
846 Default: t.
847
849 This section lets you remap key combinations to custom escape se‐
850 quences.
851
852 The format is text=combo1...comboN. That is, the string to emit may
853 have one or more key combinations, space separated. Each combination is
854 in the form mod1+mod2+key. The names of the modifiers and the key must
855 be valid XKB key names.
856
857 The text string specifies the characters, or bytes, to emit when the
858 associated key combination(s) are pressed. There are two ways to spec‐
859 ify a character:
860
861 • Normal, printable characters are written as-is: abcdef.
862 • Bytes (e.g. ESC) are written as two-digit hexadecimal numbers, with
863 a \x prefix: \x1b.
864
865
866 Example: you would like to remap Super+k to the Up key.
867
868 The escape sequence for the Up key is ESC [ A (without the spaces).
869 Thus, we need to specify this in foot.ini (Mod4 is the XKB name for the
870 Super/logo key):
871
872 \x1b[A = Mod4+k
873
874 Another example: to remap Super+c to Control+c:
875
876 \x03 = Mod4+c
877
879 This section lets you override the default mouse bindings.
880
881 The general format is action=combo1...comboN. That is, each action may
882 have one or more key combinations, space separated. Each combination is
883 in the form mod1+mod2+BTN_<name>[-COUNT]. The names of the modifiers
884 must be valid XKB key names, and the button name must be a valid libin‐
885 put name. You can find the button names using libinput debug-events.
886
887 The trailing COUNT is optional and specifies the click count required
888 to trigger the binding. The default if COUNT is omitted is 1.
889
890 A modifier+button combination can only be mapped to one action. Lets
891 say you want to bind BTN_MIDDLE to fullscreen. Since BTN_MIDDLE is the
892 default binding for primary-paste, you first need to unmap the default
893 binding. This can be done by setting action=none; e.g. primary-
894 paste=none.
895
896 selection-override-modifiers
897 The modifiers set in this set (which may be set to any combination
898 of modifiers, e.g. mod1+mod2+mod3, as well as none) are used to en‐
899 able selecting text with the mouse irrespective of whether a client
900 application currently has the mouse grabbed. These modifiers cannot
901 be used as modifiers in mouse bindings. Because the order of bind‐
902 ings is significant, it is best to set this prior to any other
903 mouse bindings that might use modifiers in the default set. De‐
904 fault: Shift
905
906 The actions to which mouse combos can be bound are listed below. All
907 actions listed under key-bindings can be used here as well.
908
909 select-begin
910 Begin an interactive selection. The selection is finalized, and
911 copied to the primary selection, when the button is released. De‐
912 fault: BTN_LEFT.
913
914 select-begin-block
915 Begin an interactive block selection. The selection is finalized,
916 and copied to the primary selection, when the button is released.
917 Default: Control+BTN_LEFT.
918
919 select-word
920 Begin an interactive word-wise selection, where words are separated
921 by whitespace and all characters defined by the word-delimiters op‐
922 tion. The selection is finalized, and copied to the primary selec‐
923 tion, when the button is released. Default: BTN_LEFT-2.
924
925 select-word-whitespace
926 Same as select-word, but the characters in the word-delimiters op‐
927 tion are ignored. I.e only whitespace characters act as delimiters.
928 The selection is finalized, and copied to the primary selection,
929 when the button is released. Default: Control+BTN_LEFT-2.
930
931 select-row
932 Begin an interactive row-wise selection. The selection is final‐
933 ized, and copied to the primary selection, when the button is re‐
934 leased. Default: BTN_LEFT-3.
935
936 select-extend
937 Interactively extend an existing selection, using the original se‐
938 lection mode (normal, block, word-wise or row-wise). The selection
939 is finalized, and copied to the primary selection, when the button
940 is released. Default: BTN_RIGHT.
941
942 select-extend-character-wise
943 Same as select-extend, but forces the selection mode to normal
944 (i.e. character wise). Note that this causes subsequent select-ex‐
945 tend operations to be character wise. This action is ignored for
946 block selections. Default: Control+BTN_RIGHT.
947
948 primary-paste
949 Pastes from the primary selection. Default: BTN_MIDDLE.
950
952 This section is for advanced users and describes configuration options
953 that can be used to tweak foot's low-level behavior.
954
955 These options are not included in the example configuration. You should
956 not change these unless you understand what they do.
957
958 Note that these options may change, or be removed at any time, without
959 prior notice.
960
961 When reporting bugs, please mention if, and to what, you have changed
962 any of these options.
963
964 scaling-filter
965 Overrides the default scaling filter used when down-scaling bitmap
966 fonts (e.g. emoji fonts). Possible values are none, nearest, bilin‐
967 ear, cubic or lanczos3. cubic and lanczos3 produce the best re‐
968 sults, but are slower (with lanczos3 being the best and slowest).
969
970 Default: lanczos3.
971
972 overflowing-glyphs
973 Boolean. When enabled, glyphs wider than their cell(s) are allowed
974 to render into one additional neighbouring cell.
975
976 One use case for this are fonts with wide italic characters that
977 "bend" into the next cell. Without this option, such glyphs will
978 appear "cut off".
979
980 Another use case are fonts with "icon" characters in the Unicode
981 private usage area, e.g. Nerd Fonts, or Powerline Fonts and legacy
982 emoji characters like WHITE FROWNING FACE.
983
984 Note: might impact performance depending on the font used. Espe‐
985 cially small font sizes can cause many overflowing glyphs because
986 of subpixel rendering.
987
988 Default: yes.
989
990 render-timer
991 Enables a frame rendering timer, that prints the time it takes to
992 render each frame, in microseconds, either on-screen, to stderr, or
993 both. Valid values are none, osd, log and both. Default: none.
994
995 box-drawing-base-thickness
996 Line thickness to use for LIGHT box drawing line characters, in
997 points. This value is converted to pixels using the monitor's DPI,
998 and then multiplied with the cell size. The end result is that a
999 larger font (and thus larger cells) result in thicker lines. De‐
1000 fault: 0.04.
1001
1002 box-drawing-solid-shades
1003 Boolean. When enabled, box drawing "shades" (e.g. LIGHT SHADE,
1004 MEDIUM SHADE and DARK SHADE) are rendered as solid blocks using a
1005 darker variant of the current foreground color.
1006
1007 When disabled, they are instead rendered as checker box pattern,
1008 using the current foreground color as is.
1009
1010 Default: yes.
1011
1012 delayed-render-lower, delayed-render-upper
1013 These two values control the timeouts (in nanoseconds) that are
1014 used to mitigate screen flicker caused by clients writing large,
1015 non-atomic screen updates.
1016
1017 If a client splits up a screen update over multiple write(3) calls,
1018 we may end up rendering an intermediate frame, quickly followed by
1019 another frame with the final screen content. For example, the
1020 client may erase part of the screen (or scroll) in one write, and
1021 then write new content in one or more subsequent writes. Rendering
1022 the frame when the screen has been erased, but not yet filled with
1023 new content will be perceived as screen flicker.
1024
1025 The real solution to this is Application Synchronized Updates
1026 (https://gitlab.freedesktop.org/terminal-wg/specifica‐
1027 tions/-/merge_requests/2).
1028
1029 The problem with this is twofold - first, it has not yet been stan‐
1030 dardized, and thus there are not many terminal emulators that im‐
1031 plement it (foot does implement it), and second, applications must
1032 be patched to use it.
1033
1034 Until this has happened, foot offers an interim workaround; an at‐
1035 tempt to mitigate the screen flicker without affecting neither per‐
1036 formance nor latency.
1037
1038 It is based on the fact that the screen is updated at a fixed in‐
1039 terval (typically 60Hz). For us, this means it does not matter if
1040 we render a new frame at the beginning of a frame interval, or at
1041 the end. Thus, the goal is to introduce a delay between receiving
1042 client data and rendering the resulting state, but without causing
1043 a frame skip.
1044
1045 While it should be possible to estimate the amount of time left un‐
1046 til the next frame, foot's algorithm is currently not that ad‐
1047 vanced, but is based on statistics I guess you could say - the de‐
1048 lay we introduce is so small that the risk of pushing the frame
1049 over to the next frame interval is also very small.
1050
1051 Now, that was a lot of text. But what is it foot actually does?
1052
1053 When receiving client data, it schedules a timer, the delayed-ren‐
1054 der-lower. If we do not receive any more client data before the
1055 timer has run out, we render the frame. If however, we do receive
1056 more data, the timer is re-scheduled. That is, each time we receive
1057 client data, frame rendering is delayed another delayed-render-
1058 lower nanoseconds.
1059
1060 Now, while this works very well with most clients, it would be pos‐
1061 sible to construct a malicious client that keeps writing data at a
1062 slow pace. To the user, this would look like foot has frozen as we
1063 never get to render a new frame. To prevent this, an upper limit is
1064 set - delayed-render-upper. If this timer runs out, we render the
1065 frame regardless of what the client is doing.
1066
1067 If changing these values, note that the lower timeout must be set
1068 lower than the upper timeout, but that this is not verified by
1069 foot. Furthermore, both values must be less than 16ms (that is,
1070 16000000 nanoseconds).
1071
1072 You can disable the feature altogether by setting either value to
1073 0. In this case, frames are rendered "as soon as possible".
1074
1075 Default: lower=500000 (0.5ms), upper=8333333 (8.3ms - half a frame
1076 interval).
1077
1078 damage-whole-window
1079 Boolean. When enabled, foot will 'damage' the entire window each
1080 time a frame has been rendered. This forces the compositor to re‐
1081 draw the entire window. If disabled, foot will only 'damage' up‐
1082 dated rows.
1083
1084 There is normally no reason to enable this. However, it has been
1085 seen to workaround an issue with fractional scaling in Gnome.
1086
1087 Note that enabling this option is likely to increase CPU and/or GPU
1088 usage (by the compositor, not by foot), and may have a negative im‐
1089 pact on battery life.
1090
1091 Default: no.
1092
1093 grapheme-shaping
1094 Boolean. When enabled, foot will use utf8proc to do grapheme clus‐
1095 ter segmentation while parsing "printed" text. Then, when render‐
1096 ing, it will use fcft (if compiled with HarfBuzz support) to shape
1097 the grapheme clusters.
1098
1099 This is required to render e.g. flag (emoji) sequences, keycap se‐
1100 quences, modifier sequences, zero-width-joiner (ZWJ) sequences and
1101 emoji tag sequences. It might also improve rendering of composed
1102 characters, depending on font.
1103
1104 • foot must have been compiled with utf8proc support
1105 • fcft must have been compiled with HarfBuzz support
1106
1107
1108 See also: grapheme-width-method.
1109
1110 Default: yes
1111
1112 grapheme-width-method
1113 Selects which method to use when calculating the width (i.e. number
1114 of columns) of a grapheme cluster. One of wcswidth, double-width
1115 and max.
1116
1117 wcswidth simply adds together the individual width of all code‐
1118 points making up the cluster.
1119
1120 double-width does the same, but limits the maximum number of col‐
1121 umns to 2. This is more correct, but may break some applications
1122 since applications typically use wcswidth(3) internally to calcu‐
1123 late the width. This results in cursor de-synchronization issues.
1124
1125 max uses the width of the largest codepoint in the cluster.
1126
1127 Default: wcswidth
1128
1129 font-monospace-warn
1130 Boolean. When enabled, foot will use heuristics to try to verify
1131 the primary font is a monospace font, and warn if it is not.
1132
1133 Disable this if you still want to use the font, even if foot thinks
1134 it is not monospaced.
1135
1136 You may also want to disable it to get slightly faster startup
1137 times.
1138
1139 Default: yes
1140
1141 max-shm-pool-size-mb
1142 This option controls the amount of virtual address space used by
1143 the pixmap memory to which the terminal screen content is rendered.
1144
1145 It does not change how much physical memory foot uses.
1146
1147 Foot uses a memory mapping trick to implement fast rendering of in‐
1148 teractive scrolling (typically, but applies to "slow" scrolling in
1149 general). Example: holding down the 'up' or 'down' arrow key to
1150 scroll in a text editor.
1151
1152 For this to work, it needs a large amount of virtual address space.
1153 Again, note that this is not physical memory.
1154
1155 On a normal x64 based computer, each process has 128TB of virtual
1156 address space, and newer ones have 64PB. This is an insane amount
1157 and most applications do not use anywhere near that amount.
1158
1159 Each foot terminal window can allocate up to 2GB of virtual address
1160 space. With 128TB of address space, that means a maximum of 65536
1161 windows in server/daemon mode (for 2GB). That should be enough,
1162 yes?
1163
1164 However, the Wayland compositor also needs to allocate the same
1165 amount of virtual address space. Thus, it has a slightly higher
1166 chance of running out of address space since it needs to host all
1167 running Wayland clients in the same way, at the same time.
1168
1169 In the off chance that this becomes a problem for you, you can re‐
1170 duce the amount used with this option.
1171
1172 Or, for optimal performance, you can increase it to the maximum al‐
1173 lowed value, 2GB (but note that you most likely will not notice any
1174 difference compared to the default value).
1175
1176 Setting it to 0 disables the feature.
1177
1178 Limitations:
1179 • only supported on 64-bit architectures
1180 • only supported on Linux
1181
1182
1183 Default: 512. Maximum allowed: 2048 (2GB).
1184
1185 sixel
1186 Boolean. When enabled, foot will process sixel images. Default: yes
1187
1189 foot(1), footclient(1)
1190
1191
1192
1193 2022-04-28 foot.ini(5)