mcabber/src/screen.c
changeset 944 aec71ebf98fa
parent 940 fc30221b952d
child 945 17ef145f3326
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