version 1.2, 2009/07/02 16:15:43 |
version 1.3, 2009/07/11 19:14:56 |
|
|
*/ |
*/ |
|
|
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); |
|
|
const struct cmd_entry cmd_paste_buffer_entry = { |
const struct cmd_entry cmd_paste_buffer_entry = { |
"paste-buffer", "pasteb", |
"paste-buffer", "pasteb", |
"[-d] " CMD_BUFFER_WINDOW_USAGE, |
"[-dr] " CMD_BUFFER_WINDOW_USAGE, |
CMD_DFLAG, |
CMD_DFLAG|CMD_RFLAG, |
cmd_buffer_init, |
cmd_buffer_init, |
cmd_buffer_parse, |
cmd_buffer_parse, |
cmd_paste_buffer_exec, |
cmd_paste_buffer_exec, |
|
|
} |
} |
} |
} |
|
|
if (pb != NULL && *pb->data != '\0') |
if (pb != NULL && *pb->data != '\0') { |
buffer_write(w->active->out, pb->data, strlen(pb->data)); |
/* -r means raw data without LF->CR conversion. */ |
|
if (data->flags & CMD_RFLAG) { |
|
buffer_write( |
|
w->active->out, pb->data, strlen(pb->data)); |
|
} else { |
|
cmd_paste_buffer_lf2cr( |
|
w->active->out, pb->data, strlen(pb->data)); |
|
} |
|
} |
|
|
/* Delete the buffer if -d. */ |
/* Delete the buffer if -d. */ |
if (data->flags & CMD_DFLAG) { |
if (data->flags & CMD_DFLAG) { |
|
|
} |
} |
|
|
return (0); |
return (0); |
|
} |
|
|
|
/* Add bytes to a buffer but change every '\n' to '\r'. */ |
|
void |
|
cmd_paste_buffer_lf2cr(struct buffer *b, const char *data, size_t size) |
|
{ |
|
const char *end = data + size; |
|
const char *lf; |
|
|
|
while ((lf = memchr(data, '\n', end - data)) != NULL) { |
|
if (lf != data) |
|
buffer_write(b, data, lf - data); |
|
buffer_write8(b, '\r'); |
|
data = lf + 1; |
|
} |
|
|
|
if (end != data) |
|
buffer_write(b, data, end - data); |
} |
} |