-
-
Notifications
You must be signed in to change notification settings - Fork 40.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
183 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
54 changes: 54 additions & 0 deletions
54
keyboards/lily58/keymaps/paulomp90/features/custom_shift_keys.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
// Copyright 2021-2023 Google LLC. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
#include "custom_shift_keys.h" | ||
|
||
bool process_custom_shift_keys(uint16_t keycode, keyrecord_t *record) { | ||
static uint16_t registered_keycode = KC_NO; | ||
|
||
// If a custom shift key is registered, then this event is either | ||
// releasing it or manipulating another key at the same time. Either way, | ||
// we release the currently registered key. | ||
if (registered_keycode != KC_NO) { | ||
unregister_code16(registered_keycode); | ||
registered_keycode = KC_NO; | ||
} | ||
|
||
if (record->event.pressed) { // Press event. | ||
const uint8_t mods = get_mods(); | ||
#ifndef NO_ACTION_ONESHOT | ||
if ((mods | get_weak_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT) { | ||
#else | ||
if ((mods | get_weak_mods()) & MOD_MASK_SHIFT) { // Shift is held. | ||
#endif // NO_ACTION_ONESHOT | ||
// Continue default handling if this is a tap-hold key being held. | ||
if ((IS_QK_MOD_TAP(keycode) || IS_QK_LAYER_TAP(keycode)) && | ||
record->tap.count == 0) { | ||
return true; | ||
} | ||
|
||
// Search for a custom shift key whose keycode is `keycode`. | ||
for (int i = 0; i < NUM_CUSTOM_SHIFT_KEYS; ++i) { | ||
if (keycode == custom_shift_keys[i].keycode) { | ||
registered_keycode = custom_shift_keys[i].shifted_keycode; | ||
if (IS_QK_MODS(registered_keycode) && // Should key be shifted? | ||
(QK_MODS_GET_MODS(registered_keycode) & MOD_LSFT) != 0) { | ||
register_code16(registered_keycode); // If so, press directly. | ||
} else { | ||
// If not, cancel shift mods, press the key, and restore mods. | ||
del_weak_mods(MOD_MASK_SHIFT); | ||
#ifndef NO_ACTION_ONESHOT | ||
del_oneshot_mods(MOD_MASK_SHIFT); | ||
#endif // NO_ACTION_ONESHOT | ||
unregister_mods(MOD_MASK_SHIFT); | ||
register_code16(registered_keycode); | ||
set_mods(mods); | ||
} | ||
return false; | ||
} | ||
} | ||
} | ||
} | ||
|
||
return true; // Continue with default handling. | ||
} |
15 changes: 15 additions & 0 deletions
15
keyboards/lily58/keymaps/paulomp90/features/custom_shift_keys.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// Copyright 2021 Google LLC. | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
#pragma once | ||
#include QMK_KEYBOARD_H | ||
|
||
typedef struct { | ||
uint16_t keycode; | ||
uint16_t shifted_keycode; | ||
} custom_shift_key_t; | ||
|
||
extern const custom_shift_key_t custom_shift_keys[]; | ||
extern uint8_t NUM_CUSTOM_SHIFT_KEYS; | ||
|
||
bool process_custom_shift_keys(uint16_t keycode, keyrecord_t *record); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,22 @@ | ||
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite | ||
MOUSEKEY_ENABLE = no # Mouse keys | ||
# MOUSEKEY_ENABLE = no # Mouse keys | ||
EXTRAKEY_ENABLE = yes # Audio control and System control | ||
CONSOLE_ENABLE = no # Console for debug | ||
COMMAND_ENABLE = no # Commands for debug and configuration | ||
# CONSOLE_ENABLE = no # Console for debug | ||
# COMMAND_ENABLE = no # Commands for debug and configuration | ||
NKRO_ENABLE = no | ||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
AUDIO_ENABLE = no # Audio output | ||
# AUDIO_ENABLE = no # Audio output | ||
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. | ||
SWAP_HANDS_ENABLE = no # Enable one-hand typing | ||
# SWAP_HANDS_ENABLE = no # Enable one-hand typing | ||
OLED_ENABLE= yes # OLED display | ||
TAP_DANCE_ENABLE = yes | ||
|
||
# If you want to change the display of OLED, you need to change here | ||
SRC += ./lib/rgb_state_reader.c \ | ||
./lib/layer_state_reader.c \ | ||
./lib/logo_reader.c \ | ||
./lib/keylogger.c \ | ||
features/custom_shift_keys.c \ | ||
# ./lib/mode_icon_reader.c \ | ||
# ./lib/host_led_state_reader.c \ | ||
# ./lib/timelogger.c \ |