version 1.131, 2015/08/28 12:25:42 |
version 1.132, 2015/08/29 09:25:00 |
|
|
{ |
{ |
struct window_copy_mode_data *data = wp->modedata; |
struct window_copy_mode_data *data = wp->modedata; |
struct screen *s = &data->screen; |
struct screen *s = &data->screen; |
size_t inputlen, n; |
const char *bufdata; |
|
size_t inputlen, n, bufsize; |
int np; |
int np; |
struct paste_buffer *pb; |
struct paste_buffer *pb; |
u_char ch; |
u_char ch; |
|
|
*data->inputstr = '\0'; |
*data->inputstr = '\0'; |
break; |
break; |
case MODEKEYEDIT_PASTE: |
case MODEKEYEDIT_PASTE: |
if ((pb = paste_get_top()) == NULL) |
if ((pb = paste_get_top(NULL)) == NULL) |
break; |
break; |
for (n = 0; n < pb->size; n++) { |
bufdata = paste_buffer_data(pb, &bufsize); |
ch = (u_char) pb->data[n]; |
for (n = 0; n < bufsize; n++) { |
|
ch = (u_char)bufdata[n]; |
if (ch < 32 || ch == 127) |
if (ch < 32 || ch == 127) |
break; |
break; |
} |
} |
inputlen = strlen(data->inputstr); |
inputlen = strlen(data->inputstr); |
|
|
data->inputstr = xrealloc(data->inputstr, inputlen + n + 1); |
data->inputstr = xrealloc(data->inputstr, inputlen + n + 1); |
memcpy(data->inputstr + inputlen, pb->data, n); |
memcpy(data->inputstr + inputlen, bufdata, n); |
data->inputstr[inputlen + n] = '\0'; |
data->inputstr[inputlen + n] = '\0'; |
break; |
break; |
case MODEKEYEDIT_ENTER: |
case MODEKEYEDIT_ENTER: |
|
|
{ |
{ |
char *buf; |
char *buf; |
struct paste_buffer *pb; |
struct paste_buffer *pb; |
size_t len; |
const char *bufdata; |
|
size_t len, bufsize; |
struct screen_write_ctx ctx; |
struct screen_write_ctx ctx; |
|
|
buf = window_copy_get_selection(wp, &len); |
buf = window_copy_get_selection(wp, &len); |
|
|
screen_write_stop(&ctx); |
screen_write_stop(&ctx); |
} |
} |
|
|
if (bufname == NULL || *bufname == '\0') { |
if (bufname == NULL || *bufname == '\0') |
pb = paste_get_top(); |
pb = paste_get_top(&bufname); |
if (pb != NULL) |
else |
bufname = pb->name; |
|
} else |
|
pb = paste_get_name(bufname); |
pb = paste_get_name(bufname); |
if (pb != NULL) { |
if (pb != NULL) { |
buf = xrealloc(buf, len + pb->size); |
bufdata = paste_buffer_data(pb, &bufsize); |
memmove(buf + pb->size, buf, len); |
buf = xrealloc(buf, len + bufsize); |
memcpy(buf, pb->data, pb->size); |
memmove(buf + bufsize, buf, len); |
len += pb->size; |
memcpy(buf, bufdata, bufsize); |
|
len += bufsize; |
} |
} |
if (paste_set(buf, len, bufname, NULL) != 0) |
if (paste_set(buf, len, bufname, NULL) != 0) |
free(buf); |
free(buf); |