mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-04-27 06:46:44 -04:00
Add option to change terminal alpha through key-bindings
This commit is contained in:
parent
377997be9d
commit
4e2347da12
7 changed files with 177 additions and 123 deletions
3
config.c
3
config.c
|
|
@ -104,6 +104,9 @@ static const char *const binding_action_map[] = {
|
|||
[BIND_ACTION_FONT_SIZE_UP] = "font-increase",
|
||||
[BIND_ACTION_FONT_SIZE_DOWN] = "font-decrease",
|
||||
[BIND_ACTION_FONT_SIZE_RESET] = "font-reset",
|
||||
[BIND_ACTION_ALPHA_UP] = "alpha-increase",
|
||||
[BIND_ACTION_ALPHA_DOWN] = "alpha-decrease",
|
||||
[BIND_ACTION_ALPHA_RESET] = "alpha-reset",
|
||||
[BIND_ACTION_SPAWN_TERMINAL] = "spawn-terminal",
|
||||
[BIND_ACTION_MINIMIZE] = "minimize",
|
||||
[BIND_ACTION_MAXIMIZE] = "maximize",
|
||||
|
|
|
|||
|
|
@ -44,77 +44,77 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
|
|||
options. Most noteworthy is *:size=n*, which is used to set the
|
||||
font size. Note that the font size is also affected by the
|
||||
*dpi-aware* option.
|
||||
|
||||
|
||||
Examples:
|
||||
- Dina:weight=bold:slant=italic
|
||||
- Courier New:size=12
|
||||
- Fantasque Sans Mono:fontfeatures=ss01
|
||||
|
||||
|
||||
For each option, the first font is the primary font. The remaining
|
||||
fonts are fallback fonts that will be used whenever a glyph cannot
|
||||
be found in the primary font.
|
||||
|
||||
|
||||
The fallback fonts are searched in the order they appear. If a
|
||||
glyph cannot be found in any of the fallback fonts, the dynamic
|
||||
fallback list from fontconfig (for the primary font) is
|
||||
searched.
|
||||
|
||||
|
||||
*font-bold*, *font-italic* and *font-bold-italic* allow custom
|
||||
fonts to be used for bold/italic/bold+italic fonts. If left
|
||||
unconfigured, the bold/italic variants of the regular font(s)
|
||||
specified in *font* are used. *Note*: you _may_ have to tweak the
|
||||
size(s) of the custom bold/italic fonts to match the regular font.
|
||||
|
||||
|
||||
To disable bold and/or italic fonts, set e.g. *font-bold* to
|
||||
_exactly_ the same value as *font*.
|
||||
|
||||
|
||||
Default: _monospace:size=8_ (*font*), _not set_ (*font-bold*,
|
||||
*font-italic*, *font-bold-italic*).
|
||||
|
||||
*include*
|
||||
Absolute path to configuration file to import.
|
||||
|
||||
|
||||
The import file has its own section scope. I.e. the including
|
||||
configuration is still in the default section after the include,
|
||||
regardless of which section the included file ends in.
|
||||
|
||||
|
||||
- The path must be an absolute path, or start with *~/*.
|
||||
- Multiple include directives are allowed, but only one path per
|
||||
directive.
|
||||
- Nested imports are allowed.
|
||||
|
||||
|
||||
Default: _not set_.
|
||||
|
||||
*line-height*
|
||||
An absolute value, in _points_, that override line height from the
|
||||
font metrics.
|
||||
|
||||
|
||||
You can specify a height in _pixels_ by using the *px* suffix:
|
||||
e.g. *line-height=12px*.
|
||||
|
||||
|
||||
See also: *vertical-letter-offset*.
|
||||
|
||||
|
||||
Default: _not set_.
|
||||
|
||||
*letter-spacing*
|
||||
Spacing between letters, in _points_. A positive value will
|
||||
increase the cell size, and a negative value shrinks it.
|
||||
|
||||
|
||||
You can specify a letter spacing in _pixels_ by using the *px*
|
||||
suffix: e.g. *letter-spacing=2px*.
|
||||
|
||||
|
||||
See also: *horizontal-letter-offset*.
|
||||
|
||||
|
||||
Default: _0_.
|
||||
|
||||
*horizontal-letter-offset*, *vertical-letter-offset*
|
||||
Configure the horizontal and vertical offsets used when
|
||||
positioning glyphs within cells, in _points_, relative to the top
|
||||
left corner.
|
||||
|
||||
|
||||
To specify an offset in _pixels_, append *px*:
|
||||
e.g. *horizontal-letter-offset=2px*.
|
||||
|
||||
|
||||
Default: _0_.
|
||||
|
||||
*underline-offset*
|
||||
|
|
@ -122,20 +122,20 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
|
|||
_points_ and relative the font's baseline. A positive value
|
||||
positions the underline under the baseline, while a negative value
|
||||
positions it above the baseline.
|
||||
|
||||
|
||||
To specify an offset in _pixels_, append *px*:
|
||||
*underline-offset=2px*.
|
||||
|
||||
|
||||
If left unset (the default), the offset specified in the font is
|
||||
used, or estimated by foot if the font lacks underline positioning
|
||||
information.
|
||||
|
||||
|
||||
Default: _unset_.
|
||||
|
||||
*box-drawings-uses-font-glyphs* Boolean. When disabled, foot generates
|
||||
box/line drawing characters itself. The are several advantages to
|
||||
doing this instead of using font glyphs:
|
||||
|
||||
|
||||
- No antialiasing effects where e.g. line endpoints appear
|
||||
dimmed down, or blurred.
|
||||
- Line- and box characters are guaranteed to span the entire cell,
|
||||
|
|
@ -144,60 +144,60 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
|
|||
- Many fonts lack some, or all, of the line- and box drawing
|
||||
characters, causing fallback fonts to be used, which results
|
||||
in out-of-place looking glyphs (for example, badly sized).
|
||||
|
||||
|
||||
When enabled, box/line drawing characters are rendered using font
|
||||
glyphs. This may result in a more uniform look, in some use cases.
|
||||
|
||||
|
||||
Default: _no_.
|
||||
|
||||
*dpi-aware*
|
||||
*auto*, *yes*, or *no*.
|
||||
|
||||
|
||||
When set to *yes*, fonts are sized using the monitor's DPI, making
|
||||
a font of a given size have the same physical size, regardless of
|
||||
monitor. In other words, if you drag a foot window between
|
||||
different monitors, the font size remains the same.
|
||||
|
||||
|
||||
In this mode, the monitor's scaling factor is ignored; doubling
|
||||
the scaling factor will *not* double the font size.
|
||||
|
||||
|
||||
When set to *no*, the monitor's DPI is ignored. The font is
|
||||
instead sized using the monitor's scaling factor; doubling the
|
||||
scaling factor *does* double the font size.
|
||||
|
||||
|
||||
Finally, if set to *auto*, fonts will be sized using the monitor's
|
||||
DPI if _all_ monitors have a scaling factor of 1. If at least one
|
||||
monitor as a scaling factor larger than 1 (regardless of whether
|
||||
the foot window is mapped on that monitor or not), fonts will be
|
||||
scaled using the scaling factor.
|
||||
|
||||
|
||||
Note that this option typically does not work with bitmap fonts,
|
||||
which only contains a pre-defined set of sizes, and cannot be
|
||||
dynamically scaled. Whichever size (of the available ones) that
|
||||
best matches the DPI or scaling factor, will be used.
|
||||
|
||||
|
||||
Also note that if the font size has been specified in pixels
|
||||
(*:pixelsize=*_N_, instead of *:size=*_N_), DPI scaling
|
||||
(*dpi-aware=yes*) will have no effect (the specified pixel size
|
||||
will be used as is). But, if the monitor's scaling factor is used
|
||||
to size the font (*dpi-aware=no*), the font's pixel size will be
|
||||
multiplied with the scaling factor.
|
||||
|
||||
|
||||
Default: _auto_
|
||||
|
||||
*pad*
|
||||
Padding between border and glyphs, in pixels (subject to output
|
||||
scaling), in the form _XxY_.
|
||||
|
||||
|
||||
This will add _at least_ X pixels on both the left and right
|
||||
sides, and Y pixels on the top and bottom sides. The grid content
|
||||
will be anchored in the top left corner. I.e. if the window
|
||||
manager forces an odd window size on foot, the additional pixels
|
||||
will be added to the right and bottom sides.
|
||||
|
||||
|
||||
To instead center the grid content, append *center* (e.g. *pad=5x5
|
||||
center*).
|
||||
|
||||
|
||||
Default: _2x2_.
|
||||
|
||||
*resize-delay-ms*
|
||||
|
|
@ -205,18 +205,18 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
|
|||
window dimensions to the client application while doing an
|
||||
interactive resize of a foot window. Idle time in this context is
|
||||
a period of time where the window size is not changing.
|
||||
|
||||
|
||||
In other words, while you are fiddling with the window size, foot
|
||||
does not send the updated dimensions to the client. Only when you
|
||||
pause the fiddling for *resize-delay-ms* milliseconds is the
|
||||
client updated.
|
||||
|
||||
|
||||
Emphasis is on _while_ here; as soon as the interactive resize
|
||||
ends (i.e. when you let go of the window border), the final
|
||||
dimensions is sent to the client, without any delays.
|
||||
|
||||
|
||||
Setting it to 0 disables the delay completely.
|
||||
|
||||
|
||||
Default: _100_.
|
||||
|
||||
*initial-window-size-pixels*
|
||||
|
|
@ -229,12 +229,12 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
|
|||
Initial window width and height in _characters_, in the form
|
||||
_WIDTHxHEIGHT_. Mutually exclusive to
|
||||
*initial-window-size-pixels*.'
|
||||
|
||||
|
||||
Note that if you have a multi-monitor setup, with different
|
||||
scaling factors, there is a possibility the window size will not
|
||||
be set correctly. If that is the case, use
|
||||
*initial-window-size-pixels* instead.
|
||||
|
||||
|
||||
Default: _not set_.
|
||||
|
||||
*initial-window-mode*
|
||||
|
|
@ -257,12 +257,12 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
|
|||
Semi-boolean. When enabled, bold text is rendered in a brighter
|
||||
color (in addition to using a bold font). The color is brightened
|
||||
by increasing its luminance.
|
||||
|
||||
|
||||
If set to *palette-based*, rather than a simple *yes|true*, colors
|
||||
matching one of the 8 regular palette colors will be brightened
|
||||
using the corresponding bright palette color. Other colors will
|
||||
not be brightened.
|
||||
|
||||
|
||||
Default: _no_.
|
||||
|
||||
*word-delimiters*
|
||||
|
|
@ -274,19 +274,19 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
|
|||
Command to execute to display a notification. _${title}_ and
|
||||
_${body}_ will be replaced with the notification's actual _title_
|
||||
and _body_ (message content).
|
||||
|
||||
|
||||
_${app-id}_ is replaced with the value of the command line option
|
||||
_--app-id_, and defaults to *foot*.
|
||||
|
||||
|
||||
_${window-title}_ is replaced with the current window title.
|
||||
|
||||
|
||||
Applications can trigger notifications in the following ways:
|
||||
|
||||
|
||||
- OSC 777: *\\e]777;notify;<title>;<body>\\e\\\\*
|
||||
|
||||
|
||||
By default, notifications are *inhibited* if the foot window
|
||||
has keyboard focus. See _notify-focus-inhibit_.
|
||||
|
||||
|
||||
Default: _notify-send -a ${app-id} -i ${app-id} ${title} ${body}_.
|
||||
|
||||
*notify-focus-inhibit*
|
||||
|
|
@ -311,13 +311,13 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
|
|||
When set to _yes_, foot will signal urgency to the compositor
|
||||
through the XDG activation protocol whenever *BEL* is received,
|
||||
and the window does NOT have keyboard foccus.
|
||||
|
||||
|
||||
If the compositor does not implement this protocol, the margins
|
||||
will be painted in red instead.
|
||||
|
||||
|
||||
Applications can enable/disable this feature programmatically with
|
||||
the *CSI ? 1042 h* and *CSI ? 1042 l* escape sequences.
|
||||
|
||||
|
||||
Default: _no_
|
||||
|
||||
*notify*
|
||||
|
|
@ -370,24 +370,24 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
|
|||
*osc8-underline*
|
||||
When to underline OSC-8 URLs. Possible values are *url-mode* and
|
||||
*always*.
|
||||
|
||||
|
||||
When set to *url-mode*, OSC-8 URLs are only highlighted in URL
|
||||
mode, just like auto-detected URLs.
|
||||
|
||||
|
||||
When set to *always*, OSC-8 URLs are always highlighted,
|
||||
regardless of their other attributes (bold, italic etc). Note that
|
||||
this does _not_ make them clickable.
|
||||
|
||||
|
||||
Default: _url-mode_
|
||||
|
||||
*label-letters*
|
||||
String of characters to use when generating key sequences for URL
|
||||
jump labels.
|
||||
|
||||
|
||||
If you change this option to include the letter *t*, you should
|
||||
also change the default *[url-bindings].toggle-url-visible* key
|
||||
binding to avoid a clash.
|
||||
|
||||
|
||||
Default: _sadfjklewcmpgh_.
|
||||
|
||||
*protocols*
|
||||
|
|
@ -400,7 +400,7 @@ commented out will usually be installed to */etc/xdg/foot/foot.ini*.
|
|||
*uri-characters*
|
||||
Set of characters allowed in auto-detected URLs. Any character not
|
||||
included in this set constitutes a URL delimiter.
|
||||
|
||||
|
||||
Default:
|
||||
_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-\_.,~:;/?#@!$&%\*+="'()[]_
|
||||
|
||||
|
|
@ -422,7 +422,7 @@ applications can change these at runtime.
|
|||
Two RRGGBB values (i.e. plain old 6-digit hex values, without
|
||||
prefix) specifying the foreground (text) and background (cursor)
|
||||
colors for the cursor.
|
||||
|
||||
|
||||
Default: _inverse foreground/background colors_.
|
||||
|
||||
Note that this value only applies to the block cursor. The other
|
||||
|
|
@ -437,13 +437,13 @@ applications can change these at runtime.
|
|||
*underline-thickness*
|
||||
Thickness (height) of the underline styled cursor. The value is in
|
||||
points, and its exact value thus depends on the monitor's DPI.
|
||||
|
||||
|
||||
To instead specify a thickness in pixels, use the *px* suffix:
|
||||
e.g. *underline-thickness=2px*.
|
||||
|
||||
|
||||
Note that if left unset, the cursor's thickness will scale with
|
||||
the font size, while if set, the size is fixed.
|
||||
|
||||
|
||||
Default: _font underline thickness_.
|
||||
|
||||
# SECTION: mouse
|
||||
|
|
@ -457,17 +457,17 @@ applications can change these at runtime.
|
|||
scroll mode_. When this mode is enabled, mouse scroll events are
|
||||
translated to _up_/_down_ key events when displaying the alternate
|
||||
screen.
|
||||
|
||||
|
||||
This lets you scroll with the mouse in e.g. pagers (like _less_)
|
||||
without enabling native mouse support in them.
|
||||
|
||||
|
||||
Alternate scrolling is *not* used if the application enables
|
||||
native mouse support.
|
||||
|
||||
|
||||
This option can be modified by applications at run-time using the
|
||||
escape sequences *CSI ? 1007 h* (enable) and *CSI ? 1007 l*
|
||||
(disable).
|
||||
|
||||
|
||||
Default: _yes_.
|
||||
|
||||
# SECTION: colors
|
||||
|
|
@ -502,30 +502,30 @@ can configure the background transparency with the _alpha_ option.
|
|||
Custom colors to use with dimmed colors. Dimmed colors do not have
|
||||
an entry in the color palette. Applications emit them by combining
|
||||
a color value, and a "dim" attribute.
|
||||
|
||||
|
||||
By default, foot implements this by reducing the luminance of the
|
||||
current color. This is a generic approach that applies to both
|
||||
colors from the 256-color palette, as well as 24-bit RGB colors.
|
||||
|
||||
|
||||
You can change this behavior by setting the *dimN* options. When
|
||||
set, foot will match the current color against the color palette,
|
||||
and if it matches one of the *regularN* colors, the corresponding
|
||||
*dimN* color will be used.
|
||||
|
||||
|
||||
If instead the current color matches one of the *brightN* colors,
|
||||
the corresponding *regularN* color will be used.
|
||||
|
||||
|
||||
If the current color does not match any known color, it is dimmed
|
||||
by reducing the luminance (i.e. the same behavior as if the *dimN*
|
||||
options are unconfigured). 24-bit RGB colors will typically fall
|
||||
into this category.
|
||||
|
||||
|
||||
Note that applications can change the *regularN* and *brighN*
|
||||
colors at runtime. However, they have no way of changing the
|
||||
*dimN* colors. If an application has changed the *regularN*
|
||||
colors, foot will still use the corresponding *dimN* color, as
|
||||
configured in foot.ini.
|
||||
|
||||
|
||||
Default: _not set_.
|
||||
|
||||
*0* *..* *255*
|
||||
|
|
@ -579,12 +579,12 @@ Examples:
|
|||
*preferred*
|
||||
Which type of window decorations to prefer: *client* (CSD),
|
||||
*server* (SSD) or *none*.
|
||||
|
||||
|
||||
Note that this is only a hint to the compositor. Depending on
|
||||
compositor support, and how it has been configured, it may
|
||||
instruct foot to use CSDs even though this option has been set to
|
||||
*server*, or render SSDs despite *client* or *none* being set.
|
||||
|
||||
|
||||
Default: _server_.
|
||||
|
||||
*size*
|
||||
|
|
@ -714,6 +714,15 @@ e.g. *search-start=none*.
|
|||
*font-reset*
|
||||
Resets the font size to the default. Default: _Control+0 Control+KP\_0_.
|
||||
|
||||
*alpha-increase*
|
||||
Increases alpha by 5%. Default: _not_bound_.
|
||||
|
||||
*alpha-decrease*
|
||||
Decreases alpha by 5%. Default: _not_bound_.
|
||||
|
||||
*alpha-reset*
|
||||
Resets alpha to the default. Default: _not_bound_.
|
||||
|
||||
*spawn-terminal*
|
||||
Spawns a new terminal. If the shell has been configured to emit
|
||||
the OSC 7 escape sequence, the new terminal will start in the
|
||||
|
|
@ -733,17 +742,17 @@ e.g. *search-start=none*.
|
|||
currently selected text to an external tool. The syntax for this
|
||||
option is a bit special; the first part of the value is the
|
||||
command to execute enclosed in "[]", followed by the binding(s).
|
||||
|
||||
|
||||
You can configure multiple pipes as long as the command strings
|
||||
are different and the key bindings are unique.
|
||||
|
||||
|
||||
Note that the command is *not* automatically run inside a shell;
|
||||
use *sh -c "command line"* if you need that.
|
||||
|
||||
|
||||
Example:
|
||||
*pipe-visible=[sh -c "xurls | uniq | tac | fuzzel | xargs -r
|
||||
firefox"] Control+Print*
|
||||
|
||||
|
||||
Default: _not bound_
|
||||
|
||||
*show-urls-launch*
|
||||
|
|
@ -854,14 +863,14 @@ Be careful; do not use single-letter keys that are also used in
|
|||
By default, the jump label only shows the key sequence required to
|
||||
activate it. This is fine as long as the URL is visible in the
|
||||
original text.
|
||||
|
||||
|
||||
But with e.g. OSC-8 URLs (the terminal version of HTML anchors,
|
||||
i.e. "links"), the text on the screen can be something completey
|
||||
different than the URL.
|
||||
|
||||
|
||||
This action toggles between showing and hiding the URL on the jump
|
||||
label.
|
||||
|
||||
|
||||
Default: _t_.
|
||||
|
||||
# SECTION: text-bindings
|
||||
|
|
@ -993,25 +1002,25 @@ any of these options.
|
|||
*bilinear*, *cubic* or *lanczos3*. *cubic* and *lanczos3* produce
|
||||
the best results, but are slower (with *lanczos3* being the best
|
||||
_and_ slowest).
|
||||
|
||||
|
||||
Default: _lanczos3_.
|
||||
|
||||
*overflowing-glyphs*
|
||||
Boolean. When enabled, glyphs wider than their cell(s) are allowed
|
||||
to render into one additional neighbouring cell.
|
||||
|
||||
|
||||
One use case for this are fonts with wide italic characters that
|
||||
"bend" into the next cell. Without this option, such glyphs will
|
||||
appear "cut off".
|
||||
|
||||
|
||||
Another use case are fonts with "icon" characters in the Unicode
|
||||
private usage area, e.g. Nerd Fonts, or Powerline Fonts and legacy
|
||||
emoji characters like *WHITE FROWNING FACE*.
|
||||
|
||||
|
||||
Note: might impact performance depending on the font used.
|
||||
Especially small font sizes can cause many overflowing glyphs
|
||||
because of subpixel rendering.
|
||||
|
||||
|
||||
Default: _yes_.
|
||||
|
||||
*render-timer*
|
||||
|
|
@ -1031,17 +1040,17 @@ any of these options.
|
|||
Boolean. When enabled, box drawing "shades" (e.g. LIGHT SHADE,
|
||||
MEDIUM SHADE and DARK SHADE) are rendered as solid blocks using a
|
||||
darker variant of the current foreground color.
|
||||
|
||||
|
||||
When disabled, they are instead rendered as checker box pattern,
|
||||
using the current foreground color as is.
|
||||
|
||||
|
||||
Default: _yes_.
|
||||
|
||||
*delayed-render-lower*, *delayed-render-upper*
|
||||
These two values control the timeouts (in nanoseconds) that are
|
||||
used to mitigate screen flicker caused by clients writing large,
|
||||
non-atomic screen updates.
|
||||
|
||||
|
||||
If a client splits up a screen update over multiple *write*(3)
|
||||
calls, we may end up rendering an intermediate frame, quickly
|
||||
followed by another frame with the final screen content. For
|
||||
|
|
@ -1050,56 +1059,56 @@ any of these options.
|
|||
writes. Rendering the frame when the screen has been erased, but
|
||||
not yet filled with new content will be perceived as screen
|
||||
flicker.
|
||||
|
||||
|
||||
The *real* solution to this is _Application Synchronized Updates_
|
||||
(https://gitlab.freedesktop.org/terminal-wg/specifications/-/merge_requests/2).
|
||||
|
||||
|
||||
The problem with this is twofold - first, it has not yet been
|
||||
standardized, and thus there are not many terminal emulators that
|
||||
implement it (foot *does* implement it), and second, applications
|
||||
must be patched to use it.
|
||||
|
||||
|
||||
Until this has happened, foot offers an interim workaround; an
|
||||
attempt to mitigate the screen flicker *without* affecting neither
|
||||
performance nor latency.
|
||||
|
||||
|
||||
It is based on the fact that the screen is updated at a fixed
|
||||
interval (typically 60Hz). For us, this means it does not matter
|
||||
if we render a new frame at the *beginning* of a frame interval,
|
||||
or at the *end*. Thus, the goal is to introduce a delay between
|
||||
receiving client data and rendering the resulting state, but
|
||||
without causing a frame skip.
|
||||
|
||||
|
||||
While it should be possible to estimate the amount of time left
|
||||
until the next frame, foot's algorithm is currently not that
|
||||
advanced, but is based on statistics I guess you could say - the
|
||||
delay we introduce is so small that the risk of pushing the frame
|
||||
over to the next frame interval is also very small.
|
||||
|
||||
|
||||
Now, that was a lot of text. But what is it foot actually does?
|
||||
|
||||
|
||||
When receiving client data, it schedules a timer, the
|
||||
*delayed-render-lower*. If we do not receive any more client data
|
||||
before the timer has run out, we render the frame. If however, we
|
||||
do receive more data, the timer is re-scheduled. That is, each
|
||||
time we receive client data, frame rendering is delayed another
|
||||
*delayed-render-lower* nanoseconds.
|
||||
|
||||
|
||||
Now, while this works very well with most clients, it would be
|
||||
possible to construct a malicious client that keeps writing data
|
||||
at a slow pace. To the user, this would look like foot has frozen
|
||||
as we never get to render a new frame. To prevent this, an upper
|
||||
limit is set - *delayed-render-upper*. If this timer runs out, we
|
||||
render the frame regardless of what the client is doing.
|
||||
|
||||
|
||||
If changing these values, note that the lower timeout *must* be
|
||||
set lower than the upper timeout, but that this is not verified by
|
||||
foot. Furthermore, both values must be less than 16ms (that is,
|
||||
16000000 nanoseconds).
|
||||
|
||||
|
||||
You can disable the feature altogether by setting either value to
|
||||
0. In this case, frames are rendered "as soon as possible".
|
||||
|
||||
|
||||
Default: lower=_500000_ (0.5ms), upper=_8333333_ (8.3ms - half a
|
||||
frame interval).
|
||||
|
||||
|
|
@ -1108,14 +1117,14 @@ any of these options.
|
|||
time a frame has been rendered. This forces the compositor to
|
||||
redraw the entire window. If disabled, foot will only 'damage'
|
||||
updated rows.
|
||||
|
||||
|
||||
There is normally *no* reason to enable this. However, it has been
|
||||
seen to workaround an issue with _fractional scaling_ in _Gnome_.
|
||||
|
||||
|
||||
Note that enabling this option is likely to increase CPU and/or
|
||||
GPU usage (by the compositor, not by foot), and may have a
|
||||
negative impact on battery life.
|
||||
|
||||
|
||||
Default: _no_.
|
||||
|
||||
*grapheme-shaping*
|
||||
|
|
@ -1123,90 +1132,90 @@ any of these options.
|
|||
cluster segmentation while parsing "printed" text. Then, when
|
||||
rendering, it will use _fcft_ (if compiled with _HarfBuzz_
|
||||
support) to shape the grapheme clusters.
|
||||
|
||||
|
||||
This is required to render e.g. flag (emoji) sequences, keycap
|
||||
sequences, modifier sequences, zero-width-joiner (ZWJ) sequences
|
||||
and emoji tag sequences. It might also improve rendering of
|
||||
composed characters, depending on font.
|
||||
|
||||
|
||||
- foot must have been compiled with utf8proc support
|
||||
- fcft must have been compiled with HarfBuzz support
|
||||
|
||||
|
||||
See also: *grapheme-width-method*.
|
||||
|
||||
|
||||
Default: _yes_
|
||||
|
||||
*grapheme-width-method*
|
||||
Selects which method to use when calculating the width
|
||||
(i.e. number of columns) of a grapheme cluster. One of
|
||||
*wcswidth*, *double-width* and *max*.
|
||||
|
||||
|
||||
*wcswidth* simply adds together the individual width of all
|
||||
codepoints making up the cluster.
|
||||
|
||||
|
||||
*double-width* does the same, but limits the maximum number of
|
||||
columns to 2. This is more correct, but may break some
|
||||
applications since applications typically use *wcswidth*(3)
|
||||
internally to calculate the width. This results in cursor
|
||||
de-synchronization issues.
|
||||
|
||||
|
||||
*max* uses the width of the largest codepoint in the cluster.
|
||||
|
||||
|
||||
Default: _wcswidth_
|
||||
|
||||
*font-monospace-warn*
|
||||
Boolean. When enabled, foot will use heuristics to try to verify
|
||||
the primary font is a monospace font, and warn if it is not.
|
||||
|
||||
|
||||
Disable this if you still want to use the font, even if foot
|
||||
thinks it is not monospaced.
|
||||
|
||||
|
||||
You may also want to disable it to get slightly faster startup times.
|
||||
|
||||
|
||||
Default: _yes_
|
||||
|
||||
*max-shm-pool-size-mb*
|
||||
This option controls the amount of virtual address space used by
|
||||
the pixmap memory to which the terminal screen content is
|
||||
rendered.
|
||||
|
||||
|
||||
It does not change how much physical memory foot uses.
|
||||
|
||||
|
||||
Foot uses a memory mapping trick to implement fast rendering of
|
||||
interactive scrolling (typically, but applies to "slow" scrolling
|
||||
in general). Example: holding down the 'up' or 'down' arrow key to
|
||||
scroll in a text editor.
|
||||
|
||||
|
||||
For this to work, it needs a large amount of virtual address
|
||||
space. Again, note that this is not physical memory.
|
||||
|
||||
|
||||
On a normal x64 based computer, each process has 128TB of virtual
|
||||
address space, and newer ones have 64PB. This is an insane amount
|
||||
and most applications do not use anywhere near that amount.
|
||||
|
||||
|
||||
Each foot terminal window can allocate up to 2GB of virtual
|
||||
address space. With 128TB of address space, that means a maximum
|
||||
of 65536 windows in server/daemon mode (for 2GB). That should be
|
||||
enough, yes?
|
||||
|
||||
|
||||
However, the Wayland compositor also needs to allocate the same
|
||||
amount of virtual address space. Thus, it has a slightly higher
|
||||
chance of running out of address space since it needs to host
|
||||
all running Wayland clients in the same way, at the same time.
|
||||
|
||||
|
||||
In the off chance that this becomes a problem for you, you can
|
||||
reduce the amount used with this option.
|
||||
|
||||
|
||||
Or, for optimal performance, you can increase it to the maximum
|
||||
allowed value, 2GB (but note that you most likely will not notice
|
||||
any difference compared to the default value).
|
||||
|
||||
|
||||
Setting it to 0 disables the feature.
|
||||
|
||||
|
||||
Limitations:
|
||||
- only supported on 64-bit architectures
|
||||
- only supported on Linux
|
||||
|
||||
|
||||
Default: _512_. Maximum allowed: _2048_ (2GB).
|
||||
|
||||
*sixel*
|
||||
|
|
|
|||
3
foot.ini
3
foot.ini
|
|
@ -133,6 +133,9 @@
|
|||
# font-increase=Control+plus Control+equal Control+KP_Add
|
||||
# font-decrease=Control+minus Control+KP_Subtract
|
||||
# font-reset=Control+0 Control+KP_0
|
||||
# alpha-increase=none
|
||||
# alpha-decrease=none
|
||||
# alpha-reset=none
|
||||
# spawn-terminal=Control+Shift+n
|
||||
# minimize=none
|
||||
# maximize=none
|
||||
|
|
|
|||
12
input.c
12
input.c
|
|
@ -178,6 +178,18 @@ execute_binding(struct seat *seat, struct terminal *term,
|
|||
term_font_size_reset(term);
|
||||
return true;
|
||||
|
||||
case BIND_ACTION_ALPHA_UP:
|
||||
term_alpha_increase(term);
|
||||
return true;
|
||||
|
||||
case BIND_ACTION_ALPHA_DOWN:
|
||||
term_alpha_decrease(term);
|
||||
return true;
|
||||
|
||||
case BIND_ACTION_ALPHA_RESET:
|
||||
term_alpha_reset(term);
|
||||
return true;
|
||||
|
||||
case BIND_ACTION_SPAWN_TERMINAL:
|
||||
term_spawn_new(term);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -25,6 +25,9 @@ enum bind_action_normal {
|
|||
BIND_ACTION_FONT_SIZE_UP,
|
||||
BIND_ACTION_FONT_SIZE_DOWN,
|
||||
BIND_ACTION_FONT_SIZE_RESET,
|
||||
BIND_ACTION_ALPHA_UP,
|
||||
BIND_ACTION_ALPHA_DOWN,
|
||||
BIND_ACTION_ALPHA_RESET,
|
||||
BIND_ACTION_SPAWN_TERMINAL,
|
||||
BIND_ACTION_MINIMIZE,
|
||||
BIND_ACTION_MAXIMIZE,
|
||||
|
|
|
|||
21
terminal.c
21
terminal.c
|
|
@ -2005,6 +2005,27 @@ term_font_size_reset(struct terminal *term)
|
|||
return load_fonts_from_conf(term);
|
||||
}
|
||||
|
||||
bool
|
||||
term_alpha_increase(struct terminal *term)
|
||||
{
|
||||
term->colors.alpha += 0.05;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
term_alpha_decrease(struct terminal *term)
|
||||
{
|
||||
term->colors.alpha -= 0.05;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
term_alpha_reset(struct terminal *term)
|
||||
{
|
||||
term->colors.alpha = term->conf->colors.alpha;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
term_font_dpi_changed(struct terminal *term, int old_scale)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -692,6 +692,9 @@ bool term_paste_data_to_slave(
|
|||
bool term_font_size_increase(struct terminal *term);
|
||||
bool term_font_size_decrease(struct terminal *term);
|
||||
bool term_font_size_reset(struct terminal *term);
|
||||
bool term_alpha_increase(struct terminal *term);
|
||||
bool term_alpha_decrease(struct terminal *term);
|
||||
bool term_alpha_reset(struct terminal *term);
|
||||
bool term_font_dpi_changed(struct terminal *term, int old_scale);
|
||||
void term_font_subpixel_changed(struct terminal *term);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue