aboutsummaryrefslogtreecommitdiff
path: root/keyboards/xiudi/xd004/keymaps/system_and_media/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/xiudi/xd004/keymaps/system_and_media/keymap.c')
-rw-r--r--keyboards/xiudi/xd004/keymaps/system_and_media/keymap.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/keyboards/xiudi/xd004/keymaps/system_and_media/keymap.c b/keyboards/xiudi/xd004/keymaps/system_and_media/keymap.c
new file mode 100644
index 000000000..60f0e15bb
--- /dev/null
+++ b/keyboards/xiudi/xd004/keymaps/system_and_media/keymap.c
@@ -0,0 +1,59 @@
1#include QMK_KEYBOARD_H
2
3#define _BASE 0 // Base layer
4#define _SYSTEM 1 // System actions
5#define _VOLUME 2 // Volume actions
6
7#define SUPER_ALT_F4_TIMER 300 // Timeout on the super alt-f4 key
8
9/*
10 The idea of this is pretty simple: base layer has four action, two of which (the outermost)
11 are regular keystrokes on tap, and a momentary layer switch on hold, sending you to layers 1 and 2.
12
13 The other bit of customization here is the 'Super Alt F4' which does Alt-F4, and then Enter if tapped
14 again SUPER_ALT_F4_TIMER miliseconds after. This lets you Alt-F4 applications, and finally quickly
15 double-tap it to Alt-F4+Enter to shut down the PC.
16*/
17
18bool is_alt_f4_active = false;
19uint16_t alt_f4_timer = 0;
20
21enum custom_keycodes { // Make sure have the awesome keycode ready
22 SUPER_ALT_F4 = SAFE_RANGE,
23};
24
25const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
26
27 // 0: Base Layer
28 [_BASE] = LAYOUT_all(LT(_SYSTEM, KC_F5), C(G(KC_LEFT)), C(G(KC_RIGHT)), LT(_VOLUME, KC_F7)),
29
30 // 1: System actions
31 [_SYSTEM] = LAYOUT_all(_______, SUPER_ALT_F4, G(KC_D), G(KC_L)),
32
33 // 2: Volume actions
34 [_VOLUME] = LAYOUT_all(KC_MEDIA_NEXT_TRACK, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, _______),
35
36};
37
38bool process_record_user(uint16_t keycode, keyrecord_t *record) {
39 switch (keycode) { // This will do most of the grunt work with the keycodes.
40 case SUPER_ALT_F4:
41 if (record->event.pressed) {
42 if (!is_alt_f4_active) {
43 is_alt_f4_active = true;
44 tap_code16(LALT(KC_F4)); // Alt-F4
45 } else {
46 tap_code(KC_ENTER); // Tap enter
47 }
48 }
49 alt_f4_timer = timer_read();
50 break;
51 }
52 return true;
53}
54
55void matrix_scan_user(void) {
56 if (is_alt_f4_active && timer_elapsed(alt_f4_timer) > SUPER_ALT_F4_TIMER) {
57 is_alt_f4_active = false;
58 }
59};