config: add 'pipe-selected' key binding

This works just like pipe-visible and pipe-scrollback, but pipes the
user-selected text, if any, to the external tool.

Closes #51
This commit is contained in:
Daniel Eklöf 2020-07-31 17:02:53 +02:00
parent 33e25e7f93
commit 639a61abd8
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
8 changed files with 43 additions and 13 deletions

27
input.c
View file

@ -145,7 +145,8 @@ execute_binding(struct seat *seat, struct terminal *term,
break;
case BIND_ACTION_PIPE_SCROLLBACK:
case BIND_ACTION_PIPE_VIEW: {
case BIND_ACTION_PIPE_VIEW:
case BIND_ACTION_PIPE_SELECTED: {
if (pipe_argv == NULL)
break;
@ -171,9 +172,27 @@ execute_binding(struct seat *seat, struct terminal *term,
goto pipe_err;
}
bool success = action == BIND_ACTION_PIPE_SCROLLBACK
? term_scrollback_to_text(term, &text, &len)
: term_view_to_text(term, &text, &len);
bool success;
switch (action) {
case BIND_ACTION_PIPE_SCROLLBACK:
success = term_scrollback_to_text(term, &text, &len);
break;
case BIND_ACTION_PIPE_VIEW:
success = term_view_to_text(term, &text, &len);
break;
case BIND_ACTION_PIPE_SELECTED:
text = selection_to_text(term);
success = text != NULL;
len = text != NULL ? strlen(text) : 0;
break;
default:
assert(false);
success = false;
break;
}
if (!success)
goto pipe_err;