diff options
| author | Ravi R Kiran <aine.marina@gmail.com> | 2022-02-22 03:55:56 (GMT) |
|---|---|---|
| committer | Ravi R Kiran <aine.marina@gmail.com> | 2022-02-22 03:55:56 (GMT) |
| commit | e43b12a22d4ebeef621070c456567951369f2e70 (patch) | |
| tree | 16a6f187b5b0225bdbb0685ea7343252eb6a9b2a | |
| parent | 4cd9bcdaf398d17fb43be424ecb2e6cebfe7d7a8 (diff) | |
| download | dotemacs-e43b12a22d4ebeef621070c456567951369f2e70.zip dotemacs-e43b12a22d4ebeef621070c456567951369f2e70.tar.gz dotemacs-e43b12a22d4ebeef621070c456567951369f2e70.tar.bz2 | |
Hack to workaround emacs-internal hacks for del/bs ambiguity
| -rw-r--r-- | lisp/kitty-keyboard-protocol.el | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/lisp/kitty-keyboard-protocol.el b/lisp/kitty-keyboard-protocol.el index 566e6be..df2fbfa 100644 --- a/lisp/kitty-keyboard-protocol.el +++ b/lisp/kitty-keyboard-protocol.el @@ -228,6 +228,15 @@ would swap meta and super.") (val (and (< second-dim (length row)) (aref row second-dim)))) val)) +(defvar kitty-kbp-delete-backspace-workaround nil + "Work around terminal handling idiosyncracies for DEL and BS") +(defvar kitty-kbp--backspace-precomputed + (kitty-kbp--precompute-with-modifiers 'backspace) + "Precomputed operations for backspace") +(defvar kitty-kbp--delete-precomputed + (kitty-kbp--precompute-with-modifiers 'delete) + "Precomputed operations for delete") + (defun kitty-kbp-decode-key-stroke (keycode modifiers suffix) "Take KEYCODE MODIFIERS SUFFIX of the form (105,5,u) and construct key." ;; Ignore modifiers that we cannot understand (CapsLock and NumLock status) @@ -235,16 +244,22 @@ would swap meta and super.") (result)) (if (eql suffix ?u) (if (< keycode 57344) - ;; To do: support remaining keycodes in unicode private use area - ;; (send-string-to-terminal (format "%s" (logior keycode (aref kitty-kbp--numeric-modifiers mods)))) - (let* ((shifted-key (and (eql (logand mods kitty-kbp--shift-modifier) - kitty-kbp--shift-modifier) - (alist-get keycode kitty-kbp-shift-alist))) - ;; The following is equivalent to mods & ~shift - (new-modifiers (and shifted-key (- mods kitty-kbp--shift-modifier)))) - (setq result - (vector (logior (or shifted-key keycode) - (aref kitty-kbp--numeric-modifiers (if shifted-key new-modifiers mods)))))) + (cond + ((and kitty-kbp-delete-backspace-workaround (eql keycode ?\x7f)) + (setq result (aref kitty-kbp--backspace-precomputed mods))) + ((and kitty-kbp-delete-backspace-workaround (eql keycode ?\x8)) + (setq result (aref kitty-kbp--delete-precomputed mods))) + (t + ;; To do: support remaining keycodes in unicode private use area + ;; (send-string-to-terminal (format "%s" (logior keycode (aref kitty-kbp--numeric-modifiers mods)))) + (let* ((shifted-key (and (eql (logand mods kitty-kbp--shift-modifier) + kitty-kbp--shift-modifier) + (alist-get keycode kitty-kbp-shift-alist))) + ;; The following is equivalent to mods & ~shift + (new-modifiers (and shifted-key (- mods kitty-kbp--shift-modifier)))) + (setq result + (vector (logior (or shifted-key keycode) + (aref kitty-kbp--numeric-modifiers (if shifted-key new-modifiers mods)))))))) (when (<= (aref kitty-kbp--suffix-u-private-bounds 0) keycode @@ -303,6 +318,12 @@ would swap meta and super.") ;; (send-string-to-terminal complete-string) (kitty-kbp-handle-non-printable complete-string))) +(defvar kitty-kbp-debug-escape-codes nil + "Print keyboard protocol escape codes") +(defun kitty-kbp-toggle-escape-codes () + (interactive) + (setq kitty-kbp-debug-escape-codes (not kitty-kbp-debug-escape-codes))) + (defun kitty-kbp--handle-escape-code (prompt) "Handle keycode using integer math; PROMPT is ignored." (let ((keycode 0) @@ -321,11 +342,11 @@ would swap meta and super.") (if (> keycode 0) (setq modifiers (1- current-num)) (setq keycode current-num))))) - ;; (message "Code: %d modifiers %d suffix: %s" keycode modifiers suffix) + (when kitty-kbp-debug-escape-codes + (message "Code: %d modifiers %d suffix: %s" keycode modifiers suffix) + (princ (kitty-kbp-decode-key-stroke keycode modifiers suffix))) (kitty-kbp-decode-key-stroke keycode modifiers suffix))) - - ;; -------------------------------------------------------------------------------- ;; Keymap storage functions (currently do not work for unknown reasons) |
