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