module Termbox.Enums where
data Attrs = TB_BOLD
| TB_UNDERLINE
| TB_REVERSE
deriving (Eq,Show)
instance Enum Attrs where
succ TB_BOLD = TB_UNDERLINE
succ TB_UNDERLINE = TB_REVERSE
succ TB_REVERSE = error "Attrs.succ: TB_REVERSE has no successor"
pred TB_UNDERLINE = TB_BOLD
pred TB_REVERSE = TB_UNDERLINE
pred TB_BOLD = error "Attrs.pred: TB_BOLD has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from TB_REVERSE
fromEnum TB_BOLD = 256
fromEnum TB_UNDERLINE = 512
fromEnum TB_REVERSE = 1024
toEnum 256 = TB_BOLD
toEnum 512 = TB_UNDERLINE
toEnum 1024 = TB_REVERSE
toEnum unmatched = error ("Attrs.toEnum: Cannot match " ++ show unmatched)
data Errors = TB_EPIPE_TRAP_ERROR
| TB_EFAILED_TO_OPEN_TTY
| TB_EUNSUPPORTED_TERMINAL
deriving (Eq,Show)
instance Enum Errors where
succ TB_EPIPE_TRAP_ERROR = TB_EFAILED_TO_OPEN_TTY
succ TB_EFAILED_TO_OPEN_TTY = TB_EUNSUPPORTED_TERMINAL
succ TB_EUNSUPPORTED_TERMINAL = error "Errors.succ: TB_EUNSUPPORTED_TERMINAL has no successor"
pred TB_EFAILED_TO_OPEN_TTY = TB_EPIPE_TRAP_ERROR
pred TB_EUNSUPPORTED_TERMINAL = TB_EFAILED_TO_OPEN_TTY
pred TB_EPIPE_TRAP_ERROR = error "Errors.pred: TB_EPIPE_TRAP_ERROR has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from TB_EUNSUPPORTED_TERMINAL
fromEnum TB_EPIPE_TRAP_ERROR = (3)
fromEnum TB_EFAILED_TO_OPEN_TTY = (2)
fromEnum TB_EUNSUPPORTED_TERMINAL = (1)
toEnum (3) = TB_EPIPE_TRAP_ERROR
toEnum (2) = TB_EFAILED_TO_OPEN_TTY
toEnum (1) = TB_EUNSUPPORTED_TERMINAL
toEnum unmatched = error ("Errors.toEnum: Cannot match " ++ show unmatched)
data TB_HIDE_CURSOR = TB_HIDE_CURSOR
deriving (Eq,Show)
instance Enum TB_HIDE_CURSOR where
succ TB_HIDE_CURSOR = error "TB_HIDE_CURSOR.succ: TB_HIDE_CURSOR has no successor"
pred TB_HIDE_CURSOR = error "TB_HIDE_CURSOR.pred: TB_HIDE_CURSOR has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from TB_HIDE_CURSOR
fromEnum TB_HIDE_CURSOR = (1)
toEnum (1) = TB_HIDE_CURSOR
toEnum unmatched = error ("TB_HIDE_CURSOR.toEnum: Cannot match " ++ show unmatched)
data InputModes = TB_INPUT_CURRENT
| TB_INPUT_ESC
| TB_INPUT_ALT
| TB_INPUT_MOUSE
deriving (Eq,Show)
instance Enum InputModes where
succ TB_INPUT_CURRENT = TB_INPUT_ESC
succ TB_INPUT_ESC = TB_INPUT_ALT
succ TB_INPUT_ALT = TB_INPUT_MOUSE
succ TB_INPUT_MOUSE = error "InputModes.succ: TB_INPUT_MOUSE has no successor"
pred TB_INPUT_ESC = TB_INPUT_CURRENT
pred TB_INPUT_ALT = TB_INPUT_ESC
pred TB_INPUT_MOUSE = TB_INPUT_ALT
pred TB_INPUT_CURRENT = error "InputModes.pred: TB_INPUT_CURRENT has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from TB_INPUT_MOUSE
fromEnum TB_INPUT_CURRENT = 0
fromEnum TB_INPUT_ESC = 1
fromEnum TB_INPUT_ALT = 2
fromEnum TB_INPUT_MOUSE = 4
toEnum 0 = TB_INPUT_CURRENT
toEnum 1 = TB_INPUT_ESC
toEnum 2 = TB_INPUT_ALT
toEnum 4 = TB_INPUT_MOUSE
toEnum unmatched = error ("InputModes.toEnum: Cannot match " ++ show unmatched)
data OutputModes = TB_OUTPUT_CURRENT
| TB_OUTPUT_NORMAL
| TB_OUTPUT_256
| TB_OUTPUT_216
| TB_OUTPUT_GRAYSCALE
deriving (Eq,Show)
instance Enum OutputModes where
succ TB_OUTPUT_CURRENT = TB_OUTPUT_NORMAL
succ TB_OUTPUT_NORMAL = TB_OUTPUT_256
succ TB_OUTPUT_256 = TB_OUTPUT_216
succ TB_OUTPUT_216 = TB_OUTPUT_GRAYSCALE
succ TB_OUTPUT_GRAYSCALE = error "OutputModes.succ: TB_OUTPUT_GRAYSCALE has no successor"
pred TB_OUTPUT_NORMAL = TB_OUTPUT_CURRENT
pred TB_OUTPUT_256 = TB_OUTPUT_NORMAL
pred TB_OUTPUT_216 = TB_OUTPUT_256
pred TB_OUTPUT_GRAYSCALE = TB_OUTPUT_216
pred TB_OUTPUT_CURRENT = error "OutputModes.pred: TB_OUTPUT_CURRENT has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from TB_OUTPUT_GRAYSCALE
fromEnum TB_OUTPUT_CURRENT = 0
fromEnum TB_OUTPUT_NORMAL = 1
fromEnum TB_OUTPUT_256 = 2
fromEnum TB_OUTPUT_216 = 3
fromEnum TB_OUTPUT_GRAYSCALE = 4
toEnum 0 = TB_OUTPUT_CURRENT
toEnum 1 = TB_OUTPUT_NORMAL
toEnum 2 = TB_OUTPUT_256
toEnum 3 = TB_OUTPUT_216
toEnum 4 = TB_OUTPUT_GRAYSCALE
toEnum unmatched = error ("OutputModes.toEnum: Cannot match " ++ show unmatched)
data Color = TB_DEFAULT
| Black
| Red
| Green
| Yellow
| Blue
| Magenta
| Cyan
| White
deriving (Eq,Show)
instance Enum Color where
succ TB_DEFAULT = Black
succ Black = Red
succ Red = Green
succ Green = Yellow
succ Yellow = Blue
succ Blue = Magenta
succ Magenta = Cyan
succ Cyan = White
succ White = error "Color.succ: White has no successor"
pred Black = TB_DEFAULT
pred Red = Black
pred Green = Red
pred Yellow = Green
pred Blue = Yellow
pred Magenta = Blue
pred Cyan = Magenta
pred White = Cyan
pred TB_DEFAULT = error "Color.pred: TB_DEFAULT has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from White
fromEnum TB_DEFAULT = 0
fromEnum Black = 1
fromEnum Red = 2
fromEnum Green = 3
fromEnum Yellow = 4
fromEnum Blue = 5
fromEnum Magenta = 6
fromEnum Cyan = 7
fromEnum White = 8
toEnum 0 = TB_DEFAULT
toEnum 1 = Black
toEnum 2 = Red
toEnum 3 = Green
toEnum 4 = Yellow
toEnum 5 = Blue
toEnum 6 = Magenta
toEnum 7 = Cyan
toEnum 8 = White
toEnum unmatched = error ("Color.toEnum: Cannot match " ++ show unmatched)
data Mod = TB_MOD_ALT
deriving (Eq,Show)
instance Enum Mod where
succ TB_MOD_ALT = error "Mod.succ: TB_MOD_ALT has no successor"
pred TB_MOD_ALT = error "Mod.pred: TB_MOD_ALT has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from TB_MOD_ALT
fromEnum TB_MOD_ALT = 1
toEnum 1 = TB_MOD_ALT
toEnum unmatched = error ("Mod.toEnum: Cannot match " ++ show unmatched)
data Key = TB_KEY_CTRL_TILDE
| TB_KEY_CTRL_2
| TB_KEY_CTRL_A
| TB_KEY_CTRL_B
| TB_KEY_CTRL_C
| TB_KEY_CTRL_D
| TB_KEY_CTRL_E
| TB_KEY_CTRL_F
| TB_KEY_CTRL_G
| TB_KEY_BACKSPACE
| TB_KEY_CTRL_H
| TB_KEY_TAB
| TB_KEY_CTRL_I
| TB_KEY_CTRL_J
| TB_KEY_CTRL_K
| TB_KEY_CTRL_L
| TB_KEY_ENTER
| TB_KEY_CTRL_M
| TB_KEY_CTRL_N
| TB_KEY_CTRL_O
| TB_KEY_CTRL_P
| TB_KEY_CTRL_Q
| TB_KEY_CTRL_R
| TB_KEY_CTRL_S
| TB_KEY_CTRL_T
| TB_KEY_CTRL_U
| TB_KEY_CTRL_V
| TB_KEY_CTRL_W
| TB_KEY_CTRL_X
| TB_KEY_CTRL_Y
| TB_KEY_CTRL_Z
| TB_KEY_ESC
| TB_KEY_CTRL_LSQ_BRACKET
| TB_KEY_CTRL_3
| TB_KEY_CTRL_4
| TB_KEY_CTRL_BACKSLASH
| TB_KEY_CTRL_5
| TB_KEY_CTRL_RSQ_BRACKET
| TB_KEY_CTRL_6
| TB_KEY_CTRL_7
| TB_KEY_CTRL_SLASH
| TB_KEY_CTRL_UNDERSCORE
| TB_KEY_SPACE
| TB_KEY_BACKSPACE2
| TB_KEY_CTRL_8
| TB_KEY_MOUSE_WHEEL_DOWN
| TB_KEY_MOUSE_WHEEL_UP
| TB_KEY_MOUSE_RELEASE
| TB_KEY_MOUSE_MIDDLE
| TB_KEY_MOUSE_RIGHT
| TB_KEY_MOUSE_LEFT
| TB_KEY_ARROW_RIGHT
| TB_KEY_ARROW_LEFT
| TB_KEY_ARROW_DOWN
| TB_KEY_ARROW_UP
| TB_KEY_PGDN
| TB_KEY_PGUP
| TB_KEY_END
| TB_KEY_HOME
| TB_KEY_DELETE
| TB_KEY_INSERT
| TB_KEY_F12
| TB_KEY_F11
| TB_KEY_F10
| TB_KEY_F9
| TB_KEY_F8
| TB_KEY_F7
| TB_KEY_F6
| TB_KEY_F5
| TB_KEY_F4
| TB_KEY_F3
| TB_KEY_F2
| TB_KEY_F1
deriving (Eq,Show)
instance Enum Key where
succ TB_KEY_CTRL_TILDE = TB_KEY_CTRL_A
succ TB_KEY_CTRL_2 = TB_KEY_CTRL_A
succ TB_KEY_CTRL_A = TB_KEY_CTRL_B
succ TB_KEY_CTRL_B = TB_KEY_CTRL_C
succ TB_KEY_CTRL_C = TB_KEY_CTRL_D
succ TB_KEY_CTRL_D = TB_KEY_CTRL_E
succ TB_KEY_CTRL_E = TB_KEY_CTRL_F
succ TB_KEY_CTRL_F = TB_KEY_CTRL_G
succ TB_KEY_CTRL_G = TB_KEY_BACKSPACE
succ TB_KEY_BACKSPACE = TB_KEY_TAB
succ TB_KEY_CTRL_H = TB_KEY_TAB
succ TB_KEY_TAB = TB_KEY_CTRL_J
succ TB_KEY_CTRL_I = TB_KEY_CTRL_J
succ TB_KEY_CTRL_J = TB_KEY_CTRL_K
succ TB_KEY_CTRL_K = TB_KEY_CTRL_L
succ TB_KEY_CTRL_L = TB_KEY_ENTER
succ TB_KEY_ENTER = TB_KEY_CTRL_N
succ TB_KEY_CTRL_M = TB_KEY_CTRL_N
succ TB_KEY_CTRL_N = TB_KEY_CTRL_O
succ TB_KEY_CTRL_O = TB_KEY_CTRL_P
succ TB_KEY_CTRL_P = TB_KEY_CTRL_Q
succ TB_KEY_CTRL_Q = TB_KEY_CTRL_R
succ TB_KEY_CTRL_R = TB_KEY_CTRL_S
succ TB_KEY_CTRL_S = TB_KEY_CTRL_T
succ TB_KEY_CTRL_T = TB_KEY_CTRL_U
succ TB_KEY_CTRL_U = TB_KEY_CTRL_V
succ TB_KEY_CTRL_V = TB_KEY_CTRL_W
succ TB_KEY_CTRL_W = TB_KEY_CTRL_X
succ TB_KEY_CTRL_X = TB_KEY_CTRL_Y
succ TB_KEY_CTRL_Y = TB_KEY_CTRL_Z
succ TB_KEY_CTRL_Z = TB_KEY_ESC
succ TB_KEY_ESC = TB_KEY_CTRL_4
succ TB_KEY_CTRL_LSQ_BRACKET = TB_KEY_CTRL_4
succ TB_KEY_CTRL_3 = TB_KEY_CTRL_4
succ TB_KEY_CTRL_4 = TB_KEY_CTRL_5
succ TB_KEY_CTRL_BACKSLASH = TB_KEY_CTRL_5
succ TB_KEY_CTRL_5 = TB_KEY_CTRL_6
succ TB_KEY_CTRL_RSQ_BRACKET = TB_KEY_CTRL_6
succ TB_KEY_CTRL_6 = TB_KEY_CTRL_7
succ TB_KEY_CTRL_7 = TB_KEY_SPACE
succ TB_KEY_CTRL_SLASH = TB_KEY_SPACE
succ TB_KEY_CTRL_UNDERSCORE = TB_KEY_SPACE
succ TB_KEY_SPACE = TB_KEY_BACKSPACE2
succ TB_KEY_BACKSPACE2 = TB_KEY_MOUSE_WHEEL_DOWN
succ TB_KEY_CTRL_8 = TB_KEY_MOUSE_WHEEL_DOWN
succ TB_KEY_MOUSE_WHEEL_DOWN = TB_KEY_MOUSE_WHEEL_UP
succ TB_KEY_MOUSE_WHEEL_UP = TB_KEY_MOUSE_RELEASE
succ TB_KEY_MOUSE_RELEASE = TB_KEY_MOUSE_MIDDLE
succ TB_KEY_MOUSE_MIDDLE = TB_KEY_MOUSE_RIGHT
succ TB_KEY_MOUSE_RIGHT = TB_KEY_MOUSE_LEFT
succ TB_KEY_MOUSE_LEFT = TB_KEY_ARROW_RIGHT
succ TB_KEY_ARROW_RIGHT = TB_KEY_ARROW_LEFT
succ TB_KEY_ARROW_LEFT = TB_KEY_ARROW_DOWN
succ TB_KEY_ARROW_DOWN = TB_KEY_ARROW_UP
succ TB_KEY_ARROW_UP = TB_KEY_PGDN
succ TB_KEY_PGDN = TB_KEY_PGUP
succ TB_KEY_PGUP = TB_KEY_END
succ TB_KEY_END = TB_KEY_HOME
succ TB_KEY_HOME = TB_KEY_DELETE
succ TB_KEY_DELETE = TB_KEY_INSERT
succ TB_KEY_INSERT = TB_KEY_F12
succ TB_KEY_F12 = TB_KEY_F11
succ TB_KEY_F11 = TB_KEY_F10
succ TB_KEY_F10 = TB_KEY_F9
succ TB_KEY_F9 = TB_KEY_F8
succ TB_KEY_F8 = TB_KEY_F7
succ TB_KEY_F7 = TB_KEY_F6
succ TB_KEY_F6 = TB_KEY_F5
succ TB_KEY_F5 = TB_KEY_F4
succ TB_KEY_F4 = TB_KEY_F3
succ TB_KEY_F3 = TB_KEY_F2
succ TB_KEY_F2 = TB_KEY_F1
succ TB_KEY_F1 = error "Key.succ: TB_KEY_F1 has no successor"
pred TB_KEY_CTRL_A = TB_KEY_CTRL_TILDE
pred TB_KEY_CTRL_B = TB_KEY_CTRL_A
pred TB_KEY_CTRL_C = TB_KEY_CTRL_B
pred TB_KEY_CTRL_D = TB_KEY_CTRL_C
pred TB_KEY_CTRL_E = TB_KEY_CTRL_D
pred TB_KEY_CTRL_F = TB_KEY_CTRL_E
pred TB_KEY_CTRL_G = TB_KEY_CTRL_F
pred TB_KEY_BACKSPACE = TB_KEY_CTRL_G
pred TB_KEY_CTRL_H = TB_KEY_CTRL_G
pred TB_KEY_TAB = TB_KEY_BACKSPACE
pred TB_KEY_CTRL_I = TB_KEY_BACKSPACE
pred TB_KEY_CTRL_J = TB_KEY_TAB
pred TB_KEY_CTRL_K = TB_KEY_CTRL_J
pred TB_KEY_CTRL_L = TB_KEY_CTRL_K
pred TB_KEY_ENTER = TB_KEY_CTRL_L
pred TB_KEY_CTRL_M = TB_KEY_CTRL_L
pred TB_KEY_CTRL_N = TB_KEY_ENTER
pred TB_KEY_CTRL_O = TB_KEY_CTRL_N
pred TB_KEY_CTRL_P = TB_KEY_CTRL_O
pred TB_KEY_CTRL_Q = TB_KEY_CTRL_P
pred TB_KEY_CTRL_R = TB_KEY_CTRL_Q
pred TB_KEY_CTRL_S = TB_KEY_CTRL_R
pred TB_KEY_CTRL_T = TB_KEY_CTRL_S
pred TB_KEY_CTRL_U = TB_KEY_CTRL_T
pred TB_KEY_CTRL_V = TB_KEY_CTRL_U
pred TB_KEY_CTRL_W = TB_KEY_CTRL_V
pred TB_KEY_CTRL_X = TB_KEY_CTRL_W
pred TB_KEY_CTRL_Y = TB_KEY_CTRL_X
pred TB_KEY_CTRL_Z = TB_KEY_CTRL_Y
pred TB_KEY_ESC = TB_KEY_CTRL_Z
pred TB_KEY_CTRL_LSQ_BRACKET = TB_KEY_CTRL_Z
pred TB_KEY_CTRL_3 = TB_KEY_CTRL_Z
pred TB_KEY_CTRL_4 = TB_KEY_ESC
pred TB_KEY_CTRL_BACKSLASH = TB_KEY_ESC
pred TB_KEY_CTRL_5 = TB_KEY_CTRL_4
pred TB_KEY_CTRL_RSQ_BRACKET = TB_KEY_CTRL_4
pred TB_KEY_CTRL_6 = TB_KEY_CTRL_5
pred TB_KEY_CTRL_7 = TB_KEY_CTRL_6
pred TB_KEY_CTRL_SLASH = TB_KEY_CTRL_6
pred TB_KEY_CTRL_UNDERSCORE = TB_KEY_CTRL_6
pred TB_KEY_SPACE = TB_KEY_CTRL_7
pred TB_KEY_BACKSPACE2 = TB_KEY_SPACE
pred TB_KEY_CTRL_8 = TB_KEY_SPACE
pred TB_KEY_MOUSE_WHEEL_DOWN = TB_KEY_BACKSPACE2
pred TB_KEY_MOUSE_WHEEL_UP = TB_KEY_MOUSE_WHEEL_DOWN
pred TB_KEY_MOUSE_RELEASE = TB_KEY_MOUSE_WHEEL_UP
pred TB_KEY_MOUSE_MIDDLE = TB_KEY_MOUSE_RELEASE
pred TB_KEY_MOUSE_RIGHT = TB_KEY_MOUSE_MIDDLE
pred TB_KEY_MOUSE_LEFT = TB_KEY_MOUSE_RIGHT
pred TB_KEY_ARROW_RIGHT = TB_KEY_MOUSE_LEFT
pred TB_KEY_ARROW_LEFT = TB_KEY_ARROW_RIGHT
pred TB_KEY_ARROW_DOWN = TB_KEY_ARROW_LEFT
pred TB_KEY_ARROW_UP = TB_KEY_ARROW_DOWN
pred TB_KEY_PGDN = TB_KEY_ARROW_UP
pred TB_KEY_PGUP = TB_KEY_PGDN
pred TB_KEY_END = TB_KEY_PGUP
pred TB_KEY_HOME = TB_KEY_END
pred TB_KEY_DELETE = TB_KEY_HOME
pred TB_KEY_INSERT = TB_KEY_DELETE
pred TB_KEY_F12 = TB_KEY_INSERT
pred TB_KEY_F11 = TB_KEY_F12
pred TB_KEY_F10 = TB_KEY_F11
pred TB_KEY_F9 = TB_KEY_F10
pred TB_KEY_F8 = TB_KEY_F9
pred TB_KEY_F7 = TB_KEY_F8
pred TB_KEY_F6 = TB_KEY_F7
pred TB_KEY_F5 = TB_KEY_F6
pred TB_KEY_F4 = TB_KEY_F5
pred TB_KEY_F3 = TB_KEY_F4
pred TB_KEY_F2 = TB_KEY_F3
pred TB_KEY_F1 = TB_KEY_F2
pred TB_KEY_CTRL_TILDE = error "Key.pred: TB_KEY_CTRL_TILDE has no predecessor"
pred TB_KEY_CTRL_2 = error "Key.pred: TB_KEY_CTRL_2 has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from TB_KEY_F1
fromEnum TB_KEY_CTRL_TILDE = 0
fromEnum TB_KEY_CTRL_2 = 0
fromEnum TB_KEY_CTRL_A = 1
fromEnum TB_KEY_CTRL_B = 2
fromEnum TB_KEY_CTRL_C = 3
fromEnum TB_KEY_CTRL_D = 4
fromEnum TB_KEY_CTRL_E = 5
fromEnum TB_KEY_CTRL_F = 6
fromEnum TB_KEY_CTRL_G = 7
fromEnum TB_KEY_BACKSPACE = 8
fromEnum TB_KEY_CTRL_H = 8
fromEnum TB_KEY_TAB = 9
fromEnum TB_KEY_CTRL_I = 9
fromEnum TB_KEY_CTRL_J = 10
fromEnum TB_KEY_CTRL_K = 11
fromEnum TB_KEY_CTRL_L = 12
fromEnum TB_KEY_ENTER = 13
fromEnum TB_KEY_CTRL_M = 13
fromEnum TB_KEY_CTRL_N = 14
fromEnum TB_KEY_CTRL_O = 15
fromEnum TB_KEY_CTRL_P = 16
fromEnum TB_KEY_CTRL_Q = 17
fromEnum TB_KEY_CTRL_R = 18
fromEnum TB_KEY_CTRL_S = 19
fromEnum TB_KEY_CTRL_T = 20
fromEnum TB_KEY_CTRL_U = 21
fromEnum TB_KEY_CTRL_V = 22
fromEnum TB_KEY_CTRL_W = 23
fromEnum TB_KEY_CTRL_X = 24
fromEnum TB_KEY_CTRL_Y = 25
fromEnum TB_KEY_CTRL_Z = 26
fromEnum TB_KEY_ESC = 27
fromEnum TB_KEY_CTRL_LSQ_BRACKET = 27
fromEnum TB_KEY_CTRL_3 = 27
fromEnum TB_KEY_CTRL_4 = 28
fromEnum TB_KEY_CTRL_BACKSLASH = 28
fromEnum TB_KEY_CTRL_5 = 29
fromEnum TB_KEY_CTRL_RSQ_BRACKET = 29
fromEnum TB_KEY_CTRL_6 = 30
fromEnum TB_KEY_CTRL_7 = 31
fromEnum TB_KEY_CTRL_SLASH = 31
fromEnum TB_KEY_CTRL_UNDERSCORE = 31
fromEnum TB_KEY_SPACE = 32
fromEnum TB_KEY_BACKSPACE2 = 127
fromEnum TB_KEY_CTRL_8 = 127
fromEnum TB_KEY_MOUSE_WHEEL_DOWN = 65508
fromEnum TB_KEY_MOUSE_WHEEL_UP = 65509
fromEnum TB_KEY_MOUSE_RELEASE = 65510
fromEnum TB_KEY_MOUSE_MIDDLE = 65511
fromEnum TB_KEY_MOUSE_RIGHT = 65512
fromEnum TB_KEY_MOUSE_LEFT = 65513
fromEnum TB_KEY_ARROW_RIGHT = 65514
fromEnum TB_KEY_ARROW_LEFT = 65515
fromEnum TB_KEY_ARROW_DOWN = 65516
fromEnum TB_KEY_ARROW_UP = 65517
fromEnum TB_KEY_PGDN = 65518
fromEnum TB_KEY_PGUP = 65519
fromEnum TB_KEY_END = 65520
fromEnum TB_KEY_HOME = 65521
fromEnum TB_KEY_DELETE = 65522
fromEnum TB_KEY_INSERT = 65523
fromEnum TB_KEY_F12 = 65524
fromEnum TB_KEY_F11 = 65525
fromEnum TB_KEY_F10 = 65526
fromEnum TB_KEY_F9 = 65527
fromEnum TB_KEY_F8 = 65528
fromEnum TB_KEY_F7 = 65529
fromEnum TB_KEY_F6 = 65530
fromEnum TB_KEY_F5 = 65531
fromEnum TB_KEY_F4 = 65532
fromEnum TB_KEY_F3 = 65533
fromEnum TB_KEY_F2 = 65534
fromEnum TB_KEY_F1 = 65535
toEnum 0 = TB_KEY_CTRL_TILDE
toEnum 1 = TB_KEY_CTRL_A
toEnum 2 = TB_KEY_CTRL_B
toEnum 3 = TB_KEY_CTRL_C
toEnum 4 = TB_KEY_CTRL_D
toEnum 5 = TB_KEY_CTRL_E
toEnum 6 = TB_KEY_CTRL_F
toEnum 7 = TB_KEY_CTRL_G
toEnum 8 = TB_KEY_BACKSPACE
toEnum 9 = TB_KEY_TAB
toEnum 10 = TB_KEY_CTRL_J
toEnum 11 = TB_KEY_CTRL_K
toEnum 12 = TB_KEY_CTRL_L
toEnum 13 = TB_KEY_ENTER
toEnum 14 = TB_KEY_CTRL_N
toEnum 15 = TB_KEY_CTRL_O
toEnum 16 = TB_KEY_CTRL_P
toEnum 17 = TB_KEY_CTRL_Q
toEnum 18 = TB_KEY_CTRL_R
toEnum 19 = TB_KEY_CTRL_S
toEnum 20 = TB_KEY_CTRL_T
toEnum 21 = TB_KEY_CTRL_U
toEnum 22 = TB_KEY_CTRL_V
toEnum 23 = TB_KEY_CTRL_W
toEnum 24 = TB_KEY_CTRL_X
toEnum 25 = TB_KEY_CTRL_Y
toEnum 26 = TB_KEY_CTRL_Z
toEnum 27 = TB_KEY_ESC
toEnum 28 = TB_KEY_CTRL_4
toEnum 29 = TB_KEY_CTRL_5
toEnum 30 = TB_KEY_CTRL_6
toEnum 31 = TB_KEY_CTRL_7
toEnum 32 = TB_KEY_SPACE
toEnum 127 = TB_KEY_BACKSPACE2
toEnum 65508 = TB_KEY_MOUSE_WHEEL_DOWN
toEnum 65509 = TB_KEY_MOUSE_WHEEL_UP
toEnum 65510 = TB_KEY_MOUSE_RELEASE
toEnum 65511 = TB_KEY_MOUSE_MIDDLE
toEnum 65512 = TB_KEY_MOUSE_RIGHT
toEnum 65513 = TB_KEY_MOUSE_LEFT
toEnum 65514 = TB_KEY_ARROW_RIGHT
toEnum 65515 = TB_KEY_ARROW_LEFT
toEnum 65516 = TB_KEY_ARROW_DOWN
toEnum 65517 = TB_KEY_ARROW_UP
toEnum 65518 = TB_KEY_PGDN
toEnum 65519 = TB_KEY_PGUP
toEnum 65520 = TB_KEY_END
toEnum 65521 = TB_KEY_HOME
toEnum 65522 = TB_KEY_DELETE
toEnum 65523 = TB_KEY_INSERT
toEnum 65524 = TB_KEY_F12
toEnum 65525 = TB_KEY_F11
toEnum 65526 = TB_KEY_F10
toEnum 65527 = TB_KEY_F9
toEnum 65528 = TB_KEY_F8
toEnum 65529 = TB_KEY_F7
toEnum 65530 = TB_KEY_F6
toEnum 65531 = TB_KEY_F5
toEnum 65532 = TB_KEY_F4
toEnum 65533 = TB_KEY_F3
toEnum 65534 = TB_KEY_F2
toEnum 65535 = TB_KEY_F1
toEnum unmatched = error ("Key.toEnum: Cannot match " ++ show unmatched)