~andrew/qmk

ref: 8b456631284cb2c7dc484de513ba8785a970688e qmk/keyboards/zsa/voyager/keymaps/ball/keymap.c -rw-r--r-- 6.2 KiB
8b456631Andrew Reisner add keyball. 5 months ago
                                                                                
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Copyright 2023 ZSA Technology Labs, Inc <@zsa>
// Copyright 2023 Christopher Courtney, aka Drashna Jael're  (@drashna) <drashna@live.com>
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

enum custom_keycodes {
	DRAG_SCROLL = SAFE_RANGE,
	NAVIGATOR_INC_CPI,
	NAVIGATOR_DEC_CPI,
};

#define HR_A KC_A
#define HR_S MT(MOD_LALT, KC_S)
#define HR_D MT(MOD_LSFT, KC_D)
#define HR_F MT(MOD_LCTL, KC_F)

#define HR_J MT(MOD_RCTL, KC_J)
#define HR_K MT(MOD_RSFT, KC_K)
#define HR_L MT(MOD_RALT, KC_L)
#define HR_SCLN KC_SCLN

#define LR_V LT(3, KC_V)
#define LR_B LT(2, KC_B)

#define KC_EUNDO LCTL(LSFT(KC_MINUS))
#define KC_AENTER LCTL(LALT(KC_ENT))
#define WAYFULL LGUI(LSFT(KC_F))
#define WAYHALF LGUI(LSFT(KC_D))
#define KC_CAD  LCTL(LALT(KC_DEL))

enum {
	TD_UNDO,
};

// Combo for caps word
const uint16_t PROGMEM capsword_combo[] = {HR_D, HR_K, COMBO_END};

combo_t key_combos[] = {
	COMBO(capsword_combo, QK_CAPS_WORD_TOGGLE),
};

tap_dance_action_t tap_dance_actions[] = {
	[TD_UNDO] = ACTION_TAP_DANCE_DOUBLE(KC_U, KC_EUNDO),
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [0] = LAYOUT(
        KC_EQUAL, KC_1,   KC_2,    KC_3,    KC_4,    KC_5,                         KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS,
        KC_TAB,   KC_Q,   KC_W,    KC_E,    KC_R,    KC_T,                         KC_Y, TD(TD_UNDO), KC_I,   KC_O,    KC_P,    KC_BSLS,
        KC_ESCAPE,HR_A,   HR_S,    HR_D,    HR_F,    KC_G,                         KC_H,    HR_J,    HR_K,    HR_L,    HR_SCLN, RSFT_T(KC_QUOT),
        MO(5),    KC_Z,   KC_X,    KC_C,    LR_V,    LR_B,                         KC_N,    KC_M,    KC_COMMA,KC_DOT,  KC_SLSH, TG(1),
		                                   LT(4, KC_BSPC), KC_LGUI,       MT(MOD_RGUI, KC_ENT), LT(4, KC_SPC)
    ),
    [1] = LAYOUT(
        _______, _______, _______, _______, _______, _______,                      _______, _______, _______, _______, _______, _______,
        _______, _______, _______, _______, _______, _______,                      _______, _______, _______, _______, _______, _______,
        _______, _______, _______, _______, _______, _______,                      _______, _______, _______, _______, _______, _______,
        _______, _______, _______, _______, _______, _______,                      _______, _______, _______, _______, _______, _______,
                                                     _______, _______,    _______, _______
    ),
    // Mouse layer
    [2] = LAYOUT(
        _______, _______, _______, _______, _______, _______,                      _______, _______, _______, _______, _______, _______,
        _______, _______, _______, NAVIGATOR_DEC_CPI, NAVIGATOR_INC_CPI, _______,  _______, _______, _______, _______, _______, _______,
        _______, _______, DRAG_SCROLL, KC_MS_BTN2, KC_MS_BTN1, _______,            _______, _______, _______, _______, _______, _______,
        _______, _______, _______, _______, _______, _______,                      _______, _______, _______, _______, _______, _______,
                                                     _______, _______,    _______, _______
    ),
    [3] = LAYOUT(
        _______, _______, _______, _______, _______, _______,                      _______, _______, _______, _______, _______, _______,
        _______, _______, _______, _______, _______, _______,                      KC_SLSH, KC_7,    KC_8,    KC_9,    KC_ASTR, _______,
        _______, _______, _______, _______, _______, _______,                      KC_MINS, KC_4,    KC_5,    KC_6,    KC_PLUS, _______,
        _______, _______, _______, _______, _______, _______,                      KC_0,    KC_1,    KC_2,    KC_3,    KC_DOT,  _______,
                                                     _______, _______,    _______, _______
    ),
    [4] = LAYOUT(
        KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                        KC_F6,    KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,
        KC_GRV,  KC_GRV,  KC_TILDE,KC_HASH, KC_AMPR, KC_PIPE,                      KC_CIRC,  KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12,
        KC_EUNDO,KC_EXLM, KC_UNDS, KC_COLN, KC_EQL,  KC_DLR,                       KC_AT,    KC_LPRN, KC_RPRN, KC_UNDS, KC_SCLN, KC_BSPC,
        _______, KC_PERC, KC_QUES, KC_ASTR, KC_PLUS, KC_BSLS,                      KC_SLSH,  KC_MINUS,KC_LT,   KC_GT,   KC_DQT,  KC_ENT,
		                                               MO(5), _______,    _______, _______
    ),
    [5] = LAYOUT(
        RM_TOGG, QK_KB,   RM_NEXT, RGB_M_P, RM_VALD, RM_VALU,                      _______, _______, _______, _______, _______, QK_BOOT,
        _______, _______, _______, _______, _______, _______,                      KC_PGUP, KC_HOME, KC_UP,   KC_END,  _______, _______,
        _______, WAYHALF, WAYFULL, KC_CAD,  KC_AENTER, _______,                    KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
        _______, _______, _______, _______, _______, _______,                      _______, C(S(KC_TAB)), C(KC_TAB), _______, _______, _______,
                                                     _______, _______,    _______, _______
    ),
};

extern bool set_scrolling;

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case HR_L:
            if (record->event.pressed && record->tap.count && layer_state_is(1)) {
                uint8_t mods    = get_mods();
                uint8_t weak    = get_weak_mods();
                uint8_t oneshot = get_oneshot_mods();

                if ((mods | weak | oneshot) & MOD_MASK_GUI) {
                    // GUI is already held; just tap N so the host sees GUI+N.
                    tap_code(KC_N);
                    return false;
                }
            }
            break;
        case DRAG_SCROLL:
            set_scrolling = record->event.pressed;
            return false;
        case NAVIGATOR_INC_CPI:
            if (record->event.pressed) {
                pointing_device_set_cpi(1);
            }
            return false;
        case NAVIGATOR_DEC_CPI:
            if (record->event.pressed) {
                pointing_device_set_cpi(0);
            }
            return false;
    }

    return true;
}

void pointing_device_init_user(void) {
    set_auto_mouse_enable(true);
}