Notcurses 3.0.13
a blingful library for TUIs and character graphics
Loading...
Searching...
No Matches
nckeys.h
Go to the documentation of this file.
1#ifndef NOTCURSES_NCKEYS
2#define NOTCURSES_NCKEYS
3
4#include <stdint.h>
5#include <stdbool.h>
6
7#ifdef __cplusplus
8extern "C" {
9#endif
10
11#ifdef NOTCURSES_FFI
12#define static API
13#endif
14
15#ifndef __MINGW32__
16#define API __attribute__((visibility("default")))
17#else
18#define API __declspec(dllexport)
19#endif
20#define ALLOC __attribute__((malloc)) __attribute__((warn_unused_result))
21
22// Synthesized input events, i.e. any input event we can report that isn't
23// representative of some Unicode. This covers both keyboard and mouse events,
24// as well as signals and even window events.
25
26// Rather than using one of the Private Use Areas of Unicode, we use the area
27// beyond the 17 65536-entry Planes (1114112). We round up to 5000 so that it's
28// trivial to identify synthesized characters based on their numeric definition
29// here. This is safe, since we needn't convert these synthesized characters
30// into UTF8 (they would otherwise require more than four bytes).
31#define PRETERUNICODEBASE 1115000
32#define preterunicode(w) ((w) + PRETERUNICODEBASE)
33
34// Special composed key definitions. These values are added to 0x100000.
35#define NCKEY_INVALID preterunicode(0)
36#define NCKEY_RESIZE preterunicode(1) // we received SIGWINCH
37#define NCKEY_UP preterunicode(2)
38#define NCKEY_RIGHT preterunicode(3)
39#define NCKEY_DOWN preterunicode(4)
40#define NCKEY_LEFT preterunicode(5)
41#define NCKEY_INS preterunicode(6)
42#define NCKEY_DEL preterunicode(7)
43#define NCKEY_BACKSPACE preterunicode(8) // backspace (sometimes)
44#define NCKEY_PGDOWN preterunicode(9)
45#define NCKEY_PGUP preterunicode(10)
46#define NCKEY_HOME preterunicode(11)
47#define NCKEY_END preterunicode(12)
48#define NCKEY_F00 preterunicode(20)
49#define NCKEY_F01 preterunicode(21)
50#define NCKEY_F02 preterunicode(22)
51#define NCKEY_F03 preterunicode(23)
52#define NCKEY_F04 preterunicode(24)
53#define NCKEY_F05 preterunicode(25)
54#define NCKEY_F06 preterunicode(26)
55#define NCKEY_F07 preterunicode(27)
56#define NCKEY_F08 preterunicode(28)
57#define NCKEY_F09 preterunicode(29)
58#define NCKEY_F10 preterunicode(30)
59#define NCKEY_F11 preterunicode(31)
60#define NCKEY_F12 preterunicode(32)
61#define NCKEY_F13 preterunicode(33)
62#define NCKEY_F14 preterunicode(34)
63#define NCKEY_F15 preterunicode(35)
64#define NCKEY_F16 preterunicode(36)
65#define NCKEY_F17 preterunicode(37)
66#define NCKEY_F18 preterunicode(38)
67#define NCKEY_F19 preterunicode(39)
68#define NCKEY_F20 preterunicode(40)
69#define NCKEY_F21 preterunicode(41)
70#define NCKEY_F22 preterunicode(42)
71#define NCKEY_F23 preterunicode(43)
72#define NCKEY_F24 preterunicode(44)
73#define NCKEY_F25 preterunicode(45)
74#define NCKEY_F26 preterunicode(46)
75#define NCKEY_F27 preterunicode(47)
76#define NCKEY_F28 preterunicode(48)
77#define NCKEY_F29 preterunicode(49)
78#define NCKEY_F30 preterunicode(50)
79#define NCKEY_F31 preterunicode(51)
80#define NCKEY_F32 preterunicode(52)
81#define NCKEY_F33 preterunicode(53)
82#define NCKEY_F34 preterunicode(54)
83#define NCKEY_F35 preterunicode(55)
84#define NCKEY_F36 preterunicode(56)
85#define NCKEY_F37 preterunicode(57)
86#define NCKEY_F38 preterunicode(58)
87#define NCKEY_F39 preterunicode(59)
88#define NCKEY_F40 preterunicode(60)
89#define NCKEY_F41 preterunicode(61)
90#define NCKEY_F42 preterunicode(62)
91#define NCKEY_F43 preterunicode(63)
92#define NCKEY_F44 preterunicode(64)
93#define NCKEY_F45 preterunicode(65)
94#define NCKEY_F46 preterunicode(66)
95#define NCKEY_F47 preterunicode(67)
96#define NCKEY_F48 preterunicode(68)
97#define NCKEY_F49 preterunicode(69)
98#define NCKEY_F50 preterunicode(70)
99#define NCKEY_F51 preterunicode(71)
100#define NCKEY_F52 preterunicode(72)
101#define NCKEY_F53 preterunicode(73)
102#define NCKEY_F54 preterunicode(74)
103#define NCKEY_F55 preterunicode(75)
104#define NCKEY_F56 preterunicode(76)
105#define NCKEY_F57 preterunicode(77)
106#define NCKEY_F58 preterunicode(78)
107#define NCKEY_F59 preterunicode(79)
108#define NCKEY_F60 preterunicode(80)
109// ... leave room for up to 100 function keys, egads
110#define NCKEY_ENTER preterunicode(121)
111#define NCKEY_CLS preterunicode(122) // "clear-screen or erase"
112#define NCKEY_DLEFT preterunicode(123) // down + left on keypad
113#define NCKEY_DRIGHT preterunicode(124)
114#define NCKEY_ULEFT preterunicode(125) // up + left on keypad
115#define NCKEY_URIGHT preterunicode(126)
116#define NCKEY_CENTER preterunicode(127) // the most truly neutral of keypresses
117#define NCKEY_BEGIN preterunicode(128)
118#define NCKEY_CANCEL preterunicode(129)
119#define NCKEY_CLOSE preterunicode(130)
120#define NCKEY_COMMAND preterunicode(131)
121#define NCKEY_COPY preterunicode(132)
122#define NCKEY_EXIT preterunicode(133)
123#define NCKEY_PRINT preterunicode(134)
124#define NCKEY_REFRESH preterunicode(135)
125#define NCKEY_SEPARATOR preterunicode(136)
126// these keys aren't generally available outside of the kitty protocol
127#define NCKEY_CAPS_LOCK preterunicode(150)
128#define NCKEY_SCROLL_LOCK preterunicode(151)
129#define NCKEY_NUM_LOCK preterunicode(152)
130#define NCKEY_PRINT_SCREEN preterunicode(153)
131#define NCKEY_PAUSE preterunicode(154)
132#define NCKEY_MENU preterunicode(155)
133// media keys, similarly only available through kitty's protocol
134#define NCKEY_MEDIA_PLAY preterunicode(158)
135#define NCKEY_MEDIA_PAUSE preterunicode(159)
136#define NCKEY_MEDIA_PPAUSE preterunicode(160)
137#define NCKEY_MEDIA_REV preterunicode(161)
138#define NCKEY_MEDIA_STOP preterunicode(162)
139#define NCKEY_MEDIA_FF preterunicode(163)
140#define NCKEY_MEDIA_REWIND preterunicode(164)
141#define NCKEY_MEDIA_NEXT preterunicode(165)
142#define NCKEY_MEDIA_PREV preterunicode(166)
143#define NCKEY_MEDIA_RECORD preterunicode(167)
144#define NCKEY_MEDIA_LVOL preterunicode(168)
145#define NCKEY_MEDIA_RVOL preterunicode(169)
146#define NCKEY_MEDIA_MUTE preterunicode(170)
147// modifiers when pressed by themselves. this ordering comes from the Kitty
148// keyboard protocol, and mustn't be changed without updating handlers.
149#define NCKEY_LSHIFT preterunicode(171)
150#define NCKEY_LCTRL preterunicode(172)
151#define NCKEY_LALT preterunicode(173)
152#define NCKEY_LSUPER preterunicode(174)
153#define NCKEY_LHYPER preterunicode(175)
154#define NCKEY_LMETA preterunicode(176)
155#define NCKEY_RSHIFT preterunicode(177)
156#define NCKEY_RCTRL preterunicode(178)
157#define NCKEY_RALT preterunicode(179)
158#define NCKEY_RSUPER preterunicode(180)
159#define NCKEY_RHYPER preterunicode(181)
160#define NCKEY_RMETA preterunicode(182)
161#define NCKEY_L3SHIFT preterunicode(183)
162#define NCKEY_L5SHIFT preterunicode(184)
163// mouse events. We encode which button was pressed into the char32_t,
164// but position information is embedded in the larger ncinput event.
165#define NCKEY_MOTION preterunicode(200) // no buttons pressed
166#define NCKEY_BUTTON1 preterunicode(201)
167#define NCKEY_BUTTON2 preterunicode(202)
168#define NCKEY_BUTTON3 preterunicode(203)
169#define NCKEY_BUTTON4 preterunicode(204) // scrollwheel up
170#define NCKEY_BUTTON5 preterunicode(205) // scrollwheel down
171#define NCKEY_BUTTON6 preterunicode(206)
172#define NCKEY_BUTTON7 preterunicode(207)
173#define NCKEY_BUTTON8 preterunicode(208)
174#define NCKEY_BUTTON9 preterunicode(209)
175#define NCKEY_BUTTON10 preterunicode(210)
176#define NCKEY_BUTTON11 preterunicode(211)
177
178// we received SIGCONT
179#define NCKEY_SIGNAL preterunicode(400)
180
181// indicates that we have reached the end of input. any further calls
182// will continute to return this immediately.
183#define NCKEY_EOF preterunicode(500)
184
185// Is this uint32_t a synthesized event?
186static inline bool
187nckey_synthesized_p(uint32_t w){
188 return w >= PRETERUNICODEBASE && w <= NCKEY_EOF;
189}
190
191// Synonyms and aliases (so far as we're concerned)
192#define NCKEY_SCROLL_UP NCKEY_BUTTON4
193#define NCKEY_SCROLL_DOWN NCKEY_BUTTON5
194#define NCKEY_RETURN NCKEY_ENTER
195#define NCKEY_TAB 0x09
196#define NCKEY_ESC 0x1b
197#define NCKEY_SPACE 0x20
198
199// Is this uint32_t from the Private Use Area in the BMP (Plane 0)?
200static inline bool
201nckey_pua_p(uint32_t w){
202 return w >= 0xe000 && w <= 0xf8ff; // 6,400 codepoints
203}
204
205// Is this uint32_t a Supplementary Private Use Area-A codepoint?
206static inline bool
207nckey_supppuaa_p(uint32_t w){
208 return w >= 0xf0000 && w <= 0xffffd; // 65,534 codepoints
209}
210
211// Is this uint32_t a Supplementary Private Use Area-B codepoint?
212static inline bool
213nckey_supppuab_p(uint32_t w){
214 return w >= 0x100000 && w <= 0x10fffd; // 65,534 codepoints
215}
216
217// used with the modifiers bitmask. definitions come straight from the kitty
218// keyboard protocol.
219#define NCKEY_MOD_SHIFT 1
220#define NCKEY_MOD_ALT 2
221#define NCKEY_MOD_CTRL 4
222#define NCKEY_MOD_SUPER 8
223#define NCKEY_MOD_HYPER 16
224#define NCKEY_MOD_META 32
225#define NCKEY_MOD_CAPSLOCK 64
226#define NCKEY_MOD_NUMLOCK 128
227
228#ifdef __cplusplus
229} // extern "C"
230#endif
231
232#endif
#define NCKEY_EOF
Definition nckeys.h:183
#define PRETERUNICODEBASE
Definition nckeys.h:31