diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-08-23 23:10:21 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-08-23 23:10:21 +0200 |
commit | 285f243e506f15230270e4d15679acc29e489e7c (patch) | |
tree | c90a4a7acfffc5a200cac56aa26d7acf1d865066 | |
parent | 77f7474d089cbc68cb7df32cc3828a9dec80fd93 (diff) | |
download | vim-git-285f243e506f15230270e4d15679acc29e489e7c.tar.gz |
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminalv8.0.0990
Problem: When 'encoding' is a double-byte encoding, pasting a register into
a terminal ends up with the wrong characters.
Solution: Convert from 'encoding' to utf-8. (Yasuhiro Matsumoto, closes
#2007)
-rw-r--r-- | src/terminal.c | 27 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/terminal.c b/src/terminal.c index 1baad7bf1..7fadbb693 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -38,6 +38,7 @@ * in tl_scrollback are no longer used. * * TODO: + * - better check for blinking - reply from Thomas Dickey Aug 22 * - test for writing lines to terminal job does not work on MS-Windows * - implement term_setsize() * - add test for giving error for invalid 'termsize' value. @@ -45,6 +46,10 @@ * - support minimal size when 'termsize' is empty? * - do not set bufhidden to "hide"? works like a buffer with changes. * document that CTRL-W :hide can be used. + * - GUI: when using tabs, focus in terminal, click on tab does not work. + * - GUI: when 'confirm' is set and trying to exit Vim, dialog offers to save + * changes to "!shell". + * (justrajdeep, 2017 Aug 22) * - command argument with spaces doesn't work #1999 * :terminal ls dir\ with\ spaces * - implement job options when starting a terminal. Allow: @@ -1261,9 +1266,31 @@ term_paste_register(int prev_c UNUSED) for (item = l->lv_first; item != NULL; item = item->li_next) { char_u *s = get_tv_string(&item->li_tv); +#ifdef WIN3264 + char_u *tmp = s; + + if (!enc_utf8 && enc_codepage > 0) + { + WCHAR *ret = NULL; + int length = 0; + MultiByteToWideChar_alloc(enc_codepage, 0, (char*)s, STRLEN(s), + &ret, &length); + if (ret != NULL) + { + WideCharToMultiByte_alloc(CP_UTF8, 0, + ret, length, (char **)&s, &length, 0, 0); + vim_free(ret); + } + } +#endif channel_send(curbuf->b_term->tl_job->jv_channel, PART_IN, s, STRLEN(s), NULL); +#ifdef WIN3264 + if (tmp != s) + vim_free(s); +#endif + if (item->li_next != NULL || type == MLINE) channel_send(curbuf->b_term->tl_job->jv_channel, PART_IN, (char_u *)"\r", 1, NULL); diff --git a/src/version.c b/src/version.c index 9d4d43181..9dc93f2d6 100644 --- a/src/version.c +++ b/src/version.c @@ -770,6 +770,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 990, +/**/ 989, /**/ 988, |