Function: te-create-terminfo

te-create-terminfo is a byte-compiled function defined in terminal.el.gz.

Signature

(te-create-terminfo)

Documentation

Create and compile a terminfo entry for the virtual terminal. This is kept in the directory specified by te-terminfo-directory.

Source Code

;; Defined in /usr/src/emacs/lisp/obsolete/terminal.el.gz
(defun te-create-terminfo ()
  "Create and compile a terminfo entry for the virtual terminal. This is kept
in the directory specified by `te-terminfo-directory'."
  (when (and system-uses-terminfo
	     (not (file-exists-p (concat te-terminfo-directory
					 (substring te-terminal-name-prefix 0 1)
					 "/" te-terminal-name))))
    (let ( (terminfo
	    (concat
	     ;; The first newline avoids trouble with ncurses.
	     (format "%s,\n\tmir, xon,cols#%d, lines#%d,"
		     te-terminal-name te-width te-height)
	     "bel=^P^G, clear=^P\\f, cr=^P^A, cub1=^P^B, cud1=^P\\n,"
	     "cuf1=^P^F, cup=^P=%p1%'\\s'%+%c%p2%'\\s'%+%c,"
	     "dch=^Pd%p1%'\\s'%+%c, dch1=^Pd!, dl=^P^K%p1%'\\s'%+%c,"
	     "dl1=^P^K!, ed=^PC, el=^Pc, home=^P=\\s\\s,"
	     "ich=^P_%p1%'\\s'%+%c, ich1=^P_!, il=^P^O%p1%'\\s'%+%c,"
	     ;; The last newline avoids trouble with ncurses.
	     "il1=^P^O!, ind=^P\\n, nel=\\n,\n"))
	   ;; This is the desired name for the source file.
	   (file-name (concat te-terminfo-directory te-terminal-name ".tif")) )
      (make-directory te-terminfo-directory t)
      (let ((temp-file
	     (make-temp-file (expand-file-name "tif" te-terminfo-directory))))
	;; Store the source file under a random temp name.
	(with-temp-file temp-file
	  (insert terminfo))
	;; Rename it to the desired name.
	;; We use this roundabout approach
	;; to avoid any risk of writing a name that
	;; was mischievously set up as a symlink.
	(rename-file temp-file file-name))
      ;; Now compile that source to make the binary that the
      ;; programs actually use.
      (let ((process-environment
	     (cons (concat "TERMINFO="
			   (directory-file-name te-terminfo-directory))
		   process-environment)))
	(set-process-sentinel (start-process "tic" nil "tic" file-name)
			      #'te-tic-sentinel))))
    (directory-file-name te-terminfo-directory))