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 $HOME/.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 This section is used to define environment variables that will be set
310 in the client application, in addition to the variables inherited from
311 the terminal process itself.
312
313 The format is simply:
314
315 name=value
316
317 Note: do not set TERM here; use the term option in the main (default)
318 section instead.
319
321 urgent
322 When set to yes, foot will signal urgency to the compositor through
323 the XDG activation protocol whenever BEL is received, and the win‐
324 dow does NOT have keyboard foccus.
325
326 If the compositor does not implement this protocol, the margins
327 will be painted in red instead.
328
329 Applications can enable/disable this feature programmatically with
330 the CSI ? 1042 h and CSI ? 1042 l escape sequences.
331
332 Default: no
333
334 notify
335 When set to yes, foot will emit a desktop notification using the
336 command specified in the notify option whenever BEL is received. By
337 default, bell notifications are shown only when the window does not
338 have keyboard focus. See notify-focus-inhibit.
339
340 Default: no
341
342 command
343 When set, foot will execute this command when BEL is received. De‐
344 fault: none
345
346 command-focused
347 Whether to run the command on BEL even while focused. Default: no
348
350 lines
351 Number of scrollback lines. The maximum number of allocated lines
352 will be this value plus the number of visible lines, rounded up to
353 the nearest power of 2. Default: 1000.
354
355 multiplier
356 Amount to multiply mouse scrolling with. It is a decimal number,
357 i.e. fractions are allowed. Default: 3.0.
358
359 indicator-position
360 Configures the style of the scrollback position indicator. One of
361 none, fixed or relative. none disables the indicator completely.
362 fixed always renders the indicator near the top of the window, and
363 relative renders the indicator at the position corresponding to the
364 current scrollback position. Default: relative.
365
366 indicator-format
367 Which format to use when displaying the scrollback position indica‐
368 tor. Either percentage, line, or a custom fixed string. This option
369 is ignored if indicator-position=none. Default: empty string.
370
372 launch
373 Command to execute when opening URLs. ${url} will be replaced with
374 the actual URL. Default: xdg-open ${url}.
375
376 osc8-underline
377 When to underline OSC-8 URLs. Possible values are url-mode and al‐
378 ways.
379
380 When set to url-mode, OSC-8 URLs are only highlighted in URL mode,
381 just like auto-detected URLs.
382
383 When set to always, OSC-8 URLs are always highlighted, regardless
384 of their other attributes (bold, italic etc). Note that this does
385 not make them clickable.
386
387 Default: url-mode
388
389 label-letters
390 String of characters to use when generating key sequences for URL
391 jump labels.
392
393 If you change this option to include the letter t, you should also
394 change the default [url-bindings].toggle-url-visible key binding to
395 avoid a clash.
396
397 Default: sadfjklewcmpgh.
398
399 protocols
400 Comma separated list of protocols (schemes) that should be recog‐
401 nized in URL mode. Note that only auto-detected URLs are affected
402 by this option. OSC-8 URLs are always enabled, regardless of proto‐
403 col. Default: http, https, ftp, ftps, file, gemini, gopher, irc,
404 ircs.
405
406 uri-characters
407 Set of characters allowed in auto-detected URLs. Any character not
408 included in this set constitutes a URL delimiter.
409
410 Default: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU‐
411 VWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[]
412
414 This section controls the cursor style and color. Note that applica‐
415 tions can change these at runtime.
416
417 style
418 Configures the default cursor style, and is one of: block, beam or
419 underline. Note that this can be overridden by applications. De‐
420 fault: block.
421
422 blink
423 Boolean. Enables blinking cursor. Note that this can be overridden
424 by applications. Default: no.
425
426 color
427 Two RRGGBB values (i.e. plain old 6-digit hex values, without pre‐
428 fix) specifying the foreground (text) and background (cursor) col‐
429 ors for the cursor.
430
431 Default: inverse foreground/background colors.
432
433 Note that this value only applies to the block cursor. The other
434 cursor styles are always rendered with the foreground color.
435
436 beam-thickness
437 Thickness (width) of the beam styled cursor. The value is in
438 points, and its exact value thus depends on the monitor's DPI. To
439 instead specify a thickness in pixels, use the px suffix: e.g.
440 beam-thickness=2px. Default: 1.5
441
442 underline-thickness
443 Thickness (height) of the underline styled cursor. The value is in
444 points, and its exact value thus depends on the monitor's DPI.
445
446 To instead specify a thickness in pixels, use the px suffix: e.g.
447 underline-thickness=2px.
448
449 Note that if left unset, the cursor's thickness will scale with the
450 font size, while if set, the size is fixed.
451
452 Default: font underline thickness.
453
455 hide-when-typing
456 Boolean. When enabled, the mouse cursor is hidden while typing. De‐
457 fault: no.
458
459 alternate-scroll-mode
460 Boolean. This option controls the initial value for the alternate
461 scroll mode. When this mode is enabled, mouse scroll events are
462 translated to up/down key events when displaying the alternate
463 screen.
464
465 This lets you scroll with the mouse in e.g. pagers (like less)
466 without enabling native mouse support in them.
467
468 Alternate scrolling is not used if the application enables native
469 mouse support.
470
471 This option can be modified by applications at run-time using the
472 escape sequences CSI ? 1007 h (enable) and CSI ? 1007 l (disable).
473
474 Default: yes.
475
477 This section controls the 16 ANSI colors, the default foreground and
478 background colors, and the extended 256 color palette. Note that appli‐
479 cations can change these at runtime.
480
481 The colors are in RRGGBB format (i.e. plain old 6-digit hex values,
482 without prefix). That is, they do not have an alpha component. You can
483 configure the background transparency with the alpha option.
484
485 foreground
486 Default foreground color. This is the color used when no ANSI color
487 is being used. Default: dcdccc.
488
489 background
490 Default background color. This is the color used when no ANSI color
491 is being used. Default: 111111.
492
493 regular0, regular1 .. regular7
494 The eight basic ANSI colors (Black, Red, Green, Yellow, Blue, Ma‐
495 genta, Cyan, White). Default: 222222, cc9393, 7f9f7f, d0bf8f,
496 6ca0a3, dc8cc3, 93e0e3 and dcdccc (a variant of the zenburn theme).
497
498 bright0, bright1 .. bright7
499 The eight bright ANSI colors (Black, Red, Green, Yellow, Blue, Ma‐
500 genta, Cyan, White). Default: 666666, dca3a3, bfebbf, f0dfaf,
501 8cd0d3, fcace3, b3ffff and ffffff (a variant of the zenburn theme).
502
503 dim0, dim1 .. dim7
504 Custom colors to use with dimmed colors. Dimmed colors do not have
505 an entry in the color palette. Applications emit them by combining
506 a color value, and a "dim" attribute.
507
508 By default, foot implements this by reducing the luminance of the
509 current color. This is a generic approach that applies to both col‐
510 ors from the 256-color palette, as well as 24-bit RGB colors.
511
512 You can change this behavior by setting the dimN options. When set,
513 foot will match the current color against the color palette, and if
514 it matches one of the regularN colors, the corresponding dimN color
515 will be used.
516
517 If instead the current color matches one of the brightN colors, the
518 corresponding regularN color will be used.
519
520 If the current color does not match any known color, it is dimmed
521 by reducing the luminance (i.e. the same behavior as if the dimN
522 options are unconfigured). 24-bit RGB colors will typically fall
523 into this category.
524
525 Note that applications can change the regularN and brighN colors at
526 runtime. However, they have no way of changing the dimN colors. If
527 an application has changed the regularN colors, foot will still use
528 the corresponding dimN color, as configured in foot.ini.
529
530 Default: not set.
531
532 0 .. 255
533 Arbitrary colors in the 256-color palette. Default: for 0 .. 15,
534 see regular and bright defaults above; see
535 https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit for an expla‐
536 nation of the remainder.
537
538 alpha
539 Background translucency. A value in the range 0.0-1.0, where 0.0
540 means completely transparent, and 1.0 is opaque. Default: 1.0.
541
542 selection-foreground, selection-background
543 Foreground (text) and background color to use in selected text.
544 Note that both options must be set, or the default will be used.
545 Default: inverse foreground/background.
546
547 jump-labels
548 Two color values specifying the foreground (text) and background
549 colors to use when rendering jump labels in URL mode. Default: reg‐
550 ular0 regular3.
551
552 scrollback-indicator
553 Two color values specifying the foreground (text) and background
554 (indicator itself) colors for the scrollback indicator. Default:
555 regular0 bright4.
556
557 search-box-no-match
558 Two color values specifying the foreground (text) and background
559 colors for the scrollback search box, when there are no matches.
560 Default: regular0 regular1.
561
562 search-box-match
563 Two color values specifying the foreground (text) and background
564 colors for the scrollback search box, when the search box is either
565 empty, or there are matches. Default: regular0 regular3.
566
567 urls
568 Color to use for the underline used to highlight URLs in URL mode.
569 Default: regular3.
570
572 This section controls the look of the CSDs (Client Side Decorations).
573 Note that the default is to not use CSDs, but instead to use SSDs
574 (Server Side Decorations) when the compositor supports it.
575
576 Note that unlike the colors defined in the colors section, the color
577 values here are in AARRGGBB (i.e. plain old 8-digit hex values) format.
578 I.e. they contain an alpha component - 00 means completely transparent,
579 and ff fully opaque.
580
581 Examples:
582
583 • ffffffff: white, fully opaque
584 • ff000000: black, fully opaque
585 • 7fffffff: white, semi-transparent
586 • ff00ff00: green, fully opaque
587
588
589 preferred
590 Which type of window decorations to prefer: client (CSD), server
591 (SSD) or none.
592
593 Note that this is only a hint to the compositor. Depending on com‐
594 positor support, and how it has been configured, it may instruct
595 foot to use CSDs even though this option has been set to server, or
596 render SSDs despite client or none being set.
597
598 Default: server.
599
600 size
601 Height, in pixels (subject to output scaling), of the titlebar.
602 Setting it to 0 will hide the titlebar, while still showing the
603 border (if border-width is set to a non-zero value). Default: 26.
604
605 color
606 Titlebar color. Default: use the default foreground color.
607
608 font
609 Font to use for the title bar. This is a list of fonts, similar to
610 the main font option. Note that the font will be sized using the
611 title bar size. That is, all :size and :pixelsize attributes will
612 be ignored. Default: primary font.
613
614 hide-when-maximized
615 Boolean. When enabled, the CSD titlebar is hidden when the window
616 is maximized. The completely disable the titlebar, set size to 0
617 instead. Default: no.
618
619 border-width
620 Width of the border, in pixels (subject to output scaling). Note
621 that the border encompasses the entire window, including the title
622 bar. Default: 0.
623
624 border-color
625 Color of border. By default, the title bar color is used. If the
626 title bar color has not been set, the default foreground color
627 (from the color scheme) is used. Default: titlebar color.
628
629 button-width
630 Width, in pixels (subject to output scaling), of the minimize/maxi‐
631 mize/close buttons. Default: 26.
632
633 button-color
634 Foreground color on the minimize/maximize/close buttons. Default:
635 use the default background color.
636
637 button-minimize-color
638 Minimize button's background color. Default: use the default regu‐
639 lar4 color (blue).
640
641 button-maximize-color
642 Maximize button's background color. Default: use the default regu‐
643 lar2 color (green).
644
645 button-close-color
646 Close button's background color. Default: use the default regular1
647 color (red).
648
650 This section lets you override the default key bindings.
651
652 The general format is action=combo1...comboN. That is, each action may
653 have one or more key combinations, space separated. Each combination is
654 in the form mod1+mod2+key. The names of the modifiers and the key must
655 be valid XKB key names.
656
657 Note that if Shift is one of the modifiers, the key must not be in up‐
658 per case. For example, Control+Shift+V will never trigger, but Con‐
659 trol+Shift+v will.
660
661 Note that Alt is usually called Mod1.
662
663 xkbcli interactive-wayland can be useful for finding keysym names.
664
665 A key combination can only be mapped to one action. Lets say you want
666 to bind Control+Shift+R to fullscreen. Since this is the default short‐
667 cut for search-start, you first need to unmap the default binding. This
668 can be done by setting action=none; e.g. search-start=none.
669
670 noop
671 All key combinations listed here will not be sent to the applica‐
672 tion. Default: not bound.
673
674 scrollback-up-page
675 Scrolls up/back one page in history. Default: Shift+Page_Up.
676
677 scrollback-up-half-page
678 Scrolls up/back half of a page in history. Default: not bound.
679
680 scrollback-up-line
681 Scrolls up/back a single line in history. Default: not bound.
682
683 scrollback-down-page
684 Scroll down/forward one page in history. Default: Shift+Page_Down.
685
686 scrollback-down-half-page
687 Scroll down/forward half of a page in history. Default: not bound.
688
689 scrollback-down-line
690 Scroll down/forward a single line in history. Default: not bound.
691
692 scrollback-home
693 Scroll to the beginning of the scrollback. Default: not bound.
694
695 scrollback-end
696 Scroll to the end (bottom) of the scrollback. Default: not bound.
697
698 clipboard-copy
699 Copies the current selection into the clipboard. Default: Con‐
700 trol+Shift+c XF86Copy.
701
702 clipboard-paste
703 Pastes from the clipboard. Default: Control+Shift+v XF86Paste.
704
705 primary-paste
706 Pastes from the primary selection. Default: Shift+Insert (also de‐
707 fined in mouse-bindings).
708
709 search-start
710 Starts a scrollback/history search. Default: Control+Shift+r.
711
712 font-increase
713 Increases the font size by 0.5pt. Default: Control+plus Con‐
714 trol+equal Control+KP_Add.
715
716 font-decrease
717 Decreases the font size by 0.5pt. Default: Control+minus Con‐
718 trol+KP_Subtract.
719
720 font-reset
721 Resets the font size to the default. Default: Control+0 Con‐
722 trol+KP_0.
723
724 spawn-terminal
725 Spawns a new terminal. If the shell has been configured to emit the
726 OSC 7 escape sequence, the new terminal will start in the current
727 working directory. Default: Control+Shift+n.
728
729 minimize
730 Minimizes the window. Default: not bound.
731
732 maximize
733 Toggle the maximized state. Default: not bound.
734
735 fullscreen
736 Toggles the fullscreen state. Default: not bound.
737
738 pipe-visible, pipe-scrollback, pipe-selected
739 Pipes the currently visible text, the entire scrollback, or the
740 currently selected text to an external tool. The syntax for this
741 option is a bit special; the first part of the value is the command
742 to execute enclosed in "[]", followed by the binding(s).
743
744 You can configure multiple pipes as long as the command strings are
745 different and the key bindings are unique.
746
747 Note that the command is not automatically run inside a shell; use
748 sh -c "command line" if you need that.
749
750 Example:
751 pipe-visible=[sh -c "xurls | uniq | tac | fuzzel | xargs -r
752 firefox"] Control+Print
753
754 Default: not bound
755
756 show-urls-launch
757 Enter URL mode, where all currently visible URLs are tagged with a
758 jump label with a key sequence that will open the URL (and exit URL
759 mode). Default: Control+Shift+u.
760
761 show-urls-persistent
762 Similar to show-urls-launch, but does not automatically exit URL
763 mode after activating an URL. Default: none.
764
765 show-urls-copy
766 Enter URL mode, where all currently visible URLs are tagged with a
767 jump label with a key sequence that will place the URL in the clip‐
768 board. Default: none.
769
770 prompt-prev
771 Jump to the previous, currently not visible, prompt (requires shell
772 integration, see foot(1)). Default: Control+Shift+z.
773
774 prompt-next
775 Jump the next prompt (requires shell integration, see foot(1)). De‐
776 fault: Control+Shift+x.
777
778 unicode-input
779 Input a Unicode character by typing its codepoint in hexadecimal,
780 followed by Enter or Space.
781
782 For example, to input the character ö (LATIN SMALL LETTER O WITH
783 DIAERESIS, Unicode codepoint 0xf6), you would first activate this
784 key binding, then type: f, 6, Enter.
785
786 Another example: to input 😍 (SMILING FACE WITH HEART-SHAPED EYES,
787 Unicode codepoint 0x1f60d), activate this key binding, then type:
788 1, f, 6, 0, d, Enter.
789
790 Recognized key bindings in Unicode input mode:
791
792 • Enter, Space: commit the Unicode character, then exit this
793 mode.
794 • Escape, q, Ctrl+c, Ctrl+d, Ctrl+g: abort input, then exit this
795 mode.
796 • 0-9, a-f: append next digit to the Unicode's codepoint.
797 • Backspace: undo the last digit.
798
799
800 Note that there is no visual feedback while in this mode. This is
801 by design; foot's Unicode input mode is considered to be a fall‐
802 back. The preferred way of entering Unicode characters, emojis etc
803 is by using an IME.
804
805 Default: none.
806
808 This section lets you override the default key bindings used in scroll‐
809 back search mode. The syntax is exactly the same as the regular key-
810 bindings.
811
812 cancel
813 Aborts the search. The viewport is restored and the primary selec‐
814 tion is not updated. Default: Control+g Control+c Escape.
815
816 commit
817 Exit search mode and copy current selection into the primary selec‐
818 tion. Viewport is not restored. To copy the selection to the regu‐
819 lar clipboard, use Control+Shift+c. Default: Return.
820
821 find-prev
822 Search backwards in the scrollback history for the next match. De‐
823 fault: Control+r.
824
825 find-next
826 Searches forwards in the scrollback history for the next match. De‐
827 fault: Control+s.
828
829 cursor-left
830 Moves the cursor in the search box one character to the left. De‐
831 fault: Left Control+b.
832
833 cursor-left-word
834 Moves the cursor in the search box one word to the left. Default:
835 Control+Left Mod1+b.
836
837 cursor-right
838 Moves the cursor in the search box one character to the right. De‐
839 fault: Right Control+f.
840
841 cursor-right-word
842 Moves the cursor in the search box one word to the right. Default:
843 Control+Right Mod1+f.
844
845 cursor-home
846 Moves the cursor in the search box to the beginning of the input.
847 Default: Home Control+a.
848
849 cursor-end
850 Moves the cursor in the search box to the end of the input. De‐
851 fault: End Control+e.
852
853 delete-prev
854 Deletes the character before the cursor. Default: BackSpace.
855
856 delete-prev-word
857 Deletes the word before the cursor. Default: Mod1+BackSpace Con‐
858 trol+BackSpace.
859
860 delete-next
861 Deletes the character after the cursor. Default: Delete.
862
863 delete-next-word
864 Deletes the word after the cursor. Default: Mod1+d Control+Delete.
865
866 extend-to-word-boundary
867 Extend current selection to the next word boundary. Default: Con‐
868 trol+w.
869
870 extend-to-next-whitespace
871 Extend the current selection to the next whitespace. Default: Con‐
872 trol+Shift+w.
873
874 clipboard-paste
875 Paste from the clipboard into the search buffer. Default: Control+v
876 Control+y.
877
878 primary-paste
879 Paste from the primary selection into the search buffer. Default:
880 Shift+Insert.
881
882 unicode-input
883 Unicode input mode. See key-bindings.unicode-input for details. De‐
884 fault: none.
885
887 This section lets you override the default key bindings used in URL
888 mode. The syntax is exactly the same as the regular key-bindings.
889
890 Be careful; do not use single-letter keys that are also used in
891 [url].label-letters, as doing so will make some URLs inaccessible.
892
893 cancel
894 Exits URL mode without opening a URL. Default: Control+g Control+c
895 Control+d Escape.
896
897 toggle-url-visible
898 By default, the jump label only shows the key sequence required to
899 activate it. This is fine as long as the URL is visible in the
900 original text.
901
902 But with e.g. OSC-8 URLs (the terminal version of HTML anchors,
903 i.e. "links"), the text on the screen can be something completey
904 different than the URL.
905
906 This action toggles between showing and hiding the URL on the jump
907 label.
908
909 Default: t.
910
912 This section lets you remap key combinations to custom escape se‐
913 quences.
914
915 The format is text=combo1...comboN. That is, the string to emit may
916 have one or more key combinations, space separated. Each combination is
917 in the form mod1+mod2+key. The names of the modifiers and the key must
918 be valid XKB key names.
919
920 The text string specifies the characters, or bytes, to emit when the
921 associated key combination(s) are pressed. There are two ways to spec‐
922 ify a character:
923
924 • Normal, printable characters are written as-is: abcdef.
925 • Bytes (e.g. ESC) are written as two-digit hexadecimal numbers, with
926 a \x prefix: \x1b.
927
928
929 Example: you would like to remap Super+k to the Up key.
930
931 The escape sequence for the Up key is ESC [ A (without the spaces).
932 Thus, we need to specify this in foot.ini (Mod4 is the XKB name for the
933 Super/logo key):
934
935 \x1b[A = Mod4+k
936
937 Another example: to remap Super+c to Control+c:
938
939 \x03 = Mod4+c
940
942 This section lets you override the default mouse bindings.
943
944 The general format is action=combo1...comboN. That is, each action may
945 have one or more key combinations, space separated. Each combination is
946 in the form mod1+mod2+BTN_<name>[-COUNT]. The names of the modifiers
947 must be valid XKB key names, and the button name must be a valid libin‐
948 put name. You can find the button names using libinput debug-events.
949
950 The trailing COUNT is optional and specifies the click count required
951 to trigger the binding. The default if COUNT is omitted is 1.
952
953 A modifier+button combination can only be mapped to one action. Lets
954 say you want to bind BTN_MIDDLE to fullscreen. Since BTN_MIDDLE is the
955 default binding for primary-paste, you first need to unmap the default
956 binding. This can be done by setting action=none; e.g. primary-
957 paste=none.
958
959 selection-override-modifiers
960 The modifiers set in this set (which may be set to any combination
961 of modifiers, e.g. mod1+mod2+mod3, as well as none) are used to en‐
962 able selecting text with the mouse irrespective of whether a client
963 application currently has the mouse grabbed. These modifiers cannot
964 be used as modifiers in mouse bindings. Because the order of bind‐
965 ings is significant, it is best to set this prior to any other
966 mouse bindings that might use modifiers in the default set. De‐
967 fault: Shift
968
969 The actions to which mouse combos can be bound are listed below. All
970 actions listed under key-bindings can be used here as well.
971
972 select-begin
973 Begin an interactive selection. The selection is finalized, and
974 copied to the primary selection, when the button is released. De‐
975 fault: BTN_LEFT.
976
977 select-begin-block
978 Begin an interactive block selection. The selection is finalized,
979 and copied to the primary selection, when the button is released.
980 Default: Control+BTN_LEFT.
981
982 select-word
983 Begin an interactive word-wise selection, where words are separated
984 by whitespace and all characters defined by the word-delimiters op‐
985 tion. The selection is finalized, and copied to the primary selec‐
986 tion, when the button is released. Default: BTN_LEFT-2.
987
988 select-word-whitespace
989 Same as select-word, but the characters in the word-delimiters op‐
990 tion are ignored. I.e only whitespace characters act as delimiters.
991 The selection is finalized, and copied to the primary selection,
992 when the button is released. Default: Control+BTN_LEFT-2.
993
994 select-row
995 Begin an interactive row-wise selection. The selection is final‐
996 ized, and copied to the primary selection, when the button is re‐
997 leased. Default: BTN_LEFT-3.
998
999 select-extend
1000 Interactively extend an existing selection, using the original se‐
1001 lection mode (normal, block, word-wise or row-wise). The selection
1002 is finalized, and copied to the primary selection, when the button
1003 is released. Default: BTN_RIGHT.
1004
1005 select-extend-character-wise
1006 Same as select-extend, but forces the selection mode to normal
1007 (i.e. character wise). Note that this causes subsequent select-ex‐
1008 tend operations to be character wise. This action is ignored for
1009 block selections. Default: Control+BTN_RIGHT.
1010
1011 primary-paste
1012 Pastes from the primary selection. Default: BTN_MIDDLE.
1013
1015 This section is for advanced users and describes configuration options
1016 that can be used to tweak foot's low-level behavior.
1017
1018 These options are not included in the example configuration. You should
1019 not change these unless you understand what they do.
1020
1021 Note that these options may change, or be removed at any time, without
1022 prior notice.
1023
1024 When reporting bugs, please mention if, and to what, you have changed
1025 any of these options.
1026
1027 scaling-filter
1028 Overrides the default scaling filter used when down-scaling bitmap
1029 fonts (e.g. emoji fonts). Possible values are none, nearest, bilin‐
1030 ear, cubic or lanczos3. cubic and lanczos3 produce the best re‐
1031 sults, but are slower (with lanczos3 being the best and slowest).
1032
1033 Default: lanczos3.
1034
1035 overflowing-glyphs
1036 Boolean. When enabled, glyphs wider than their cell(s) are allowed
1037 to render into one additional neighbouring cell.
1038
1039 One use case for this are fonts with wide italic characters that
1040 "bend" into the next cell. Without this option, such glyphs will
1041 appear "cut off".
1042
1043 Another use case are fonts with "icon" characters in the Unicode
1044 private usage area, e.g. Nerd Fonts, or Powerline Fonts and legacy
1045 emoji characters like WHITE FROWNING FACE.
1046
1047 Note: might impact performance depending on the font used. Espe‐
1048 cially small font sizes can cause many overflowing glyphs because
1049 of subpixel rendering.
1050
1051 Default: yes.
1052
1053 render-timer
1054 Enables a frame rendering timer, that prints the time it takes to
1055 render each frame, in microseconds, either on-screen, to stderr, or
1056 both. Valid values are none, osd, log and both. Default: none.
1057
1058 box-drawing-base-thickness
1059 Line thickness to use for LIGHT box drawing line characters, in
1060 points. This value is converted to pixels using the monitor's DPI,
1061 and then multiplied with the cell size. The end result is that a
1062 larger font (and thus larger cells) result in thicker lines. De‐
1063 fault: 0.04.
1064
1065 box-drawing-solid-shades
1066 Boolean. When enabled, box drawing "shades" (e.g. LIGHT SHADE,
1067 MEDIUM SHADE and DARK SHADE) are rendered as solid blocks using a
1068 darker variant of the current foreground color.
1069
1070 When disabled, they are instead rendered as checker box pattern,
1071 using the current foreground color as is.
1072
1073 Default: yes.
1074
1075 delayed-render-lower, delayed-render-upper
1076 These two values control the timeouts (in nanoseconds) that are
1077 used to mitigate screen flicker caused by clients writing large,
1078 non-atomic screen updates.
1079
1080 If a client splits up a screen update over multiple write(3) calls,
1081 we may end up rendering an intermediate frame, quickly followed by
1082 another frame with the final screen content. For example, the
1083 client may erase part of the screen (or scroll) in one write, and
1084 then write new content in one or more subsequent writes. Rendering
1085 the frame when the screen has been erased, but not yet filled with
1086 new content will be perceived as screen flicker.
1087
1088 The real solution to this is Application Synchronized Updates
1089 (https://gitlab.freedesktop.org/terminal-wg/specifica‐
1090 tions/-/merge_requests/2).
1091
1092 The problem with this is twofold - first, it has not yet been stan‐
1093 dardized, and thus there are not many terminal emulators that im‐
1094 plement it (foot does implement it), and second, applications must
1095 be patched to use it.
1096
1097 Until this has happened, foot offers an interim workaround; an at‐
1098 tempt to mitigate the screen flicker without affecting neither per‐
1099 formance nor latency.
1100
1101 It is based on the fact that the screen is updated at a fixed in‐
1102 terval (typically 60Hz). For us, this means it does not matter if
1103 we render a new frame at the beginning of a frame interval, or at
1104 the end. Thus, the goal is to introduce a delay between receiving
1105 client data and rendering the resulting state, but without causing
1106 a frame skip.
1107
1108 While it should be possible to estimate the amount of time left un‐
1109 til the next frame, foot's algorithm is currently not that ad‐
1110 vanced, but is based on statistics I guess you could say - the de‐
1111 lay we introduce is so small that the risk of pushing the frame
1112 over to the next frame interval is also very small.
1113
1114 Now, that was a lot of text. But what is it foot actually does?
1115
1116 When receiving client data, it schedules a timer, the delayed-ren‐
1117 der-lower. If we do not receive any more client data before the
1118 timer has run out, we render the frame. If however, we do receive
1119 more data, the timer is re-scheduled. That is, each time we receive
1120 client data, frame rendering is delayed another delayed-render-
1121 lower nanoseconds.
1122
1123 Now, while this works very well with most clients, it would be pos‐
1124 sible to construct a malicious client that keeps writing data at a
1125 slow pace. To the user, this would look like foot has frozen as we
1126 never get to render a new frame. To prevent this, an upper limit is
1127 set - delayed-render-upper. If this timer runs out, we render the
1128 frame regardless of what the client is doing.
1129
1130 If changing these values, note that the lower timeout must be set
1131 lower than the upper timeout, but that this is not verified by
1132 foot. Furthermore, both values must be less than 16ms (that is,
1133 16000000 nanoseconds).
1134
1135 You can disable the feature altogether by setting either value to
1136 0. In this case, frames are rendered "as soon as possible".
1137
1138 Default: lower=500000 (0.5ms), upper=8333333 (8.3ms - half a frame
1139 interval).
1140
1141 damage-whole-window
1142 Boolean. When enabled, foot will 'damage' the entire window each
1143 time a frame has been rendered. This forces the compositor to re‐
1144 draw the entire window. If disabled, foot will only 'damage' up‐
1145 dated rows.
1146
1147 There is normally no reason to enable this. However, it has been
1148 seen to workaround an issue with fractional scaling in Gnome.
1149
1150 Note that enabling this option is likely to increase CPU and/or GPU
1151 usage (by the compositor, not by foot), and may have a negative im‐
1152 pact on battery life.
1153
1154 Default: no.
1155
1156 grapheme-shaping
1157 Boolean. When enabled, foot will use utf8proc to do grapheme clus‐
1158 ter segmentation while parsing "printed" text. Then, when render‐
1159 ing, it will use fcft (if compiled with HarfBuzz support) to shape
1160 the grapheme clusters.
1161
1162 This is required to render e.g. flag (emoji) sequences, keycap se‐
1163 quences, modifier sequences, zero-width-joiner (ZWJ) sequences and
1164 emoji tag sequences. It might also improve rendering of composed
1165 characters, depending on font.
1166
1167 • foot must have been compiled with utf8proc support
1168 • fcft must have been compiled with HarfBuzz support
1169
1170
1171 See also: grapheme-width-method.
1172
1173 Default: yes
1174
1175 grapheme-width-method
1176 Selects which method to use when calculating the width (i.e. number
1177 of columns) of a grapheme cluster. One of wcswidth, double-width
1178 and max.
1179
1180 wcswidth simply adds together the individual width of all code‐
1181 points making up the cluster.
1182
1183 double-width does the same, but limits the maximum number of col‐
1184 umns to 2. This is more correct, but may break some applications
1185 since applications typically use wcswidth(3) internally to calcu‐
1186 late the width. This results in cursor de-synchronization issues.
1187
1188 max uses the width of the largest codepoint in the cluster.
1189
1190 Default: wcswidth
1191
1192 font-monospace-warn
1193 Boolean. When enabled, foot will use heuristics to try to verify
1194 the primary font is a monospace font, and warn if it is not.
1195
1196 Disable this if you still want to use the font, even if foot thinks
1197 it is not monospaced.
1198
1199 You may also want to disable it to get slightly faster startup
1200 times.
1201
1202 Default: yes
1203
1204 max-shm-pool-size-mb
1205 This option controls the amount of virtual address space used by
1206 the pixmap memory to which the terminal screen content is rendered.
1207
1208 It does not change how much physical memory foot uses.
1209
1210 Foot uses a memory mapping trick to implement fast rendering of in‐
1211 teractive scrolling (typically, but applies to "slow" scrolling in
1212 general). Example: holding down the 'up' or 'down' arrow key to
1213 scroll in a text editor.
1214
1215 For this to work, it needs a large amount of virtual address space.
1216 Again, note that this is not physical memory.
1217
1218 On a normal x64 based computer, each process has 128TB of virtual
1219 address space, and newer ones have 64PB. This is an insane amount
1220 and most applications do not use anywhere near that amount.
1221
1222 Each foot terminal window can allocate up to 2GB of virtual address
1223 space. With 128TB of address space, that means a maximum of 65536
1224 windows in server/daemon mode (for 2GB). That should be enough,
1225 yes?
1226
1227 However, the Wayland compositor also needs to allocate the same
1228 amount of virtual address space. Thus, it has a slightly higher
1229 chance of running out of address space since it needs to host all
1230 running Wayland clients in the same way, at the same time.
1231
1232 In the off chance that this becomes a problem for you, you can re‐
1233 duce the amount used with this option.
1234
1235 Or, for optimal performance, you can increase it to the maximum al‐
1236 lowed value, 2GB (but note that you most likely will not notice any
1237 difference compared to the default value).
1238
1239 Setting it to 0 disables the feature.
1240
1241 Limitations:
1242 • only supported on 64-bit architectures
1243 • only supported on Linux
1244
1245
1246 Default: 512. Maximum allowed: 2048 (2GB).
1247
1248 sixel
1249 Boolean. When enabled, foot will process sixel images. Default: yes
1250
1252 foot(1), footclient(1)
1253
1254
1255
1256 2022-08-31 foot.ini(5)