aboutsummaryrefslogtreecommitdiff
path: root/qmk/keyboards/sofle_choc/keymaps/custom/keycodes.c
blob: 020c3e6adf25ec8d5d675dce61920d57343d56f7 (plain)
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
#include QMK_KEYBOARD_H
#include "keymap_bepo.h"
#include "keycodes.h"

/*
 * Rules and modifier to apply over the keycodes. This includes the keys
 * redefinitions and the keys to include in the caps_word mecanism.
 *
 * All thoses update are working over the custom keys declared in `keycodes.h` 
 */

/*
 * This function need to be declared after the key definition, including the
 * tapdance keys because I need to reference the keycode here if I want to
 * include them in the caps_word mecanism.
 */
bool caps_word_press_user(uint16_t keycode) {
    switch (keycode) {
        // Keycodes that continue Caps Word, with shift applied.
        case KC_A ... KC_Z:
        case KC_1 ... KC_0:
        case KC_MINS:
        case KEY_C: // Add also the tapdance keys here.
        case KEY_W:
        case KEY_E:
        case BP_Z:  // Additionals keys from the bepo layout.
        case BP_M:
        case BP_G:
        case BP_H:
        case BP_N:
            add_weak_mods(MOD_BIT(KC_LSFT));  // Apply shift to next key.
            return true;

        // Keycodes that continue Caps Word, without shifting.
        case KC_BSPC:
        case KC_DEL:
            return true;
        case KC_SPACE:
            // The space key is used in order to generate the _ symbol,
            // I check which modifier is applied, it’s ok when it’s ALT
            return get_mods() & MOD_MASK_ALT;

        default:
            return false;  // Deactivate Caps Word.
    }
}

//
// Override the symbol ° and replace it by `
// The symbol is still available in the symbol layer with the key just below.
//
const key_override_t perc_key_override = 
    ko_make_basic(MOD_MASK_SHIFT, KEY_PRC, LSFT(BP_PERC));

// 
// I don’t care of the mapping CTRL+Ç and using the mod_tap does not work well
// when I type too fast because of tap-dance, so I remap the pattern here.
//
const key_override_t c_key_override = 
    ko_make_basic(MOD_MASK_CTRL, KEY_C, LCTL(BP_C));

// Same here, I override the key W with CTRL because the tapdance activate the 
// caps_word which does not make sense here.
const key_override_t w_key_override = 
    ko_make_basic(MOD_MASK_CTRL, KEY_W, LCTL(BP_W));

const key_override_t e_key_override = 
    ko_make_basic(MOD_MASK_CTRL, KEY_E, RCTL(BP_E));


// This globally defines all key overrides to be used
const key_override_t **key_overrides = (const key_override_t *[]){
    &perc_key_override,
    &c_key_override,
    &w_key_override,
    &e_key_override,
    NULL
};

uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case KEY_E:
            return 230;
        case LT_SFT:
            return 250;
        case KEY_EE:
            return 350;
        default:
            return TAPPING_TERM;
    }
}


bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case AL_ENT:
      if (layer_state_is(LAYER_SYMBOLS) && !record->event.pressed) {
          // Remove the layer the key is released.
          layer_clear();
      }
      return true; // Let QMK send the enter press/release events
    default:
      return true; // Process all other keycodes normally
  }
}