version 1.19, 2012/07/11 07:10:15 |
version 1.20, 2012/11/27 20:22:12 |
|
|
enum cmd_retval cmd_paste_buffer_exec(struct cmd *, struct cmd_ctx *); |
enum cmd_retval cmd_paste_buffer_exec(struct cmd *, struct cmd_ctx *); |
|
|
void cmd_paste_buffer_filter(struct window_pane *, |
void cmd_paste_buffer_filter(struct window_pane *, |
const char *, size_t, const char *, int bracket); |
const char *, size_t, const char *, int); |
|
|
const struct cmd_entry cmd_paste_buffer_entry = { |
const struct cmd_entry cmd_paste_buffer_entry = { |
"paste-buffer", "pasteb", |
"paste-buffer", "pasteb", |
|
|
else |
else |
sepstr = "\r"; |
sepstr = "\r"; |
} |
} |
pflag = args_has(args, 'p') && |
pflag = (wp->screen->mode & MODE_BRACKETPASTE); |
(wp->screen->mode & MODE_BRACKETPASTE); |
paste_send_pane(pb, wp, sepstr, args_has(args, 'p') && pflag); |
cmd_paste_buffer_filter(wp, pb->data, pb->size, sepstr, pflag); |
|
} |
} |
|
|
/* Delete the buffer if -d. */ |
/* Delete the buffer if -d. */ |
|
|
} |
} |
|
|
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
} |
|
|
|
/* Add bytes to a buffer and filter '\n' according to separator. */ |
|
void |
|
cmd_paste_buffer_filter(struct window_pane *wp, |
|
const char *data, size_t size, const char *sep, int bracket) |
|
{ |
|
const char *end = data + size; |
|
const char *lf; |
|
size_t seplen; |
|
|
|
if (bracket) |
|
bufferevent_write(wp->event, "\033[200~", 6); |
|
|
|
seplen = strlen(sep); |
|
while ((lf = memchr(data, '\n', end - data)) != NULL) { |
|
if (lf != data) |
|
bufferevent_write(wp->event, data, lf - data); |
|
bufferevent_write(wp->event, sep, seplen); |
|
data = lf + 1; |
|
} |
|
|
|
if (end != data) |
|
bufferevent_write(wp->event, data, end - data); |
|
|
|
if (bracket) |
|
bufferevent_write(wp->event, "\033[201~", 6); |
|
} |
} |