aboutsummaryrefslogtreecommitdiffstats
path: root/src/keysym.h
blob: 7e3f6f2fac54240fbd54e4aafe5b34254995f992 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#pragma once

#define XXXXXXX KC_NO
#define _______ KC_TRNS

#define MASK(hi, lo) ((1U << (hi)) - (1U << (lo)))

#define IS_KC(x)    (!((x) & ~MASK(B_TOGGLE, 0)))
#define IS_CTRL(x)    ((x) & (1U << B_CTRL))
#define IS_SHIFT(x)   ((x) & (1U << B_SHIFT))
#define IS_ALT(x)     ((x) & (1U << B_ALT))
#define IS_GUI(x)     ((x) & (1U << B_GUI))
#define IS_RIGHT(x)   ((x) & (1U << B_RIGHT))
#define IS_TOGGLE(x)  ((x) & (1U << B_TOGGLE))
#define IS_REBASE(x)  ((x) & (1U << B_REBASE))
#define IS_SWITCH(x)  ((x) & (1U << B_SWITCH))
#define IS_SPECIAL(x) ((x) & (1U << B_SPECIAL))
#define IS_USER(x)    ((x) & (1U << B_USER))

#define IS_MOUSE(x)    (IS_SPECIAL(x) && (TO_SPECIAL(x) == S_MOUSE))
#define IS_SYSTEM(x)   (IS_SPECIAL(x) && (TO_SPECIAL(x) == S_SYSTEM))
#define IS_CONSUMER(x) (IS_SPECIAL(x) && (TO_SPECIAL(x) == S_CONSUMER))

#define IS_MACRO_HOLD(x)    ((x) & (1U << B_MACRO_HOLD))
#define IS_MACRO_RELEASE(x) ((x) & (1U << B_MACRO_RELEASE))
#define IS_MACRO_PRESS(x)   (!IS_MACRO_HOLD(x) && !IS_MACRO_RELEASE(x))
#define IS_MACRO_DELAY(x)   ((x) & (1U << B_MACRO_DELAY))

#define IS_LEFT_CTRL(x)   (IS_CTRL(x) && !IS_RIGHT(x))
#define IS_RIGHT_CTRL(x)  (IS_CTRL(x) && IS_RIGHT(x))
#define IS_LEFT_SHIFT(x)  (IS_SHIFT(x) && !IS_RIGHT(x))
#define IS_RIGHT_SHIFT(x) (IS_SHIFT(x) && IS_RIGHT(x))
#define IS_LEFT_ALT(x)    (IS_ALT(x) && !IS_RIGHT(x))
#define IS_RIGHT_ALT(x)   (IS_ALT(x) && IS_RIGHT(x))
#define IS_LEFT_GUI(x)    (IS_GUI(x) && !IS_RIGHT(x))
#define IS_RIGHT_GUI(x)   (IS_GUI(x) && IS_RIGHT(x))

#define IS_MOD(x) ((x) & MASK(B_TOGGLE, B_CTRL))

#define TO_SPECIAL(x) (((x) >> B_SPECIAL_SEL) & 0b11)
#define TO_KC(x) ((x) & 0xFF)
#define TO_SYM(x) ((x) & 0xFF)
#define TO_LAYER(x) ((x) & 0xFF)
#define TO_DELAY(x) ((x) & 0xFFFF)

#define SPECIAL(x, g) ((x) | (1U << B_SPECIAL) | ((g) << B_SPECIAL_SEL))

#define LCTL(x) ((x) | (1 << B_CTRL))
#define LSFT(x) ((x) | (1 << B_SHIFT))
#define LALT(x) ((x) | (1 << B_ALT))
#define LGUI(x) ((x) | (1 << B_GUI))
#define RIGH(x) ((x) | (1 << B_RIGHT))

#define HOLD(x)    ((x) | (1 << B_MACRO_HOLD))
#define RELEASE(x) ((x) | (1 << B_MACRO_RELEASE))
#define DELAY(x)   ((x) | (1 << B_MACRO_DELAY))

#define SW(x) ((x) | (1 << B_SWITCH))
#define TO(x) ((x) | (1 << B_TOGGLE))
#define RB(x) ((x) | (1 << B_REBASE))
#define SX(x) ((x) | (1 << B_USER))

#define RCTL(x) RIGH(LCTL(x))
#define RSFT(x) RIGH(LSFT(x))
#define RALT(x) RIGH(LALT(x))
#define RGUI(x) RIGH(LGUI(x))

#define LOPT(x) LALT(x)
#define LCMD(x) LGUI(x)
#define LWIN(x) LGUI(x)
#define ALGR(x) RALT(x)
#define ROPT(x) RALT(x)
#define RCMD(x) RGUI(x)

#define CS(x) C(SW(x))
#define AS(x) A(SW(x))
#define GS(x) G(SW(x))

#define C(x) LCTL(x)
#define S(x) LSFT(x)
#define A(x) LALT(x)
#define G(x) LGUI(x)

enum {
	S_CONSUMER,
	S_MOUSE,
	S_SYSTEM
};

enum {
	B_SPECIAL_SEL = 6,
	B_CTRL = 8,
	B_SHIFT,
	B_ALT,
	B_GUI,
	B_RIGHT,
	B_TOGGLE,
	B_REBASE,
	B_SWITCH,
	B_SPECIAL,
	B_USER,
	B_MACRO_HOLD,
	B_MACRO_RELEASE,
	B_MACRO_DELAY /* >= 16 */
};