summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-08-23 23:10:21 +0200
committerBram Moolenaar <Bram@vim.org>2017-08-23 23:10:21 +0200
commit285f243e506f15230270e4d15679acc29e489e7c (patch)
treec90a4a7acfffc5a200cac56aa26d7acf1d865066
parent77f7474d089cbc68cb7df32cc3828a9dec80fd93 (diff)
downloadvim-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.c27
-rw-r--r--src/version.c2
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,