url-mode: remove overlapping URLs, not just duplicates

echo -e '\e]8;;https://www.foo.bar\e\\https://www.foo\e]8;;\e\\.bar'

will produce an OSC-8 URL (https://www.foo) that is slightly shorter
than the auto-detected one (https://www.foo.bar).

This produces strange results in URL mode. For example, if
url.osc8-underline=always, the OSC8 underline will be removed when
url-mode is exited.

This patch changes the behavior so that auto-detected URLs that
overlap OSC-8 URLs are removed.

Note that OSC-8 URLs cannot overlap with each other, and that
auto-detected URLs also cannot overlap with each other.
This commit is contained in:
Daniel Eklöf 2021-05-22 16:42:43 +02:00
parent 458dd66135
commit 5605eb9040
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 38 additions and 10 deletions

View file

@ -258,6 +258,7 @@ struct url {
struct coord end;
enum url_action action;
bool url_mode_dont_change_url_attr; /* Entering/exiting URL mode doesnt touch the cells attr.url */
bool osc8;
};
typedef tll(struct url) url_list_t;