summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRavi R Kiran <aine.marina@gmail.com>2022-02-22 03:55:56 (GMT)
committerRavi R Kiran <aine.marina@gmail.com>2022-02-22 03:55:56 (GMT)
commite43b12a22d4ebeef621070c456567951369f2e70 (patch)
tree16a6f187b5b0225bdbb0685ea7343252eb6a9b2a
parent4cd9bcdaf398d17fb43be424ecb2e6cebfe7d7a8 (diff)
downloaddotemacs-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.el47
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)