diff options
| author | Ravi R Kiran <aine.marina@gmail.com> | 2021-10-11 01:50:14 (GMT) |
|---|---|---|
| committer | Ravi R Kiran <aine.marina@gmail.com> | 2021-10-11 01:50:14 (GMT) |
| commit | d3ae36ac7698949d760858f77e7fc89a03096caf (patch) | |
| tree | 6ebc6a2d4de2250addd9a7cb5106ac1921eccea5 /lisp/kitty-keyboard-protocol.el | |
| parent | f3d1d00f31c72e300870cb3fbccf5ff772715698 (diff) | |
| download | dotemacs-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.el | 48 |
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))) |
