diff options
-rw-r--r-- | CONTRIBUTORS | 1 | ||||
-rw-r--r-- | HISTORY | 1 | ||||
-rw-r--r-- | remote.c | 21 | ||||
-rw-r--r-- | remote.h | 3 |
4 files changed, 23 insertions, 3 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 359ee572..be72ac80 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2870,6 +2870,7 @@ Lars Hanisch <dvb@flensrocker.de> for reporting a missing closing ')' in the help entry of the --vfat option for making the Recordings menu able to be called with a cRecordingFilter, which allows the caller to have it display only a certain subset of the recordings + for adding handling UTF-8 'umlaut' characters to cKbdRemote Alex Lasnier <alex@fepg.org> for adding tuning support for ATSC devices @@ -8075,3 +8075,4 @@ Video Disk Recorder Revision History - The Recordings menu can now be called with a cRecordingFilter, which allows the caller to have it display only a certain subset of the recordings (thanks to Lars Hanisch). +- Added handling UTF-8 'umlaut' characters to cKbdRemote (thanks to Lars Hanisch). @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: remote.c 2.8 2013/02/03 15:44:55 kls Exp $ + * $Id: remote.c 3.1 2013/12/25 12:45:43 kls Exp $ */ #include "remote.h" @@ -260,6 +260,7 @@ cKbdRemote::cKbdRemote(void) tcsetattr(STDIN_FILENO, TCSANOW, &tm); } kbdAvailable = true; + systemIsUtf8 = !cCharSetConv::SystemCharacterTable() || strcmp(cCharSetConv::SystemCharacterTable(), "UTF-8") == 0; Start(); } @@ -324,7 +325,23 @@ uint64_t cKbdRemote::ReadKeySequence(void) if ((key1 = ReadKey()) >= 0) { k = key1; - if (key1 == 0x1B) { + if (systemIsUtf8 && (key1 & 0xC0) == 0xC0) { + char bytes[4] = { 0 }; + bytes[0] = key1; + int bytescount = 1; + if ((key1 & 0xF0) == 0xF0) + bytescount = 3; + else if ((key1 & 0xE0) == 0xE0) + bytescount = 2; + for (int i = 0; i < bytescount; i++) { + if ((key1 = ReadKey()) >= 0) + bytes[i + 1] = key1; + } + k = Utf8CharGet(bytes); + if (k > 0xFF) + k = 0; + } + else if (key1 == 0x1B) { // Start of escape sequence if ((key1 = ReadKey()) >= 0) { k <<= 8; @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: remote.h 2.1 2013/02/02 12:44:33 kls Exp $ + * $Id: remote.h 3.1 2013/12/25 12:32:44 kls Exp $ */ #ifndef __REMOTE_H @@ -106,6 +106,7 @@ class cKbdRemote : public cRemote, private cThread { private: static bool kbdAvailable; static bool rawMode; + bool systemIsUtf8; struct termios savedTm; virtual void Action(void); int ReadKey(void); |