Function: ghostel--raw-key-sequence
ghostel--raw-key-sequence is a natively compiled function defined in
ghostel.el.
Signature
(ghostel--raw-key-sequence KEY-NAME MODS)
Documentation
Build a raw escape sequence for KEY-NAME with MODS.
Returns the sequence string, or nil for unknown keys.
Source Code
;; Defined in /nix/store/1252krff0gb2kisjcpp45m50cpdskfrl-emacs-packages-deps/share/emacs/site-lisp/ghostel.el
(defun ghostel--raw-key-sequence (key-name mods)
"Build a raw escape sequence for KEY-NAME with MODS.
Returns the sequence string, or nil for unknown keys."
(let ((mod-num (ghostel--modifier-number mods)))
(cond
;; Ctrl + a single ASCII char with a C0 control code. Both a-z and
;; the @ A-Z [ \ ] ^ _ range fold to (char & #x1f): ctrl-a=1,
;; ctrl-z=26, ctrl-^=#x1e, ctrl-_=#x1f (readline / zle undo).
;; Meta additionally prefixes the C0 byte with ESC.
((and (= (length key-name) 1)
(let ((c (aref key-name 0)))
(or (and (<= ?a c) (<= c ?z))
(and (<= ?@ c) (<= c ?_))))
(> (logand mod-num 4) 0)) ; ctrl bit
(let ((c0 (string (logand (aref key-name 0) #x1f))))
(if (> (logand mod-num 2) 0) ; alt/meta bit
(concat "\e" c0)
c0)))
;; Meta + printable ASCII → ESC + char (legacy alt encoding)
((and (= (length key-name) 1)
(let ((c (aref key-name 0)))
(and (>= c 32) (<= c 126)))
(> (logand mod-num 2) 0)) ; alt/meta bit
(format "\e%c" (aref key-name 0)))
;; Simple special keys (CSI u encoding for modified variants)
((string= key-name "backspace") (if (> mod-num 0) (format "\e[127;%du" (1+ mod-num)) "\x7f"))
((string= key-name "return") (if (> mod-num 0) (format "\e[13;%du" (1+ mod-num)) "\r"))
((string= key-name "tab") (if (> mod-num 0) (format "\e[9;%du" (1+ mod-num)) "\t"))
((string= key-name "escape") (if (> mod-num 0) (format "\e[27;%du" (1+ mod-num)) "\e"))
((string= key-name "space") (if (> mod-num 0) (format "\e[32;%du" (1+ mod-num)) " "))
;; Cursor keys
((string= key-name "up") (ghostel--csi-letter "A" mod-num))
((string= key-name "down") (ghostel--csi-letter "B" mod-num))
((string= key-name "right") (ghostel--csi-letter "C" mod-num))
((string= key-name "left") (ghostel--csi-letter "D" mod-num))
((string= key-name "home") (ghostel--csi-letter "H" mod-num))
((string= key-name "end") (ghostel--csi-letter "F" mod-num))
;; Tilde keys
((string= key-name "insert") (ghostel--csi-tilde 2 mod-num))
((string= key-name "delete") (ghostel--csi-tilde 3 mod-num))
((string= key-name "prior") (ghostel--csi-tilde 5 mod-num))
((string= key-name "next") (ghostel--csi-tilde 6 mod-num))
;; Function keys (F1-F4 use SS3, F5-F12 use tilde)
((string= key-name "f1") (if (> mod-num 0) (format "\e[1;%dP" (1+ mod-num)) "\eOP"))
((string= key-name "f2") (if (> mod-num 0) (format "\e[1;%dQ" (1+ mod-num)) "\eOQ"))
((string= key-name "f3") (if (> mod-num 0) (format "\e[1;%dR" (1+ mod-num)) "\eOR"))
((string= key-name "f4") (if (> mod-num 0) (format "\e[1;%dS" (1+ mod-num)) "\eOS"))
((string= key-name "f5") (ghostel--csi-tilde 15 mod-num))
((string= key-name "f6") (ghostel--csi-tilde 17 mod-num))
((string= key-name "f7") (ghostel--csi-tilde 18 mod-num))
((string= key-name "f8") (ghostel--csi-tilde 19 mod-num))
((string= key-name "f9") (ghostel--csi-tilde 20 mod-num))
((string= key-name "f10") (ghostel--csi-tilde 21 mod-num))
((string= key-name "f11") (ghostel--csi-tilde 23 mod-num))
((string= key-name "f12") (ghostel--csi-tilde 24 mod-num))
(t nil))))