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
This commit is contained in:
Daniel Eklöf 2022-03-16 20:17:02 +01:00
parent 8d4d22218e
commit 485c473e76
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 4 additions and 7 deletions

View file

@ -58,6 +58,8 @@
sequences (https://codeberg.org/dnkl/foot/issues/325).
* OSC-4 and OSC-11 replies now uses four digits instead of 2
(https://codeberg.org/dnkl/foot/issues/971).
* `\r` is no longer translated to `\n` when pasting clipboard data
(https://codeberg.org/dnkl/foot/issues/980).
### Deprecated

View file

@ -1638,11 +1638,6 @@ fdm_receive_timeout(struct fdm *fdm, int fd, int events, void *data)
static void
fdm_receive_decoder_plain(struct clipboard_receive *ctx, char *data, size_t size)
{
/* \r -> \n */
for (size_t i = 0; i < size; i++) {
if (data[i] == '\r')
data[i] = '\n';
}
ctx->cb(data, size, ctx->user);
}
@ -1760,8 +1755,8 @@ fdm_receive(struct fdm *fdm, int fd, int events, void *data)
/*
* Call cb while at same time replace:
* - \r\n -> \r
* - \n -> \r
* - \r\n -> \r (non-bracketed paste)
* - \n -> \r (non-bracketed paste)
* - C0 -> <nothing> (strip non-formatting C0 characters)
* - \e -> <nothing> (i.e. strip ESC)
*/