54 lines
1.1 KiB
Diff
54 lines
1.1 KiB
Diff
diff -Naur readline-6.3-orig/kill.c readline-6.3/kill.c
|
|
--- readline-6.3-orig/kill.c 2010-12-07 01:44:58.000000000 +0100
|
|
+++ readline-6.3/kill.c 2015-12-17 20:08:50.652036500 +0100
|
|
@@ -660,16 +660,40 @@
|
|
#if defined (_WIN32)
|
|
#include <windows.h>
|
|
|
|
+static char*
|
|
+utf16_to_utf8 (wdata)
|
|
+ wchar_t *wdata;
|
|
+{
|
|
+ int size;
|
|
+ char *data;
|
|
+
|
|
+ size = WideCharToMultiByte (CP_UTF8, 0, wdata, -1, NULL, 0, NULL, NULL);
|
|
+ if (size == 0)
|
|
+ return NULL;
|
|
+
|
|
+ data = xmalloc (size);
|
|
+ if (WideCharToMultiByte (CP_UTF8, 0, wdata, -1, data, size, NULL, NULL) != size)
|
|
+ {
|
|
+ xfree (data);
|
|
+ return NULL;
|
|
+ }
|
|
+
|
|
+ return data;
|
|
+}
|
|
+
|
|
int
|
|
rl_paste_from_clipboard (int count, int key)
|
|
{
|
|
+ wchar_t *wdata;
|
|
char *data, *ptr;
|
|
int len;
|
|
|
|
if (OpenClipboard (NULL) == 0)
|
|
return (0);
|
|
|
|
- data = (char *)GetClipboardData (CF_TEXT);
|
|
+ wdata = (wchar_t *)GetClipboardData(CF_UNICODETEXT);
|
|
+ CloseClipboard ();
|
|
+ data = utf16_to_utf8 (wdata);
|
|
if (data)
|
|
{
|
|
ptr = strchr (data, '\r');
|
|
@@ -687,7 +711,6 @@
|
|
rl_insert_text (ptr);
|
|
if (ptr != data)
|
|
xfree (ptr);
|
|
- CloseClipboard ();
|
|
}
|
|
return (0);
|
|
}
|