aboutsummaryrefslogtreecommitdiff
path: root/vis-registers.c
diff options
context:
space:
mode:
authorJeremy Bobbin <jer@jer.cx>2020-07-11 09:17:00 -0700
committerMarc André Tanner <mat@brain-dump.org>2020-07-17 15:30:39 +0200
commit9cb69f746312efa7c01c1dd4185bface3b30bb6d (patch)
tree802abcd76e734f500b9f72aaf7fd6dc2a6efe0c6 /vis-registers.c
parentf34f6d968e711f3cab019a12bb60da1bbf52161f (diff)
downloadvis-9cb69f746312efa7c01c1dd4185bface3b30bb6d.tar.gz
vis-9cb69f746312efa7c01c1dd4185bface3b30bb6d.tar.xz
support for primary clipboard
Diffstat (limited to 'vis-registers.c')
-rw-r--r--vis-registers.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/vis-registers.c b/vis-registers.c
index 503c50b..58fc7ec 100644
--- a/vis-registers.c
+++ b/vis-registers.c
@@ -69,16 +69,21 @@ const char *register_slot_get(Vis *vis, Register *reg, size_t slot, size_t *len)
case REGISTER_CLIPBOARD:
{
Buffer buferr;
+ enum VisRegister id = reg - vis->registers;
+ const char *cmd[] = { VIS_CLIPBOARD, "--paste", "--selection", NULL, NULL };
buffer_init(&buferr);
Buffer *buf = array_get(&reg->values, slot);
if (!buf)
return NULL;
buffer_clear(buf);
+ if (id == VIS_REG_PRIMARY)
+ cmd[3] = "primary";
+ else
+ cmd[3] = "clipboard";
int status = vis_pipe(vis, vis->win->file,
&(Filerange){ .start = 0, .end = 0 },
- (const char*[]){ VIS_CLIPBOARD, "--paste", NULL },
- buf, read_buffer, &buferr, read_buffer);
+ cmd, buf, read_buffer, &buferr, read_buffer);
if (status != 0)
vis_info_show(vis, "Command failed %s", buffer_content0(&buferr));
@@ -152,11 +157,17 @@ bool register_slot_put_range(Vis *vis, Register *reg, size_t slot, Text *txt, Fi
case REGISTER_CLIPBOARD:
{
Buffer buferr;
+ const char *cmd[] = { VIS_CLIPBOARD, "--copy", "--selection", NULL, NULL };
+ enum VisRegister id = reg - vis->registers;
buffer_init(&buferr);
+ if (id == VIS_REG_PRIMARY)
+ cmd[3] = "primary";
+ else
+ cmd[3] = "clipboard";
+
int status = vis_pipe(vis, vis->win->file, range,
- (const char*[]){ VIS_CLIPBOARD, "--copy", NULL },
- NULL, NULL, &buferr, read_buffer);
+ cmd, NULL, NULL, &buferr, read_buffer);
if (status != 0)
vis_info_show(vis, "Command failed %s", buffer_content0(&buferr));
@@ -187,7 +198,6 @@ bool register_resize(Register *reg, size_t count) {
enum VisRegister vis_register_from(Vis *vis, char reg) {
switch (reg) {
- case '+': return VIS_REG_CLIPBOARD;
case '@': return VIS_MACRO_LAST_RECORDED;
}
@@ -275,7 +285,8 @@ const RegisterDef vis_registers[] = {
[VIS_REG_9] = { '9', VIS_HELP("9th sub-expression match") },
[VIS_REG_AMPERSAND] = { '&', VIS_HELP("Last regex match") },
[VIS_REG_BLACKHOLE] = { '_', VIS_HELP("/dev/null register") },
- [VIS_REG_CLIPBOARD] = { '*', VIS_HELP("System clipboard register, see vis-clipboard(1)") },
+ [VIS_REG_PRIMARY] = { '*', VIS_HELP("Primary clipboard register, see vis-clipboard(1)") },
+ [VIS_REG_CLIPBOARD] = { '+', VIS_HELP("System clipboard register, see vis-clipboard(1)") },
[VIS_REG_DOT] = { '.', VIS_HELP("Last inserted text") },
[VIS_REG_SEARCH] = { '/', VIS_HELP("Last search pattern") },
[VIS_REG_COMMAND] = { ':', VIS_HELP("Last :-command") },