ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/keyboard.C
(Generate patch)

Comparing rxvt-unicode/src/keyboard.C (file contents):
Revision 1.13 by root, Thu Feb 24 13:01:01 2005 UTC vs.
Revision 1.16 by root, Fri Apr 22 02:09:39 2005 UTC

215 strcpy (translation, translation + 4); 215 strcpy (translation, translation + 4);
216 } 216 }
217 else 217 else
218 rxvt_warn ("cannot parse list-type keysym '%s', treating as normal keysym.\n", translation); 218 rxvt_warn ("cannot parse list-type keysym '%s', treating as normal keysym.\n", translation);
219 } 219 }
220 else if (strncmp (translation, "builtin:", 8) == 0)
221 key->type = keysym_t::BUILTIN;
220 222
221 user_keymap.push_back (key); 223 user_keymap.push_back (key);
222 user_translations.push_back (translation); 224 user_translations.push_back (translation);
223 register_keymap (key); 225 register_keymap (key);
224 } 226 }
260bool 262bool
261keyboard_manager::dispatch (rxvt_term *term, KeySym keysym, unsigned int state) 263keyboard_manager::dispatch (rxvt_term *term, KeySym keysym, unsigned int state)
262{ 264{
263 assert (hash[0] == 0 && "register_done() need to be called"); 265 assert (hash[0] == 0 && "register_done() need to be called");
264 266
267 state &= OtherModMask; // mask out uninteresting modifiers
268
265 if (state & term->ModMetaMask) state |= MetaMask; 269 if (state & term->ModMetaMask) state |= MetaMask;
266 if (state & term->ModNumLockMask) state |= NumLockMask; 270 if (state & term->ModNumLockMask) state |= NumLockMask;
267 if (state & term->ModLevel3Mask) state |= Level3Mask; 271 if (state & term->ModLevel3Mask) state |= Level3Mask;
268 272
269 if (!!(term->priv_modes & PrivMode_aplKP) != !!(state & ShiftMask)) 273 if (!!(term->priv_modes & PrivMode_aplKP) != !!(state & ShiftMask))
273 277
274 if (index >= 0) 278 if (index >= 0)
275 { 279 {
276 const keysym_t &key = *keymap [index]; 280 const keysym_t &key = *keymap [index];
277 281
282 if (key.type != keysym_t::BUILTIN)
283 {
278 int keysym_offset = keysym - key.keysym; 284 int keysym_offset = keysym - key.keysym;
279 285
280 wchar_t *wc = rxvt_utf8towcs (key.str); 286 wchar_t *wc = rxvt_utf8towcs (key.str);
281 char *str = rxvt_wcstombs (wc); 287 char *str = rxvt_wcstombs (wc);
282 // TODO: do (some) translations, unescaping etc, here (allow \u escape etc.) 288 // TODO: do (some) translations, unescaping etc, here (allow \u escape etc.)
283 free (wc); 289 free (wc);
284 290
285 switch (key.type) 291 switch (key.type)
286 {
287 case keysym_t::NORMAL:
288 output_string (term, str);
289 break;
290
291 case keysym_t::RANGE:
292 { 292 {
293 case keysym_t::NORMAL:
294 output_string (term, str);
295 break;
296
297 case keysym_t::RANGE:
298 {
293 char buf[STRING_MAX]; 299 char buf[STRING_MAX];
294 300
295 if (format_keyrange_string (str, keysym_offset, buf, sizeof (buf)) > 0) 301 if (format_keyrange_string (str, keysym_offset, buf, sizeof (buf)) > 0)
302 output_string (term, buf);
303 }
304 break;
305
306 case keysym_t::RANGE_META8:
307 {
308 int len;
309 char buf[STRING_MAX];
310
311 len = format_keyrange_string (str, keysym_offset, buf, sizeof (buf));
312 if (len > 0)
313 output_string_meta8 (term, state, buf, len);
314 }
315 break;
316
317 case keysym_t::LIST:
318 {
319 char buf[STRING_MAX];
320
321 char *prefix, *middle, *suffix;
322
323 prefix = str;
324 middle = strchr (prefix + 1, *prefix);
325 suffix = strrchr (middle + 1, *prefix);
326
327 memcpy (buf, prefix + 1, middle - prefix - 1);
328 buf [middle - prefix - 1] = middle [keysym_offset + 1];
329 strcpy (buf + (middle - prefix), suffix + 1);
330
296 output_string (term, buf); 331 output_string (term, buf);
332 }
333 break;
297 } 334 }
298 break;
299 335
300 case keysym_t::RANGE_META8:
301 {
302 int len;
303 char buf[STRING_MAX];
304
305 len = format_keyrange_string (str, keysym_offset, buf, sizeof (buf));
306 if (len > 0)
307 output_string_meta8 (term, state, buf, len);
308 }
309 break;
310
311 case keysym_t::LIST:
312 {
313 char buf[STRING_MAX];
314
315 char *prefix, *middle, *suffix;
316
317 prefix = str;
318 middle = strchr (prefix + 1, *prefix);
319 suffix = strrchr (middle + 1, *prefix);
320
321 memcpy (buf, prefix + 1, middle - prefix - 1);
322 buf [middle - prefix - 1] = middle [keysym_offset + 1];
323 strcpy (buf + (middle - prefix), suffix + 1);
324
325 output_string (term, buf);
326 }
327 break;
328 }
329
330 free (str); 336 free (str);
331 337
332 return true; 338 return true;
339 }
333 } 340 }
334 else 341
335 return false; 342 return false;
336} 343}
337 344
338// purge duplicate keymap entries 345// purge duplicate keymap entries
339void keyboard_manager::purge_duplicate_keymap () 346void keyboard_manager::purge_duplicate_keymap ()
340{ 347{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines