forked from forks/qmk_firmware
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;
|
||
|
}
|