Paste URL/regex selection to prompt if key is uppercase.

In copy-regex/show-urls-copy mode, if the last input character was
uppercase, copy the selection to the clipboard _and_ paste it. This is
useful for taking a file path from a command output:(log, git, test
failure, etc.) and using it in another command.

This is inspired by the behavior of copy mode in wezterm:
https://wezterm.org/quickselect.html

I could have made it check every character in the hint, but it seemed
fine to assume that if the last character was uppercase, the user
wanted this behavior.

Closes #1975.
This commit is contained in:
Ryan Roden-Corrent 2025-04-28 19:56:32 -04:00 committed by Daniel Eklöf
parent 183fd96aba
commit 0ea572dc63
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 21 additions and 5 deletions

View file

@ -131,7 +131,7 @@ spawn_url_launcher(struct seat *seat, struct terminal *term, const char *url,
static void
activate_url(struct seat *seat, struct terminal *term, const struct url *url,
uint32_t serial)
uint32_t serial, bool paste_url_to_self)
{
char *url_string = NULL;
@ -159,6 +159,15 @@ activate_url(struct seat *seat, struct terminal *term, const struct url *url,
switch (url->action) {
case URL_ACTION_COPY:
if (paste_url_to_self) {
if (term->bracketed_paste)
term_to_slave(term, "\033[200~", 6);
term_to_slave(term, url_string, strlen(url_string));
if (term->bracketed_paste)
term_to_slave(term, "\033[201~", 6);
}
if (text_to_clipboard(seat, term, url_string, seat->kbd.serial)) {
/* Now owned by our clipboard “manager” */
url_string = NULL;
@ -273,7 +282,8 @@ urls_input(struct seat *seat, struct terminal *term,
}
if (match) {
activate_url(seat, term, match, serial);
// If the last hint character was uppercase, copy and paste
activate_url(seat, term, match, serial, wc == toc32upper(wc));
switch (match->action) {
case URL_ACTION_COPY: