diff options
Diffstat (limited to 'cmd-set-buffer.c')
-rw-r--r-- | cmd-set-buffer.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/cmd-set-buffer.c b/cmd-set-buffer.c index 30a137cd..0e754bb6 100644 --- a/cmd-set-buffer.c +++ b/cmd-set-buffer.c @@ -53,6 +53,9 @@ cmd_set_buffer_exec(struct cmd *self, struct cmd_q *cmdq) psize = 0; pdata = NULL; + pb = NULL; + buffer = -1; + if (args_has(args, 'b')) { buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause); if (cause != NULL) { @@ -65,13 +68,17 @@ cmd_set_buffer_exec(struct cmd *self, struct cmd_q *cmdq) cmdq_error(cmdq, "no buffer %d", buffer); return (CMD_RETURN_ERROR); } - if (args_has(args, 'a')) { - psize = pb->size; - pdata = xmalloc(psize); - memcpy(pdata, pb->data, psize); - } - } else - buffer = -1; + } else if (args_has(args, 'a')) { + pb = paste_get_top(&global_buffers); + if (pb != NULL) + buffer = 0; + } + + if (args_has(args, 'a') && pb != NULL) { + psize = pb->size; + pdata = xmalloc(psize); + memcpy(pdata, pb->data, psize); + } newsize = strlen(args->argv[0]); |