summaryrefslogtreecommitdiffstats
path: root/lisp/kitty-keyboard-protocol.el
diff options
context:
space:
mode:
authorRavi R Kiran <aine.marina@gmail.com>2021-10-11 01:50:14 (GMT)
committerRavi R Kiran <aine.marina@gmail.com>2021-10-11 01:50:14 (GMT)
commitd3ae36ac7698949d760858f77e7fc89a03096caf (patch)
tree6ebc6a2d4de2250addd9a7cb5106ac1921eccea5 /lisp/kitty-keyboard-protocol.el
parentf3d1d00f31c72e300870cb3fbccf5ff772715698 (diff)
downloaddotemacs-d3ae36ac7698949d760858f77e7fc89a03096caf.zip
dotemacs-d3ae36ac7698949d760858f77e7fc89a03096caf.tar.gz
dotemacs-d3ae36ac7698949d760858f77e7fc89a03096caf.tar.bz2
No xterm dependencies is kitty-keyboard-protocol
Diffstat (limited to 'lisp/kitty-keyboard-protocol.el')
-rw-r--r--lisp/kitty-keyboard-protocol.el48
1 files changed, 27 insertions, 21 deletions
diff --git a/lisp/kitty-keyboard-protocol.el b/lisp/kitty-keyboard-protocol.el
index 120be50..566e6be 100644
--- a/lisp/kitty-keyboard-protocol.el
+++ b/lisp/kitty-keyboard-protocol.el
@@ -223,10 +223,16 @@ would swap meta and super.")
(defconst kitty-kbp--shift-modifier (car (rassoc 'shift kitty-kbp-modifiers-alist))
"Value of the shift modifier.")
+(defun kitty-kbp--2d-array-lookup (v2d first-dim second-dim)
+ (when-let ((row (and (< first-dim (length v2d)) (aref v2d first-dim)))
+ (val (and (< second-dim (length row)) (aref row second-dim))))
+ val))
+
(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)
- (let ((mods (logand modifiers (1- (length kitty-kbp--numeric-modifiers)))))
+ (let ((mods (logand modifiers (1- (length kitty-kbp--numeric-modifiers))))
+ (result))
(if (eql suffix ?u)
(if (< keycode 57344)
;; To do: support remaining keycodes in unicode private use area
@@ -236,26 +242,22 @@ would swap meta and super.")
(alist-get keycode kitty-kbp-shift-alist)))
;; The following is equivalent to mods & ~shift
(new-modifiers (and shifted-key (- mods kitty-kbp--shift-modifier))))
- (vector (logior (or shifted-key keycode)
- (aref kitty-kbp--numeric-modifiers (if shifted-key new-modifiers mods)))))
+ (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
(aref kitty-kbp--suffix-u-private-bounds 1))
- (aref (aref kitty-kbp--suffix-u-private-precomputed
- (- keycode (aref kitty-kbp--suffix-u-private-bounds 0)))
- mods)))
+ (setq result
+ (kitty-kbp--2d-array-lookup kitty-kbp--suffix-u-private-precomputed
+ (- keycode (aref kitty-kbp--suffix-u-private-bounds 0))
+ mods))))
(if (eql suffix ?~)
- (if (eql keycode 200)
- (xterm-translate-bracketed-paste nil)
- (aref (aref kitty-kbp--suffix-tilde-precomputed keycode) mods))
+ (setq result (kitty-kbp--2d-array-lookup kitty-kbp--suffix-tilde-precomputed keycode mods))
(when (<= ?A suffix ?S)
- (if (and (or (eql suffix ?I) (eql suffix ?O))
- (eql keycode 0)
- (eql mods 0))
- ;; xterm focus in/out; perhaps there's a better way to do this
- (if (eql suffix ?I) (xterm-translate-focus-in nil) (xterm-translate-focus-out nil))
- (aref (aref kitty-kbp--suffix-alpha-precomputed (- suffix ?A)) mods)))))))
+ (setq result (kitty-kbp--2d-array-lookup kitty-kbp--suffix-alpha-precomputed (- suffix ?A) mods)))))
+ (or result (list keycode modifiers suffix))))
(defun kitty-kbp-handle-non-printable (keystr)
"Split kitty non-printable keystring KEYSTR (e.g., 105;5u) and construct key"
@@ -267,6 +269,15 @@ would swap meta and super.")
;; (send-string-to-terminal (format "%s %s %s" keystr code modifiers))
(kitty-kbp-decode-key-stroke code modifiers suffix)))
+(defconst kitty-kbp-set-string "\e[>1;u" "Terminal set string")
+(defconst kitty-kbp-reset-string "\e[<u" "Terminal reset string")
+(defun kitty-kbp-setup-terminal (&optional verbose)
+ (when verbose
+ (message "Applying kitty keyboard protocol changes"))
+ (send-string-to-terminal kitty-kbp-set-string)
+ (push kitty-kbp-set-string (terminal-parameter nil 'tty-mode-set-strings))
+ (push kitty-kbp-reset-string (terminal-parameter nil 'tty-mode-reset-strings)))
+
;; --------------------------------------------------------------------------------
@@ -370,12 +381,7 @@ would swap meta and super.")
keystr)
(kitty-kbp-decode-key-stroke 0 mod suffix)))
all-modifiers)))
- (mapcar #'car kitty-kbp--suffix-alpha-map)))
-
- ;; Terminal mouse handling
- (define-key keymap "\e[200~" #'xterm-translate-bracketed-paste)
- (define-key keymap "\e[I" #'xterm-translate-focus-in)
- (define-key keymap "\e[O" #'xterm-translate-focus-out))
+ (mapcar #'car kitty-kbp--suffix-alpha-map))))
;; (setq dum2 (let ((map (make-sparse-keymap)))
;; (kitty-kbp--insert-decode-table map)))