comparison mcabber/src/screen.c @ 944:aec71ebf98fa

Fix Meta + UTF-8 character
author Mikael Berthe <mikael@lilotux.net>
date Wed, 09 Aug 2006 20:26:06 +0200
parents fc30221b952d
children 17ef145f3326
comparison
equal deleted inserted replaced
943:9ac0d166a85b 944:aec71ebf98fa
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