Fix #4457: broken key sequences ending with C-i

This commit is contained in:
Henrik Lissner 2021-01-03 22:40:06 -05:00
parent 12d8691fa8
commit a567834ff8
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 21 additions and 5 deletions

View file

@ -41,12 +41,16 @@ and Emacs states, and for non-evil users.")
;; HACK Fixes Emacs' disturbing inability to distinguish C-i from TAB. ;; HACK Fixes Emacs' disturbing inability to distinguish C-i from TAB.
(define-key key-translation-map [?\C-i] (define-key key-translation-map [?\C-i]
(cmd! (if (and (not (cl-position 'tab (this-single-command-raw-keys))) (cmd! (if (let ((keys (this-single-command-raw-keys)))
(not (cl-position 'kp-tab (this-single-command-raw-keys))) (and keys
(display-graphic-p)) (not (cl-position 'tab keys))
(not (cl-position 'kp-tab keys))
(display-graphic-p)
(let ((key
(doom-lookup-key
(vconcat (cl-subseq keys 0 -1) [C-i]))))
(not (or (numberp key) (null key))))))
[C-i] [?\C-i]))) [C-i] [?\C-i])))
;; However, ensure <C-i> falls back to the old keybind if it has no binding.
(global-set-key [C-i] [?\C-i])
;; ;;

View file

@ -94,6 +94,18 @@ at the values with which this function was called."
(lambda (&rest pre-args) (lambda (&rest pre-args)
(apply fn (append pre-args args)))) (apply fn (append pre-args args))))
(defun doom-lookup-key (keys &optional keymap)
"Like `lookup-key', but search active keymaps if KEYMAP is omitted."
(if keymap
(lookup-key keymap keys)
(cl-loop for keymap
in (append (mapcar #'cdr (mapcar #'symbol-value emulation-mode-map-alists))
(list (current-local-map))
(mapcar #'cdr minor-mode-alist)
(list (current-global-map)))
if (lookup-key keymap keys)
return it)))
;; ;;
;;; Sugars ;;; Sugars