Support key translation in line-mode
* exwm-input.el (exwm-input--translate): New function for translating keys according to `input-decode-map', `local-function-key-map' and `key-translation-map'. (exwm-input--cache-event): Use it.
This commit is contained in:
		
							parent
							
								
									895633fe61
								
							
						
					
					
						commit
						6b4bfad87b
					
				
					 1 changed files with 15 additions and 0 deletions
				
			
		|  | @ -471,10 +471,25 @@ This value should always be overwritten.") | |||
| (defvar exwm-input--temp-line-mode nil | ||||
|   "Non-nil indicates it's in temporary line-mode for char-mode.") | ||||
| 
 | ||||
| (cl-defun exwm-input--translate (key) | ||||
|   (let (translation) | ||||
|     (dolist (map (list input-decode-map | ||||
|                        local-function-key-map | ||||
|                        key-translation-map)) | ||||
|       (setq translation (lookup-key map key)) | ||||
|       (if (functionp translation) | ||||
|           (cl-return-from exwm-input--translate (funcall translation nil)) | ||||
|         (when (vectorp translation) | ||||
|           (cl-return-from exwm-input--translate translation))))) | ||||
|   key) | ||||
| 
 | ||||
| (defun exwm-input--cache-event (event) | ||||
|   "Cache EVENT." | ||||
|   (setq exwm-input--line-mode-cache | ||||
|         (vconcat exwm-input--line-mode-cache (vector event))) | ||||
|   ;; Attempt to translate this key sequence. | ||||
|   (setq exwm-input--line-mode-cache | ||||
|         (exwm-input--translate exwm-input--line-mode-cache)) | ||||
|   ;; When the key sequence is complete. | ||||
|   (unless (keymapp (key-binding exwm-input--line-mode-cache)) | ||||
|     (setq exwm-input--line-mode-cache nil) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue