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