Commit graph

1231 commits

Author SHA1 Message Date
Daniel Eklöf
cbe1c2fe75
term: shutdown: special case child terminating due to SIGHUP
When closing the window via a compositor shortcut, or clicking the CSD
close button, we kill the client application by sending it SIGHUP (and
then SIGTERM followed by SIGKILL, if it refuses to die).

Many shells either don't catch SIGHUP, causing us to exit with a
non-zero value, or they catch it, and then _they_ exit with a non-zero
value, causing _us_ to propagate that to the user.

This patch changes foot's behavior to "ignore" death-by-sighup, and
always exit with value 0.

The log message is changed to debug level, for SIGHUP only; other
death-by-signal is still logged at the warning level.
2025-02-03 07:50:10 +01:00
Attila Fidan
5286808b6c
input: close fd on no/unrecognized keymap format 2025-01-30 10:58:19 +00:00
Daniel Eklöf
8d6f0d0583
key-bindings: try all bindings in translated mode before matching untranslated, and then finally raw
When trying to match key bindings, we do three types of matching:

* Match the _translated_ symbol (e.g. Control+C)
* Match the _untranslated_ symbol (e.g. Control+Shift+c)
* Match raw keyboard codes

This was done for *each* key binding. This meant we sometimes matched
a keybinding in raw mode, even though there was a
translated/untranslated binding that would match it too. All depending
on the internal order of the key binding list.

This patch changes it, so that we first try all bindings in translated
mode, then all bindings in untranslated mode, and finally all bindings
in raw mode.

Closes #1929
2025-01-27 12:31:40 +01:00
Daniel Eklöf
846271e8d3
render: resize: configure with only one dimension being zero
The protocol states:

    If the width or height arguments are zero, it means the client
    should decide its own window dimension. This may happen when the
    compositor needs to configure the state of the surface but doesn't
    have any information about any previous or expected dimension.

The wording is a bit ambiguous; does it mean we should set *both*
width and height to values we choose, even if only one dimension is
zero in the configure event? Or does it mean that we should choose the
value for the dimension that is zero in the configure event?

Regardless, it's pretty clear that it does *not* mean we should *only*
choose width and height if *both* dimensions are zero in the configure
event. This is foot's behavior before this patch, meaning if only one
of them is zero, foot assumed the compositor wanted us to set the
width (or height) to zero...

Change this, so that we now choose value for the "missing" dimension,
but do use the compositor provided value for the other dimension.

Closes #1925

Relevant issues:

* https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/155
* https://github.com/YaLTeR/niri/issues/1050
2025-01-26 09:28:54 +01:00
Daniel Eklöf
97385b007f
grid: reflow: regression: remove (truncate) SPACER cells at the end of line
When printing a double-width glyph at the end of the line, it will get
pushed to the next line if there's only one cell left on the current
line.

That last cell on the current line is filled with a SPACER value.

When reflowing the text, the SPACER cell should be "removed", so that
the double-width glyph continues directly after the text on the
previous line.

9567694bab fixed an issue where
reflowing e.g. neofetch output incorrectly removed spaces between the
logo, and the system info. But also introduced a regression where
SPACER values no longer are removed.

This patch tries to fix it, by adding back empty cells, but NOT SPACER
cells.
2025-01-25 08:46:21 +01:00
Daniel Eklöf
f39b75f296
changelog: cwd > 1024 chars 2025-01-24 06:52:52 +01:00
Daniel Eklöf
2ff38e86a7
input: kitty: fix alternate codepoint sometimes not being reported
When alternate key reporting is enabled (i.e. when we're supposed to
report the shifted key along with the unshifted key), we try to figure
out whether the key really is shifted or not (and thus which xkb
keysym to use for the unshifted and shifted keys in the escape).

This was done by getting the layout's *all* modifier combinations that
produce the shifted keysym, and if any of of them contained a modifier
that isn't supported by the kitty protocol, the shifted and unshifted
keys are derived from the same keysym. This is to ensure we handle
things like AltGr-combos correctly.

The issue is, since there may be more than one modifier combination
generating the shifted keysym, we may end up using the wrong keysym
just because _another_ combination set contains modifiers not
supported by the kitty protocol. What we're interrested in is whether
the *pressed* set of modifiers contains such modifiers.

