|  |  |  | @ -208,7 +208,6 @@ static void unregister_code(uint8_t code) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | static inline void process_key(keyevent_t event) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |      | 
			
		
	
		
			
				
					|  |  |  |  |     /* TODO: ring buffer
 | 
			
		
	
		
			
				
					|  |  |  |  |     static keyrecord_t waiting_keys[5]; | 
			
		
	
		
			
				
					|  |  |  |  |     static uint8_t waiting_keys_head = 0; | 
			
		
	
	
		
			
				
					|  |  |  | @ -220,12 +219,12 @@ static inline void process_key(keyevent_t event) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     uint8_t tmp_mods; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     //debug("kbdstate: "); debug_hex(kbdstate);
 | 
			
		
	
		
			
				
					|  |  |  |  |     debug("state: "); print_P(state_str(kbdstate)); | 
			
		
	
		
			
				
					|  |  |  |  |     debug(" kind: "); debug_hex(kind); | 
			
		
	
		
			
				
					|  |  |  |  |     debug(" code: "); debug_hex(code); | 
			
		
	
		
			
				
					|  |  |  |  |     if (event.pressed) { debug("d"); } else { debug("u"); } | 
			
		
	
		
			
				
					|  |  |  |  |     debug("\n"); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     switch (kbdstate) { | 
			
		
	
		
			
				
					|  |  |  |  |         case IDLE: | 
			
		
	
		
			
				
					|  |  |  |  |             switch (kind) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -236,9 +235,20 @@ static inline void process_key(keyevent_t event) | 
			
		
	
		
			
				
					|  |  |  |  |                     layer_switch_off(code); | 
			
		
	
		
			
				
					|  |  |  |  |                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                 case FNK_DOWN: | 
			
		
	
		
			
				
					|  |  |  |  |                     // store event
 | 
			
		
	
		
			
				
					|  |  |  |  |                     delayed_fn = (keyrecord_t) { .event = event, .code = code, .mods = keyboard_report->mods, .time = timer_read() }; | 
			
		
	
		
			
				
					|  |  |  |  |                     // repeat Fn alt key when press Fn key down, up then down again quickly
 | 
			
		
	
		
			
				
					|  |  |  |  |                     if (KEYEQ(delayed_fn.event.key, event.key) && | 
			
		
	
		
			
				
					|  |  |  |  |                             timer_elapsed(delayed_fn.time) < LAYER_DELAY) { | 
			
		
	
		
			
				
					|  |  |  |  |                         register_code(keymap_fn_keycode(FN_INDEX(code))); | 
			
		
	
		
			
				
					|  |  |  |  |                         NEXT(PRESSING); | 
			
		
	
		
			
				
					|  |  |  |  |                     } else { | 
			
		
	
		
			
				
					|  |  |  |  |                         delayed_fn = (keyrecord_t) { | 
			
		
	
		
			
				
					|  |  |  |  |                             .event = event, | 
			
		
	
		
			
				
					|  |  |  |  |                             .code = code, | 
			
		
	
		
			
				
					|  |  |  |  |                             .mods = keyboard_report->mods, | 
			
		
	
		
			
				
					|  |  |  |  |                             .time = timer_read() | 
			
		
	
		
			
				
					|  |  |  |  |                         }; | 
			
		
	
		
			
				
					|  |  |  |  |                         NEXT(DELAYING); | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                 case FNK_UP: | 
			
		
	
		
			
				
					|  |  |  |  |                     layer_switch_off(code); | 
			
		
	
	
		
			
				
					|  |  |  | @ -298,7 +308,12 @@ static inline void process_key(keyevent_t event) | 
			
		
	
		
			
				
					|  |  |  |  |                 case FNK_DOWN: | 
			
		
	
		
			
				
					|  |  |  |  |                 case KEY_DOWN: | 
			
		
	
		
			
				
					|  |  |  |  |                 case MOUSEKEY_DOWN: | 
			
		
	
		
			
				
					|  |  |  |  |                     waiting_key = (keyrecord_t) { .event = event, .code = code, .mods = keyboard_report->mods, .time = timer_read() }; | 
			
		
	
		
			
				
					|  |  |  |  |                     waiting_key = (keyrecord_t) { | 
			
		
	
		
			
				
					|  |  |  |  |                         .event = event, | 
			
		
	
		
			
				
					|  |  |  |  |                         .code = code, | 
			
		
	
		
			
				
					|  |  |  |  |                         .mods = keyboard_report->mods, | 
			
		
	
		
			
				
					|  |  |  |  |                         .time = timer_read() | 
			
		
	
		
			
				
					|  |  |  |  |                     }; | 
			
		
	
		
			
				
					|  |  |  |  |                     NEXT(WAITING); | 
			
		
	
		
			
				
					|  |  |  |  |                     break; | 
			
		
	
		
			
				
					|  |  |  |  |                 case MOD_DOWN: | 
			
		
	
	
		
			
				
					|  |  |  | 
 |