mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 13:22:31 +01:00 
			
		
		
		
	Relocate grave keycode processing (#8082)
* Relocate grave keycode processing * Tidy up code * Refactor grave -> grave_esc
This commit is contained in:
		
							parent
							
								
									efe8bd8e92
								
							
						
					
					
						commit
						393937b43f
					
				| @ -420,6 +420,12 @@ ifeq ($(strip $(LEADER_ENABLE)), yes) | |||||||
|   OPT_DEFS += -DLEADER_ENABLE |   OPT_DEFS += -DLEADER_ENABLE | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes) | ||||||
|  |   SRC += $(QUANTUM_DIR)/dip_switch.c | ||||||
|  |   OPT_DEFS += -DDIP_SWITCH_ENABLE | ||||||
|  | endif | ||||||
|  | 
 | ||||||
| include $(DRIVER_PATH)/qwiic/qwiic.mk | include $(DRIVER_PATH)/qwiic/qwiic.mk | ||||||
| 
 | 
 | ||||||
| QUANTUM_SRC:= \
 | QUANTUM_SRC:= \
 | ||||||
| @ -505,12 +511,13 @@ ifeq ($(strip $(MAGIC_ENABLE)), yes) | |||||||
|     OPT_DEFS += -DMAGIC_KEYCODE_ENABLE |     OPT_DEFS += -DMAGIC_KEYCODE_ENABLE | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
|  | GRAVE_ESC_ENABLE ?= yes | ||||||
|  | ifeq ($(strip $(GRAVE_ESC_ENABLE)), yes) | ||||||
|  |     SRC += $(QUANTUM_DIR)/process_keycode/process_grave_esc.c | ||||||
|  |     OPT_DEFS += -DGRAVE_ESC_ENABLE | ||||||
|  | endif | ||||||
|  | 
 | ||||||
| ifeq ($(strip $(DYNAMIC_MACRO_ENABLE)), yes) | ifeq ($(strip $(DYNAMIC_MACRO_ENABLE)), yes) | ||||||
|     SRC += $(QUANTUM_DIR)/process_keycode/process_dynamic_macro.c |     SRC += $(QUANTUM_DIR)/process_keycode/process_dynamic_macro.c | ||||||
|     OPT_DEFS += -DDYNAMIC_MACRO_ENABLE |     OPT_DEFS += -DDYNAMIC_MACRO_ENABLE | ||||||
| endif | endif | ||||||
| 
 |  | ||||||
| ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes) |  | ||||||
|   SRC += $(QUANTUM_DIR)/dip_switch.c |  | ||||||
|   OPT_DEFS += -DDIP_SWITCH_ENABLE |  | ||||||
| endif |  | ||||||
|  | |||||||
							
								
								
									
										71
									
								
								quantum/process_keycode/process_grave_esc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								quantum/process_keycode/process_grave_esc.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,71 @@ | |||||||
|  | /* Copyright 2020
 | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 2 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  |  */ | ||||||
|  | #include "process_grave_esc.h" | ||||||
|  | 
 | ||||||
|  | /* true if the last press of GRAVE_ESC was shifted (i.e. GUI or SHIFT were pressed), false otherwise.
 | ||||||
|  |  * Used to ensure that the correct keycode is released if the key is released. | ||||||
|  |  */ | ||||||
|  | static bool grave_esc_was_shifted = false; | ||||||
|  | 
 | ||||||
