Commit graph

876 commits

Author SHA1 Message Date
Daniel Eklöf
312f0dbcfd
changelog: scrollback mode freezing, with 100% CPU 2022-04-24 20:18:49 +02:00
Daniel Eklöf
47d1ba58e5
changelog: UI not refreshing when pasting into the scrollback search box 2022-04-24 12:08:23 +02:00
Daniel Eklöf
1913fb6efd
changelog: hyperlink lists under their corresponding sub-section 2022-04-23 11:13:25 +02:00
Daniel Eklöf
9483a3a7c0
changelog: pgo helper binary build fix (missing key-binding stubs) 2022-04-23 00:49:52 +02:00
Daniel Eklöf
1383def2a0
changelog: convert all issue links to reference links in the 1.12.0 release 2022-04-22 20:05:33 +02:00
Daniel Eklöf
61446df895
Revert "changelog: convert all issue links to reference links in the 1.12.0 release"
This reverts commit 6652a836ad.

We only added the actual links to the 1.12.0 release, meaning all
other issue hyperlinks broke.
2022-04-22 20:02:15 +02:00
Daniel Eklöf
6652a836ad
changelog: convert all issue links to reference links in the 1.12.0 release 2022-04-22 18:54:49 +02:00
Daniel Eklöf
e284c764b7
changelog: replace all bug refs with markdown hyperlinks 2022-04-22 18:36:28 +02:00
Daniel Eklöf
2d4d919687
changelog: add new ‘unreleased’ section 2022-04-22 17:19:04 +02:00
Daniel Eklöf
0cdd32043e
changelog: prepare for 1.12.0 2022-04-22 17:14:00 +02:00
Daniel Eklöf
c7248cf763
meson: add -Dtests=false|true option
When set to false, no test binaries are neither built, nor
executed (with “ninja test”).

Closes #919
2022-04-22 17:05:25 +02:00
Daniel Eklöf
9907d7bbe9
search: don't modify search.start coord *before* finding next match
The match logic uses the last start coordinate to determine which end
points in the selection to update. This sometimes fails when the start
coordinate has been changed by e.g. a key binding - the new start
coordinate is incorrectly matched against the old-but-modified start
coordinate, causing foot to e.g. *not* upate the selection start
coordinate.

Example:

  $ echo 'test\n\test\ntest'

Then do a scrollback search for 'test. The first match is found
correctly (the last 'test'), but searching for the previous match
(ctrl+r) does not select the middle 'test'.

Fix by passing the search direction to search_find_next(), and have
_it_ calculate the coordinate to start search. There are three possibilities:

* forward
* backward
* "backward", but at the same position

The first two are used when searching for next/prev match with ctrl+s
and ctrl+r. The last one is used when the search criteria is
updated. In this case, we don't want to move to the previous match,
*unless* the current match no longer matches.
2022-04-21 18:54:27 +02:00
Daniel Eklöf
6ed9a31007
changelog: move “re-mapping input” from “changed” to “added” 2022-04-20 20:56:04 +02:00
Daniel Eklöf
8485cdaaaa
csi: implement CSI > 4n (reset modifyOtherKeys) 2022-04-19 17:25:06 +02:00
Daniel Eklöf
c5519e2aa6
search: fix next/prev not updating selection correctly when matches overlap
When the new match overlapped with the old match, the selection wasn’t
updated correctly.
2022-04-17 19:16:47 +02:00
Daniel Eklöf
8046e5560a
changelog: key binding overrides having no effect with footclient 2022-04-17 16:01:30 +02:00
Daniel Eklöf
e95bc9283e
meson: install foot.ini to /etc/xdg/foot/foot.ini
Closes #1001
2022-04-17 11:27:53 +02:00
Daniel Eklöf
501a9fbb5e
url-mode: add a key binding that enables “persistent” URL mode
This is an alternative to ‘show-urls-launch’, where we stay in URL
mode after activating an URL.

Closes #964
2022-04-17 11:24:27 +02:00
Daniel Eklöf
0062f4e133
changelog: scrollback search mode highlights all matches 2022-04-17 11:05:14 +02:00
Daniel Eklöf
fc2ebf772c
changelog: [csd].hide-when-maximized 2022-04-16 11:45:52 +02:00
Daniel Eklöf
7a0e7c6c01
wayland: take (visible) border width into account on configure events
When the compositor is asking us to resize ourselves, take
our (visible) CSD borders into account. This is similar to how we
already take the titlebar size into account.

