summaryrefslogtreecommitdiff
path: root/lisp/startup.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/startup.el')
-rw-r--r--lisp/startup.el77
1 files changed, 50 insertions, 27 deletions
diff --git a/lisp/startup.el b/lisp/startup.el
index 26671e50014..e79ea4407b1 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -36,6 +36,13 @@
(defvar command-line-processed nil
"Non-nil once command line has been processed.")
+(defvar window-system initial-window-system
+ "Name of window system the selected frame is displaying through.
+The value is a symbol--for instance, `x' for X windows.
+The value is nil if the selected frame is on a text-only-terminal.")
+
+(make-variable-frame-local 'window-system)
+
(defgroup initialization nil
"Emacs start-up procedure"
:group 'internal)
@@ -420,9 +427,9 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
;; for instance due to a dense colormap.
(when (or frame-initial-frame
;; If frame-initial-frame has no meaning, do this anyway.
- (not (and window-system
+ (not (and initial-window-system
(not noninteractive)
- (not (eq window-system 'pc)))))
+ (not (eq initial-window-system 'pc)))))
;; Modify the initial frame based on what .emacs puts into
;; ...-frame-alist.
(if (fboundp 'frame-notice-user-settings)
@@ -435,7 +442,7 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
(let ((frame-background-mode frame-background-mode)
(frame (selected-frame))
term)
- (when (and (null window-system)
+ (when (and (null initial-window-system)
;; Don't override a possibly customized value.
(null frame-background-mode)
;; Don't override user specifications.
@@ -491,6 +498,20 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
(defvar tool-bar-originally-present nil
"Non-nil if tool-bars are present before user and site init files are read.")
+(defvar handle-args-function-alist '((nil . tty-handle-args))
+ "Functions for processing window-system dependent command-line arguments.
+Window system startup files should add their own function to this
+alist, which should parse the command line arguments. Those
+pertaining to the window system should be processed and removed
+from the returned command line.")
+
+(defvar window-system-initialization-alist '((nil . ignore))
+ "Alist of window-system initialization functions.
+Window-system startup files should add their own initialization
+function to this list. The function should take no arguments,
+and initialize the window system environment to prepare for
+opening the first frame (e.g. open a connection to the server).")
+
;; Handle the X-like command-line arguments "-fg", "-bg", "-name", etc.
(defun tty-handle-args (args)
(let (rest)
@@ -610,14 +631,21 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
;; Read window system's init file if using a window system.
(condition-case error
- (if (and window-system (not noninteractive))
- (load (concat term-file-prefix
- (symbol-name window-system)
- "-win")
- ;; Every window system should have a startup file;
- ;; barf if we can't find it.
- nil t))
- ;; If we can't read it, print the error message and exit.
+ (unless noninteractive
+ (if (and initial-window-system
+ (not (featurep
+ (intern (concat (symbol-name initial-window-system)
+ "-win")))))
+ (error "Unsupported window system `%s'" initial-window-system))
+ ;; Process window-system specific command line parameters.
+ (setq command-line-args
+ (funcall (or (cdr (assq initial-window-system handle-args-function-alist))
+ (error "Unsupported window system `%s'" initial-window-system))
+ command-line-args))
+ ;; Initialize the window system. (Open connection, etc.)
+ (funcall (or (cdr (assq initial-window-system window-system-initialization-alist))
+ (error "Unsupported window system `%s'" initial-window-system))))
+ ;; If there was an error, print the error message and exit.
(error
(princ
(if (eq (car error) 'error)
@@ -633,13 +661,9 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
(cdr error) ", "))))
'external-debugging-output)
(terpri 'external-debugging-output)
- (setq window-system nil)
+ (setq initial-window-system nil)
(kill-emacs)))
- ;; Windowed displays do this inside their *-win.el.
- (unless (or (display-graphic-p) noninteractive)
- (setq command-line-args (tty-handle-args command-line-args)))
-
(set-locale-environment nil)
;; Convert the arguments to Emacs internal representation.
@@ -716,7 +740,7 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
;; If frame was created with a menu bar, set menu-bar-mode on.
(unless (or noninteractive
- (and (memq window-system '(x w32))
+ (and (memq initial-window-system '(x w32))
(<= (frame-parameter nil 'menu-bar-lines) 0)))
(menu-bar-mode 1))
@@ -726,10 +750,10 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
(<= (frame-parameter nil 'tool-bar-lines) 0))
(tool-bar-mode 1))
- ;; Can't do this init in defcustom because window-system isn't set.
+ ;; Can't do this init in defcustom because initial-window-system isn't set.
(unless (or noninteractive
(eq system-type 'ms-dos)
- (not (memq window-system '(x w32))))
+ (not (memq initial-window-system '(x w32))))
(setq-default blink-cursor t)
(blink-cursor-mode 1))
@@ -737,13 +761,13 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
;; DOS/Windows systems have a PC-type keyboard which has both
;; <delete> and <backspace> keys.
(when (or (memq system-type '(ms-dos windows-nt))
- (and (memq window-system '(x))
+ (and (memq initial-window-system '(x))
(fboundp 'x-backspace-delete-keys-p)
(x-backspace-delete-keys-p))
;; If the terminal Emacs is running on has erase char
;; set to ^H, use the Backspace key for deleting
;; backward and, and the Delete key for deleting forward.
- (and (null window-system)
+ (and (null initial-window-system)
(eq tty-erase-char 8)))
(setq-default normal-erase-is-backspace t)
(normal-erase-is-backspace-mode 1)))
@@ -756,11 +780,10 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
;; Register default TTY colors for the case the terminal hasn't a
;; terminal init file.
- (unless (memq window-system '(x w32))
- ;; We do this regardles of whether the terminal supports colors
- ;; or not, since they can switch that support on or off in
- ;; mid-session by setting the tty-color-mode frame parameter.
- (tty-register-default-colors))
+ ;; We do this regardles of whether the terminal supports colors
+ ;; or not, since they can switch that support on or off in
+ ;; mid-session by setting the tty-color-mode frame parameter.
+ (tty-register-default-colors)
;; Record whether the tool-bar is present before the user and site
;; init files are processed. frame-notice-user-settings uses this
@@ -954,7 +977,7 @@ or `CVS', and any subdirectory that contains a file named `.nosearch'."
;; Load library for our terminal type.
;; User init file can set term-file-prefix to nil to prevent this.
(unless (or noninteractive
- window-system
+ initial-window-system
(null term-file-prefix))
(let ((term (getenv "TERM"))
hyphend)