2019-08-08 22:35:55 +02:00
|
|
|
# foot
|
|
|
|
|
|
2019-08-17 12:42:28 +02:00
|
|
|
**foot** is a fast Wayland terminal emulator.
|
2019-08-08 22:35:55 +02:00
|
|
|
|
2019-08-29 23:05:19 +02:00
|
|
|
## Index
|
|
|
|
|
|
|
|
|
|
1. [Features](#features)
|
|
|
|
|
1. [Non-features](#non-features)
|
2019-09-20 21:45:10 +02:00
|
|
|
1. [What does not work?](#what-does-not-work)
|
2019-08-29 23:12:39 +02:00
|
|
|
1. [Fonts](#fonts)
|
|
|
|
|
1. [Shortcuts](#shortcuts)
|
|
|
|
|
1. [Keyboard](#keyboard)
|
|
|
|
|
1. [Mouse](#mouse)
|
2019-08-29 23:05:19 +02:00
|
|
|
1. [Requirements](#requirements)
|
2019-08-29 23:05:38 +02:00
|
|
|
1. [Running](#running)
|
|
|
|
|
1. [Building](#building)
|
2019-08-29 23:11:11 +02:00
|
|
|
1. [Installing](#installing)
|
|
|
|
|
1. [Arch Linux](#arch-linux)
|
|
|
|
|
1. [Other](#other)
|
2019-08-29 23:05:19 +02:00
|
|
|
|
2019-08-08 22:35:55 +02:00
|
|
|
|
2019-08-29 22:55:49 +02:00
|
|
|
## Features
|
|
|
|
|
|
|
|
|
|
* Fast (**TODO** insert benchmark results here)
|
|
|
|
|
* Wayland native
|
|
|
|
|
* DE agnostic
|
|
|
|
|
* User configurable font fallback
|
|
|
|
|
* Scrollback search
|
|
|
|
|
* Color emoji support
|
2019-11-19 00:01:55 +01:00
|
|
|
* "Server" mode (one master process, many windows)
|
2019-08-29 22:55:49 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
## Non-features
|
|
|
|
|
|
|
|
|
|
This is a non-exhaustive list of things some people might consider
|
|
|
|
|
being important features (i.e. _"must-haves"_), that are unlikely to
|
|
|
|
|
ever be supported by foot.
|
|
|
|
|
|
|
|
|
|
* Tabs
|
2019-11-03 12:24:14 +01:00
|
|
|
* Graphical elements (menu, buttons etc)
|
2019-08-29 22:55:49 +02:00
|
|
|
|
|
|
|
|
|
2019-09-20 21:45:10 +02:00
|
|
|
## What does not work?
|
|
|
|
|
|
|
|
|
|
This is a list of known, but probably not all, issues:
|
|
|
|
|
|
2019-09-21 12:14:51 +02:00
|
|
|
* Unicode combining characters
|
2019-09-20 21:51:20 +02:00
|
|
|
|
|
|
|
|
Examples: á, 👪🏼 (_may not be displayed correctly in your
|
|
|
|
|
browser/editor_)
|
2019-09-20 21:45:10 +02:00
|
|
|
|
2019-09-21 12:14:51 +02:00
|
|
|
* Reflow text on window resize
|
2019-09-21 12:14:03 +02:00
|
|
|
|
2019-11-03 12:24:14 +01:00
|
|
|
* GNOME; might work, but without window decorations.
|
|
|
|
|
|
|
|
|
|
Strictly speaking, foot is at fault here; all Wayland applications
|
|
|
|
|
_must_ be able to draw their own window decorations (but foot is
|
|
|
|
|
not).
|
|
|
|
|
|
|
|
|
|
However, most people want a uniform look and feel on their desktop,
|
|
|
|
|
including the window decorations. For this reason, a Wayland
|
|
|
|
|
application can request _Server Side Decorations_ (SSD). GNOME will
|
|
|
|
|
reply with a "I here you, but sorry, I wont do that".
|
|
|
|
|
|
2019-09-20 21:45:10 +02:00
|
|
|
|
2019-08-08 22:35:55 +02:00
|
|
|
## Fonts
|
|
|
|
|
|
2019-08-29 23:00:49 +02:00
|
|
|
**foot** supports all fonts that can be loaded by _freetype_,
|
|
|
|
|
including **bitmap** fonts and **color emoji** fonts.
|
|
|
|
|
|
|
|
|
|
Foot uses _fontconfig_ to locate and configure the font(s) to
|
|
|
|
|
use. Since fontconfig's fallback mechanism is imperfect, especially
|
|
|
|
|
for monospace fonts (it doesn't prefer monospace fonts even though the
|
|
|
|
|
requested font is one), foot allows you, the user, to configure the
|
|
|
|
|
fallback fonts to use.
|
|
|
|
|
|
|
|
|
|
This also means you can configure _each_ fallback font individually;
|
|
|
|
|
you want _that_ fallback font to use _this_ size, and you want that
|
|
|
|
|
_other_ fallback font to be _italic_? No problem!
|
2019-08-08 22:35:55 +02:00
|
|
|
|
2019-08-11 15:55:23 +02:00
|
|
|
If a glyph cannot be found in _any_ of the user configured fallback
|
|
|
|
|
fonts, _then_ fontconfig's list is used.
|
|
|
|
|
|
2019-08-08 22:35:55 +02:00
|
|
|
|
|
|
|
|
## Shortcuts
|
|
|
|
|
|
|
|
|
|
At the moment, all shortcuts are hard coded and cannot be changed. It
|
|
|
|
|
is **not** possible to define new key bindings.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Keyboard
|
|
|
|
|
|
2019-08-29 22:46:26 +02:00
|
|
|
* <kbd>shift</kbd>+<kbd>page up</kbd>/<kbd>page down</kbd>
|
|
|
|
|
|
2019-08-29 22:49:33 +02:00
|
|
|
Scroll up/down in history
|
2019-08-29 22:48:25 +02:00
|
|
|
|
|
|
|
|
* <kbd>ctrl</kbd>+<kbd>shift</kbd>+<kbd>c</kbd>
|
|
|
|
|
|
2019-08-29 22:49:33 +02:00
|
|
|
Copy selected text to the _clipboard_
|
2019-08-29 22:48:25 +02:00
|
|
|
|
|
|
|
|
* <kbd>ctrl</kbd>+<kbd>shift</kbd>+<kbd>v</kbd>
|
|
|
|
|
|
2019-08-29 22:49:33 +02:00
|
|
|
Paste from _clipboard_
|
2019-08-29 22:48:25 +02:00
|
|
|
|
|
|
|
|
* <kbd>ctrl</kbd>+<kbd>shift</kbd>+<kbd>r</kbd>
|
|
|
|
|
|
2019-08-29 22:49:33 +02:00
|
|
|
Start a scrollback search
|
2019-08-27 21:20:24 +02:00
|
|
|
|
|
|
|
|
While doing a scrollback search, the following shortcuts are
|
|
|
|
|
available:
|
|
|
|
|
|
2019-08-29 22:48:25 +02:00
|
|
|
* <kbd>ctrl</kbd>+<kbd>r</kbd>
|
|
|
|
|
|
2019-08-30 20:18:12 +02:00
|
|
|
Search _backward_ for next match
|
|
|
|
|
|
|
|
|
|
* <kbd>ctrl</kbd>+<kbd>s</kbd>
|
|
|
|
|
|
|
|
|
|
Search _forward_ for next match
|
2019-08-29 22:48:25 +02:00
|
|
|
|
2019-09-10 18:40:53 +02:00
|
|
|
* <kbd>escape</kbd>, <kbd>ctrl</kbd>+<kbd>g</kbd>
|
2019-08-29 22:48:25 +02:00
|
|
|
|
2019-08-29 22:49:33 +02:00
|
|
|
Cancel the search
|
2019-08-29 22:48:25 +02:00
|
|
|
|
|
|
|
|
* <kbd>return</kbd>
|
|
|
|
|
|
2019-08-30 20:26:20 +02:00
|
|
|
Finish the search and copy the current match to the primary
|
|
|
|
|
selection
|
2019-08-08 22:35:55 +02:00
|
|
|
|
|
|
|
|
### Mouse
|
|
|
|
|
|
2019-08-29 22:48:25 +02:00
|
|
|
* <kbd>left</kbd> - **single-click**
|
|
|
|
|
|
2019-08-29 22:49:33 +02:00
|
|
|
Drag to select; when released, the selected text is copied to the
|
2019-08-29 23:02:18 +02:00
|
|
|
_primary_ selection. Note that this feature is normally **disabled**
|
|
|
|
|
whenever the client has enabled _mouse tracking_, but can be forced
|
|
|
|
|
by holding <kbd>shift</kbd>.
|
2019-08-29 22:48:25 +02:00
|
|
|
|
|
|
|
|
* <kbd>left</kbd> - **double-click**
|
|
|
|
|
|
2019-08-29 22:49:33 +02:00
|
|
|
Selects the _word_ (separated by spaces, period, comma, parenthesis
|
2019-08-29 22:50:35 +02:00
|
|
|
etc) under the pointer. Hold <kbd>ctrl</kbd> to select everything
|
|
|
|
|
under the pointer up to, and until, the next space characters.
|
2019-08-29 22:48:25 +02:00
|
|
|
|
|
|
|
|
* <kbd>left</kbd> - **triple-click**
|
|
|
|
|
|
2019-08-29 22:49:33 +02:00
|
|
|
Selects the entire row
|
2019-08-29 22:48:25 +02:00
|
|
|
|
|
|
|
|
* <kbd>middle</kbd>
|
|
|
|
|
|
2019-08-29 22:49:33 +02:00
|
|
|
Paste from _primary_ selection
|
2019-08-29 23:12:39 +02:00
|
|
|
|
2019-11-03 12:24:14 +01:00
|
|
|
* <kbd>wheel</kbd>
|
|
|
|
|
|
|
|
|
|
Scroll up/down in history
|
|
|
|
|
|
2019-08-29 23:12:39 +02:00
|
|
|
|
|
|
|
|
## Requirements
|
|
|
|
|
|
|
|
|
|
### Running
|
|
|
|
|
|
|
|
|
|
* fontconfig
|
|
|
|
|
* freetype
|
|
|
|
|
* pixman
|
|
|
|
|
* wayland (_client_ and _cursor_ libraries)
|
|
|
|
|
* xkbcommon
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Building
|
|
|
|
|
|
|
|
|
|
In addition to the dev variant of the packages above, you need:
|
|
|
|
|
|
|
|
|
|
* meson
|
|
|
|
|
* ninja
|
|
|
|
|
* wayland protocols
|
|
|
|
|
* ncurses
|
|
|
|
|
* scdoc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Installing
|
|
|
|
|
|
|
|
|
|
### Arch Linux
|
|
|
|
|
|
|
|
|
|
Use [makepkg](https://wiki.archlinux.org/index.php/Makepkg) to build
|
2019-11-03 12:24:14 +01:00
|
|
|
the bundled [PKGBUILD](PKGBUILD) (run `makepkg` in the source root
|
2019-11-03 13:54:12 +01:00
|
|
|
directory).
|
2019-08-29 23:12:39 +02:00
|
|
|
|
2019-08-29 23:15:13 +02:00
|
|
|
Note that it will do a profiling-guided build, and that this requires
|
|
|
|
|
a running wayland session since it needs to run an intermediate build
|
|
|
|
|
of foot.
|
|
|
|
|
|
2019-08-29 23:12:39 +02:00
|
|
|
|
|
|
|
|
### Other
|
|
|
|
|
|
|
|
|
|
Foot uses _meson_. If you are unfamiliar with it, the official
|
|
|
|
|
[tutorial](https://mesonbuild.com/Tutorial.html) might be a good
|
|
|
|
|
starting point.
|
|
|
|
|
|
2019-10-05 16:41:20 +02:00
|
|
|
I also recommend taking a look at the bundled Arch
|
|
|
|
|
[PKGBUILD](PKGBUILD) file, to see how it builds foot.
|