extract: ensure line-based selections are terminated with a newline

Closes #869
This commit is contained in:
Daniel Eklöf 2022-02-02 22:02:56 +01:00
parent 5ee902551a
commit 69e2bff8c8
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 20 additions and 3 deletions

View file

@ -80,6 +80,8 @@
(https://codeberg.org/dnkl/foot/issues/900).
* File pasted, or dropped, on the alt screen is no longer quoted
(https://codeberg.org/dnkl/foot/issues/379).
* Line-based selections now include a trailing newline when copied
(https://codeberg.org/dnkl/foot/issues/869).
### Deprecated

View file

@ -86,9 +86,24 @@ extract_finish_wide(struct extraction_context *ctx, wchar_t **text, size_t *len)
} else {
xassert(ctx->idx > 0);
xassert(ctx->idx <= ctx->size);
if (ctx->buf[ctx->idx - 1] == L'\n')
ctx->buf[ctx->idx - 1] = L'\0';
else {
switch (ctx->selection_kind) {
default:
if (ctx->buf[ctx->idx - 1] == L'\n')
ctx->buf[ctx->idx - 1] = L'\0';
break;
case SELECTION_LINE_WISE:
if (ctx->buf[ctx->idx - 1] != L'\n') {
if (!ensure_size(ctx, 1))
goto err;
ctx->buf[ctx->idx++] = L'\n';
}
break;
}
if (ctx->buf[ctx->idx - 1] != L'\0') {
if (!ensure_size(ctx, 1))
goto err;
ctx->buf[ctx->idx++] = L'\0';