diff options
author | Karoly Lorentey <lorentey@elte.hu> | 2006-05-20 15:28:05 +0000 |
---|---|---|
committer | Karoly Lorentey <lorentey@elte.hu> | 2006-05-20 15:28:05 +0000 |
commit | b34c34dae08d94ca9ab0cd50cb53f0ab0cd21491 (patch) | |
tree | 9c3fba4677f3dc7b1261a9d34868834e395b5f02 | |
parent | a98f16179037d21357c817701c5181ac37fec0a2 (diff) | |
download | emacs-b34c34dae08d94ca9ab0cd50cb53f0ab0cd21491.tar.gz |
Don't load terminit files repeatedly. Also, don't call terminit functions more than once per terminal.
* lisp/faces.el (tty-find-type): New function.
(tty-run-terminal-initialization): Load files just once per Emacs
session, and call terminit functions just once per terminal.
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-563
-rw-r--r-- | lisp/faces.el | 59 |
1 files changed, 37 insertions, 22 deletions
diff --git a/lisp/faces.el b/lisp/faces.el index ddce4c72e76..b428db0ebf0 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -1840,34 +1840,49 @@ created." (delete-frame frame))) frame)) +(defun tty-find-type (pred type) + "Return the longest prefix of TYPE to which PRED returns non-nil. +TYPE should be a tty type name such as \"xterm-16color\". + +The function tries only those prefixes that are followed by a +dash or underscore in the original type name, like \"xterm\" in +the above example." + (let (hyphend) + (while (and type + (not (funcall pred type))) + ;; Strip off last hyphen and what follows, then try again + (setq type + (if (setq hyphend (string-match "[-_][^-_]+$" type)) + (substring type 0 hyphend) + nil)))) + type) + (defun tty-run-terminal-initialization (frame) "Run the special initialization code for the terminal type of FRAME." ;; Load library for our terminal type. ;; User init file can set term-file-prefix to nil to prevent this. (with-selected-frame frame - (unless (null term-file-prefix) - (let* ((term (frame-parameter frame 'tty-type)) - (term2 term) - hyphend term-init-func) - (while (and term - (not (load (concat term-file-prefix term) t t))) - ;; Strip off last hyphen and what follows, then try again - (setq term - (if (setq hyphend (string-match "[-_][^-_]+$" term)) - (substring term 0 hyphend) - nil))) - ;; The terminal file has been loaded, now find and call the - ;; terminal specific initialization function. - (while (and term2 - (not (fboundp - (setq term-init-func (intern (concat "terminal-init-" term2)))))) - ;; Strip off last hyphen and what follows, then try again - (setq term2 - (if (setq hyphend (string-match "[-_][^-_]+$" term2)) - (substring term2 0 hyphend) - nil))) + (unless (or (null term-file-prefix) + ;; Don't reinitialize the terminal each time a new + ;; frame is opened on it. + (terminal-parameter frame 'terminal-initted)) + (let* (term-init-func) + ;; First, load the terminal initialization file, if it is + ;; available and it hasn't been loaded already. + (tty-find-type #'(lambda (type) + (let ((file (locate-library (concat term-file-prefix type)))) + (and file + (or (assoc file load-history) + (load file t t))))) + (tty-type frame)) + ;; Next, try to find a matching initialization function, and call it. + (tty-find-type #'(lambda (type) + (fboundp (setq term-init-func + (intern (concat "terminal-init-" type))))) + (tty-type frame)) (when (fboundp term-init-func) - (funcall term-init-func)))))) + (funcall term-init-func)) + (set-terminal-parameter frame 'terminal-initted term-init-func))))) ;; Called from C function init_display to initialize faces of the ;; dumped terminal frame on startup. |