urls: add key binding that toggles whether URLs are displayed on jump-label

By default, the URL isn’t shown on the jump-label. For auto-detect
URLs, doing so is virtually always useless, as the URL is already
visible in the grid.

For OSC-8 URLs however, the URL is often _not_ visible in the
grid. Many times, seeing the URL is still not needed (if you’re doing
‘ls --hyperlink’, you already know what the URIs are).

But it is still useful to have a way to show the URLs.

This patch adds a new key binding action that can be used in url-mode
to toggle the URL on and off in the jump label.

It is bound to ctrl+t by default.
This commit is contained in:
Daniel Eklöf 2021-02-14 14:18:11 +01:00
parent cc43c1b704
commit 06a9ffa763
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
7 changed files with 44 additions and 2 deletions

View file

@ -2525,6 +2525,8 @@ render_urls(struct terminal *term)
+ term->grid->num_rows) & (term->grid->num_rows - 1);
const int view_end = view_start + term->rows - 1;
const bool show_url = term->urls_show_uri_on_jump_label;
tll_foreach(win->urls, it) {
const struct url *url = it->item.url;
const wchar_t *key = url->key;
@ -2562,13 +2564,28 @@ render_urls(struct terminal *term)
continue;
}
size_t chars = wcslen(key);
const size_t key_len = wcslen(key);
size_t url_len = mbstowcs(NULL, url->url, 0);
if (url_len == (size_t)-1)
url_len = 0;
wchar_t url_wchars[url_len + 1];
mbstowcs(url_wchars, url->url, url_len + 1);
size_t chars = key_len + (show_url ? (2 + url_len) : 0);
const size_t max_chars = 50;
chars = min(chars, max_chars);
wchar_t label[chars + 2];
wcscpy(label, key);
label[chars] = L'';
label[chars + 1] = L'\0';
if (show_url)
swprintf(label, chars + 1, L"%ls: %ls", key, url_wchars);
else
wcsncpy(label, key, chars + 1);
for (size_t i = 0; i < wcslen(key); i++)
label[i] = towupper(label[i]);