url-mode: add a key binding that enables “persistent” URL mode

This is an alternative to ‘show-urls-launch’, where we stay in URL
mode after activating an URL.

Closes #964
This commit is contained in:
Daniel Eklöf 2022-03-22 19:07:06 +01:00
parent 0062f4e133
commit 501a9fbb5e
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
8 changed files with 37 additions and 11 deletions

View file

@ -56,6 +56,10 @@
* `[csd].hide-when-maximized=yes|no` option
(https://codeberg.org/dnkl/foot/issues/1019).
* Scrollback search mode now highlights all matches.
* `[key-binding].show-urls-persistent` action. This key binding action
is similar to `show-urls-launch`, but does not automatically exit
URL mode after activating an URL
(https://codeberg.org/dnkl/foot/issues/964).
### Changed

View file

@ -113,6 +113,7 @@ static const char *const binding_action_map[] = {
[BIND_ACTION_PIPE_SELECTED] = "pipe-selected",
[BIND_ACTION_SHOW_URLS_COPY] = "show-urls-copy",
[BIND_ACTION_SHOW_URLS_LAUNCH] = "show-urls-launch",
[BIND_ACTION_SHOW_URLS_PERSISTENT] = "show-urls-persistent",
[BIND_ACTION_TEXT_BINDING] = "text-binding",
/* Mouse-specific actions */
@ -516,7 +517,7 @@ value_to_wchars(struct context *ctx, char32_t **res)
{
char32_t *s = ambstoc32(ctx->value);
if (s == NULL) {
LOG_CONTEXTUAL_ERR("not a valie string value");
LOG_CONTEXTUAL_ERR("not a valid string value");
return false;
}

View file

@ -751,9 +751,14 @@ e.g. *search-start=none*.
Default: _not bound_
*show-urls-launch*
Enter URL mode, where all currently visible URLs are tagged with a
jump label with a key sequence that will open the URL. Default:
_Control+Shift+u_.
jump label with a key sequence that will open the URL (and exit
URL mode). Default: _Control+Shift+u_.
*show-urls-persistent*
Similar to *show-urls-launch*, but does not automatically exit URL
mode after activating an URL. Default: _none_.
*show-urls-copy*
Enter URL mode, where all currently visible URLs are tagged with a

View file

@ -142,6 +142,7 @@
# pipe-selected=[xargs -r firefox] none
# show-urls-launch=Control+Shift+u
# show-urls-copy=none
# show-urls-persistent=none
# noop=none
[search-bindings]

10
input.c
View file

@ -314,12 +314,14 @@ execute_binding(struct seat *seat, struct terminal *term,
}
case BIND_ACTION_SHOW_URLS_COPY:
case BIND_ACTION_SHOW_URLS_LAUNCH: {
case BIND_ACTION_SHOW_URLS_LAUNCH:
case BIND_ACTION_SHOW_URLS_PERSISTENT: {
xassert(!urls_mode_is_active(term));
enum url_action url_action = action == BIND_ACTION_SHOW_URLS_COPY
? URL_ACTION_COPY
: URL_ACTION_LAUNCH;
enum url_action url_action =
action == BIND_ACTION_SHOW_URLS_COPY ? URL_ACTION_COPY :
action == BIND_ACTION_SHOW_URLS_LAUNCH ? URL_ACTION_LAUNCH :
URL_ACTION_PERSISTENT;
urls_collect(term, url_action, &term->urls);
urls_assign_key_combos(term->conf, &term->urls);

View file

@ -291,7 +291,7 @@ enum overlay_style {
typedef tll(struct ptmx_buffer) ptmx_buffer_list_t;
enum url_action { URL_ACTION_COPY, URL_ACTION_LAUNCH };
enum url_action { URL_ACTION_COPY, URL_ACTION_LAUNCH, URL_ACTION_PERSISTENT };
struct url {
uint64_t id;
char *url;

View file

@ -84,7 +84,8 @@ activate_url(struct seat *seat, struct terminal *term, const struct url *url)
}
break;
case URL_ACTION_LAUNCH: {
case URL_ACTION_LAUNCH:
case URL_ACTION_PERSISTENT: {
size_t argc;
char **argv;
@ -205,7 +206,18 @@ urls_input(struct seat *seat, struct terminal *term, uint32_t key,
if (match) {
activate_url(seat, term, match);
urls_reset(term);
switch (match->action) {
case URL_ACTION_COPY:
case URL_ACTION_LAUNCH:
urls_reset(term);
break;
case URL_ACTION_PERSISTENT:
term->url_keys[0] = U'\0';
render_refresh_urls(term);
break;
}
}
else if (is_valid) {

View file

@ -56,6 +56,7 @@ enum bind_action_normal {
BIND_ACTION_PIPE_SELECTED,
BIND_ACTION_SHOW_URLS_COPY,
BIND_ACTION_SHOW_URLS_LAUNCH,
BIND_ACTION_SHOW_URLS_PERSISTENT,
BIND_ACTION_TEXT_BINDING,
/* Mouse specific actions - i.e. they require a mouse coordinate */
@ -67,7 +68,7 @@ enum bind_action_normal {
BIND_ACTION_SELECT_WORD_WS,
BIND_ACTION_SELECT_ROW,
BIND_ACTION_KEY_COUNT = BIND_ACTION_SHOW_URLS_LAUNCH + 1,
BIND_ACTION_KEY_COUNT = BIND_ACTION_TEXT_BINDING + 1,
BIND_ACTION_COUNT = BIND_ACTION_SELECT_ROW + 1,
};