This fixes an issue where the window size “jumps” when the user starts
an interactive resize, when csd.border-width > 0.

This as been observed in GNOME.
2022-04-16 11:17:19 +02:00
Daniel Eklöf
0e477e2c5e
render: take visible border width into account when setting window geometry
This fixes e.g. window snapping in GNOME.
2022-04-16 10:57:45 +02:00
Daniel Eklöf
d02124902b
client: add -E,--client-environment
When this option is used, the child process in the new terminal
instance will inherit its environment from the footclient process,
instead of the foot server’s.

Implemented by sending (yet another) dynamic string list as part of
the client -> server setup packet. When the new option is *not* used,
the setup packet is now 2 bytes larger than before.

On the server side, the slave process now uses execvpe() instead of
execvp(). There’s plumbing to propagate a new ‘envp’ argument from
term_init() all the way down to slave_exec(). If ‘envp’ is NULL, we
use ‘environ’ instead (thus matching the old behavior of execvp()).

Closes #1004
2022-04-12 15:07:40 +02:00
Daniel Eklöf
0d42e039bb
changelog: improved compatibility with XTerm when modifyOtherKeys=2 2022-04-10 18:36:04 +02:00
Daniel Eklöf
20608c987b
config: fallback to /etc/xdg if XDG_CONFIG_DIRS is unset
Closes #1008
2022-04-07 13:06:01 +02:00
jvoisin
58a1ffe724
config: add tweak option to allow disabling sixels
Closes #950
2022-04-06 19:25:43 +02:00
Daniel Eklöf
5ce1589c60
render: ensure an underline cursor is not positioned too low
The underline cursor is positioned just below regular underlines. A
bug in the positioning logic related to this, sometimes resulted in
the cursor being thinner than what it should be, or even invisible.

Fixes #1005
2022-04-06 18:17:59 +02:00
L3MON4D3
d6dab2f2ba
Use circles for rendering light arc box-drawing characters.
Ellipses can look weird when the font is narrow.

Closes #988
2022-04-03 18:49:47 +02:00
Daniel Eklöf
1e63dddb89
input: don’t allow non-significant modifiers when matching untranslated symbols
When matching “untranslated” bindings (by matching the base symbol of
the key, e.g. ctrl+shift+2 in US layout), require that no
non-significant modifiers are active.

This fixes an issue where AltGr was “ignored”, and would cause certain
combinations to match a key binding.

Example: ctrl+altgr+0, on many European layouts matched against the
default ctrl+0 (reset the font size), instead of emitting ^]

To make this work, we now need to filter out “locked”
modifiers (e.g. NumLock and CapsLock). Otherwise having e.g. NumLock
active would prevent *all* untranslated matching to fail.

