From 3f10ee87b1ab6f280fae25dfe85c11df34125602 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sun, 26 Dec 2021 14:51:26 +0100 Subject: [PATCH] term: print: erase existing OSC-8 URI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If we have an “active” OSC-8 URI, term_print() would correctly replace an existing URI with the new one. But, if we don’t have an active URI, an existing URI was not erased. This can be reproduced with e.g echo -e '\e]8;;http://foo.bar\e\\foobar\e]8;;\e\\\b\b\b\b\b😀\n' --- CHANGELOG.md | 2 ++ terminal.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47b7ed70..f30bc118 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -66,6 +66,8 @@ (https://codeberg.org/dnkl/foot/issues/851). * Crash when maximizing the window and `[csd].size=1` (https://codeberg.org/dnkl/foot/issues/857). +* OSC-8 URIs not getting overwritten (erased) by double-width + characters (e.g. emojis). ### Security diff --git a/terminal.c b/terminal.c index fd8ff4ae..f8612c46 100644 --- a/terminal.c +++ b/terminal.c @@ -3262,7 +3262,8 @@ term_print(struct terminal *term, wchar_t wc, int width) case OSC8_UNDERLINE_URL_MODE: break; } - } + } else if (row->extra != NULL) + grid_row_uri_range_erase(row, col, col + width - 1); /* Advance cursor the 'additional' columns while dirty:ing the cells */ for (int i = 1; i < width && col < term->cols - 1; i++) {