|  | bool process_grave_esc(uint16_t keycode, keyrecord_t *record) { | ||||||
|  |     if (keycode == GRAVE_ESC) { | ||||||
|  |         const uint8_t mods    = get_mods(); | ||||||
|  |         uint8_t       shifted = mods & MOD_MASK_SG; | ||||||
|  | 
 | ||||||
|  | #ifdef GRAVE_ESC_ALT_OVERRIDE | ||||||
|  |         // if ALT is pressed, ESC is always sent
 | ||||||
|  |         // this is handy for the cmd+opt+esc shortcut on macOS, among other things.
 | ||||||
|  |         if (mods & MOD_MASK_ALT) { | ||||||
|  |             shifted = 0; | ||||||
|  |         } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef GRAVE_ESC_CTRL_OVERRIDE | ||||||
|  |         // if CTRL is pressed, ESC is always sent
 | ||||||
|  |         // this is handy for the ctrl+shift+esc shortcut on windows, among other things.
 | ||||||
|  |         if (mods & MOD_MASK_CTRL) { | ||||||
|  |             shifted = 0; | ||||||
|  |         } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef GRAVE_ESC_GUI_OVERRIDE | ||||||
|  |         // if GUI is pressed, ESC is always sent
 | ||||||
|  |         if (mods & MOD_MASK_GUI) { | ||||||
|  |             shifted = 0; | ||||||
|  |         } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef GRAVE_ESC_SHIFT_OVERRIDE | ||||||
|  |         // if SHIFT is pressed, ESC is always sent
 | ||||||
|  |         if (mods & MOD_MASK_SHIFT) { | ||||||
|  |             shifted = 0; | ||||||
|  |         } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  |         if (record->event.pressed) { | ||||||
|  |             grave_esc_was_shifted = shifted; | ||||||
|  |             add_key(shifted ? KC_GRAVE : KC_ESCAPE); | ||||||
|  |         } else { | ||||||
|  |             del_key(grave_esc_was_shifted ? KC_GRAVE : KC_ESCAPE); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         send_keyboard_report(); | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Not a grave keycode so continue processing
 | ||||||
|  |     return true; | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								quantum/process_keycode/process_grave_esc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								quantum/process_keycode/process_grave_esc.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | /* Copyright 2020
 | ||||||
|  |  * | ||||||
|  |  * This program is free software: you can redistribute it and/or modify | ||||||
|  |  * it under the terms of the GNU General Public License as published by | ||||||
|  |  * the Free Software Foundation, either version 2 of the License, or | ||||||
|  |  * (at your option) any later version. | ||||||
|  |  * | ||||||
|  |  * This program is distributed in the hope that it will be useful, | ||||||
|  |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |  * GNU General Public License for more details. | ||||||
|  |  * | ||||||
|  |  * You should have received a copy of the GNU General Public License | ||||||
|  |  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||||
|  |  */ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include "quantum.h" | ||||||
|  | 
 | ||||||
|  | bool process_grave_esc(uint16_t keycode, keyrecord_t *record); | ||||||
| @ -256,6 +256,9 @@ bool process_record_quantum(keyrecord_t *record) { | |||||||
| #ifdef MAGIC_KEYCODE_ENABLE | #ifdef MAGIC_KEYCODE_ENABLE | ||||||
|             process_magic(keycode, record) && |             process_magic(keycode, record) && | ||||||
| #endif | #endif | ||||||
|  | #ifdef GRAVE_ESC_ENABLE | ||||||
|  |             process_grave_esc(keycode, record) && | ||||||
|  | #endif | ||||||
| #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | ||||||
|             process_rgb(keycode, record) && |             process_rgb(keycode, record) && | ||||||
| #endif | #endif | ||||||
| @ -316,58 +319,6 @@ bool process_record_quantum(keyrecord_t *record) { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // keycodes that depend on both pressed and non-pressed state
 |  | ||||||
|     switch (keycode) { |  | ||||||
|         case GRAVE_ESC: { |  | ||||||
|             /* true if the last press of GRAVE_ESC was shifted (i.e. GUI or SHIFT were pressed), false otherwise.
 |  | ||||||
|              * Used to ensure that the correct keycode is released if the key is released. |  | ||||||
|              */ |  | ||||||
|             static bool grave_esc_was_shifted = false; |  | ||||||
| 
 |  | ||||||
|             uint8_t shifted = get_mods() & ((MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI))); |  | ||||||
| 
 |  | ||||||
| #ifdef GRAVE_ESC_ALT_OVERRIDE |  | ||||||
|             // if ALT is pressed, ESC is always sent
 |  | ||||||
|             // this is handy for the cmd+opt+esc shortcut on macOS, among other things.
 |  | ||||||
|             if (get_mods() & (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT))) { |  | ||||||
|                 shifted = 0; |  | ||||||
|             } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifdef GRAVE_ESC_CTRL_OVERRIDE |  | ||||||
|             // if CTRL is pressed, ESC is always sent
 |  | ||||||
|             // this is handy for the ctrl+shift+esc shortcut on windows, among other things.
 |  | ||||||
|             if (get_mods() & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL))) { |  | ||||||
|                 shifted = 0; |  | ||||||
|             } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifdef GRAVE_ESC_GUI_OVERRIDE |  | ||||||
|             // if GUI is pressed, ESC is always sent
 |  | ||||||
|             if (get_mods() & (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI))) { |  | ||||||
|                 shifted = 0; |  | ||||||
|             } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #ifdef GRAVE_ESC_SHIFT_OVERRIDE |  | ||||||
|             // if SHIFT is pressed, ESC is always sent
 |  | ||||||
|             if (get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) { |  | ||||||
|                 shifted = 0; |  | ||||||
|             } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
|             if (record->event.pressed) { |  | ||||||
|                 grave_esc_was_shifted = shifted; |  | ||||||
|                 add_key(shifted ? KC_GRAVE : KC_ESCAPE); |  | ||||||
|             } else { |  | ||||||
|                 del_key(grave_esc_was_shifted ? KC_GRAVE : KC_ESCAPE); |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             send_keyboard_report(); |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return process_action_kb(record); |     return process_action_kb(record); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -138,6 +138,10 @@ extern layer_state_t layer_state; | |||||||
| #    include "process_magic.h" | #    include "process_magic.h" | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | #ifdef GRAVE_ESC_ENABLE | ||||||
|  | #    include "process_grave_esc.h" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | ||||||
| #    include "process_rgb.h" | #    include "process_rgb.h" | ||||||
| #endif | #endif | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Joel Challis
						Joel Challis