diff options
author | Thomas Adam <thomas@xteddy.org> | 2014-10-21 07:11:44 +0100 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2014-10-21 07:11:44 +0100 |
commit | 562af864bd8ab06c416075b5742ce3bbcf6d0610 (patch) | |
tree | 2c3900dd6b284aa52441c3fde9dfdf8383d87b54 /window-copy.c | |
parent | b6aef2490f086f3404f439308bb1746ec5134e9a (diff) | |
parent | 0a1a88d63caf3a0e8b4440686e73e1f0f690e03c (diff) | |
download | rtmux-562af864bd8ab06c416075b5742ce3bbcf6d0610.tar.gz rtmux-562af864bd8ab06c416075b5742ce3bbcf6d0610.tar.bz2 rtmux-562af864bd8ab06c416075b5742ce3bbcf6d0610.zip |
Merge branch 'obsd-master'
Conflicts:
Makefile
cmd-list-commands.c
cmd-suspend-client.c
job.c
tmux.h
xmalloc.c
Diffstat (limited to 'window-copy.c')
-rw-r--r-- | window-copy.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/window-copy.c b/window-copy.c index 3ac994d3..542c28ac 100644 --- a/window-copy.c +++ b/window-copy.c @@ -794,7 +794,7 @@ window_copy_key_input(struct window_pane *wp, int key) } inputlen = strlen(data->inputstr); - data->inputstr = xrealloc(data->inputstr, 1, inputlen + n + 1); + data->inputstr = xrealloc(data->inputstr, inputlen + n + 1); memcpy(data->inputstr + inputlen, pb->data, n); data->inputstr[inputlen + n] = '\0'; break; @@ -840,7 +840,7 @@ window_copy_key_input(struct window_pane *wp, int key) break; inputlen = strlen(data->inputstr) + 2; - data->inputstr = xrealloc(data->inputstr, 1, inputlen); + data->inputstr = xrealloc(data->inputstr, inputlen); data->inputstr[inputlen - 2] = key; data->inputstr[inputlen - 1] = '\0'; break; @@ -1533,7 +1533,7 @@ window_copy_append_selection(struct window_pane *wp, const char *bufname) } else pb = paste_get_name(bufname); if (pb != NULL) { - buf = xrealloc(buf, 1, len + pb->size); + buf = xrealloc(buf, len + pb->size); memmove(buf + pb->size, buf, len); memcpy(buf, pb->data, pb->size); len += pb->size; @@ -1552,6 +1552,7 @@ window_copy_copy_line(struct window_pane *wp, struct grid_line *gl; struct utf8_data ud; u_int i, xx, wrapped = 0; + const char *s; if (sx > ex) return; @@ -1580,8 +1581,15 @@ window_copy_copy_line(struct window_pane *wp, if (gc->flags & GRID_FLAG_PADDING) continue; grid_cell_get(gc, &ud); + if (ud.size == 1 && (gc->attr & GRID_ATTR_CHARSET)) { + s = tty_acs_get(NULL, ud.data[0]); + if (s != NULL && strlen(s) <= sizeof ud.data) { + ud.size = strlen(s); + memcpy (ud.data, s, ud.size); + } + } - *buf = xrealloc(*buf, 1, (*off) + ud.size); + *buf = xrealloc(*buf, (*off) + ud.size); memcpy(*buf + *off, ud.data, ud.size); *off += ud.size; } @@ -1589,7 +1597,7 @@ window_copy_copy_line(struct window_pane *wp, /* Only add a newline if the line wasn't wrapped. */ if (!wrapped || ex != xx) { - *buf = xrealloc(*buf, 1, (*off) + 1); + *buf = xrealloc(*buf, (*off) + 1); (*buf)[(*off)++] = '\n'; } } |