2347 memset(kcode, 0, sizeof(keycode)); |
2347 memset(kcode, 0, sizeof(keycode)); |
2348 memset(ks, 0, sizeof(ks)); |
2348 memset(ks, 0, sizeof(ks)); |
2349 |
2349 |
2350 kcode->value = wgetch(inputWnd); |
2350 kcode->value = wgetch(inputWnd); |
2351 if (utf8_mode) { |
2351 if (utf8_mode) { |
2352 ks[0] = kcode->value; |
2352 bool meta = (kcode->value == 27); |
|
2353 |
|
2354 if (meta) |
|
2355 ks[0] = wgetch(inputWnd); |
|
2356 else |
|
2357 ks[0] = kcode->value; |
|
2358 |
2353 for (i = 0; i < MAX_KEYSEQ_LENGTH - 1; i++) { |
2359 for (i = 0; i < MAX_KEYSEQ_LENGTH - 1; i++) { |
2354 int match = match_utf8_keyseq(ks); |
2360 int match = match_utf8_keyseq(ks); |
2355 if (match == -1) |
2361 if (match == -1) |
2356 break; |
2362 break; |
2357 if (match > 0) { |
2363 if (match > 0) { |
2358 kcode->value = match; |
2364 kcode->value = match; |
2359 kcode->utf8 = 1; |
2365 kcode->utf8 = 1; |
|
2366 if (meta) |
|
2367 kcode->mcode = MKEY_META; |
2360 return; |
2368 return; |
2361 } |
2369 } |
2362 ks[i + 1] = wgetch(inputWnd); |
2370 ks[i + 1] = wgetch(inputWnd); |
2363 if (ks[i + 1] == ERR) |
2371 if (ks[i + 1] == ERR) |
2364 break; |
2372 break; |
2365 } |
2373 } |
2366 while (i > 0) |
2374 while (i > 0) |
2367 ungetch(ks[i--]); |
2375 ungetch(ks[i--]); |
|
2376 if (meta) |
|
2377 ungetch(ks[0]); |
2368 memset(ks, 0, sizeof(ks)); |
2378 memset(ks, 0, sizeof(ks)); |
2369 } |
2379 } |
2370 if (kcode->value != 27) |
2380 if (kcode->value != 27) |
2371 return; |
2381 return; |
2372 |
2382 |