version 1.6, 2009/09/07 18:50:45 |
version 1.7, 2009/11/04 22:43:11 |
|
|
*/ |
*/ |
|
|
int cmd_paste_buffer_exec(struct cmd *, struct cmd_ctx *); |
int cmd_paste_buffer_exec(struct cmd *, struct cmd_ctx *); |
void cmd_paste_buffer_lf2cr(struct buffer *, const char *, size_t); |
void cmd_paste_buffer_lf2cr(struct window_pane *, const char *, size_t); |
|
|
const struct cmd_entry cmd_paste_buffer_entry = { |
const struct cmd_entry cmd_paste_buffer_entry = { |
"paste-buffer", "pasteb", |
"paste-buffer", "pasteb", |
|
|
if (pb != NULL && *pb->data != '\0') { |
if (pb != NULL && *pb->data != '\0') { |
/* -r means raw data without LF->CR conversion. */ |
/* -r means raw data without LF->CR conversion. */ |
if (data->chflags & CMD_CHFLAG('r')) |
if (data->chflags & CMD_CHFLAG('r')) |
buffer_write(wp->out, pb->data, pb->size); |
bufferevent_write(wp->event, pb->data, pb->size); |
else |
else |
cmd_paste_buffer_lf2cr(wp->out, pb->data, pb->size); |
cmd_paste_buffer_lf2cr(wp, pb->data, pb->size); |
} |
} |
|
|
/* Delete the buffer if -d. */ |
/* Delete the buffer if -d. */ |
|
|
|
|
/* Add bytes to a buffer but change every '\n' to '\r'. */ |
/* Add bytes to a buffer but change every '\n' to '\r'. */ |
void |
void |
cmd_paste_buffer_lf2cr(struct buffer *b, const char *data, size_t size) |
cmd_paste_buffer_lf2cr(struct window_pane *wp, const char *data, size_t size) |
{ |
{ |
const char *end = data + size; |
const char *end = data + size; |
const char *lf; |
const char *lf; |
|
|
while ((lf = memchr(data, '\n', end - data)) != NULL) { |
while ((lf = memchr(data, '\n', end - data)) != NULL) { |
if (lf != data) |
if (lf != data) |
buffer_write(b, data, lf - data); |
bufferevent_write(wp->event, data, lf - data); |
buffer_write8(b, '\r'); |
bufferevent_write(wp->event, "\r", 1); |
data = lf + 1; |
data = lf + 1; |
} |
} |
|
|
if (end != data) |
if (end != data) |
buffer_write(b, data, end - data); |
bufferevent_write(wp->event, data, end - data); |
} |
} |