The R Project SVN R

Rev

Rev 74693 | Rev 77919 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 74693 Rev 76943
Line 15... Line 15...
15
 *   Ron Ueberschaer, Christoph Keller, Scott Schwartz, Steven List,
15
 *   Ron Ueberschaer, Christoph Keller, Scott Schwartz, Steven List,
16
 *   DaviD W. Sanderson, Goran Bostrom, Michael Gleason, Glenn Kasten,
16
 *   DaviD W. Sanderson, Goran Bostrom, Michael Gleason, Glenn Kasten,
17
 *   Edin Hodzic, Eric J Bivona, Kai Uwe Rommel, Danny Quah, Ulrich Betzler
17
 *   Edin Hodzic, Eric J Bivona, Kai Uwe Rommel, Danny Quah, Ulrich Betzler
18
 */
18
 */
19
 
19
 
-
 
20
 /* Copyright (C) 2018-2019 The R Core Team */
-
 
21
 
20
#include       "getline.h"
22
#include       "getline.h"
21
 
23
 
22
static int      gl_tab();  /* forward reference needed for gl_tab_hook */
24
static int      gl_tab();  /* forward reference needed for gl_tab_hook */
23
int 		(*gl_in_hook)() = 0;
25
int 		(*gl_in_hook)() = 0;
24
int 		(*gl_out_hook)() = 0;
26
int 		(*gl_out_hook)() = 0;
Line 160... Line 162...
160
	if (vk == VK_MENU && AltIsDown) { /* VK_MENU is
162
	if (vk == VK_MENU && AltIsDown) { /* VK_MENU is
161
							   Alt or AltGr */
163
							   Alt or AltGr */
162
	  nAlt = 0;
164
	  nAlt = 0;
163
	  bbb  = 0;
165
	  bbb  = 0;
164
	} 
166
	} 
165
	else if (st & ENHANCED_KEY) { 
167
	else if (st & ENHANCED_KEY) {
-
 
168
	  /* FIXME: remove this eventually as these keys are already
-
 
169
	     accepted below without ENHANCED_KEY flag, but check it
-
 
170
	     does not change any expected behavior wrt to other enhanced keys
-
 
171
	  */
166
	  switch(vk) {
172
	  switch(vk) {
167
	  case VK_LEFT: c=2 ;break;
173
	  case VK_LEFT: c=2 ;break;
168
	  case VK_RIGHT: c=6;break;
174
	  case VK_RIGHT: c=6;break;
169
	  case VK_HOME:  c='\001';break;
175
	  case VK_HOME:  c='\001';break;
170
	  case VK_END: c='\005';break;
176
	  case VK_END: c='\005';break;
171
	  case VK_UP:  c=16;break;
177
	  case VK_UP:  c=16;break;
172
	  case VK_DOWN: c=14;break;		
178
	  case VK_DOWN: c=14;break;		
173
	  case VK_DELETE:  c='\004';break;
179
	  case VK_DELETE:  c='\004';break;
174
	  }
180
	  }
175
	} 
181
	}
176
	else if (AltIsDown) { /* Interpret Alt+xxx entries */
182
	else if (AltIsDown) { /* Interpret Alt+xxx entries */
177
	  switch (vk) {
183
	  switch (vk) {
178
	  case VK_INSERT: n = 0; break;
184
	  case VK_INSERT: n = 0; break;
179
	  case VK_END: n = 1; break;
185
	  case VK_END: n = 1; break;
180
	  case VK_DOWN: n = 2; break;
186
	  case VK_DOWN: n = 2; break;
Line 192... Line 198...
192
	  if (nAlt==3) { 
198
	  if (nAlt==3) { 
193
	    c = (bbb < 256) && (bbb > 0) ? bbb : 0;
199
	    c = (bbb < 256) && (bbb > 0) ? bbb : 0;
194
	    bbb = 0;
200
	    bbb = 0;
195
	    nAlt = 0;
201
	    nAlt = 0;
196
	  } 
202
	  } 
197
	} 
203
	}
-
 
204
	/* with conPTY on Windows 10, the ENHANCED_KEY state is not set */
-
 
205
	else if (vk == VK_LEFT)
-
 
206
	    c = 2;
-
 
207
	else if (vk == VK_RIGHT)
-
 
208
	    c = 6;
-
 
209
	else if (vk == VK_HOME)
-
 
210
	    c = '\001';
-
 
211
	else if (vk == VK_END)
-
 
212
	    c = '\005';
-
 
213
	else if (vk == VK_UP)
-
 
214
	    c = 16;
-
 
215
	else if (vk == VK_DOWN)
-
 
216
	    c = 14;
-
 
217
	else if (vk == VK_DELETE)
-
 
218
	    c = '\004';
198
	else {
219
	else {
199
	  /* Originally uChar.AsciiChar was used here and for MBCS characters
220
	  /* Originally uChar.AsciiChar was used here and for MBCS characters
200
	     GetConsoleInput returned as many events as bytes in the character.
221
	     GetConsoleInput returned as many events as bytes in the character.
201
	     As of Windows 8 this reportedly no longer works, GetConsoleInput
222
	     As of Windows 8 this reportedly no longer works, GetConsoleInput
202
	     would only generate one event with the first byte in AsciiChar.
223
	     would only generate one event with the first byte in AsciiChar.