annotate src/readline-2-event-hook.patch @ 6546:54f336bbb833

readline: Improve check for UTF-16 surrogates (bug #63400). * src/readline-2-event-hook.patch: Avoid false positives for UTF-16 surrogate halves.
author Markus Mützel <markus.muetzel@gmx.de>
date Sun, 27 Nov 2022 19:08:31 +0100
parents a76f513700df
children a6f1111a9f1d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
1 diff -urN readline-8.2/input.c.orig readline-8.2/input.c
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
2 --- readline-8.2/input.c.orig 2022-04-08 21:43:24.000000000 +0200
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
3 +++ readline-8.2/input.c 2022-11-22 16:54:55.099070500 +0100
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
4 @@ -176,6 +176,12 @@
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
5 static unsigned char ibuffer[512];
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
6 static int ibuffer_len = sizeof (ibuffer) - 1;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
7
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
8 +#if defined (__MINGW32__)
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
9 +#include <windows.h>
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
10 +static int _win32_getch (int *const is_char);
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
11 +static int _win32_kbhit (void);
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
12 +#endif
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
13 +
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
14 #define any_typein (push_index != pop_index)
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
15
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
16 int
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
17 @@ -306,7 +311,7 @@
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
18 #if defined (__MINGW32__)
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
19 /* Use getch/_kbhit to check for available console input, in the same way
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
20 that we read it normally. */
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
21 - chars_avail = isatty (tty) ? _kbhit () : 0;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
22 + chars_avail = isatty (tty) ? _win32_kbhit () : 0;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
23 result = 0;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
24 #endif
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
25
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
26 @@ -404,7 +409,7 @@
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
27
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
28 #if defined (__MINGW32__)
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
29 if (isatty (tty))
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
30 - return (_kbhit ());
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
31 + return (_win32_kbhit ());
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
32 #endif
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
33
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
34 return 0;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
35 @@ -799,6 +804,139 @@
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
36 return (c);
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
37 }
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
38
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
39 +#if defined (__MINGW32__)
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
40 +#define _WIN32_READ_NOCHAR (-2)
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
41 +static char _win32_buf[16] = {'0'};
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
42 +static int _win32_bufidx = 0;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
43 +
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
44 +static int
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
45 +_win32_getch_internal (int block, int *const is_char)
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
46 +{
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
47 + INPUT_RECORD rec;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
48 + DWORD evRead, waitResult;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
49 + HANDLE hInput = (HANDLE) _get_osfhandle (fileno (rl_instream));
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
50 + *is_char = 1;
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
51 +
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
52 + if (_win32_bufidx > 0)
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
53 + return _win32_buf[--_win32_bufidx];
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
54 +
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
55 + hInput = (HANDLE) _get_osfhandle (fileno (rl_instream));
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
56 +
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
57 + do
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
58 + {
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
59 + *is_char = 0;
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
60 + if (! block)
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
61 + {
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
62 + if (WaitForSingleObject (hInput, _keyboard_input_timeout/1000) != WAIT_OBJECT_0)
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
63 + return _WIN32_READ_NOCHAR;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
64 + }
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
65 +
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
66 + if (!ReadConsoleInputW (hInput, &rec, 1, &evRead) || evRead != 1)
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
67 + return EOF;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
68 +
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
69 + *is_char = 1;
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
70 + switch (rec.EventType)
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
71 + {
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
72 + case KEY_EVENT:
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
73 + if ((rec.Event.KeyEvent.bKeyDown &&
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
74 + (rec.Event.KeyEvent.wVirtualKeyCode < VK_SHIFT ||
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
75 + rec.Event.KeyEvent.wVirtualKeyCode > VK_MENU)) ||
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
76 + (!rec.Event.KeyEvent.bKeyDown &&
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
77 + rec.Event.KeyEvent.wVirtualKeyCode == VK_MENU &&
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
78 + rec.Event.KeyEvent.uChar.UnicodeChar))
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
79 + {
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
80 + if (rec.Event.KeyEvent.uChar.UnicodeChar)
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
81 + return (int) rec.Event.KeyEvent.uChar.UnicodeChar;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
82 +
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
83 + *is_char = 0;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
84 + switch (rec.Event.KeyEvent.wVirtualKeyCode)
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
85 + {
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
86 + case VK_UP:
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
87 + _win32_buf[_win32_bufidx++] = 'A';
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
88 + return 0340;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
89 + case VK_DOWN:
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
90 + _win32_buf[_win32_bufidx++] = 'B';
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
91 + return 0340;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
92 + case VK_RIGHT:
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
93 + _win32_buf[_win32_bufidx++] = 'C';
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
94 + return 0340;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
95 + case VK_LEFT:
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
96 + _win32_buf[_win32_bufidx++] = 'D';
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
97 + return 0340;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
98 + case VK_HOME:
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
99 + _win32_buf[_win32_bufidx++] = 'H';
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
100 + return 0340;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
101 + case VK_END:
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
102 + _win32_buf[_win32_bufidx++] = 'F';
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
103 + return 0340;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
104 + case VK_DELETE:
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
105 + _win32_buf[_win32_bufidx++] = 8;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
106 + _win32_buf[_win32_bufidx++] = 'C';
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
107 + return 0340;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
108 + default:
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
109 + break;
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
110 + }
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
111 + }
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
112 + break;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
113 +
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
114 + case WINDOW_BUFFER_SIZE_EVENT:
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
115 + rl_resize_terminal ();
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
116 + break;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
117 +
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
118 + default:
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
119 + break;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
120 + }
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
121 + }
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
122 + while (1);
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
123 +}
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
124 +
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
125 +static int
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
126 +_win32_kbhit (void)
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
127 +{
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
128 + int result;
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
129 + int is_char;
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
130 +
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
131 + result = _win32_getch_internal (0, &is_char);
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
132 + if (result == _WIN32_READ_NOCHAR
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
133 + || result == EOF)
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
134 + return 0;
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
135 +
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
136 + if (is_char)
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
137 + {
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
138 + char charbuf[5] = {0};
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
139 + wchar_t unicode[2] = {result, 0};
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
140 + int utf16_code_units = 1;
6546
54f336bbb833 readline: Improve check for UTF-16 surrogates (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 6545
diff changeset
141 + if ((unicode[0] & 0xF800) == 0xD800) /* outside BMP */
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
142 + {
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
143 + unicode[1] = _win32_getch_internal (0, &is_char);
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
144 + utf16_code_units++;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
145 + }
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
146 + /* convert to UTF-8 byte sequence */
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
147 + int len = WideCharToMultiByte (CP_UTF8, 0,
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
148 + (wchar_t *) &unicode, utf16_code_units,
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
149 + charbuf, 5, NULL, NULL);
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
150 + for (int i=0; i<len; i++)
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
151 + {
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
152 + _win32_buf[_win32_bufidx++] = (unsigned char) charbuf[len-i-1];
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
153 + }
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
154 + }
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
155 + else
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
156 + {
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
157 + /* buffer is read from back to front */
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
158 + _win32_buf[_win32_bufidx++] = 0x5b; /* "[" */
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
159 + _win32_buf[_win32_bufidx++] = 0x1b; /* ESC */
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
160 + }
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
161 +
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
162 + return _win32_bufidx;
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
163 +}
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
164 +
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
165 +static int
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
166 +_win32_getch (int *const is_char)
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
167 +{
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
168 + return _win32_getch_internal (1, is_char);
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
169 +}
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
170 +#endif
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
171 +
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
172 int
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
173 rl_getc (FILE *stream)
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
174 {
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
175 @@ -818,8 +937,11 @@
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
176 /* We know at this point that _rl_caught_signal == 0 */
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
177
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
178 #if defined (__MINGW32__)
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
179 - if (isatty (fd)
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
180 - return (_getch ()); /* "There is no error return." */
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
181 + if (isatty (fd))
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
182 + {
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
183 + int is_char;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
184 + return (_win32_getch (&is_char));
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
185 + }
5031
5049ab5e66f6 Re-add readline patches to work with readline 8 (Bug #55957)
John Donoghue
parents:
diff changeset
186 #endif
6545
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
187 result = 0;
a76f513700df readline: Fix issue with arrow keys in Octave CLI (bug #63400).
Markus Mützel <markus.muetzel@gmx.de>
parents: 5607
diff changeset
188 #if defined (HAVE_PSELECT) || defined (HAVE_SELECT)