Function: ghostel--push-remote-terminfo
ghostel--push-remote-terminfo is a natively compiled function defined
in ghostel-shell.el.
Signature
(ghostel--push-remote-terminfo REMOTE-PREFIX)
Documentation
Push bundled compiled terminfo into a temp dir on the remote host.
REMOTE-PREFIX is the TRAMP prefix (e.g. "/ssh:host:"). Writes
both the Linux (x/) and macOS (78/) layouts so the remote ncurses
or BSD libcurses finds it regardless of OS. Returns a plist
(:env (...) :temp-dirs (...)) suitable for merging into the
remote-integration plist, or nil if the local terminfo isn't
available or the push fails.
Source Code
;; Defined in /nix/store/1252krff0gb2kisjcpp45m50cpdskfrl-emacs-packages-deps/share/emacs/site-lisp/ghostel-shell.el
(defun ghostel--push-remote-terminfo (remote-prefix)
"Push bundled compiled terminfo into a temp dir on the remote host.
REMOTE-PREFIX is the TRAMP prefix (e.g. \"/ssh:host:\"). Writes
both the Linux (x/) and macOS (78/) layouts so the remote ncurses
or BSD libcurses finds it regardless of OS. Returns a plist
\(:env (...) :temp-dirs (...)) suitable for merging into the
remote-integration plist, or nil if the local terminfo isn't
available or the push fails."
(let ((local-dir (ghostel--terminfo-directory)))
(when local-dir
(condition-case err
(let* ((temp-dir (make-temp-file
(concat remote-prefix "ghostel-tinfo-") t))
(remote-dir (file-remote-p temp-dir 'localname))
(coding-system-for-write 'binary)
(coding-system-for-read 'binary))
(dolist (sub '("x" "g" "78" "67"))
(let ((src (expand-file-name
(pcase sub
((or "x" "78") "xterm-ghostty")
((or "g" "67") "ghostty"))
(expand-file-name sub local-dir))))
(when (file-readable-p src)
(let ((bytes (with-temp-buffer
(set-buffer-multibyte nil)
(insert-file-contents-literally src)
(buffer-string)))
(dest (concat (file-name-as-directory temp-dir)
sub "/"
(if (member sub '("x" "78"))
"xterm-ghostty"
"ghostty"))))
(make-directory (file-name-directory dest) t)
(ghostel--write-remote-file dest bytes)))))
(list :env (list (format "TERMINFO=%s" remote-dir))
:temp-dirs (list temp-dir)))
(error
(message "ghostel: remote terminfo push failed: %s"
(error-message-string err))
nil)))))