You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

653 lines
42 KiB

#!/usr/bin/env python3
# MIT License
#
# Copyright (c) 2021 Eugenio Parodi <ceccopierangiolieugenio AT googlemail DOT com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
from TermTk.TTkCore.constant import TTkK
class KeyEvent:
__slots__ = ('type', 'key', 'code', 'mod')
def __init__(self, type:int, key: str, code: str, mod: int):
self.type = type
self.key = key
self.mod = mod
self.code = code
def __str__(self):
code = self.code.replace('\033','<ESC>')
return f"KeyEvent: {self.key} {key2str(self.key)} {mod2str(self.mod)} {code}"
@staticmethod
def parse(input_key): # from: Space except "DEL"
if len(input_key) == 1 and "\040" <= input_key != "\177":
return KeyEvent(TTkK.Character, input_key, input_key, TTkK.NoModifier)
else:
key, mod = _translate_key(input_key)
if key is not None:
return KeyEvent(TTkK.SpecialKey, key, input_key, mod)
return None
def _translate_key(key):
if key == "\177" : return TTkK.Key_Backspace , TTkK.NoModifier
elif key == "\t" : return TTkK.Key_Tab , TTkK.NoModifier
elif key == "\033[Z" : return TTkK.Key_Tab , TTkK.ShiftModifier
elif key == "\n" : return TTkK.Key_Enter , TTkK.NoModifier
elif key == "\033[A" : return TTkK.Key_Up , TTkK.NoModifier
elif key == "\033[B" : return TTkK.Key_Down , TTkK.NoModifier
elif key == "\033[C" : return TTkK.Key_Right , TTkK.NoModifier
elif key == "\033[D" : return TTkK.Key_Left , TTkK.NoModifier
elif key == "\033[5~" : return TTkK.Key_PageUp , TTkK.NoModifier
elif key == "\033[6~" : return TTkK.Key_PageDown , TTkK.NoModifier
# Xterm
elif key == "\033[F" : return TTkK.Key_End , TTkK.NoModifier
elif key == "\033[H" : return TTkK.Key_Home , TTkK.NoModifier
# Terminator + tmux
elif key == "\033[4~" : return TTkK.Key_End , TTkK.NoModifier
elif key == "\033[1~" : return TTkK.Key_Home , TTkK.NoModifier
elif key == "\033[2~" : return TTkK.Key_Insert , TTkK.NoModifier
elif key == "\033[3~" : return TTkK.Key_Delete , TTkK.NoModifier
elif key == "\033" : return TTkK.Key_Escape , TTkK.NoModifier
# Function Key
elif key == "\033OP" : return TTkK.Key_F1 , TTkK.NoModifier
elif key == "\033OQ" : return TTkK.Key_F2 , TTkK.NoModifier
elif key == "\033OR" : return TTkK.Key_F3 , TTkK.NoModifier
elif key == "\033OS" : return TTkK.Key_F4 , TTkK.NoModifier
elif key == "\033[15~" : return TTkK.Key_F5 , TTkK.NoModifier
elif key == "\033[17~" : return TTkK.Key_F6 , TTkK.NoModifier
elif key == "\033[18~" : return TTkK.Key_F7 , TTkK.NoModifier
elif key == "\033[19~" : return TTkK.Key_F8 , TTkK.NoModifier
elif key == "\033[20~" : return TTkK.Key_F9 , TTkK.NoModifier
elif key == "\033[21~" : return TTkK.Key_F10 , TTkK.NoModifier
elif key == "\033[23~" : return TTkK.Key_F11 , TTkK.NoModifier
elif key == "\033[24~" : return TTkK.Key_F12 , TTkK.NoModifier
elif key == "\033[1;2P" : return TTkK.Key_F1 , TTkK.ShiftModifier
elif key == "\033[1;2Q" : return TTkK.Key_F2 , TTkK.ShiftModifier
elif key == "\033[1;2R" : return TTkK.Key_F3 , TTkK.ShiftModifier
elif key == "\033[1;2S" : return TTkK.Key_F4 , TTkK.ShiftModifier
elif key == "\033[15;2~": return TTkK.Key_F5 , TTkK.ShiftModifier
elif key == "\033[17;2~": return TTkK.Key_F6 , TTkK.ShiftModifier
elif key == "\033[18;2~": return TTkK.Key_F7 , TTkK.ShiftModifier
elif key == "\033[19;2~": return TTkK.Key_F8 , TTkK.ShiftModifier
elif key == "\033[20;2~": return TTkK.Key_F9 , TTkK.ShiftModifier
elif key == "\033[21;2~": return TTkK.Key_F10 , TTkK.ShiftModifier
elif key == "\033[23;2~": return TTkK.Key_F11 , TTkK.ShiftModifier
elif key == "\033[24;2~": return TTkK.Key_F12 , TTkK.ShiftModifier
elif key == "\033[1;5P" : return TTkK.Key_F1 , TTkK.ControlModifier
elif key == "\033[1;5Q" : return TTkK.Key_F2 , TTkK.ControlModifier
elif key == "\033[1;5R" : return TTkK.Key_F3 , TTkK.ControlModifier
elif key == "\033[1;5S" : return TTkK.Key_F4 , TTkK.ControlModifier
elif key == "\033[15;5~": return TTkK.Key_F5 , TTkK.ControlModifier
elif key == "\033[17;5~": return TTkK.Key_F6 , TTkK.ControlModifier
elif key == "\033[18;5~": return TTkK.Key_F7 , TTkK.ControlModifier
elif key == "\033[19;5~": return TTkK.Key_F8 , TTkK.ControlModifier
elif key == "\033[20;5~": return TTkK.Key_F9 , TTkK.ControlModifier
elif key == "\033[21;5~": return TTkK.Key_F10 , TTkK.ControlModifier
elif key == "\033[23;5~": return TTkK.Key_F11 , TTkK.ControlModifier
elif key == "\033[24;5~": return TTkK.Key_F12 , TTkK.ControlModifier
# elif key == "\033[1;3P" : return TTkK.Key_F1 , TTkK.AltModifier
# elif key == "\033[1;3Q" : return TTkK.Key_F2 , TTkK.AltModifier
elif key == "\033[1;3R" : return TTkK.Key_F3 , TTkK.AltModifier
#elif key == "\033[1;3S" : return TTkK.Key_F4 , TTkK.AltModifier
#elif key == "\033[15;3~": return TTkK.Key_F5 , TTkK.AltModifier
elif key == "\033[17;3~": return TTkK.Key_F6 , TTkK.AltModifier
#elif key == "\033[18;3~": return TTkK.Key_F7 , TTkK.AltModifier
#elif key == "\033[19;3~": return TTkK.Key_F8 , TTkK.AltModifier
elif key == "\033[20;3~": return TTkK.Key_F9 , TTkK.AltModifier
#elif key == "\033[21;3~": return TTkK.Key_F10 , TTkK.AltModifier
elif key == "\033[23;3~": return TTkK.Key_F11 , TTkK.AltModifier
elif key == "\033[24;3~": return TTkK.Key_F12 , TTkK.AltModifier
return None, None
# # elif key == "\033": return TTkK.Key_Tab
# if True: return None
# elif key == "\033": return TTkK.Key_Backtab
# elif key == "\033": return TTkK.Key_Backspace
# elif key == "\033": return TTkK.Key_Return
# elif key == "\033": return TTkK.Key_Enter
# elif key == "\033": return TTkK.Key_Pause
# elif key == "\033": return TTkK.Key_Print
# elif key == "\033": return TTkK.Key_SysReq
# elif key == "\033": return TTkK.Key_Clear
# elif key == "\033": return TTkK.Key_Shift
# elif key == "\033": return TTkK.Key_Control
# elif key == "\033": return TTkK.Key_Meta
# elif key == "\033": return TTkK.Key_Alt
# elif key == "\033": return TTkK.Key_AltGr
# elif key == "\033": return TTkK.Key_CapsLock
# elif key == "\033": return TTkK.Key_NumLock
# elif key == "\033": return TTkK.Key_ScrollLock
# elif key == "\033": return TTkK.Key_F13
# elif key == "\033": return TTkK.Key_F14
# elif key == "\033": return TTkK.Key_F15
# elif key == "\033": return TTkK.Key_F16
# elif key == "\033": return TTkK.Key_F17
# elif key == "\033": return TTkK.Key_F18
# elif key == "\033": return TTkK.Key_F19
# elif key == "\033": return TTkK.Key_F20
# elif key == "\033": return TTkK.Key_F21
# elif key == "\033": return TTkK.Key_F22
# elif key == "\033": return TTkK.Key_F23
# elif key == "\033": return TTkK.Key_F24
# elif key == "\033": return TTkK.Key_F25
# elif key == "\033": return TTkK.Key_F26
# elif key == "\033": return TTkK.Key_F27
# elif key == "\033": return TTkK.Key_F28
# elif key == "\033": return TTkK.Key_F29
# elif key == "\033": return TTkK.Key_F30
# elif key == "\033": return TTkK.Key_F31
# elif key == "\033": return TTkK.Key_F32
# elif key == "\033": return TTkK.Key_F33
# elif key == "\033": return TTkK.Key_F34
# elif key == "\033": return TTkK.Key_F35
# elif key == "\033": return TTkK.Key_Super_L
# elif key == "\033": return TTkK.Key_Super_R
# elif key == "\033": return TTkK.Key_Menu
# elif key == "\033": return TTkK.Key_Hyper_L
# elif key == "\033": return TTkK.Key_Hyper_R
# elif key == "\033": return TTkK.Key_Help
# elif key == "\033": return TTkK.Key_Direction_L
# elif key == "\033": return TTkK.Key_Direction_R
# elif key == "\033": return TTkK.Key_Space
# elif key == "\033": return TTkK.Key_Any
# return TTkK.NONE
def mod2str(k):
if k == TTkK.NoModifier : return "NoModifier"
if k == TTkK.ShiftModifier : return "ShiftModifier"
if k == TTkK.ControlModifier : return "ControlModifier"
if k == TTkK.AltModifier : return "AltModifier"
if k == TTkK.MetaModifier : return "MetaModifier"
if k == TTkK.KeypadModifier : return "KeypadModifier"
if k == TTkK.GroupSwitchModifier : return "GroupSwitchModifier"
return "NONE!!!"
def key2str(k):
if k == TTkK.Key_Escape : return "Key_Escape"
if k == TTkK.Key_Tab : return "Key_Tab"
if k == TTkK.Key_Backtab : return "Key_Backtab"
if k == TTkK.Key_Backspace : return "Key_Backspace"
if k == TTkK.Key_Return : return "Key_Return"
if k == TTkK.Key_Enter : return "Key_Enter"
if k == TTkK.Key_Insert : return "Key_Insert"
if k == TTkK.Key_Delete : return "Key_Delete"
if k == TTkK.Key_Pause : return "Key_Pause"
if k == TTkK.Key_Print : return "Key_Print"
if k == TTkK.Key_SysReq : return "Key_SysReq"
if k == TTkK.Key_Clear : return "Key_Clear"
if k == TTkK.Key_Home : return "Key_Home"
if k == TTkK.Key_End : return "Key_End"
if k == TTkK.Key_Left : return "Key_Left"
if k == TTkK.Key_Up : return "Key_Up"
if k == TTkK.Key_Right : return "Key_Right"
if k == TTkK.Key_Down : return "Key_Down"
if k == TTkK.Key_PageUp : return "Key_PageUp"
if k == TTkK.Key_PageDown : return "Key_PageDown"
if k == TTkK.Key_Shift : return "Key_Shift"
if k == TTkK.Key_Control : return "Key_Control"
if k == TTkK.Key_Meta : return "Key_Meta"
if k == TTkK.Key_Alt : return "Key_Alt"
if k == TTkK.Key_AltGr : return "Key_AltGr"
if k == TTkK.Key_CapsLock : return "Key_CapsLock"
if k == TTkK.Key_NumLock : return "Key_NumLock"
if k == TTkK.Key_ScrollLock : return "Key_ScrollLock"
if k == TTkK.Key_F1 : return "Key_F1"
if k == TTkK.Key_F2 : return "Key_F2"
if k == TTkK.Key_F3 : return "Key_F3"
if k == TTkK.Key_F4 : return "Key_F4"
if k == TTkK.Key_F5 : return "Key_F5"
if k == TTkK.Key_F6 : return "Key_F6"
if k == TTkK.Key_F7 : return "Key_F7"
if k == TTkK.Key_F8 : return "Key_F8"
if k == TTkK.Key_F9 : return "Key_F9"
if k == TTkK.Key_F10 : return "Key_F10"
if k == TTkK.Key_F11 : return "Key_F11"
if k == TTkK.Key_F12 : return "Key_F12"
if k == TTkK.Key_F13 : return "Key_F13"
if k == TTkK.Key_F14 : return "Key_F14"
if k == TTkK.Key_F15 : return "Key_F15"
if k == TTkK.Key_F16 : return "Key_F16"
if k == TTkK.Key_F17 : return "Key_F17"
if k == TTkK.Key_F18 : return "Key_F18"
if k == TTkK.Key_F19 : return "Key_F19"
if k == TTkK.Key_F20 : return "Key_F20"
if k == TTkK.Key_F21 : return "Key_F21"
if k == TTkK.Key_F22 : return "Key_F22"
if k == TTkK.Key_F23 : return "Key_F23"
if k == TTkK.Key_F24 : return "Key_F24"
if k == TTkK.Key_F25 : return "Key_F25"
if k == TTkK.Key_F26 : return "Key_F26"
if k == TTkK.Key_F27 : return "Key_F27"
if k == TTkK.Key_F28 : return "Key_F28"
if k == TTkK.Key_F29 : return "Key_F29"
if k == TTkK.Key_F30 : return "Key_F30"
if k == TTkK.Key_F31 : return "Key_F31"
if k == TTkK.Key_F32 : return "Key_F32"
if k == TTkK.Key_F33 : return "Key_F33"
if k == TTkK.Key_F34 : return "Key_F34"
if k == TTkK.Key_F35 : return "Key_F35"
if k == TTkK.Key_Super_L : return "Key_Super_L"
if k == TTkK.Key_Super_R : return "Key_Super_R"
if k == TTkK.Key_Menu : return "Key_Menu"
if k == TTkK.Key_Hyper_L : return "Key_Hyper_L"
if k == TTkK.Key_Hyper_R : return "Key_Hyper_R"
if k == TTkK.Key_Help : return "Key_Help"
if k == TTkK.Key_Direction_L : return "Key_Direction_L"
if k == TTkK.Key_Direction_R : return "Key_Direction_R"
if k == TTkK.Key_Space : return "Key_Space"
if k == TTkK.Key_Any : return "Key_Any"
if k == TTkK.Key_Space : return "Key_Space"
if k == TTkK.Key_Exclam : return "Key_Exclam"
if k == TTkK.Key_QuoteDbl : return "Key_QuoteDbl"
if k == TTkK.Key_NumberSign : return "Key_NumberSign"
if k == TTkK.Key_Dollar : return "Key_Dollar"
if k == TTkK.Key_Percent : return "Key_Percent"
if k == TTkK.Key_Ampersand : return "Key_Ampersand"
if k == TTkK.Key_Apostrophe : return "Key_Apostrophe"
if k == TTkK.Key_ParenLeft : return "Key_ParenLeft"
if k == TTkK.Key_ParenRight : return "Key_ParenRight"
if k == TTkK.Key_Asterisk : return "Key_Asterisk"
if k == TTkK.Key_Plus : return "Key_Plus"
if k == TTkK.Key_Comma : return "Key_Comma"
if k == TTkK.Key_Minus : return "Key_Minus"
if k == TTkK.Key_Period : return "Key_Period"
if k == TTkK.Key_Slash : return "Key_Slash"
if k == TTkK.Key_0 : return "Key_0"
if k == TTkK.Key_1 : return "Key_1"
if k == TTkK.Key_2 : return "Key_2"
if k == TTkK.Key_3 : return "Key_3"
if k == TTkK.Key_4 : return "Key_4"
if k == TTkK.Key_5 : return "Key_5"
if k == TTkK.Key_6 : return "Key_6"
if k == TTkK.Key_7 : return "Key_7"
if k == TTkK.Key_8 : return "Key_8"
if k == TTkK.Key_9 : return "Key_9"
if k == TTkK.Key_Colon : return "Key_Colon"
if k == TTkK.Key_Semicolon : return "Key_Semicolon"
if k == TTkK.Key_Less : return "Key_Less"
if k == TTkK.Key_Equal : return "Key_Equal"
if k == TTkK.Key_Greater : return "Key_Greater"
if k == TTkK.Key_Question : return "Key_Question"
if k == TTkK.Key_At : return "Key_At"
if k == TTkK.Key_A : return "Key_A"
if k == TTkK.Key_B : return "Key_B"
if k == TTkK.Key_C : return "Key_C"
if k == TTkK.Key_D : return "Key_D"
if k == TTkK.Key_E : return "Key_E"
if k == TTkK.Key_F : return "Key_F"
if k == TTkK.Key_G : return "Key_G"
if k == TTkK.Key_H : return "Key_H"
if k == TTkK.Key_I : return "Key_I"
if k == TTkK.Key_J : return "Key_J"
if k == TTkK.Key_K : return "Key_K"
if k == TTkK.Key_L : return "Key_L"
if k == TTkK.Key_M : return "Key_M"
if k == TTkK.Key_N : return "Key_N"
if k == TTkK.Key_O : return "Key_O"
if k == TTkK.Key_P : return "Key_P"
if k == TTkK.Key_Q : return "Key_Q"
if k == TTkK.Key_R : return "Key_R"
if k == TTkK.Key_S : return "Key_S"
if k == TTkK.Key_T : return "Key_T"
if k == TTkK.Key_U : return "Key_U"
if k == TTkK.Key_V : return "Key_V"
if k == TTkK.Key_W : return "Key_W"
if k == TTkK.Key_X : return "Key_X"
if k == TTkK.Key_Y : return "Key_Y"
if k == TTkK.Key_Z : return "Key_Z"
if k == TTkK.Key_BracketLeft : return "Key_BracketLeft"
if k == TTkK.Key_Backslash : return "Key_Backslash"
if k == TTkK.Key_BracketRight : return "Key_BracketRight"
if k == TTkK.Key_AsciiCircum : return "Key_AsciiCircum"
if k == TTkK.Key_Underscore : return "Key_Underscore"
if k == TTkK.Key_QuoteLeft : return "Key_QuoteLeft"
if k == TTkK.Key_BraceLeft : return "Key_BraceLeft"
if k == TTkK.Key_Bar : return "Key_Bar"
if k == TTkK.Key_BraceRight : return "Key_BraceRight"
if k == TTkK.Key_AsciiTilde : return "Key_AsciiTilde"
if k == TTkK.Key_nobreakspace : return "Key_nobreakspace"
if k == TTkK.Key_exclamdown : return "Key_exclamdown"
if k == TTkK.Key_cent : return "Key_cent"
if k == TTkK.Key_sterling : return "Key_sterling"
if k == TTkK.Key_currency : return "Key_currency"
if k == TTkK.Key_yen : return "Key_yen"
if k == TTkK.Key_brokenbar : return "Key_brokenbar"
if k == TTkK.Key_section : return "Key_section"
if k == TTkK.Key_diaeresis : return "Key_diaeresis"
if k == TTkK.Key_copyright : return "Key_copyright"
if k == TTkK.Key_ordfeminine : return "Key_ordfeminine"
if k == TTkK.Key_guillemotleft : return "Key_guillemotleft"
if k == TTkK.Key_notsign : return "Key_notsign"
if k == TTkK.Key_hyphen : return "Key_hyphen"
if k == TTkK.Key_registered : return "Key_registered"
if k == TTkK.Key_macron : return "Key_macron"
if k == TTkK.Key_degree : return "Key_degree"
if k == TTkK.Key_plusminus : return "Key_plusminus"
if k == TTkK.Key_twosuperior : return "Key_twosuperior"
if k == TTkK.Key_threesuperior : return "Key_threesuperior"
if k == TTkK.Key_acute : return "Key_acute"
if k == TTkK.Key_mu : return "Key_mu"
if k == TTkK.Key_paragraph : return "Key_paragraph"
if k == TTkK.Key_periodcentered : return "Key_periodcentered"
if k == TTkK.Key_cedilla : return "Key_cedilla"
if k == TTkK.Key_onesuperior : return "Key_onesuperior"
if k == TTkK.Key_masculine : return "Key_masculine"
if k == TTkK.Key_guillemotright : return "Key_guillemotright"
if k == TTkK.Key_onequarter : return "Key_onequarter"
if k == TTkK.Key_onehalf : return "Key_onehalf"
if k == TTkK.Key_threequarters : return "Key_threequarters"
if k == TTkK.Key_questiondown : return "Key_questiondown"
if k == TTkK.Key_Agrave : return "Key_Agrave"
if k == TTkK.Key_Aacute : return "Key_Aacute"
if k == TTkK.Key_Acircumflex : return "Key_Acircumflex"
if k == TTkK.Key_Atilde : return "Key_Atilde"
if k == TTkK.Key_Adiaeresis : return "Key_Adiaeresis"
if k == TTkK.Key_Aring : return "Key_Aring"
if k == TTkK.Key_AE : return "Key_AE"
if k == TTkK.Key_Ccedilla : return "Key_Ccedilla"
if k == TTkK.Key_Egrave : return "Key_Egrave"
if k == TTkK.Key_Eacute : return "Key_Eacute"
if k == TTkK.Key_Ecircumflex : return "Key_Ecircumflex"
if k == TTkK.Key_Ediaeresis : return "Key_Ediaeresis"
if k == TTkK.Key_Igrave : return "Key_Igrave"
if k == TTkK.Key_Iacute : return "Key_Iacute"
if k == TTkK.Key_Icircumflex : return "Key_Icircumflex"
if k == TTkK.Key_Idiaeresis : return "Key_Idiaeresis"
if k == TTkK.Key_ETH : return "Key_ETH"
if k == TTkK.Key_Ntilde : return "Key_Ntilde"
if k == TTkK.Key_Ograve : return "Key_Ograve"
if k == TTkK.Key_Oacute : return "Key_Oacute"
if k == TTkK.Key_Ocircumflex : return "Key_Ocircumflex"
if k == TTkK.Key_Otilde : return "Key_Otilde"
if k == TTkK.Key_Odiaeresis : return "Key_Odiaeresis"
if k == TTkK.Key_multiply : return "Key_multiply"
if k == TTkK.Key_Ooblique : return "Key_Ooblique"
if k == TTkK.Key_Ugrave : return "Key_Ugrave"
if k == TTkK.Key_Uacute : return "Key_Uacute"
if k == TTkK.Key_Ucircumflex : return "Key_Ucircumflex"
if k == TTkK.Key_Udiaeresis : return "Key_Udiaeresis"
if k == TTkK.Key_Yacute : return "Key_Yacute"
if k == TTkK.Key_THORN : return "Key_THORN"
if k == TTkK.Key_ssharp : return "Key_ssharp"
if k == TTkK.Key_division : return "Key_division"
if k == TTkK.Key_ydiaeresis : return "Key_ydiaeresis"
if k == TTkK.Key_Multi_key : return "Key_Multi_key"
if k == TTkK.Key_Codeinput : return "Key_Codeinput"
if k == TTkK.Key_SingleCandidate : return "Key_SingleCandidate"
if k == TTkK.Key_MultipleCandidate : return "Key_MultipleCandidate"
if k == TTkK.Key_PreviousCandidate : return "Key_PreviousCandidate"
if k == TTkK.Key_Mode_switch : return "Key_Mode_switch"
if k == TTkK.Key_Kanji : return "Key_Kanji"
if k == TTkK.Key_Muhenkan : return "Key_Muhenkan"
if k == TTkK.Key_Henkan : return "Key_Henkan"
if k == TTkK.Key_Romaji : return "Key_Romaji"
if k == TTkK.Key_Hiragana : return "Key_Hiragana"
if k == TTkK.Key_Katakana : return "Key_Katakana"
if k == TTkK.Key_Hiragana_Katakana : return "Key_Hiragana_Katakana"
if k == TTkK.Key_Zenkaku : return "Key_Zenkaku"
if k == TTkK.Key_Hankaku : return "Key_Hankaku"
if k == TTkK.Key_Zenkaku_Hankaku : return "Key_Zenkaku_Hankaku"
if k == TTkK.Key_Touroku : return "Key_Touroku"
if k == TTkK.Key_Massyo : return "Key_Massyo"
if k == TTkK.Key_Kana_Lock : return "Key_Kana_Lock"
if k == TTkK.Key_Kana_Shift : return "Key_Kana_Shift"
if k == TTkK.Key_Eisu_Shift : return "Key_Eisu_Shift"
if k == TTkK.Key_Eisu_toggle : return "Key_Eisu_toggle"
if k == TTkK.Key_Hangul : return "Key_Hangul"
if k == TTkK.Key_Hangul_Start : return "Key_Hangul_Start"
if k == TTkK.Key_Hangul_End : return "Key_Hangul_End"
if k == TTkK.Key_Hangul_Hanja : return "Key_Hangul_Hanja"
if k == TTkK.Key_Hangul_Jamo : return "Key_Hangul_Jamo"
if k == TTkK.Key_Hangul_Romaja : return "Key_Hangul_Romaja"
if k == TTkK.Key_Hangul_Jeonja : return "Key_Hangul_Jeonja"
if k == TTkK.Key_Hangul_Banja : return "Key_Hangul_Banja"
if k == TTkK.Key_Hangul_PreHanja : return "Key_Hangul_PreHanja"
if k == TTkK.Key_Hangul_PostHanja : return "Key_Hangul_PostHanja"
if k == TTkK.Key_Hangul_Special : return "Key_Hangul_Special"
if k == TTkK.Key_Dead_Grave : return "Key_Dead_Grave"
if k == TTkK.Key_Dead_Acute : return "Key_Dead_Acute"
if k == TTkK.Key_Dead_Circumflex : return "Key_Dead_Circumflex"
if k == TTkK.Key_Dead_Tilde : return "Key_Dead_Tilde"
if k == TTkK.Key_Dead_Macron : return "Key_Dead_Macron"
if k == TTkK.Key_Dead_Breve : return "Key_Dead_Breve"
if k == TTkK.Key_Dead_Abovedot : return "Key_Dead_Abovedot"
if k == TTkK.Key_Dead_Diaeresis : return "Key_Dead_Diaeresis"
if k == TTkK.Key_Dead_Abovering : return "Key_Dead_Abovering"
if k == TTkK.Key_Dead_Doubleacute : return "Key_Dead_Doubleacute"
if k == TTkK.Key_Dead_Caron : return "Key_Dead_Caron"
if k == TTkK.Key_Dead_Cedilla : return "Key_Dead_Cedilla"
if k == TTkK.Key_Dead_Ogonek : return "Key_Dead_Ogonek"
if k == TTkK.Key_Dead_Iota : return "Key_Dead_Iota"
if k == TTkK.Key_Dead_Voiced_Sound : return "Key_Dead_Voiced_Sound"
if k == TTkK.Key_Dead_Semivoiced_Sound : return "Key_Dead_Semivoiced_Sound"
if k == TTkK.Key_Dead_Belowdot : return "Key_Dead_Belowdot"
if k == TTkK.Key_Dead_Hook : return "Key_Dead_Hook"
if k == TTkK.Key_Dead_Horn : return "Key_Dead_Horn"
if k == TTkK.Key_Dead_Stroke : return "Key_Dead_Stroke"
if k == TTkK.Key_Dead_Abovecomma : return "Key_Dead_Abovecomma"
if k == TTkK.Key_Dead_Abovereversedcomma : return "Key_Dead_Abovereversedcomma"
if k == TTkK.Key_Dead_Doublegrave : return "Key_Dead_Doublegrave"
if k == TTkK.Key_Dead_Belowring : return "Key_Dead_Belowring"
if k == TTkK.Key_Dead_Belowmacron : return "Key_Dead_Belowmacron"
if k == TTkK.Key_Dead_Belowcircumflex : return "Key_Dead_Belowcircumflex"
if k == TTkK.Key_Dead_Belowtilde : return "Key_Dead_Belowtilde"
if k == TTkK.Key_Dead_Belowbreve : return "Key_Dead_Belowbreve"
if k == TTkK.Key_Dead_Belowdiaeresis : return "Key_Dead_Belowdiaeresis"
if k == TTkK.Key_Dead_Invertedbreve : return "Key_Dead_Invertedbreve"
if k == TTkK.Key_Dead_Belowcomma : return "Key_Dead_Belowcomma"
if k == TTkK.Key_Dead_Currency : return "Key_Dead_Currency"
if k == TTkK.Key_Dead_a : return "Key_Dead_a"
if k == TTkK.Key_Dead_A : return "Key_Dead_A"
if k == TTkK.Key_Dead_e : return "Key_Dead_e"
if k == TTkK.Key_Dead_E : return "Key_Dead_E"
if k == TTkK.Key_Dead_i : return "Key_Dead_i"
if k == TTkK.Key_Dead_I : return "Key_Dead_I"
if k == TTkK.Key_Dead_o : return "Key_Dead_o"
if k == TTkK.Key_Dead_O : return "Key_Dead_O"
if k == TTkK.Key_Dead_u : return "Key_Dead_u"
if k == TTkK.Key_Dead_U : return "Key_Dead_U"
if k == TTkK.Key_Dead_Small_Schwa : return "Key_Dead_Small_Schwa"
if k == TTkK.Key_Dead_Capital_Schwa : return "Key_Dead_Capital_Schwa"
if k == TTkK.Key_Dead_Greek : return "Key_Dead_Greek"
if k == TTkK.Key_Dead_Lowline : return "Key_Dead_Lowline"
if k == TTkK.Key_Dead_Aboveverticalline : return "Key_Dead_Aboveverticalline"
if k == TTkK.Key_Dead_Belowverticalline : return "Key_Dead_Belowverticalline"
if k == TTkK.Key_Dead_Longsolidusoverlay : return "Key_Dead_Longsolidusoverlay"
if k == TTkK.Key_Back : return "Key_Back"
if k == TTkK.Key_Forward : return "Key_Forward"
if k == TTkK.Key_Stop : return "Key_Stop"
if k == TTkK.Key_Refresh : return "Key_Refresh"
if k == TTkK.Key_VolumeDown : return "Key_VolumeDown"
if k == TTkK.Key_VolumeMute : return "Key_VolumeMute"
if k == TTkK.Key_VolumeUp : return "Key_VolumeUp"
if k == TTkK.Key_BassBoost : return "Key_BassBoost"
if k == TTkK.Key_BassUp : return "Key_BassUp"
if k == TTkK.Key_BassDown : return "Key_BassDown"
if k == TTkK.Key_TrebleUp : return "Key_TrebleUp"
if k == TTkK.Key_TrebleDown : return "Key_TrebleDown"
if k == TTkK.Key_MediaPlay : return "Key_MediaPlay"
if k == TTkK.Key_MediaStop : return "Key_MediaStop"
if k == TTkK.Key_MediaPrevious : return "Key_MediaPrevious"
if k == TTkK.Key_MediaNext : return "Key_MediaNext"
if k == TTkK.Key_MediaRecord : return "Key_MediaRecord"
if k == TTkK.Key_MediaPause : return "Key_MediaPause"
if k == TTkK.Key_MediaTogglePlayPause : return "Key_MediaTogglePlayPause"
if k == TTkK.Key_HomePage : return "Key_HomePage"
if k == TTkK.Key_Favorites : return "Key_Favorites"
if k == TTkK.Key_Search : return "Key_Search"
if k == TTkK.Key_Standby : return "Key_Standby"
if k == TTkK.Key_OpenUrl : return "Key_OpenUrl"
if k == TTkK.Key_LaunchMail : return "Key_LaunchMail"
if k == TTkK.Key_LaunchMedia : return "Key_LaunchMedia"
if k == TTkK.Key_Launch0 : return "Key_Launch0"
if k == TTkK.Key_Launch1 : return "Key_Launch1"
if k == TTkK.Key_Launch2 : return "Key_Launch2"
if k == TTkK.Key_Launch3 : return "Key_Launch3"
if k == TTkK.Key_Launch4 : return "Key_Launch4"
if k == TTkK.Key_Launch5 : return "Key_Launch5"
if k == TTkK.Key_Launch6 : return "Key_Launch6"
if k == TTkK.Key_Launch7 : return "Key_Launch7"
if k == TTkK.Key_Launch8 : return "Key_Launch8"
if k == TTkK.Key_Launch9 : return "Key_Launch9"
if k == TTkK.Key_LaunchA : return "Key_LaunchA"
if k == TTkK.Key_LaunchB : return "Key_LaunchB"
if k == TTkK.Key_LaunchC : return "Key_LaunchC"
if k == TTkK.Key_LaunchD : return "Key_LaunchD"
if k == TTkK.Key_LaunchE : return "Key_LaunchE"
if k == TTkK.Key_LaunchF : return "Key_LaunchF"
if k == TTkK.Key_LaunchG : return "Key_LaunchG"
if k == TTkK.Key_LaunchH : return "Key_LaunchH"
if k == TTkK.Key_MonBrightnessUp : return "Key_MonBrightnessUp"
if k == TTkK.Key_MonBrightnessDown : return "Key_MonBrightnessDown"
if k == TTkK.Key_KeyboardLightOnOff : return "Key_KeyboardLightOnOff"
if k == TTkK.Key_KeyboardBrightnessUp : return "Key_KeyboardBrightnessUp"
if k == TTkK.Key_KeyboardBrightnessDown : return "Key_KeyboardBrightnessDown"
if k == TTkK.Key_PowerOff : return "Key_PowerOff"
if k == TTkK.Key_WakeUp : return "Key_WakeUp"
if k == TTkK.Key_Eject : return "Key_Eject"
if k == TTkK.Key_ScreenSaver : return "Key_ScreenSaver"
if k == TTkK.Key_WWW : return "Key_WWW"
if k == TTkK.Key_Memo : return "Key_Memo"
if k == TTkK.Key_LightBulb : return "Key_LightBulb"
if k == TTkK.Key_Shop : return "Key_Shop"
if k == TTkK.Key_History : return "Key_History"
if k == TTkK.Key_AddFavorite : return "Key_AddFavorite"
if k == TTkK.Key_HotLinks : return "Key_HotLinks"
if k == TTkK.Key_BrightnessAdjust : return "Key_BrightnessAdjust"
if k == TTkK.Key_Finance : return "Key_Finance"
if k == TTkK.Key_Community : return "Key_Community"
if k == TTkK.Key_AudioRewind : return "Key_AudioRewind"
if k == TTkK.Key_BackForward : return "Key_BackForward"
if k == TTkK.Key_ApplicationLeft : return "Key_ApplicationLeft"
if k == TTkK.Key_ApplicationRight : return "Key_ApplicationRight"
if k == TTkK.Key_Book : return "Key_Book"
if k == TTkK.Key_CD : return "Key_CD"
if k == TTkK.Key_Calculator : return "Key_Calculator"
if k == TTkK.Key_ToDoList : return "Key_ToDoList"
if k == TTkK.Key_ClearGrab : return "Key_ClearGrab"
if k == TTkK.Key_Close : return "Key_Close"
if k == TTkK.Key_Copy : return "Key_Copy"
if k == TTkK.Key_Cut : return "Key_Cut"
if k == TTkK.Key_Display : return "Key_Display"
if k == TTkK.Key_DOS : return "Key_DOS"
if k == TTkK.Key_Documents : return "Key_Documents"
if k == TTkK.Key_Excel : return "Key_Excel"
if k == TTkK.Key_Explorer : return "Key_Explorer"
if k == TTkK.Key_Game : return "Key_Game"
if k == TTkK.Key_Go : return "Key_Go"
if k == TTkK.Key_iTouch : return "Key_iTouch"
if k == TTkK.Key_LogOff : return "Key_LogOff"
if k == TTkK.Key_Market : return "Key_Market"
if k == TTkK.Key_Meeting : return "Key_Meeting"
if k == TTkK.Key_MenuKB : return "Key_MenuKB"
if k == TTkK.Key_MenuPB : return "Key_MenuPB"
if k == TTkK.Key_MySites : return "Key_MySites"
if k == TTkK.Key_News : return "Key_News"
if k == TTkK.Key_OfficeHome : return "Key_OfficeHome"
if k == TTkK.Key_Option : return "Key_Option"
if k == TTkK.Key_Paste : return "Key_Paste"
if k == TTkK.Key_Phone : return "Key_Phone"
if k == TTkK.Key_Calendar : return "Key_Calendar"
if k == TTkK.Key_Reply : return "Key_Reply"
if k == TTkK.Key_Reload : return "Key_Reload"
if k == TTkK.Key_RotateWindows : return "Key_RotateWindows"
if k == TTkK.Key_RotationPB : return "Key_RotationPB"
if k == TTkK.Key_RotationKB : return "Key_RotationKB"
if k == TTkK.Key_Save : return "Key_Save"
if k == TTkK.Key_Send : return "Key_Send"
if k == TTkK.Key_Spell : return "Key_Spell"
if k == TTkK.Key_SplitScreen : return "Key_SplitScreen"
if k == TTkK.Key_Support : return "Key_Support"
if k == TTkK.Key_TaskPane : return "Key_TaskPane"
if k == TTkK.Key_Terminal : return "Key_Terminal"
if k == TTkK.Key_Tools : return "Key_Tools"
if k == TTkK.Key_Travel : return "Key_Travel"
if k == TTkK.Key_Video : return "Key_Video"
if k == TTkK.Key_Word : return "Key_Word"
if k == TTkK.Key_Xfer : return "Key_Xfer"
if k == TTkK.Key_ZoomIn : return "Key_ZoomIn"
if k == TTkK.Key_ZoomOut : return "Key_ZoomOut"
if k == TTkK.Key_Away : return "Key_Away"
if k == TTkK.Key_Messenger : return "Key_Messenger"
if k == TTkK.Key_WebCam : return "Key_WebCam"
if k == TTkK.Key_MailForward : return "Key_MailForward"
if k == TTkK.Key_Pictures : return "Key_Pictures"
if k == TTkK.Key_Music : return "Key_Music"
if k == TTkK.Key_Battery : return "Key_Battery"
if k == TTkK.Key_Bluetooth : return "Key_Bluetooth"
if k == TTkK.Key_WLAN : return "Key_WLAN"
if k == TTkK.Key_UWB : return "Key_UWB"
if k == TTkK.Key_AudioForward : return "Key_AudioForward"
if k == TTkK.Key_AudioRepeat : return "Key_AudioRepeat"
if k == TTkK.Key_AudioRandomPlay : return "Key_AudioRandomPlay"
if k == TTkK.Key_Subtitle : return "Key_Subtitle"
if k == TTkK.Key_AudioCycleTrack : return "Key_AudioCycleTrack"
if k == TTkK.Key_Time : return "Key_Time"
if k == TTkK.Key_Hibernate : return "Key_Hibernate"
if k == TTkK.Key_View : return "Key_View"
if k == TTkK.Key_TopMenu : return "Key_TopMenu"
if k == TTkK.Key_PowerDown : return "Key_PowerDown"
if k == TTkK.Key_Suspend : return "Key_Suspend"
if k == TTkK.Key_ContrastAdjust : return "Key_ContrastAdjust"
if k == TTkK.Key_TouchpadToggle : return "Key_TouchpadToggle"
if k == TTkK.Key_TouchpadOn : return "Key_TouchpadOn"
if k == TTkK.Key_TouchpadOff : return "Key_TouchpadOff"
if k == TTkK.Key_MicMute : return "Key_MicMute"
if k == TTkK.Key_Red : return "Key_Red"
if k == TTkK.Key_Green : return "Key_Green"
if k == TTkK.Key_Yellow : return "Key_Yellow"
if k == TTkK.Key_Blue : return "Key_Blue"
if k == TTkK.Key_ChannelUp : return "Key_ChannelUp"
if k == TTkK.Key_ChannelDown : return "Key_ChannelDown"
if k == TTkK.Key_Guide : return "Key_Guide"
if k == TTkK.Key_Info : return "Key_Info"
if k == TTkK.Key_Settings : return "Key_Settings"
if k == TTkK.Key_MicVolumeUp : return "Key_MicVolumeUp"
if k == TTkK.Key_MicVolumeDown : return "Key_MicVolumeDown"
if k == TTkK.Key_New : return "Key_New"
if k == TTkK.Key_Open : return "Key_Open"
if k == TTkK.Key_Find : return "Key_Find"
if k == TTkK.Key_Undo : return "Key_Undo"
if k == TTkK.Key_Redo : return "Key_Redo"
if k == TTkK.Key_MediaLast : return "Key_MediaLast"
if k == TTkK.Key_unknown : return "Key_unknown"
if k == TTkK.Key_Call : return "Key_Call"
if k == TTkK.Key_Camera : return "Key_Camera"
if k == TTkK.Key_CameraFocus : return "Key_CameraFocus"
if k == TTkK.Key_Context1 : return "Key_Context1"
if k == TTkK.Key_Context2 : return "Key_Context2"
if k == TTkK.Key_Context3 : return "Key_Context3"
if k == TTkK.Key_Context4 : return "Key_Context4"
if k == TTkK.Key_Flip : return "Key_Flip"
if k == TTkK.Key_Hangup : return "Key_Hangup"
if k == TTkK.Key_No : return "Key_No"
if k == TTkK.Key_Select : return "Key_Select"
if k == TTkK.Key_Yes : return "Key_Yes"
if k == TTkK.Key_ToggleCallHangup : return "Key_ToggleCallHangup"
if k == TTkK.Key_VoiceDial : return "Key_VoiceDial"
if k == TTkK.Key_LastNumberRedial : return "Key_LastNumberRedial"
if k == TTkK.Key_Execute : return "Key_Execute"
if k == TTkK.Key_Printer : return "Key_Printer"
if k == TTkK.Key_Play : return "Key_Play"
if k == TTkK.Key_Sleep : return "Key_Sleep"
if k == TTkK.Key_Zoom : return "Key_Zoom"
if k == TTkK.Key_Exit : return "Key_Exit"
if k == TTkK.Key_Cancel : return "Key_Cancel"
return "NONE!!!"