Mercurial > ~mikael > mcabber > hg
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 |