Add educational note

This commit is contained in:
Serhii Pozhidayev 2026-06-07 23:43:20 +02:00
parent 4bf60d0fbc
commit 383a7a550b

133
README.md
View file

@ -6,7 +6,6 @@ The fast, lightweight and minimalistic Wayland terminal emulator.
[![Packaging status](https://repology.org/badge/vertical-allrepos/foot.svg?columns=4)](https://repology.org/project/foot/versions) [![Packaging status](https://repology.org/badge/vertical-allrepos/foot.svg?columns=4)](https://repology.org/project/foot/versions)
## Index ## Index
1. [Features](#features) 1. [Features](#features)
@ -43,36 +42,33 @@ The fast, lightweight and minimalistic Wayland terminal emulator.
1. [Sponsoring/donations](#sponsoring-donations) 1. [Sponsoring/donations](#sponsoring-donations)
1. [License](#license) 1. [License](#license)
## Features ## Features
* Fast (see [benchmarks](doc/benchmark.md), and - Fast (see [benchmarks](doc/benchmark.md), and
[performance](https://codeberg.org/dnkl/foot/wiki/Performance)) [performance](https://codeberg.org/dnkl/foot/wiki/Performance))
* Lightweight, in dependencies, on-disk and in-memory - Lightweight, in dependencies, on-disk and in-memory
* Wayland native - Wayland native
* DE agnostic - DE agnostic
* Server/daemon mode - Server/daemon mode
* User configurable font fallback - User configurable font fallback
* On-the-fly font resize - On-the-fly font resize
* On-the-fly DPI font size adjustment - On-the-fly DPI font size adjustment
* Scrollback search - Scrollback search
* Keyboard driven URL detection - Keyboard driven URL detection
* Color emoji support - Color emoji support
* IME (via `text-input-v3`) - IME (via `text-input-v3`)
* Multi-seat - Multi-seat
* True Color (24bpp) - True Color (24bpp)
* [Styled and colored underlines](https://sw.kovidgoyal.net/kitty/underlines/) - [Styled and colored underlines](https://sw.kovidgoyal.net/kitty/underlines/)
* [Synchronized Updates](https://gitlab.freedesktop.org/terminal-wg/specifications/-/merge_requests/2) support - [Synchronized Updates](https://gitlab.freedesktop.org/terminal-wg/specifications/-/merge_requests/2) support
* [Sixel image support](https://en.wikipedia.org/wiki/Sixel) - [Sixel image support](https://en.wikipedia.org/wiki/Sixel)
![tux-with-foot](doc/sixel-tux-foot.png "Sixel screenshot") ![tux-with-foot](doc/sixel-tux-foot.png "Sixel screenshot")
# Installing # Installing
See [INSTALL.md](INSTALL.md). See [INSTALL.md](INSTALL.md).
## Configuration ## Configuration
**foot** can be configured by creating a file **foot** can be configured by creating a file
@ -83,12 +79,10 @@ in `/etc/xdg/foot/foot.ini` or
Further information can be found in foot's man page `foot.ini(5)`. Further information can be found in foot's man page `foot.ini(5)`.
## Troubleshooting ## Troubleshooting
See the [wiki](https://codeberg.org/dnkl/foot/wiki#user-content-troubleshooting) See the [wiki](https://codeberg.org/dnkl/foot/wiki#user-content-troubleshooting)
## Why the name 'foot'? ## Why the name 'foot'?
I'm bad at names. Most of my projects usually start out as _foo I'm bad at names. Most of my projects usually start out as _foo
@ -105,7 +99,6 @@ As a side note, if you pronounce the _foo_ part of _foot_ the same way
you pronounce _foobar_, then _foot_ sounds a lot like the Swedish word you pronounce _foobar_, then _foot_ sounds a lot like the Swedish word
_fot_, which incidentally means (you guessed it) _foot_. _fot_, which incidentally means (you guessed it) _foot_.
## Fonts ## Fonts
**foot** supports all fonts that can be loaded by _freetype_, **foot** supports all fonts that can be loaded by _freetype_,
@ -124,13 +117,11 @@ _other_ fallback font to be _italic_? No problem!
If a glyph cannot be found in _any_ of the user configured fallback If a glyph cannot be found in _any_ of the user configured fallback
fonts, _then_ fontconfig's list is used. fonts, _then_ fontconfig's list is used.
## Shortcuts ## Shortcuts
These are the default shortcuts. See `man foot.ini` and the example These are the default shortcuts. See `man foot.ini` and the example
`foot.ini` to see how these can be changed. `foot.ini` to see how these can be changed.
### Keyboard ### Keyboard
#### Normal mode #### Normal mode
@ -180,7 +171,6 @@ These are the default shortcuts. See `man foot.ini` and the example
: Jump to the next prompt. Requires [shell : Jump to the next prompt. Requires [shell
integration](https://codeberg.org/dnkl/foot/wiki#user-content-jumping-between-prompts). integration](https://codeberg.org/dnkl/foot/wiki#user-content-jumping-between-prompts).
#### Scrollback search #### Scrollback search
<kbd>ctrl</kbd>+<kbd>r</kbd> <kbd>ctrl</kbd>+<kbd>r</kbd>
@ -211,7 +201,6 @@ These are the default shortcuts. See `man foot.ini` and the example
: Finish the search and copy the current match to the primary : Finish the search and copy the current match to the primary
selection selection
### URL mode ### URL mode
<kbd>t</kbd> <kbd>t</kbd>
@ -220,7 +209,6 @@ These are the default shortcuts. See `man foot.ini` and the example
<kbd>escape</kbd>, <kbd>ctrl</kbd>+<kbd>c</kbd>, <kbd>ctrl</kbd>+<kbd>g</kbd>, <kbd>ctrl</kbd>+<kbd>d</kbd> <kbd>escape</kbd>, <kbd>ctrl</kbd>+<kbd>c</kbd>, <kbd>ctrl</kbd>+<kbd>g</kbd>, <kbd>ctrl</kbd>+<kbd>d</kbd>
: Exit URL mode without launching any URLs : Exit URL mode without launching any URLs
### Mouse ### Mouse
<kbd>left</kbd> - **single-click** <kbd>left</kbd> - **single-click**
@ -261,7 +249,6 @@ These are the default shortcuts. See `man foot.ini` and the example
<kbd>ctrl</kbd>+<kbd>wheel</kbd> <kbd>ctrl</kbd>+<kbd>wheel</kbd>
: Increase/decrease font size : Increase/decrease font size
### Touchscreen ### Touchscreen
<kbd>tap</kbd> <kbd>tap</kbd>
@ -272,7 +259,6 @@ These are the default shortcuts. See `man foot.ini` and the example
: Holding for a while before dragging (time delay can be configured) : Holding for a while before dragging (time delay can be configured)
emulates mouse dragging with left button held. emulates mouse dragging with left button held.
## Server (daemon) mode ## Server (daemon) mode
When run normally, **foot** is a single-window application; if you When run normally, **foot** is a single-window application; if you
@ -333,7 +319,6 @@ the clipboard. It is unbound by default.
Jump label colors, the URL underline color, and the letters used in Jump label colors, the URL underline color, and the letters used in
the jump label key sequences can be configured. the jump label key sequences can be configured.
## Shell integration ## Shell integration
### Current working directory ### Current working directory
@ -348,7 +333,6 @@ scripted to do this, if they do not support it natively. See the
[wiki](https://codeberg.org/dnkl/foot/wiki#user-content-spawning-new-terminal-instances-in-the-current-working-directory) [wiki](https://codeberg.org/dnkl/foot/wiki#user-content-spawning-new-terminal-instances-in-the-current-working-directory)
for details. for details.
### Jumping between prompts ### Jumping between prompts
Foot can move the current viewport to focus prompts of already Foot can move the current viewport to focus prompts of already
@ -407,7 +391,6 @@ See the
[wiki](https://codeberg.org/dnkl/foot/wiki#user-content-piping-last-command-s-output) [wiki](https://codeberg.org/dnkl/foot/wiki#user-content-piping-last-command-s-output)
for details, and examples for other shells for details, and examples for other shells
## Alt/meta ## Alt/meta
By default, foot prefixes _Meta characters_ with ESC. This corresponds By default, foot prefixes _Meta characters_ with ESC. This corresponds
@ -424,7 +407,6 @@ This can also be disabled programmatically with `rmm` (_reset meta
mode_, `\E[?1034l`), and enabled again with `smm` (_set meta mode_, mode_, `\E[?1034l`), and enabled again with `smm` (_set meta mode_,
`\E[?1034h`). `\E[?1034h`).
## Backspace ## Backspace
Foot transmits DEL (`^?`) on <kbd>backspace</kbd>. This corresponds to Foot transmits DEL (`^?`) on <kbd>backspace</kbd>. This corresponds to
@ -440,7 +422,6 @@ described above **cannot** be changed.
Finally, pressing <kbd>alt</kbd> will prefix the transmitted byte with Finally, pressing <kbd>alt</kbd> will prefix the transmitted byte with
ESC. ESC.
## Keypad ## Keypad
By default, <kbd>Num Lock</kbd> overrides the run-time configuration By default, <kbd>Num Lock</kbd> overrides the run-time configuration
@ -459,7 +440,6 @@ again with `\E[?1035h`).
When disabled, the keypad sends custom escape sequences instead of When disabled, the keypad sends custom escape sequences instead of
numbers, when in _application_ mode. numbers, when in _application_ mode.
## DPI and font size ## DPI and font size
Font sizes are apparently a complex thing. Many applications use a Font sizes are apparently a complex thing. Many applications use a
@ -503,7 +483,6 @@ distance**, the font size will appear to be the same, at all times.
_Note_: if you configure **pixelsize**, rather than **size**, then DPI _Note_: if you configure **pixelsize**, rather than **size**, then DPI
changes will **not** change the font size. Pixels are always pixels. changes will **not** change the font size. Pixels are always pixels.
### Fractional scaling on Wayland ### Fractional scaling on Wayland
For a long time, there was no **true** support for _fractional For a long time, there was no **true** support for _fractional
@ -520,42 +499,40 @@ allows compositors to tell applications the _actual_ scaling
factor. Applications can then scale the image using a _viewport_ factor. Applications can then scale the image using a _viewport_
object, instead of setting a scale factor on the raw pixel buffer. object, instead of setting a scale factor on the raw pixel buffer.
## Supported OSCs ## Supported OSCs
OSC, _Operating System Command_, are escape sequences that interacts OSC, _Operating System Command_, are escape sequences that interacts
with the terminal emulator itself. Foot implements the following OSCs: with the terminal emulator itself. Foot implements the following OSCs:
* `OSC 0` - change window icon + title (but only title is actually - `OSC 0` - change window icon + title (but only title is actually
supported) supported)
* `OSC 2` - change window title - `OSC 2` - change window title
* `OSC 4` - change color palette - `OSC 4` - change color palette
* `OSC 7` - report CWD (see [shell integration](#shell-integration)) - `OSC 7` - report CWD (see [shell integration](#shell-integration))
* `OSC 8` - hyperlink - `OSC 8` - hyperlink
* `OSC 9` - desktop notification - `OSC 9` - desktop notification
* `OSC 10` - change (default) foreground color - `OSC 10` - change (default) foreground color
* `OSC 11` - change (default) background color - `OSC 11` - change (default) background color
* `OSC 12` - change cursor color - `OSC 12` - change cursor color
* `OSC 17` - change highlight (selection) background color - `OSC 17` - change highlight (selection) background color
* `OSC 19` - change highlight (selection) foreground color - `OSC 19` - change highlight (selection) foreground color
* `OSC 22` - set the xcursor (mouse) pointer - `OSC 22` - set the xcursor (mouse) pointer
* `OSC 52` - copy/paste clipboard data - `OSC 52` - copy/paste clipboard data
* `OSC 104` - reset color palette - `OSC 104` - reset color palette
* `OSC 110` - reset default foreground color - `OSC 110` - reset default foreground color
* `OSC 111` - reset default background color - `OSC 111` - reset default background color
* `OSC 112` - reset cursor color - `OSC 112` - reset cursor color
* `OSC 117` - reset highlight background color - `OSC 117` - reset highlight background color
* `OSC 119` - reset highlight foreground color - `OSC 119` - reset highlight foreground color
* `OSC 133` - [shell integration](#shell-integration) - `OSC 133` - [shell integration](#shell-integration)
* `OSC 176` - set app ID - `OSC 176` - set app ID
* `OSC 555` - flash screen (**foot specific**) - `OSC 555` - flash screen (**foot specific**)
* `OSC 777` - desktop notification (only the `;notify` sub-command of - `OSC 777` - desktop notification (only the `;notify` sub-command of
OSC 777 is supported.) OSC 777 is supported.)
See the **foot-ctlseqs**(7) man page for a complete list of supported See the **foot-ctlseqs**(7) man page for a complete list of supported
control sequences. control sequences.
## Programmatically checking if running in foot ## Programmatically checking if running in foot
Foot does **not** set any environment variables that can be used to Foot does **not** set any environment variables that can be used to
@ -589,7 +566,6 @@ which it will reply with `\EP>|foot(version)\E\\`. Version is
e.g. "1.8.2" for a regular release, or "1.8.2-36-g7db8e06f" for a git e.g. "1.8.2" for a regular release, or "1.8.2-36-g7db8e06f" for a git
build. build.
# XTGETTCAP # XTGETTCAP
`XTGETTCAP` is an escape sequence initially introduced by XTerm, and `XTGETTCAP` is an escape sequence initially introduced by XTerm, and
@ -604,9 +580,9 @@ foot's terminfo on remote hosts you SSH into.
XTerm's implementation (as of XTerm-370) only supports querying key XTerm's implementation (as of XTerm-370) only supports querying key
(as in keyboard keys) capabilities, and three custom capabilities: (as in keyboard keys) capabilities, and three custom capabilities:
* `TN` - terminal name - `TN` - terminal name
* `Co` - number of colors (alias for the `colors` capability) - `Co` - number of colors (alias for the `colors` capability)
* `RGB` - number of bits per color channel (different semantics from - `RGB` - number of bits per color channel (different semantics from
the `RGB` capability in file-based terminfo definitions!). the `RGB` capability in file-based terminfo definitions!).
Kitty has extended this, and also supports querying all integer and Kitty has extended this, and also supports querying all integer and
@ -622,11 +598,11 @@ multi-capability queries slightly differently, compared to XTerm.
XTerm will send a single DCS reply, with `;`-separated XTerm will send a single DCS reply, with `;`-separated
capability/value pairs. There are a couple of issues with this: capability/value pairs. There are a couple of issues with this:
* The success/fail flag in the beginning of the response is always `1` - The success/fail flag in the beginning of the response is always `1`
(success), unless the very **first** queried capability is invalid. (success), unless the very **first** queried capability is invalid.
* XTerm will not respond **at all** to an invalid capability, unless - XTerm will not respond **at all** to an invalid capability, unless
it's the first one in the `XTGETTCAP` query. it's the first one in the `XTGETTCAP` query.
* XTerm will end the response at the first invalid capability. - XTerm will end the response at the first invalid capability.
In other words, if you send a large multi-capability query, you will In other words, if you send a large multi-capability query, you will
only get responses up to, but not including, the first invalid only get responses up to, but not including, the first invalid
@ -645,18 +621,15 @@ In addition to queries for terminfo entries, the `query-os-name` query
will be answered with a response of the form `uname=$(uname -s)`, will be answered with a response of the form `uname=$(uname -s)`,
where `$(uname -s)` is the name of the OS foot was compiled for. where `$(uname -s)` is the name of the OS foot was compiled for.
# Credits # Credits
* [Ordoviz](https://codeberg.org/Ordoviz), for designing and - [Ordoviz](https://codeberg.org/Ordoviz), for designing and
contributing foot's [logo](icons/hicolor/48x48/apps/foot.png). contributing foot's [logo](icons/hicolor/48x48/apps/foot.png).
# Code of Conduct # Code of Conduct
See [Code of Conduct](CODE_OF_CONDUCT.md) See [Code of Conduct](CODE_OF_CONDUCT.md)
# Bugs # Bugs
Please report bugs to https://codeberg.org/dnkl/foot/issues Please report bugs to https://codeberg.org/dnkl/foot/issues
@ -674,7 +647,6 @@ The report should contain the following:
with symbols. with symbols.
- Steps to reproduce. The more details the better. - Steps to reproduce. The more details the better.
# Contact # Contact
## IRC ## IRC
@ -684,21 +656,22 @@ channel on
[irc.libera.chat](https://web.libera.chat/?channels=#foot). Logs are [irc.libera.chat](https://web.libera.chat/?channels=#foot). Logs are
available at https://libera.irclog.whitequark.org/foot. available at https://libera.irclog.whitequark.org/foot.
## Mastodon ## Mastodon
Every now and then I post foot related updates on Every now and then I post foot related updates on
[@dnkl@social.treehouse.systems](https://social.treehouse.systems/@dnkl) [@dnkl@social.treehouse.systems](https://social.treehouse.systems/@dnkl)
# Sponsoring/donations # Sponsoring/donations
* Liberapay: https://liberapay.com/dnkl - Liberapay: https://liberapay.com/dnkl
* GitHub Sponsors: https://github.com/sponsors/dnkl - GitHub Sponsors: https://github.com/sponsors/dnkl
[![Donate using Liberapay](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.com/dnkl/donate) [![Donate using Liberapay](https://liberapay.com/assets/widgets/donate.svg)](https://liberapay.com/dnkl/donate)
# License # License
Foot is released under the [MIT license](LICENSE). Foot is released under the [MIT license](LICENSE).
## Educational Note
This repository is used for learning Git workflow.