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