mirror of
https://github.com/Keychron/qmk_firmware.git
synced 2024-12-01 21:26:55 +06:00
050472a4d0
Co-authored-by: Drashna Jaelre <drashna@live.com>
100 lines
2.4 KiB
C
100 lines
2.4 KiB
C
#include USERSPACE_H
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
bool shift_for_two(uint16_t keycode, keyrecord_t *record){
|
|
uint16_t mod_state = get_mods();
|
|
|
|
bool is_shifted = (get_mods() & MOD_MASK_SHIFT) ||
|
|
(get_oneshot_mods() & MOD_MASK_SHIFT);
|
|
|
|
if(record ->event.pressed) {
|
|
// If shifted, double these common punctuation marks.
|
|
if(is_shifted){
|
|
// clear shift temporarily
|
|
del_mods(MOD_MASK_SHIFT);
|
|
del_oneshot_mods(MOD_MASK_SHIFT);
|
|
|
|
tap_code16(keycode);
|
|
tap_code16(keycode);
|
|
|
|
// restore previous shift state
|
|
set_mods(mod_state);
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool shift_for_three(uint16_t keycode, keyrecord_t *record){
|
|
uint16_t mod_state = get_mods();
|
|
|
|
bool is_shifted = (get_mods() & MOD_MASK_SHIFT) ||
|
|
(get_oneshot_mods() & MOD_MASK_SHIFT);
|
|
|
|
if(record ->event.pressed) {
|
|
// If shifted, double these common punctuation marks.
|
|
if(is_shifted){
|
|
// clear shift temporarily
|
|
del_mods(MOD_MASK_SHIFT);
|
|
del_oneshot_mods(MOD_MASK_SHIFT);
|
|
|
|
tap_code16(keycode);
|
|
tap_code16(keycode);
|
|
tap_code16(keycode);
|
|
|
|
// restore previous shift state
|
|
set_mods(mod_state);
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool override_shift(uint16_t keycode,
|
|
uint16_t shift_keycode,
|
|
keyrecord_t *record
|
|
) {
|
|
|
|
bool is_shifted = (get_mods() & MOD_MASK_SHIFT) ||
|
|
(get_oneshot_mods() & MOD_MASK_SHIFT);
|
|
|
|
if (record->event.pressed) {
|
|
if (is_shifted) {
|
|
uint8_t mod_state = get_mods();
|
|
del_mods(MOD_MASK_SHIFT);
|
|
del_oneshot_mods(MOD_MASK_SHIFT);
|
|
|
|
tap_code16(shift_keycode);
|
|
|
|
set_mods(mod_state);
|
|
} else {
|
|
//tap_code16(keycode);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// macros for use in alt_shift.defs.
|
|
#define ALT_SHIFT(KCKEY, KC01) \
|
|
case KCKEY: \
|
|
return override_shift(KCKEY, KC01, record); \
|
|
break;
|
|
|
|
#define SHIFT_FOR_2(KCKEY) \
|
|
case KCKEY: \
|
|
return shift_for_two(KCKEY, record); \
|
|
break;
|
|
|
|
#define SHIFT_FOR_3(KCKEY) \
|
|
case KCKEY: \
|
|
return shift_for_three(KCKEY, record); \
|
|
break;
|
|
|
|
bool process_alt_shift_user(uint16_t keycode, keyrecord_t *record) {
|
|
switch(keycode){
|
|
#include "alt_shift.def"
|
|
}
|
|
return true;
|
|
}
|