From b58fd1c205ba585c915deeaa648d26de577dd6c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 28 Nov 2019 20:56:55 +0100 Subject: [PATCH] osc 52: default to 'clipboard' if no source/target has been specified --- osc.c | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/osc.c b/osc.c index c4bb47ab..091b8e0e 100644 --- a/osc.c +++ b/osc.c @@ -26,22 +26,22 @@ osc_to_clipboard(struct terminal *term, const char *target, return; } + bool to_clipboard = false; + bool to_primary = false; + + if (target[0] == '\0') + to_clipboard = true; + for (const char *t = target; *t != '\0'; t++) { switch (*t) { - case 'c': { - char *copy = strdup(decoded); - if (!text_to_clipboard(term, copy, term->wl->input_serial)) - free(copy); + case 'c': + to_clipboard = true; break; - } case 's': - case 'p': { - char *copy = strdup(decoded); - if (!text_to_primary(term, copy, term->wl->input_serial)) - free(copy); + case 'p': + to_primary = true; break; - } default: LOG_WARN("unimplemented: clipboard target '%c'", *t); @@ -49,6 +49,18 @@ osc_to_clipboard(struct terminal *term, const char *target, } } + if (to_clipboard) { + char *copy = strdup(decoded); + if (!text_to_clipboard(term, copy, term->wl->input_serial)) + free(copy); + } + + if (to_primary) { + char *copy = strdup(decoded); + if (!text_to_primary(term, copy, term->wl->input_serial)) + free(copy); + } + free(decoded); } @@ -122,13 +134,15 @@ from_clipboard_done(void *user) static void osc_from_clipboard(struct terminal *term, const char *source) { - char src = 0; + /* Use clipboard if no source has been specified */ + char src = source[0] == '\0' ? 'c' : 0; for (const char *s = source; *s != '\0'; s++) { if (*s == 'c' || *s == 'p' || *s == 's') { src = *s; break; - } + } else + LOG_WARN("unimplemented: clipboard source '%c'", *s); } if (src == 0)