[Keymap] major keymap overhaul (#10185)
* experiment with userspace * reorganise * readme * missing oneshot shift from ignored keys * recombine hands in layout macro
This commit is contained in:
		
							parent
							
								
									6e948feb6a
								
							
						
					
					
						commit
						3d4f0028d6
					
				
					 12 changed files with 382 additions and 297 deletions
				
			
		
							
								
								
									
										57
									
								
								users/callum/oneshot.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								users/callum/oneshot.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | |||
| #include "oneshot.h" | ||||
| 
 | ||||
| void update_oneshot( | ||||
|     oneshot_state *state, | ||||
|     uint16_t mod, | ||||
|     uint16_t trigger, | ||||
|     uint16_t keycode, | ||||
|     keyrecord_t *record | ||||
| ) { | ||||
|     if (keycode == trigger) { | ||||
|         if (record->event.pressed) { | ||||
|             // Trigger keydown
 | ||||
|             if (*state == os_up_unqueued) { | ||||
|                 register_code(mod); | ||||
|             } | ||||
|             *state = os_down_unused; | ||||
|         } else { | ||||
|             // Trigger keyup
 | ||||
|             switch (*state) { | ||||
|             case os_down_unused: | ||||
|                 // If we didn't use the mod while trigger was held, queue it.
 | ||||
|                 *state = os_up_queued; | ||||
|                 break; | ||||
|             case os_down_used: | ||||
|                 // If we did use the mod while trigger was held, unregister it.
 | ||||
|                 *state = os_up_unqueued; | ||||
|                 unregister_code(mod); | ||||
|                 break; | ||||
|             default: | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|     } else { | ||||
|         if (record->event.pressed) { | ||||
|             if (is_oneshot_cancel_key(keycode) && *state != os_up_unqueued) { | ||||
|                 // Cancel oneshot on designated cancel keydown.
 | ||||
|                 *state = os_up_unqueued; | ||||
|                 unregister_code(mod); | ||||
|             } | ||||
|         } else { | ||||
|             if (!is_oneshot_ignored_key(keycode)) { | ||||
|                 // On non-ignored keyup, consider the oneshot used.
 | ||||
|                 switch (*state) { | ||||
|                 case os_down_unused: | ||||
|                     *state = os_down_used; | ||||
|                     break; | ||||
|                 case os_up_queued: | ||||
|                     *state = os_up_unqueued; | ||||
|                     unregister_code(mod); | ||||
|                     break; | ||||
|                 default: | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Callum Oakley
						Callum Oakley