xref: /vim-8.2.3635/src/keymap.h (revision 445f11d5)
1edf3f97aSBram Moolenaar /* vi:set ts=8 sts=4 sw=4 noet:
2071d4279SBram Moolenaar  *
3071d4279SBram Moolenaar  * VIM - Vi IMproved	by Bram Moolenaar
4071d4279SBram Moolenaar  *
5071d4279SBram Moolenaar  * Do ":help uganda"  in Vim to read copying and usage conditions.
6071d4279SBram Moolenaar  * Do ":help credits" in Vim to see a list of people who contributed.
7071d4279SBram Moolenaar  */
8071d4279SBram Moolenaar 
9071d4279SBram Moolenaar /*
10071d4279SBram Moolenaar  * Keycode definitions for special keys.
11071d4279SBram Moolenaar  *
12071d4279SBram Moolenaar  * Any special key code sequences are replaced by these codes.
13071d4279SBram Moolenaar  */
14071d4279SBram Moolenaar 
15071d4279SBram Moolenaar /*
16b0bf8580SBram Moolenaar  * For MSDOS some keys produce codes larger than 0xff. They are split into two
17b0bf8580SBram Moolenaar  * chars, the first one is K_NUL (same value used in term.h).
18b0bf8580SBram Moolenaar  */
199bf703d4SBram Moolenaar #define K_NUL			(0xce)	// for MSDOS: special key follows
20b0bf8580SBram Moolenaar 
21b0bf8580SBram Moolenaar /*
22071d4279SBram Moolenaar  * K_SPECIAL is the first byte of a special key code and is always followed by
23071d4279SBram Moolenaar  * two bytes.
24071d4279SBram Moolenaar  * The second byte can have any value. ASCII is used for normal termcap
25071d4279SBram Moolenaar  * entries, 0x80 and higher for special keys, see below.
26071d4279SBram Moolenaar  * The third byte is guaranteed to be between 0x02 and 0x7f.
27071d4279SBram Moolenaar  */
28071d4279SBram Moolenaar 
29071d4279SBram Moolenaar #define K_SPECIAL		(0x80)
30071d4279SBram Moolenaar 
31071d4279SBram Moolenaar /*
32071d4279SBram Moolenaar  * Positive characters are "normal" characters.
33071d4279SBram Moolenaar  * Negative characters are special key codes.  Only characters below -0x200
34071d4279SBram Moolenaar  * are used to so that the absolute value can't be mistaken for a single-byte
35071d4279SBram Moolenaar  * character.
36071d4279SBram Moolenaar  */
37071d4279SBram Moolenaar #define IS_SPECIAL(c)		((c) < 0)
38071d4279SBram Moolenaar 
39071d4279SBram Moolenaar /*
40071d4279SBram Moolenaar  * Characters 0x0100 - 0x01ff have a special meaning for abbreviations.
41071d4279SBram Moolenaar  * Multi-byte characters also have ABBR_OFF added, thus are above 0x0200.
42071d4279SBram Moolenaar  */
43071d4279SBram Moolenaar #define ABBR_OFF		0x100
44071d4279SBram Moolenaar 
45071d4279SBram Moolenaar /*
46071d4279SBram Moolenaar  * NUL cannot be in the input string, therefore it is replaced by
47071d4279SBram Moolenaar  *	K_SPECIAL   KS_ZERO	KE_FILLER
48071d4279SBram Moolenaar  */
49071d4279SBram Moolenaar #define KS_ZERO			255
50071d4279SBram Moolenaar 
51071d4279SBram Moolenaar /*
52071d4279SBram Moolenaar  * K_SPECIAL cannot be in the input string, therefore it is replaced by
53071d4279SBram Moolenaar  *	K_SPECIAL   KS_SPECIAL	KE_FILLER
54071d4279SBram Moolenaar  */
55071d4279SBram Moolenaar #define KS_SPECIAL		254
56071d4279SBram Moolenaar 
57071d4279SBram Moolenaar /*
58071d4279SBram Moolenaar  * KS_EXTRA is used for keys that have no termcap name
59071d4279SBram Moolenaar  *	K_SPECIAL   KS_EXTRA	KE_xxx
60071d4279SBram Moolenaar  */
61071d4279SBram Moolenaar #define KS_EXTRA		253
62071d4279SBram Moolenaar 
63071d4279SBram Moolenaar /*
64071d4279SBram Moolenaar  * KS_MODIFIER is used when a modifier is given for a (special) key
65071d4279SBram Moolenaar  *	K_SPECIAL   KS_MODIFIER	bitmask
66071d4279SBram Moolenaar  */
67071d4279SBram Moolenaar #define KS_MODIFIER		252
68071d4279SBram Moolenaar 
69071d4279SBram Moolenaar /*
70071d4279SBram Moolenaar  * These are used for the GUI
71071d4279SBram Moolenaar  *	K_SPECIAL   KS_xxx	KE_FILLER
72071d4279SBram Moolenaar  */
73071d4279SBram Moolenaar #define KS_MOUSE		251
74071d4279SBram Moolenaar #define KS_MENU			250
75071d4279SBram Moolenaar #define KS_VER_SCROLLBAR	249
76071d4279SBram Moolenaar #define KS_HOR_SCROLLBAR	248
77071d4279SBram Moolenaar 
78071d4279SBram Moolenaar /*
79071d4279SBram Moolenaar  * These are used for DEC mouse
80071d4279SBram Moolenaar  */
81071d4279SBram Moolenaar #define KS_NETTERM_MOUSE	247
82071d4279SBram Moolenaar #define KS_DEC_MOUSE		246
83071d4279SBram Moolenaar 
84071d4279SBram Moolenaar /*
85071d4279SBram Moolenaar  * Used for switching Select mode back on after a mapping or menu.
86071d4279SBram Moolenaar  */
87071d4279SBram Moolenaar #define KS_SELECT		245
88071d4279SBram Moolenaar #define K_SELECT_STRING		(char_u *)"\200\365X"
89071d4279SBram Moolenaar 
90071d4279SBram Moolenaar /*
91071d4279SBram Moolenaar  * Used for tearing off a menu.
92071d4279SBram Moolenaar  */
93071d4279SBram Moolenaar #define KS_TEAROFF		244
94071d4279SBram Moolenaar 
959bf703d4SBram Moolenaar // Used for JSB term mouse.
96071d4279SBram Moolenaar #define KS_JSBTERM_MOUSE	243
97071d4279SBram Moolenaar 
989bf703d4SBram Moolenaar // Used a termcap entry that produces a normal character.
99071d4279SBram Moolenaar #define KS_KEY			242
100071d4279SBram Moolenaar 
1019bf703d4SBram Moolenaar // Used for the qnx pterm mouse.
102071d4279SBram Moolenaar #define KS_PTERM_MOUSE		241
103071d4279SBram Moolenaar 
1049bf703d4SBram Moolenaar // Used for click in a tab pages label.
10532466aa2SBram Moolenaar #define KS_TABLINE		240
10632466aa2SBram Moolenaar 
1079bf703d4SBram Moolenaar // Used for menu in a tab pages line.
108c542aef5SBram Moolenaar #define KS_TABMENU		239
109c542aef5SBram Moolenaar 
1109bf703d4SBram Moolenaar // Used for the urxvt mouse.
111c8427483SBram Moolenaar #define KS_URXVT_MOUSE		238
112c8427483SBram Moolenaar 
1139bf703d4SBram Moolenaar // Used for the sgr mouse.
1142b9578f0SBram Moolenaar #define KS_SGR_MOUSE		237
11588584985SBram Moolenaar #define KS_SGR_MOUSE_RELEASE	236
1162b9578f0SBram Moolenaar 
1179bf703d4SBram Moolenaar // Used for the GPM mouse.
118bedf091aSBram Moolenaar #define KS_GPM_MOUSE		235
119bedf091aSBram Moolenaar 
120071d4279SBram Moolenaar /*
121071d4279SBram Moolenaar  * Filler used after KS_SPECIAL and others
122071d4279SBram Moolenaar  */
123071d4279SBram Moolenaar #define KE_FILLER		('X')
124071d4279SBram Moolenaar 
125071d4279SBram Moolenaar /*
126071d4279SBram Moolenaar  * translation of three byte code "K_SPECIAL a b" into int "K_xxx" and back
127071d4279SBram Moolenaar  */
128071d4279SBram Moolenaar #define TERMCAP2KEY(a, b)	(-((a) + ((int)(b) << 8)))
129071d4279SBram Moolenaar #define KEY2TERMCAP0(x)		((-(x)) & 0xff)
130071d4279SBram Moolenaar #define KEY2TERMCAP1(x)		(((unsigned)(-(x)) >> 8) & 0xff)
131071d4279SBram Moolenaar 
132071d4279SBram Moolenaar /*
133071d4279SBram Moolenaar  * get second or third byte when translating special key code into three bytes
134071d4279SBram Moolenaar  */
135071d4279SBram Moolenaar #define K_SECOND(c)	((c) == K_SPECIAL ? KS_SPECIAL : (c) == NUL ? KS_ZERO : KEY2TERMCAP0(c))
136071d4279SBram Moolenaar 
137071d4279SBram Moolenaar #define K_THIRD(c)	(((c) == K_SPECIAL || (c) == NUL) ? KE_FILLER : KEY2TERMCAP1(c))
138071d4279SBram Moolenaar 
139071d4279SBram Moolenaar /*
140071d4279SBram Moolenaar  * get single int code from second byte after K_SPECIAL
141071d4279SBram Moolenaar  */
142071d4279SBram Moolenaar #define TO_SPECIAL(a, b)    ((a) == KS_SPECIAL ? K_SPECIAL : (a) == KS_ZERO ? K_ZERO : TERMCAP2KEY(a, b))
143071d4279SBram Moolenaar 
144071d4279SBram Moolenaar /*
145071d4279SBram Moolenaar  * Codes for keys that do not have a termcap name.
14688584985SBram Moolenaar  * The numbers are fixed to make sure that recorded key sequences remain valid.
14788584985SBram Moolenaar  * Add new entries at the end, not halfway.
148071d4279SBram Moolenaar  *
149071d4279SBram Moolenaar  * K_SPECIAL KS_EXTRA KE_xxx
150071d4279SBram Moolenaar  */
151071d4279SBram Moolenaar enum key_extra
152071d4279SBram Moolenaar {
1539bf703d4SBram Moolenaar     KE_NAME = 3		// name of this terminal entry
154071d4279SBram Moolenaar 
1559bf703d4SBram Moolenaar     , KE_S_UP = 4		// shift-up
1569bf703d4SBram Moolenaar     , KE_S_DOWN = 5		// shift-down
157071d4279SBram Moolenaar 
1589bf703d4SBram Moolenaar     , KE_S_F1 = 6		// shifted function keys
15988584985SBram Moolenaar     , KE_S_F2 = 7
16088584985SBram Moolenaar     , KE_S_F3 = 8
16188584985SBram Moolenaar     , KE_S_F4 = 9
16288584985SBram Moolenaar     , KE_S_F5 = 10
16388584985SBram Moolenaar     , KE_S_F6 = 11
16488584985SBram Moolenaar     , KE_S_F7 = 12
16588584985SBram Moolenaar     , KE_S_F8 = 13
16688584985SBram Moolenaar     , KE_S_F9 = 14
16788584985SBram Moolenaar     , KE_S_F10 = 15
168071d4279SBram Moolenaar 
16988584985SBram Moolenaar     , KE_S_F11 = 16
17088584985SBram Moolenaar     , KE_S_F12 = 17
17188584985SBram Moolenaar     , KE_S_F13 = 18
17288584985SBram Moolenaar     , KE_S_F14 = 19
17388584985SBram Moolenaar     , KE_S_F15 = 20
17488584985SBram Moolenaar     , KE_S_F16 = 21
17588584985SBram Moolenaar     , KE_S_F17 = 22
17688584985SBram Moolenaar     , KE_S_F18 = 23
17788584985SBram Moolenaar     , KE_S_F19 = 24
17888584985SBram Moolenaar     , KE_S_F20 = 25
179071d4279SBram Moolenaar 
18088584985SBram Moolenaar     , KE_S_F21 = 26
18188584985SBram Moolenaar     , KE_S_F22 = 27
18288584985SBram Moolenaar     , KE_S_F23 = 28
18388584985SBram Moolenaar     , KE_S_F24 = 29
18488584985SBram Moolenaar     , KE_S_F25 = 30
18588584985SBram Moolenaar     , KE_S_F26 = 31
18688584985SBram Moolenaar     , KE_S_F27 = 32
18788584985SBram Moolenaar     , KE_S_F28 = 33
18888584985SBram Moolenaar     , KE_S_F29 = 34
18988584985SBram Moolenaar     , KE_S_F30 = 35
190071d4279SBram Moolenaar 
19188584985SBram Moolenaar     , KE_S_F31 = 36
19288584985SBram Moolenaar     , KE_S_F32 = 37
19388584985SBram Moolenaar     , KE_S_F33 = 38
19488584985SBram Moolenaar     , KE_S_F34 = 39
19588584985SBram Moolenaar     , KE_S_F35 = 40
19688584985SBram Moolenaar     , KE_S_F36 = 41
19788584985SBram Moolenaar     , KE_S_F37 = 42
198071d4279SBram Moolenaar 
1999bf703d4SBram Moolenaar     , KE_MOUSE = 43		// mouse event start
200071d4279SBram Moolenaar 
201071d4279SBram Moolenaar /*
202071d4279SBram Moolenaar  * Symbols for pseudo keys which are translated from the real key symbols
203071d4279SBram Moolenaar  * above.
204071d4279SBram Moolenaar  */
2059bf703d4SBram Moolenaar     , KE_LEFTMOUSE = 44		// Left mouse button click
2069bf703d4SBram Moolenaar     , KE_LEFTDRAG = 45		// Drag with left mouse button down
2079bf703d4SBram Moolenaar     , KE_LEFTRELEASE = 46	// Left mouse button release
2089bf703d4SBram Moolenaar     , KE_MIDDLEMOUSE = 47	// Middle mouse button click
2099bf703d4SBram Moolenaar     , KE_MIDDLEDRAG = 48	// Drag with middle mouse button down
2109bf703d4SBram Moolenaar     , KE_MIDDLERELEASE = 49	// Middle mouse button release
2119bf703d4SBram Moolenaar     , KE_RIGHTMOUSE = 50	// Right mouse button click
2129bf703d4SBram Moolenaar     , KE_RIGHTDRAG = 51		// Drag with right mouse button down
2139bf703d4SBram Moolenaar     , KE_RIGHTRELEASE = 52	// Right mouse button release
214071d4279SBram Moolenaar 
2159bf703d4SBram Moolenaar     , KE_IGNORE = 53		// Ignored mouse drag/release
216071d4279SBram Moolenaar 
2179bf703d4SBram Moolenaar     , KE_TAB = 54		// unshifted TAB key
2189bf703d4SBram Moolenaar     , KE_S_TAB_OLD = 55		// shifted TAB key (no longer used)
219071d4279SBram Moolenaar 
2209bf703d4SBram Moolenaar     , KE_SNIFF_UNUSED = 56	// obsolete
2219bf703d4SBram Moolenaar     , KE_XF1 = 57		// extra vt100 function keys for xterm
22288584985SBram Moolenaar     , KE_XF2 = 58
22388584985SBram Moolenaar     , KE_XF3 = 59
22488584985SBram Moolenaar     , KE_XF4 = 60
2259bf703d4SBram Moolenaar     , KE_XEND = 61		// extra (vt100) end key for xterm
2269bf703d4SBram Moolenaar     , KE_ZEND = 62		// extra (vt100) end key for xterm
2279bf703d4SBram Moolenaar     , KE_XHOME = 63		// extra (vt100) home key for xterm
2289bf703d4SBram Moolenaar     , KE_ZHOME = 64		// extra (vt100) home key for xterm
2299bf703d4SBram Moolenaar     , KE_XUP = 65		// extra vt100 cursor keys for xterm
23088584985SBram Moolenaar     , KE_XDOWN = 66
23188584985SBram Moolenaar     , KE_XLEFT = 67
23288584985SBram Moolenaar     , KE_XRIGHT = 68
233071d4279SBram Moolenaar 
2349bf703d4SBram Moolenaar     , KE_LEFTMOUSE_NM = 69	// non-mappable Left mouse button click
2359bf703d4SBram Moolenaar     , KE_LEFTRELEASE_NM = 70	// non-mappable left mouse button release
236071d4279SBram Moolenaar 
2379bf703d4SBram Moolenaar     , KE_S_XF1 = 71		// vt100 shifted function keys for xterm
23888584985SBram Moolenaar     , KE_S_XF2 = 72
23988584985SBram Moolenaar     , KE_S_XF3 = 73
24088584985SBram Moolenaar     , KE_S_XF4 = 74
241071d4279SBram Moolenaar 
2429bf703d4SBram Moolenaar     // NOTE: The scroll wheel events are inverted: i.e. UP is the same as
2439bf703d4SBram Moolenaar     // moving the actual scroll wheel down, LEFT is the same as moving the
2449bf703d4SBram Moolenaar     // scroll wheel right.
2459bf703d4SBram Moolenaar     , KE_MOUSEDOWN = 75		// scroll wheel pseudo-button Down
2469bf703d4SBram Moolenaar     , KE_MOUSEUP = 76		// scroll wheel pseudo-button Up
2479bf703d4SBram Moolenaar     , KE_MOUSELEFT = 77		// scroll wheel pseudo-button Left
2489bf703d4SBram Moolenaar     , KE_MOUSERIGHT = 78	// scroll wheel pseudo-button Right
249071d4279SBram Moolenaar 
2509bf703d4SBram Moolenaar     , KE_KINS = 79		// keypad Insert key
2519bf703d4SBram Moolenaar     , KE_KDEL = 80		// keypad Delete key
252071d4279SBram Moolenaar 
2539bf703d4SBram Moolenaar     , KE_CSI = 81		// CSI typed directly
2549bf703d4SBram Moolenaar     , KE_SNR = 82		// <SNR>
2559bf703d4SBram Moolenaar     , KE_PLUG = 83		// <Plug>
2569bf703d4SBram Moolenaar     , KE_CMDWIN = 84		// open command-line window from Command-line Mode
257071d4279SBram Moolenaar 
2589bf703d4SBram Moolenaar     , KE_C_LEFT = 85		// control-left
2599bf703d4SBram Moolenaar     , KE_C_RIGHT = 86		// control-right
2609bf703d4SBram Moolenaar     , KE_C_HOME = 87		// control-home
2619bf703d4SBram Moolenaar     , KE_C_END = 88		// control-end
262071d4279SBram Moolenaar 
2639bf703d4SBram Moolenaar     , KE_X1MOUSE = 89		// X1/X2 mouse-buttons
26488584985SBram Moolenaar     , KE_X1DRAG = 90
26588584985SBram Moolenaar     , KE_X1RELEASE = 91
26688584985SBram Moolenaar     , KE_X2MOUSE = 92
26788584985SBram Moolenaar     , KE_X2DRAG = 93
26888584985SBram Moolenaar     , KE_X2RELEASE = 94
269071d4279SBram Moolenaar 
2709bf703d4SBram Moolenaar     , KE_DROP = 95		// DnD data is available
2719bf703d4SBram Moolenaar     , KE_CURSORHOLD = 96	// CursorHold event
2729bf703d4SBram Moolenaar     , KE_NOP = 97		// doesn't do something
2739bf703d4SBram Moolenaar     , KE_FOCUSGAINED = 98	// focus gained
2749bf703d4SBram Moolenaar     , KE_FOCUSLOST = 99		// focus lost
2759bf703d4SBram Moolenaar     , KE_MOUSEMOVE = 100	// mouse moved with no button down
276*445f11d5SBram Moolenaar     , KE_MOUSEMOVE_XY = 101	// KE_MOUSEMOVE with coordinates
277*445f11d5SBram Moolenaar     , KE_CANCEL = 102		// return from vgetc()
278*445f11d5SBram Moolenaar     , KE_COMMAND = 103		// <Cmd> special key
279071d4279SBram Moolenaar };
280071d4279SBram Moolenaar 
281071d4279SBram Moolenaar /*
282071d4279SBram Moolenaar  * the three byte codes are replaced with the following int when using vgetc()
283071d4279SBram Moolenaar  */
284071d4279SBram Moolenaar #define K_ZERO		TERMCAP2KEY(KS_ZERO, KE_FILLER)
285071d4279SBram Moolenaar 
286071d4279SBram Moolenaar #define K_UP		TERMCAP2KEY('k', 'u')
287071d4279SBram Moolenaar #define K_DOWN		TERMCAP2KEY('k', 'd')
288071d4279SBram Moolenaar #define K_LEFT		TERMCAP2KEY('k', 'l')
289071d4279SBram Moolenaar #define K_RIGHT		TERMCAP2KEY('k', 'r')
290071d4279SBram Moolenaar #define K_S_UP		TERMCAP2KEY(KS_EXTRA, KE_S_UP)
291071d4279SBram Moolenaar #define K_S_DOWN	TERMCAP2KEY(KS_EXTRA, KE_S_DOWN)
292071d4279SBram Moolenaar #define K_S_LEFT	TERMCAP2KEY('#', '4')
293071d4279SBram Moolenaar #define K_C_LEFT	TERMCAP2KEY(KS_EXTRA, KE_C_LEFT)
294071d4279SBram Moolenaar #define K_S_RIGHT	TERMCAP2KEY('%', 'i')
295071d4279SBram Moolenaar #define K_C_RIGHT	TERMCAP2KEY(KS_EXTRA, KE_C_RIGHT)
296071d4279SBram Moolenaar #define K_S_HOME	TERMCAP2KEY('#', '2')
297071d4279SBram Moolenaar #define K_C_HOME	TERMCAP2KEY(KS_EXTRA, KE_C_HOME)
298071d4279SBram Moolenaar #define K_S_END		TERMCAP2KEY('*', '7')
299071d4279SBram Moolenaar #define K_C_END		TERMCAP2KEY(KS_EXTRA, KE_C_END)
300071d4279SBram Moolenaar #define K_TAB		TERMCAP2KEY(KS_EXTRA, KE_TAB)
301071d4279SBram Moolenaar #define K_S_TAB		TERMCAP2KEY('k', 'B')
302071d4279SBram Moolenaar 
3039bf703d4SBram Moolenaar // extra set of function keys F1-F4, for vt100 compatible xterm
304071d4279SBram Moolenaar #define K_XF1		TERMCAP2KEY(KS_EXTRA, KE_XF1)
305071d4279SBram Moolenaar #define K_XF2		TERMCAP2KEY(KS_EXTRA, KE_XF2)
306071d4279SBram Moolenaar #define K_XF3		TERMCAP2KEY(KS_EXTRA, KE_XF3)
307071d4279SBram Moolenaar #define K_XF4		TERMCAP2KEY(KS_EXTRA, KE_XF4)
308071d4279SBram Moolenaar 
3099bf703d4SBram Moolenaar // extra set of cursor keys for vt100 compatible xterm
310bc7aa85dSBram Moolenaar #define K_XUP		TERMCAP2KEY(KS_EXTRA, KE_XUP)
311bc7aa85dSBram Moolenaar #define K_XDOWN		TERMCAP2KEY(KS_EXTRA, KE_XDOWN)
312bc7aa85dSBram Moolenaar #define K_XLEFT		TERMCAP2KEY(KS_EXTRA, KE_XLEFT)
313bc7aa85dSBram Moolenaar #define K_XRIGHT	TERMCAP2KEY(KS_EXTRA, KE_XRIGHT)
314bc7aa85dSBram Moolenaar 
3159bf703d4SBram Moolenaar #define K_F1		TERMCAP2KEY('k', '1')	// function keys
316071d4279SBram Moolenaar #define K_F2		TERMCAP2KEY('k', '2')
317071d4279SBram Moolenaar #define K_F3		TERMCAP2KEY('k', '3')
318071d4279SBram Moolenaar #define K_F4		TERMCAP2KEY('k', '4')
319071d4279SBram Moolenaar #define K_F5		TERMCAP2KEY('k', '5')
320071d4279SBram Moolenaar #define K_F6		TERMCAP2KEY('k', '6')
321071d4279SBram Moolenaar #define K_F7		TERMCAP2KEY('k', '7')
322071d4279SBram Moolenaar #define K_F8		TERMCAP2KEY('k', '8')
323071d4279SBram Moolenaar #define K_F9		TERMCAP2KEY('k', '9')
324071d4279SBram Moolenaar #define K_F10		TERMCAP2KEY('k', ';')
325071d4279SBram Moolenaar 
326071d4279SBram Moolenaar #define K_F11		TERMCAP2KEY('F', '1')
327071d4279SBram Moolenaar #define K_F12		TERMCAP2KEY('F', '2')
328071d4279SBram Moolenaar #define K_F13		TERMCAP2KEY('F', '3')
329071d4279SBram Moolenaar #define K_F14		TERMCAP2KEY('F', '4')
330071d4279SBram Moolenaar #define K_F15		TERMCAP2KEY('F', '5')
331071d4279SBram Moolenaar #define K_F16		TERMCAP2KEY('F', '6')
332071d4279SBram Moolenaar #define K_F17		TERMCAP2KEY('F', '7')
333071d4279SBram Moolenaar #define K_F18		TERMCAP2KEY('F', '8')
334071d4279SBram Moolenaar #define K_F19		TERMCAP2KEY('F', '9')
335071d4279SBram Moolenaar #define K_F20		TERMCAP2KEY('F', 'A')
336071d4279SBram Moolenaar 
337071d4279SBram Moolenaar #define K_F21		TERMCAP2KEY('F', 'B')
338071d4279SBram Moolenaar #define K_F22		TERMCAP2KEY('F', 'C')
339071d4279SBram Moolenaar #define K_F23		TERMCAP2KEY('F', 'D')
340071d4279SBram Moolenaar #define K_F24		TERMCAP2KEY('F', 'E')
341071d4279SBram Moolenaar #define K_F25		TERMCAP2KEY('F', 'F')
342071d4279SBram Moolenaar #define K_F26		TERMCAP2KEY('F', 'G')
343071d4279SBram Moolenaar #define K_F27		TERMCAP2KEY('F', 'H')
344071d4279SBram Moolenaar #define K_F28		TERMCAP2KEY('F', 'I')
345071d4279SBram Moolenaar #define K_F29		TERMCAP2KEY('F', 'J')
346071d4279SBram Moolenaar #define K_F30		TERMCAP2KEY('F', 'K')
347071d4279SBram Moolenaar 
348071d4279SBram Moolenaar #define K_F31		TERMCAP2KEY('F', 'L')
349071d4279SBram Moolenaar #define K_F32		TERMCAP2KEY('F', 'M')
350071d4279SBram Moolenaar #define K_F33		TERMCAP2KEY('F', 'N')
351071d4279SBram Moolenaar #define K_F34		TERMCAP2KEY('F', 'O')
352071d4279SBram Moolenaar #define K_F35		TERMCAP2KEY('F', 'P')
353071d4279SBram Moolenaar #define K_F36		TERMCAP2KEY('F', 'Q')
354071d4279SBram Moolenaar #define K_F37		TERMCAP2KEY('F', 'R')
355071d4279SBram Moolenaar 
3569bf703d4SBram Moolenaar // extra set of shifted function keys F1-F4, for vt100 compatible xterm
357071d4279SBram Moolenaar #define K_S_XF1		TERMCAP2KEY(KS_EXTRA, KE_S_XF1)
358071d4279SBram Moolenaar #define K_S_XF2		TERMCAP2KEY(KS_EXTRA, KE_S_XF2)
359071d4279SBram Moolenaar #define K_S_XF3		TERMCAP2KEY(KS_EXTRA, KE_S_XF3)
360071d4279SBram Moolenaar #define K_S_XF4		TERMCAP2KEY(KS_EXTRA, KE_S_XF4)
361071d4279SBram Moolenaar 
3629bf703d4SBram Moolenaar #define K_S_F1		TERMCAP2KEY(KS_EXTRA, KE_S_F1)	// shifted func. keys
363071d4279SBram Moolenaar #define K_S_F2		TERMCAP2KEY(KS_EXTRA, KE_S_F2)
364071d4279SBram Moolenaar #define K_S_F3		TERMCAP2KEY(KS_EXTRA, KE_S_F3)
365071d4279SBram Moolenaar #define K_S_F4		TERMCAP2KEY(KS_EXTRA, KE_S_F4)
366071d4279SBram Moolenaar #define K_S_F5		TERMCAP2KEY(KS_EXTRA, KE_S_F5)
367071d4279SBram Moolenaar #define K_S_F6		TERMCAP2KEY(KS_EXTRA, KE_S_F6)
368071d4279SBram Moolenaar #define K_S_F7		TERMCAP2KEY(KS_EXTRA, KE_S_F7)
369071d4279SBram Moolenaar #define K_S_F8		TERMCAP2KEY(KS_EXTRA, KE_S_F8)
370071d4279SBram Moolenaar #define K_S_F9		TERMCAP2KEY(KS_EXTRA, KE_S_F9)
371071d4279SBram Moolenaar #define K_S_F10		TERMCAP2KEY(KS_EXTRA, KE_S_F10)
372071d4279SBram Moolenaar 
373071d4279SBram Moolenaar #define K_S_F11		TERMCAP2KEY(KS_EXTRA, KE_S_F11)
374071d4279SBram Moolenaar #define K_S_F12		TERMCAP2KEY(KS_EXTRA, KE_S_F12)
3759bf703d4SBram Moolenaar // K_S_F13 to K_S_F37  are currently not used
376071d4279SBram Moolenaar 
377071d4279SBram Moolenaar #define K_HELP		TERMCAP2KEY('%', '1')
378071d4279SBram Moolenaar #define K_UNDO		TERMCAP2KEY('&', '8')
379071d4279SBram Moolenaar 
380071d4279SBram Moolenaar #define K_BS		TERMCAP2KEY('k', 'b')
381071d4279SBram Moolenaar 
382071d4279SBram Moolenaar #define K_INS		TERMCAP2KEY('k', 'I')
383071d4279SBram Moolenaar #define K_KINS		TERMCAP2KEY(KS_EXTRA, KE_KINS)
384071d4279SBram Moolenaar #define K_DEL		TERMCAP2KEY('k', 'D')
385071d4279SBram Moolenaar #define K_KDEL		TERMCAP2KEY(KS_EXTRA, KE_KDEL)
386071d4279SBram Moolenaar #define K_HOME		TERMCAP2KEY('k', 'h')
3879bf703d4SBram Moolenaar #define K_KHOME		TERMCAP2KEY('K', '1')	// keypad home (upper left)
388071d4279SBram Moolenaar #define K_XHOME		TERMCAP2KEY(KS_EXTRA, KE_XHOME)
38968b76a69SBram Moolenaar #define K_ZHOME		TERMCAP2KEY(KS_EXTRA, KE_ZHOME)
390071d4279SBram Moolenaar #define K_END		TERMCAP2KEY('@', '7')
3919bf703d4SBram Moolenaar #define K_KEND		TERMCAP2KEY('K', '4')	// keypad end (lower left)
392071d4279SBram Moolenaar #define K_XEND		TERMCAP2KEY(KS_EXTRA, KE_XEND)
39368b76a69SBram Moolenaar #define K_ZEND		TERMCAP2KEY(KS_EXTRA, KE_ZEND)
394071d4279SBram Moolenaar #define K_PAGEUP	TERMCAP2KEY('k', 'P')
395071d4279SBram Moolenaar #define K_PAGEDOWN	TERMCAP2KEY('k', 'N')
3969bf703d4SBram Moolenaar #define K_KPAGEUP	TERMCAP2KEY('K', '3')	// keypad pageup (upper R.)
3979bf703d4SBram Moolenaar #define K_KPAGEDOWN	TERMCAP2KEY('K', '5')	// keypad pagedown (lower R.)
398071d4279SBram Moolenaar 
3999bf703d4SBram Moolenaar #define K_KPLUS		TERMCAP2KEY('K', '6')	// keypad plus
4009bf703d4SBram Moolenaar #define K_KMINUS	TERMCAP2KEY('K', '7')	// keypad minus
4019bf703d4SBram Moolenaar #define K_KDIVIDE	TERMCAP2KEY('K', '8')	// keypad /
4029bf703d4SBram Moolenaar #define K_KMULTIPLY	TERMCAP2KEY('K', '9')	// keypad *
4039bf703d4SBram Moolenaar #define K_KENTER	TERMCAP2KEY('K', 'A')	// keypad Enter
4049bf703d4SBram Moolenaar #define K_KPOINT	TERMCAP2KEY('K', 'B')	// keypad . or ,
4059bf703d4SBram Moolenaar #define K_PS		TERMCAP2KEY('P', 'S')	// paste start
4069bf703d4SBram Moolenaar #define K_PE		TERMCAP2KEY('P', 'E')	// paste end
407071d4279SBram Moolenaar 
4089bf703d4SBram Moolenaar #define K_K0		TERMCAP2KEY('K', 'C')	// keypad 0
4099bf703d4SBram Moolenaar #define K_K1		TERMCAP2KEY('K', 'D')	// keypad 1
4109bf703d4SBram Moolenaar #define K_K2		TERMCAP2KEY('K', 'E')	// keypad 2
4119bf703d4SBram Moolenaar #define K_K3		TERMCAP2KEY('K', 'F')	// keypad 3
4129bf703d4SBram Moolenaar #define K_K4		TERMCAP2KEY('K', 'G')	// keypad 4
4139bf703d4SBram Moolenaar #define K_K5		TERMCAP2KEY('K', 'H')	// keypad 5
4149bf703d4SBram Moolenaar #define K_K6		TERMCAP2KEY('K', 'I')	// keypad 6
4159bf703d4SBram Moolenaar #define K_K7		TERMCAP2KEY('K', 'J')	// keypad 7
4169bf703d4SBram Moolenaar #define K_K8		TERMCAP2KEY('K', 'K')	// keypad 8
4179bf703d4SBram Moolenaar #define K_K9		TERMCAP2KEY('K', 'L')	// keypad 9
418071d4279SBram Moolenaar 
419071d4279SBram Moolenaar #define K_MOUSE		TERMCAP2KEY(KS_MOUSE, KE_FILLER)
420071d4279SBram Moolenaar #define K_MENU		TERMCAP2KEY(KS_MENU, KE_FILLER)
421071d4279SBram Moolenaar #define K_VER_SCROLLBAR	TERMCAP2KEY(KS_VER_SCROLLBAR, KE_FILLER)
422071d4279SBram Moolenaar #define K_HOR_SCROLLBAR   TERMCAP2KEY(KS_HOR_SCROLLBAR, KE_FILLER)
423071d4279SBram Moolenaar 
424071d4279SBram Moolenaar #define K_NETTERM_MOUSE	TERMCAP2KEY(KS_NETTERM_MOUSE, KE_FILLER)
425071d4279SBram Moolenaar #define K_DEC_MOUSE	TERMCAP2KEY(KS_DEC_MOUSE, KE_FILLER)
426071d4279SBram Moolenaar #define K_JSBTERM_MOUSE	TERMCAP2KEY(KS_JSBTERM_MOUSE, KE_FILLER)
427071d4279SBram Moolenaar #define K_PTERM_MOUSE	TERMCAP2KEY(KS_PTERM_MOUSE, KE_FILLER)
4285af7d712SBram Moolenaar #define K_URXVT_MOUSE	TERMCAP2KEY(KS_URXVT_MOUSE, KE_FILLER)
4292b9578f0SBram Moolenaar #define K_SGR_MOUSE	TERMCAP2KEY(KS_SGR_MOUSE, KE_FILLER)
430a529ce06SBram Moolenaar #define K_SGR_MOUSERELEASE TERMCAP2KEY(KS_SGR_MOUSE_RELEASE, KE_FILLER)
431071d4279SBram Moolenaar 
432071d4279SBram Moolenaar #define K_SELECT	TERMCAP2KEY(KS_SELECT, KE_FILLER)
433071d4279SBram Moolenaar #define K_TEAROFF	TERMCAP2KEY(KS_TEAROFF, KE_FILLER)
434071d4279SBram Moolenaar 
43532466aa2SBram Moolenaar #define K_TABLINE	TERMCAP2KEY(KS_TABLINE, KE_FILLER)
436c542aef5SBram Moolenaar #define K_TABMENU	TERMCAP2KEY(KS_TABMENU, KE_FILLER)
43732466aa2SBram Moolenaar 
438071d4279SBram Moolenaar /*
439071d4279SBram Moolenaar  * Symbols for pseudo keys which are translated from the real key symbols
440071d4279SBram Moolenaar  * above.
441071d4279SBram Moolenaar  */
442071d4279SBram Moolenaar #define K_LEFTMOUSE	TERMCAP2KEY(KS_EXTRA, KE_LEFTMOUSE)
443071d4279SBram Moolenaar #define K_LEFTMOUSE_NM	TERMCAP2KEY(KS_EXTRA, KE_LEFTMOUSE_NM)
444071d4279SBram Moolenaar #define K_LEFTDRAG	TERMCAP2KEY(KS_EXTRA, KE_LEFTDRAG)
445071d4279SBram Moolenaar #define K_LEFTRELEASE	TERMCAP2KEY(KS_EXTRA, KE_LEFTRELEASE)
446071d4279SBram Moolenaar #define K_LEFTRELEASE_NM TERMCAP2KEY(KS_EXTRA, KE_LEFTRELEASE_NM)
44751b0f370SBram Moolenaar #define K_MOUSEMOVE	TERMCAP2KEY(KS_EXTRA, KE_MOUSEMOVE)
448071d4279SBram Moolenaar #define K_MIDDLEMOUSE	TERMCAP2KEY(KS_EXTRA, KE_MIDDLEMOUSE)
449071d4279SBram Moolenaar #define K_MIDDLEDRAG	TERMCAP2KEY(KS_EXTRA, KE_MIDDLEDRAG)
450071d4279SBram Moolenaar #define K_MIDDLERELEASE	TERMCAP2KEY(KS_EXTRA, KE_MIDDLERELEASE)
451071d4279SBram Moolenaar #define K_RIGHTMOUSE	TERMCAP2KEY(KS_EXTRA, KE_RIGHTMOUSE)
452071d4279SBram Moolenaar #define K_RIGHTDRAG	TERMCAP2KEY(KS_EXTRA, KE_RIGHTDRAG)
453071d4279SBram Moolenaar #define K_RIGHTRELEASE	TERMCAP2KEY(KS_EXTRA, KE_RIGHTRELEASE)
454071d4279SBram Moolenaar #define K_X1MOUSE	TERMCAP2KEY(KS_EXTRA, KE_X1MOUSE)
455071d4279SBram Moolenaar #define K_X1MOUSE	TERMCAP2KEY(KS_EXTRA, KE_X1MOUSE)
456071d4279SBram Moolenaar #define K_X1DRAG	TERMCAP2KEY(KS_EXTRA, KE_X1DRAG)
457071d4279SBram Moolenaar #define K_X1RELEASE     TERMCAP2KEY(KS_EXTRA, KE_X1RELEASE)
458071d4279SBram Moolenaar #define K_X2MOUSE	TERMCAP2KEY(KS_EXTRA, KE_X2MOUSE)
459071d4279SBram Moolenaar #define K_X2DRAG	TERMCAP2KEY(KS_EXTRA, KE_X2DRAG)
460071d4279SBram Moolenaar #define K_X2RELEASE     TERMCAP2KEY(KS_EXTRA, KE_X2RELEASE)
461071d4279SBram Moolenaar 
462071d4279SBram Moolenaar #define K_IGNORE	TERMCAP2KEY(KS_EXTRA, KE_IGNORE)
463ebefac63SBram Moolenaar #define K_NOP		TERMCAP2KEY(KS_EXTRA, KE_NOP)
464b2ac14c0SBram Moolenaar #define K_CANCEL	TERMCAP2KEY(KS_EXTRA, KE_CANCEL)
465071d4279SBram Moolenaar 
466071d4279SBram Moolenaar #define K_MOUSEDOWN	TERMCAP2KEY(KS_EXTRA, KE_MOUSEDOWN)
467071d4279SBram Moolenaar #define K_MOUSEUP	TERMCAP2KEY(KS_EXTRA, KE_MOUSEUP)
4688d9b40e7SBram Moolenaar #define K_MOUSELEFT	TERMCAP2KEY(KS_EXTRA, KE_MOUSELEFT)
4698d9b40e7SBram Moolenaar #define K_MOUSERIGHT	TERMCAP2KEY(KS_EXTRA, KE_MOUSERIGHT)
470071d4279SBram Moolenaar 
471071d4279SBram Moolenaar #define K_CSI		TERMCAP2KEY(KS_EXTRA, KE_CSI)
472071d4279SBram Moolenaar #define K_SNR		TERMCAP2KEY(KS_EXTRA, KE_SNR)
473071d4279SBram Moolenaar #define K_PLUG		TERMCAP2KEY(KS_EXTRA, KE_PLUG)
474071d4279SBram Moolenaar #define K_CMDWIN	TERMCAP2KEY(KS_EXTRA, KE_CMDWIN)
475071d4279SBram Moolenaar 
476071d4279SBram Moolenaar #define K_DROP		TERMCAP2KEY(KS_EXTRA, KE_DROP)
4779c8791fdSBram Moolenaar #define K_FOCUSGAINED	TERMCAP2KEY(KS_EXTRA, KE_FOCUSGAINED)
4789c8791fdSBram Moolenaar #define K_FOCUSLOST	TERMCAP2KEY(KS_EXTRA, KE_FOCUSLOST)
479071d4279SBram Moolenaar 
4803918c950SBram Moolenaar #define K_CURSORHOLD	TERMCAP2KEY(KS_EXTRA, KE_CURSORHOLD)
4813918c950SBram Moolenaar 
482957cf67dSBram Moolenaar #define K_COMMAND	TERMCAP2KEY(KS_EXTRA, KE_COMMAND)
483957cf67dSBram Moolenaar 
4849bf703d4SBram Moolenaar // Bits for modifier mask
4859bf703d4SBram Moolenaar // 0x01 cannot be used, because the modifier must be 0x02 or higher
486071d4279SBram Moolenaar #define MOD_MASK_SHIFT	    0x02
487071d4279SBram Moolenaar #define MOD_MASK_CTRL	    0x04
4889bf703d4SBram Moolenaar #define MOD_MASK_ALT	    0x08	// aka META
4899bf703d4SBram Moolenaar #define MOD_MASK_META	    0x10	// META when it's different from ALT
4909bf703d4SBram Moolenaar #define MOD_MASK_2CLICK	    0x20	// use MOD_MASK_MULTI_CLICK
4919bf703d4SBram Moolenaar #define MOD_MASK_3CLICK	    0x40	// use MOD_MASK_MULTI_CLICK
4929bf703d4SBram Moolenaar #define MOD_MASK_4CLICK	    0x60	// use MOD_MASK_MULTI_CLICK
493d057301bSBram Moolenaar #ifdef MACOS_X
494071d4279SBram Moolenaar # define MOD_MASK_CMD	    0x80
495071d4279SBram Moolenaar #endif
496071d4279SBram Moolenaar 
497071d4279SBram Moolenaar #define MOD_MASK_MULTI_CLICK	(MOD_MASK_2CLICK|MOD_MASK_3CLICK|MOD_MASK_4CLICK)
498071d4279SBram Moolenaar 
499071d4279SBram Moolenaar /*
500071d4279SBram Moolenaar  * The length of the longest special key name, including modifiers.
501423977d3SBram Moolenaar  * Current longest is <M-C-S-T-D-A-4-ScrollWheelRight> (length includes '<' and
502423977d3SBram Moolenaar  * '>').
503071d4279SBram Moolenaar  */
504423977d3SBram Moolenaar #define MAX_KEY_NAME_LEN    32
505071d4279SBram Moolenaar 
5069bf703d4SBram Moolenaar /*
5079bf703d4SBram Moolenaar  * Maximum length of a special key event as tokens.  This includes modifiers.
50819a09a18SBram Moolenaar  * The longest event is something like <M-C-S-T-4-LeftDrag> which would be the
509071d4279SBram Moolenaar  * following string of tokens:
510071d4279SBram Moolenaar  *
511071d4279SBram Moolenaar  * <K_SPECIAL> <KS_MODIFIER> bitmask <K_SPECIAL> <KS_EXTRA> <KT_LEFTDRAG>.
512071d4279SBram Moolenaar  *
513071d4279SBram Moolenaar  * This is a total of 6 tokens, and is currently the longest one possible.
514071d4279SBram Moolenaar  */
515071d4279SBram Moolenaar #define MAX_KEY_CODE_LEN    6
516