Index: code/sdl/sdl_input.c =================================================================== --- code/sdl/sdl_input.c (revision 1456) +++ code/sdl/sdl_input.c (working copy) @@ -218,26 +218,38 @@ } } - if( down && !( keysym->unicode & 0xFF80 ) ) + if( down ) { - char ch = (char)keysym->unicode & 0x7F; - - switch( ch ) + if( !( keysym->unicode & 0xFF80 ) ) { - // So the key marked ~ always drops the console - case '~': *key = '~'; break; + char ch = (char)keysym->unicode & 0x7F; - case 127: // ASCII delete - if( *key != K_DEL ) - { - // ctrl-h - *buf = CTRL('h'); - break; - } - // fallthrough + switch( ch ) + { + // So the key marked ~ always drops the console + case '~': *key = '~'; break; - default: *buf = ch; break; + case 127: // ASCII delete + if( *key != K_DEL ) + { + // ctrl-h + *buf = CTRL('h'); + break; + } + // fallthrough + + default: *buf = ch; break; + } } + else + { + // Unicode character which isn't ASCII, possibly the character + // following a dead key. Fallback on what SDL calls the key + + const char *keyString = SDL_GetKeyName( keysym->sym ); + if( strlen( keyString ) == 1 ) + *buf = *keyString; + } } // Never allow a '~' SE_CHAR event to be generated