Closes #1918
2025-01-20 09:08:47 +01:00
Daniel Eklöf
10c4e94e1b
Merge branch 'releases/1.20' 2025-01-18 09:43:57 +01:00
Daniel Eklöf
bb60618941
changelog: move utf8proc entry to correct release 2025-01-18 09:31:05 +01:00
Daniel Eklöf
e1d9b57f83
changelog: add back entry to 1.20.1, removed in de3becef96 2025-01-18 09:31:05 +01:00
Daniel Eklöf
15d9b08307
changelog: prepare for 1.20.2 2025-01-18 09:25:19 +01:00
Daniel Eklöf
c5529808c4
term: cursor_refresh(): don't try to dirty the grid if we don't have one
If the compositor sends a keyboard enter event before our window has
been mapped, foot crashes; the enter event triggers a cursor
refresh (hollow -> non-hollow block cursor), which crashes since we
haven't yet allocated a grid.

Fix by no-op:ing the refresh if the window hasn't been configured yet.

Closes #1910
2025-01-18 09:24:00 +01:00
Daniel Eklöf
39061e0422
changelog: colors.flash-alpha=1.0 2025-01-18 09:23:46 +01:00
Alexander Orzechowski
de3becef96
Revert "config: don't allow colors.flash-alpha to be 1.0"
This reverts commit 56d2c3e990.
2025-01-18 09:23:41 +01:00
Daniel Eklöf
ad1e2d7d05
changelog: 'CSI 21 t' and 'OSC 176 ?' disabled 2025-01-18 09:23:35 +01:00
Daniel Eklöf
80ef366bde
changelog: utf8proc.h not found 2025-01-18 09:23:31 +01:00
Daniel Eklöf
c854f35579
changelog: add missing issue ref 2025-01-18 09:23:27 +01:00
Daniel Eklöf
45e5a4b024
changelog: add new 'unreleased' section 2025-01-18 09:23:26 +01:00
Daniel Eklöf
2a07a2e6b9
Add support for the new Wayland protocol xdg-system-bell
From the release notes:

    system bell - allowing e.g. terminal emulators to hand off system
    bell alerts to the compositor for among other things accessibility
    purposes

The new protocol is used when the new config option
bell.system=yes (and the compositor implements the protocol,
obviously).

The system bell is rung independent of whether the foot window has
keyboard focus or not (thus relying on compositor configuration to
determine whether anything should be done or not in response to the
bell).

The new option is enabled by default.
2025-01-17 10:21:50 +01:00
Daniel Eklöf
2c309227f1
term: cursor_refresh(): don't try to dirty the grid if we don't have one
If the compositor sends a keyboard enter event before our window has
been mapped, foot crashes; the enter event triggers a cursor
refresh (hollow -> non-hollow block cursor), which crashes since we
haven't yet allocated a grid.

Fix by no-op:ing the refresh if the window hasn't been configured yet.

Closes #1910
2025-01-09 07:56:57 +01:00
Daniel Eklöf
e136abf1ef
changelog: colors.flash-alpha=1.0 2025-01-09 07:56:10 +01:00
Alexander Orzechowski
301101e7d9
Revert "config: don't allow colors.flash-alpha to be 1.0"
This reverts commit 56d2c3e990.
2025-01-09 07:53:50 +01:00
Daniel Eklöf
bcc176cdf1
changelog: 'CSI 21 t' and 'OSC 176 ?' disabled 2025-01-07 13:01:25 +01:00
Daniel Eklöf
6999968ee5
changelog: utf8proc.h not found 2025-01-04 10:33:23 +01:00
Daniel Eklöf
9667fe2b26
changelog: add missing issue ref 2025-01-03 08:08:52 +01:00
Daniel Eklöf
8414966013
changelog: add new 'unreleased' section 2025-01-03 08:03:06 +01:00
Daniel Eklöf
4ed0361b97
changelog: prepare for 1.20.1 2025-01-03 08:01:22 +01:00
Daniel Eklöf
f5c10a2452
render: fix order we're checking custom codepoints
Fixes a crash when trying to print a "Legacy Computing"
symbol (U+1FB00-U+1FB9B).

Closes #1901
2025-01-03 07:33:14 +01:00
Daniel Eklöf
56d2c3e990
config: don't allow colors.flash-alpha to be 1.0
A compositor will not send a frame callback for our main window if it
is fully occluded (for example, by a fully opaque overlay...). This
causes the overlay to stuck.

For regular buffers, it _should_ be enough to *not* hint the
compositor it's opaque. But at least some compositor special cases
single-pixel buffers, and actually look at their pixel value.

Thus, we have two options: implement frame callback handling for the
overlay sub-surface, or ensure we don't use a fully opaque
surface. Since no overlays are fully opaque by default, and the flash
surface is the only one that can be configured to be
opaque (colors.flash-alpha), and since adding frame callback handling
adds a lot of boilerplate code... let's go with the simpler solution
of
2025-01-02 09:10:51 +01:00
Daniel Eklöf
c7ab7b3539
term: limit app-id to 2048 characters
Unsure if the protocol imposes a limit (haven't found any
documentation), or if the issue is in the libwayland implementation,
or wlroots (triggers in at least sway+river).

The issue is that setting a too long app-id causes the
compositor (river at least) to peg the CPU at 100%, and stop sending
e.g. frame callbacks to foot.

Closes #1897
2025-01-02 08:58:48 +01:00
Daniel Eklöf
f8ebe985a8
changelog: add missing issue ref 2025-01-01 09:29:11 +01:00
Daniel Eklöf
1dc922e5a4
changelog: add new 'unreleased' section 2025-01-01 09:23:33 +01:00
Daniel Eklöf
ded55b7276
changelog: prepare for 1.20.0 2025-01-01 09:21:26 +01:00
Daniel Eklöf
e851d44ac9
kitty kbd: don't generate release events for plain Enter+Tab+Backspace
From the specification:

    The Enter, Tab and Backspace keys will not have release events
    unless Report all keys as escape codes is also set, so that the
    user can still type reset at a shell prompt when a program that
    sets this mode ends without resetting it.

Closes #1892
2025-01-01 08:06:52 +01:00
Daniel Eklöf
e38ec79be1
osc: add option to disable OSC-52, partially or fully
Closes #1867
2024-12-22 07:16:12 +01:00
Daniel Eklöf
67bd5dd460
selection: fix crash when tripple clicking in a region containing NUL characters
If a cell contains a NUL character, it was incorrectly treated as a
quote, later triggering an assertion.

Patch by Johannes Altmanninger
2024-12-22 07:09:37 +01:00
Daniel Eklöf
d523e7a676
term: set_app_id() + set_window_title(): only allow printable characters 2024-12-17 11:01:17 +01:00
Daniel Eklöf
9a1b59adae
box-drawings: implement octants 2024-12-08 12:55:57 +01:00
Daniel Eklöf
d3cd4ad933
char32: use utf8proc_charwidth() instead of wcwidth(), when available
It appears to be slightly more up-to-date with recent Unicode
versions.

In particular, it handles the new "Symbols for Legacy Computing
Supplement" block, introduced in Unicode 16.

Closes #1865
2024-11-02 15:12:39 +01:00
Daniel Eklöf
f3e443ea47
osc: 9: ignore ConEmu/Windows Terminal sequences
OSC-9 sequences starting with "<number>;" are now ignored, as they are
ConEmu sequences, and not iTerm notifications.
2024-11-02 08:33:03 +01:00
Daniel Eklöf
ab3af2af37
unicode: update data files to 16.0
Yup, there's no _actual_ changes 🤷
2024-10-31 07:26:07 +01:00
Daniel Eklöf
4aae5222fe
changelog: osc-9/777 crash when body is empty 2024-10-31 07:03:12 +01:00
Daniel Eklöf
8edf273f6e
changelog: add new 'unreleased' section 2024-10-23 13:55:10 +02:00
Daniel Eklöf
6d11e93e2f
changelog: prepare for 1.19.0 2024-10-23 13:50:54 +02:00
Daniel Eklöf
d68da27a7f
uri: skip query/fragment parsing when dealing with file:// URIs
Also, ignore invalid query/fragments (i.e. if the fragment comes
before the query).

Closes #1840
2024-10-23 08:47:21 +02:00
Daniel Eklöf
511aad419b
config: add color.sixelN options
These options allows you to configure the default sixel color palette.
2024-10-23 08:35:30 +02:00
Daniel Eklöf
ce38f5b413
render: sixels: update damage region when rendering sixels
This fixes flickering when foot is forced to double-buffer (e.g when
running under KDE, or smithay based compositors).

Since the damage region isn't updated, the sixel images aren't
included in the memcpy that is done to transfer the last frame's
updated regions to the next frame.

As a result, every other frame will have the sixels, while the others
don't.

Closes #1851
2024-10-05 08:55:48 +02:00
Daniel Eklöf
4afb94687c
changelog: #1715: "ghost" lines when selecting text 2024-09-21 09:17:38 +02:00
Daniel Eklöf
e2aeb7f336
render: xcursor_is_valid(): don't crash when there's no theme loaded
When trying to set a custom cursor shape, we first validate it. This
is done by checking against known server-side names, and then trying
to load the cursor from the client side cursor theme.

But, if we're using server side names, there is no theme loaded, and
foot crashed.

Fix by checking if we have a theme loaded, and if not, fail the cursor
shape name validation.
2024-09-21 09:10:48 +02:00
Daniel Eklöf
76b58b5663
changelog: remove escape sequences we've reverted 2024-09-13 09:04:18 +02:00