3 # Emulation of has_key() function for platforms that don't use ncurses
8 # Table mapping curses keys to the terminfo capability name
11 _curses
.KEY_A1
: 'ka1',
12 _curses
.KEY_A3
: 'ka3',
13 _curses
.KEY_B2
: 'kb2',
14 _curses
.KEY_BACKSPACE
: 'kbs',
15 _curses
.KEY_BEG
: 'kbeg',
16 _curses
.KEY_BTAB
: 'kcbt',
17 _curses
.KEY_C1
: 'kc1',
18 _curses
.KEY_C3
: 'kc3',
19 _curses
.KEY_CANCEL
: 'kcan',
20 _curses
.KEY_CATAB
: 'ktbc',
21 _curses
.KEY_CLEAR
: 'kclr',
22 _curses
.KEY_CLOSE
: 'kclo',
23 _curses
.KEY_COMMAND
: 'kcmd',
24 _curses
.KEY_COPY
: 'kcpy',
25 _curses
.KEY_CREATE
: 'kcrt',
26 _curses
.KEY_CTAB
: 'kctab',
27 _curses
.KEY_DC
: 'kdch1',
28 _curses
.KEY_DL
: 'kdl1',
29 _curses
.KEY_DOWN
: 'kcud1',
30 _curses
.KEY_EIC
: 'krmir',
31 _curses
.KEY_END
: 'kend',
32 _curses
.KEY_ENTER
: 'kent',
33 _curses
.KEY_EOL
: 'kel',
34 _curses
.KEY_EOS
: 'ked',
35 _curses
.KEY_EXIT
: 'kext',
36 _curses
.KEY_F0
: 'kf0',
37 _curses
.KEY_F1
: 'kf1',
38 _curses
.KEY_F10
: 'kf10',
39 _curses
.KEY_F11
: 'kf11',
40 _curses
.KEY_F12
: 'kf12',
41 _curses
.KEY_F13
: 'kf13',
42 _curses
.KEY_F14
: 'kf14',
43 _curses
.KEY_F15
: 'kf15',
44 _curses
.KEY_F16
: 'kf16',
45 _curses
.KEY_F17
: 'kf17',
46 _curses
.KEY_F18
: 'kf18',
47 _curses
.KEY_F19
: 'kf19',
48 _curses
.KEY_F2
: 'kf2',
49 _curses
.KEY_F20
: 'kf20',
50 _curses
.KEY_F21
: 'kf21',
51 _curses
.KEY_F22
: 'kf22',
52 _curses
.KEY_F23
: 'kf23',
53 _curses
.KEY_F24
: 'kf24',
54 _curses
.KEY_F25
: 'kf25',
55 _curses
.KEY_F26
: 'kf26',
56 _curses
.KEY_F27
: 'kf27',
57 _curses
.KEY_F28
: 'kf28',
58 _curses
.KEY_F29
: 'kf29',
59 _curses
.KEY_F3
: 'kf3',
60 _curses
.KEY_F30
: 'kf30',
61 _curses
.KEY_F31
: 'kf31',
62 _curses
.KEY_F32
: 'kf32',
63 _curses
.KEY_F33
: 'kf33',
64 _curses
.KEY_F34
: 'kf34',
65 _curses
.KEY_F35
: 'kf35',
66 _curses
.KEY_F36
: 'kf36',
67 _curses
.KEY_F37
: 'kf37',
68 _curses
.KEY_F38
: 'kf38',
69 _curses
.KEY_F39
: 'kf39',
70 _curses
.KEY_F4
: 'kf4',
71 _curses
.KEY_F40
: 'kf40',
72 _curses
.KEY_F41
: 'kf41',
73 _curses
.KEY_F42
: 'kf42',
74 _curses
.KEY_F43
: 'kf43',
75 _curses
.KEY_F44
: 'kf44',
76 _curses
.KEY_F45
: 'kf45',
77 _curses
.KEY_F46
: 'kf46',
78 _curses
.KEY_F47
: 'kf47',
79 _curses
.KEY_F48
: 'kf48',
80 _curses
.KEY_F49
: 'kf49',
81 _curses
.KEY_F5
: 'kf5',
82 _curses
.KEY_F50
: 'kf50',
83 _curses
.KEY_F51
: 'kf51',
84 _curses
.KEY_F52
: 'kf52',
85 _curses
.KEY_F53
: 'kf53',
86 _curses
.KEY_F54
: 'kf54',
87 _curses
.KEY_F55
: 'kf55',
88 _curses
.KEY_F56
: 'kf56',
89 _curses
.KEY_F57
: 'kf57',
90 _curses
.KEY_F58
: 'kf58',
91 _curses
.KEY_F59
: 'kf59',
92 _curses
.KEY_F6
: 'kf6',
93 _curses
.KEY_F60
: 'kf60',
94 _curses
.KEY_F61
: 'kf61',
95 _curses
.KEY_F62
: 'kf62',
96 _curses
.KEY_F63
: 'kf63',
97 _curses
.KEY_F7
: 'kf7',
98 _curses
.KEY_F8
: 'kf8',
99 _curses
.KEY_F9
: 'kf9',
100 _curses
.KEY_FIND
: 'kfnd',
101 _curses
.KEY_HELP
: 'khlp',
102 _curses
.KEY_HOME
: 'khome',
103 _curses
.KEY_IC
: 'kich1',
104 _curses
.KEY_IL
: 'kil1',
105 _curses
.KEY_LEFT
: 'kcub1',
106 _curses
.KEY_LL
: 'kll',
107 _curses
.KEY_MARK
: 'kmrk',
108 _curses
.KEY_MESSAGE
: 'kmsg',
109 _curses
.KEY_MOVE
: 'kmov',
110 _curses
.KEY_NEXT
: 'knxt',
111 _curses
.KEY_NPAGE
: 'knp',
112 _curses
.KEY_OPEN
: 'kopn',
113 _curses
.KEY_OPTIONS
: 'kopt',
114 _curses
.KEY_PPAGE
: 'kpp',
115 _curses
.KEY_PREVIOUS
: 'kprv',
116 _curses
.KEY_PRINT
: 'kprt',
117 _curses
.KEY_REDO
: 'krdo',
118 _curses
.KEY_REFERENCE
: 'kref',
119 _curses
.KEY_REFRESH
: 'krfr',
120 _curses
.KEY_REPLACE
: 'krpl',
121 _curses
.KEY_RESTART
: 'krst',
122 _curses
.KEY_RESUME
: 'kres',
123 _curses
.KEY_RIGHT
: 'kcuf1',
124 _curses
.KEY_SAVE
: 'ksav',
125 _curses
.KEY_SBEG
: 'kBEG',
126 _curses
.KEY_SCANCEL
: 'kCAN',
127 _curses
.KEY_SCOMMAND
: 'kCMD',
128 _curses
.KEY_SCOPY
: 'kCPY',
129 _curses
.KEY_SCREATE
: 'kCRT',
130 _curses
.KEY_SDC
: 'kDC',
131 _curses
.KEY_SDL
: 'kDL',
132 _curses
.KEY_SELECT
: 'kslt',
133 _curses
.KEY_SEND
: 'kEND',
134 _curses
.KEY_SEOL
: 'kEOL',
135 _curses
.KEY_SEXIT
: 'kEXT',
136 _curses
.KEY_SF
: 'kind',
137 _curses
.KEY_SFIND
: 'kFND',
138 _curses
.KEY_SHELP
: 'kHLP',
139 _curses
.KEY_SHOME
: 'kHOM',
140 _curses
.KEY_SIC
: 'kIC',
141 _curses
.KEY_SLEFT
: 'kLFT',
142 _curses
.KEY_SMESSAGE
: 'kMSG',
143 _curses
.KEY_SMOVE
: 'kMOV',
144 _curses
.KEY_SNEXT
: 'kNXT',
145 _curses
.KEY_SOPTIONS
: 'kOPT',
146 _curses
.KEY_SPREVIOUS
: 'kPRV',
147 _curses
.KEY_SPRINT
: 'kPRT',
148 _curses
.KEY_SR
: 'kri',
149 _curses
.KEY_SREDO
: 'kRDO',
150 _curses
.KEY_SREPLACE
: 'kRPL',
151 _curses
.KEY_SRIGHT
: 'kRIT',
152 _curses
.KEY_SRSUME
: 'kRES',
153 _curses
.KEY_SSAVE
: 'kSAV',
154 _curses
.KEY_SSUSPEND
: 'kSPD',
155 _curses
.KEY_STAB
: 'khts',
156 _curses
.KEY_SUNDO
: 'kUND',
157 _curses
.KEY_SUSPEND
: 'kspd',
158 _curses
.KEY_UNDO
: 'kund',
159 _curses
.KEY_UP
: 'kcuu1'
163 if isinstance(ch
, str):
166 # Figure out the correct capability name for the keycode.
167 capability_name
= _capability_names
.get(ch
)
168 if capability_name
is None:
171 #Check the current terminal description for that capability;
172 #if present, return true, else return false.
173 if _curses
.tigetstr( capability_name
):
178 if __name__
== '__main__':
179 # Compare the output of this implementation and the ncurses has_key,
180 # on platforms where has_key is already available
184 for key
in _capability_names
.keys():
185 system
= key
in _curses
186 python
= has_key(key
)
188 L
.append( 'Mismatch for key %s, system=%i, Python=%i'
189 % (_curses
.keyname( key
), system
, python
) )