Closes #983
2022-03-20 13:29:29 +01:00
Daniel Eklöf
485c473e76
selection: don’t translate \r to \n when pasting
In non-bracketed paste mode, we translate \n to \r, and \r\n to
\r. The latter matches XTerm, urxvt, alacritty and kitty. The former
matches alacritty and kitty (xterm and urxvt just blindly replaces all
\n occurrences with \r, meaning \r\n is translated to \r\r.

For some reason, we then unconditionally translated all \r back to \n,
regardless of whether bracketed paste was enabled or not. Unsure
why/where this comes from, but it doesn't match any of the other
terminal emulators I tested.

One example where this caused issues is in older versions of nano (at
least up to 2.9).

Closes #980
2022-03-19 19:01:25 +01:00
Craig Barnes
8d4d22218e csi: add support for DECNKM private mode
This is equivalent to DECKPAM/DECKPNM when enabled/disabled, but can
also be saved/restored/queried with XTSAVE/XTRESTORE/DECRQM.

See also:

* https://vt100.net/docs/vt510-rm/DECNKM.html
* https://vt100.net/docs/vt510-rm/DECKPAM.html
* https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-PC-Style-Function-Keys
2022-03-19 13:44:14 +00:00
Daniel Eklöf
3cefe78b40
osc: use four digits in OSC-4 and OSC-11 rgb:r/g/b replies
Closes #971
2022-03-13 19:44:32 +01:00
Daniel Eklöf
6e536e7ed8
input: get_current_modifiers(): don’t crash if seat has no keyboard
Closes #963
2022-03-04 17:54:19 +01:00
Daniel Eklöf
9b343fd9fb
meson: stop using deprecated functions, require meson >= 0.58
* get_pkgconfig_variable() -> get_variable()
* prog.path() -> prog.full_path()
* meson.build_root() -> meson.global_build_root()
2022-02-27 11:28:11 +01:00
Max Gautier
0b7f06bad4 Socket activation changelog entry 2022-02-26 16:09:52 +01:00
Daniel Eklöf
f869ca4546
config/input: add scrollback-home|end key bindings (unbound by default) 2022-02-23 19:03:54 +01:00
Daniel Eklöf
8379b48a9e
changelog: remapping input to custom escape sequences 2022-02-16 23:02:27 +01:00
Daniel Eklöf
cff097197f
config: do key binding collision handling in overrides
This ensures we detect, and handle, collisions also for key-bindings
specified as overrides.
2022-02-16 23:02:25 +01:00
Daniel Eklöf
8fa16f616c
main: --server: don’t exit with code 0 on failure
A foot --server instance would exit with code 0, even on failure, if
the number of currently open terminal instances were 0.

This is because ‘ret’ assumed failure, and then tried to set it to
‘success’ after the even loop had terminated, basted on the server’s
current state.

Fix by:

* set ‘ret’ to success just before entering the event loop
* set ‘ret’ to failure when we detect an FDM failure
* don’t try to second-guess success/failure after having exited the
  event loop

Closes #943
2022-02-16 22:44:42 +01:00
Craig Barnes
e32707ffc0 csi/input: remove private mode 27127
This effectively reverts commit 31c73f0cf0.
2022-02-09 20:50:20 +00:00
Ashish SHUKLA
5631f16a62
changelog: fallback xcursor 2022-02-07 22:17:31 +05:30
Daniel Eklöf
448a0f2833
changelog: OSC-22 2022-02-07 17:28:38 +01:00
Daniel Eklöf
91be6d2e6e
changelog: crash in pipe-scrollback 2022-02-07 15:12:46 +01:00
Daniel Eklöf
1b0cfafb9e
changelog: scrollback wrap-around crossing selections 2022-02-07 15:06:55 +01:00
Daniel Eklöf
09fd39bb29
changelog: mouse selections are finalized on window resize 2022-02-07 10:44:00 +01:00
Daniel Eklöf
1eef5a00e6
changelog: “(null)” being logged as font-name 2022-02-06 12:07:58 +01:00
Daniel Eklöf
87c0d857cf
changelog: missing ‘wayland_client’ dependency in test-config 2022-02-06 12:05:01 +01:00
Daniel Eklöf
b3849cb983
changelog: add new ‘unreleased’ section 2022-02-05 17:38:24 +01:00
Daniel Eklöf
ccb0cd178f
changelog: prepare for 1.11.0 2022-02-05 17:19:43 +01:00
Daniel Eklöf
e0227266ca
fcft: adapt to API changes in fcft-3.x
Fcft no longer uses wchar_t, but plain uint32_t to represent
codepoints.

Since we do a fair amount of string operations in foot, it still makes
sense to use something that actually _is_ a string (or character),
rather than an array of uint32_t.

For this reason, we switch out all wchar_t usage in foot to
char32_t. We also verify, at compile-time, that char32_t used
UTF-32 (which is what fcft expects).

Unfortunately, there are no string functions for char32_t. To avoid
having to re-implement all wcs*() functions, we add a small wrapper
layer of c32*() functions.

These wrapper functions take char32_t arguments, but then simply call
the corresponding wcs*() function.

For this to work, wcs*() must _also_ be UTF-32 compatible. We can
check for the presence of the  __STDC_ISO_10646__ macro. If set,
wchar_t is at least 4 bytes and its internal representation is UTF-32.

FreeBSD does *not* define this macro, because its internal wchar_t
representation depends on the current locale. It _does_ use UTF-32
_if_ the current locale is UTF-8.

Since foot enforces UTF-8, we simply need to check if __FreeBSD__ is
defined.

Other fcft API changes:

* fcft_glyph_rasterize() -> fcft_codepoint_rasterize()
* font.space_advance has been removed
* ‘tags’ have been removed from fcft_grapheme_rasterize()
* ‘fcft_log_init()’ removed
* ‘fcft_init()’ and ‘fcft_fini()’ must be explicitly called
2022-02-05 17:00:54 +01:00