config: add ‘none’ as a possible value for ‘selection-target’

When ‘selection-target’ is set to ‘none’, selecting text does not copy
the text to _any_ clipboard.

This patch also refactors the value parsing to be data driven.
This commit is contained in:
Daniel Eklöf 2021-01-16 15:39:44 +01:00
parent 07f6b3b1af
commit 4f578189cc
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 22 additions and 12 deletions

View file

@ -674,19 +674,25 @@ parse_section_main(const char *key, const char *value, struct config *conf,
}
else if (strcmp(key, "selection-target") == 0) {
if (strcasecmp(value, "primary") == 0)
conf->selection_target = SELECTION_TARGET_PRIMARY;
else if (strcasecmp(value, "clipboard") == 0)
conf->selection_target = SELECTION_TARGET_CLIPBOARD;
else if (strcasecmp(value, "both") == 0)
conf->selection_target = SELECTION_TARGET_BOTH;
else {
LOG_AND_NOTIFY_ERR(
"%s:%d: [default]: %s: invalid 'selection-target'; "
"must be one of 'primary', 'clipboard' or 'both",
path, lineno, value);
return false;
static const char *const values[] = {
[SELECTION_TARGET_NONE] = "none",
[SELECTION_TARGET_PRIMARY] = "primary",
[SELECTION_TARGET_CLIPBOARD] = "clipboard",
[SELECTION_TARGET_BOTH] = "both",
};
for (size_t i = 0; i < ALEN(values); i++) {
if (strcasecmp(value, values[i]) == 0) {
conf->selection_target = i;
return true;
}
}
LOG_AND_NOTIFY_ERR(
"%s:%d: [default]: %s: invalid 'selection-target'; "
"must be one of 'none', 'primary', 'clipboard' or 'both",
path, lineno, value);
return false;
}
else {

View file

@ -182,6 +182,7 @@ struct config {
bool presentation_timings;
bool hold_at_exit;
enum {
SELECTION_TARGET_NONE,
SELECTION_TARGET_PRIMARY,
SELECTION_TARGET_CLIPBOARD,
SELECTION_TARGET_BOTH

View file

@ -1019,6 +1019,9 @@ selection_finalize(struct seat *seat, struct terminal *term, uint32_t serial)
xassert(term->selection.start.row <= term->selection.end.row);
switch (term->conf->selection_target) {
case SELECTION_TARGET_NONE:
break;
case SELECTION_TARGET_PRIMARY:
selection_to_primary(seat, term, serial);
break;