XEmacs loads the user's initialization file.")
(defvar after-init-hook nil
- "*Functions to call after loading the init file (`.emacs').
+ "*Functions to call after loading the init file.
The call is not protected by a condition-case, so you can set `debug-on-error'
-in `.emacs', and put all the actual code on `after-init-hook'.")
+in the init file, and put all the actual code on `after-init-hook'.")
(defvar term-setup-hook nil
"*Functions to be called after loading terminal-specific Lisp code.
;; #### called `site-run-file' in FSFmacs
-(defvar site-start-file (purecopy "site-start")
+(defvar site-start-file "site-start"
"File containing site-wide run-time initializations.
This file is loaded at run-time before `.emacs'. It
contains inits that need to be in place for the entire site, but
:type 'string
:group 'mail)
-(defvar auto-save-list-file-prefix "~/.saves-"
- "Prefix for generating auto-save-list-file-name.
-Emacs's pid and the system name will be appended to
-this prefix to create a unique file name.")
-
(defvar init-file-debug nil)
(defvar init-file-had-error nil)
\f
(defvar command-switch-alist
- (purecopy
- '(("-help" . command-line-do-help)
- ("-version". command-line-do-version)
- ("-V" . command-line-do-version)
- ("-funcall". command-line-do-funcall)
- ("-f" . command-line-do-funcall)
- ("-e" . command-line-do-funcall-1)
- ("-eval" . command-line-do-eval)
- ("-load" . command-line-do-load)
- ("-l" . command-line-do-load)
- ("-insert" . command-line-do-insert)
- ("-i" . command-line-do-insert)
- ("-kill" . command-line-do-kill)
- ;; Options like +35 are handled specially.
- ;; Window-system, site, or package-specific code might add to this.
- ;; X11 handles its options by letting Xt remove args from this list.
- ))
+ '(("-help" . command-line-do-help)
+ ("-version". command-line-do-version)
+ ("-V" . command-line-do-version)
+ ("-funcall". command-line-do-funcall)
+ ("-f" . command-line-do-funcall)
+ ("-e" . command-line-do-funcall-1)
+ ("-eval" . command-line-do-eval)
+ ("-load" . command-line-do-load)
+ ("-l" . command-line-do-load)
+ ("-insert" . command-line-do-insert)
+ ("-i" . command-line-do-insert)
+ ("-kill" . command-line-do-kill)
+ ;; Options like +35 are handled specially.
+ ;; Window-system, site, or package-specific code might add to this.
+ ;; X11 handles its options by letting Xt remove args from this list.
+ )
"Alist of command-line switches.
Elements look like (SWITCH-STRING . HANDLER-FUNCTION).
HANDLER-FUNCTION receives switch name as sole arg;
In addition, the")
"The"))
(princ " following options are accepted:
+ -sd Show dump ID. Ignored when configured without --pdump.
+ -nd Don't load the dump file. Roughly like old temacs.
+ Ignored when configured without --pdump.
-t <device> Use TTY <device> instead of the terminal for input
and output. This implies the -nw option.
-nw Inhibit the use of any window-system-specific
-debug-init Enter the debugger if an error in the init file occurs.
-unmapped Do not map the initial frame.
-no-site-file Do not load the site-specific init file (site-start.el).
- -no-init-file Do not load the user-specific init file (~/.emacs).
+ -no-init-file Do not load the user-specific init file.
-no-early-packages Do not process early packages.
-no-autoloads Do not load global symbol files (auto-autoloads) at
startup. Also implies `-vanilla'.
-vanilla Equivalent to -q -no-site-file -no-early-packages.
-q Same as -no-init-file.
-user-init-file <file> Use <file> as init file.
- -user-init-directory <directory> use <directory> as init directory.
+ -user-init-directory <directory> Use <directory> as init directory.
-user <user> Load user's init file instead of your own.
- Equivalent to -user-init-file ~<user>/.emacs
- -user-init-directory ~<user>/.xemacs/
-u <user> Same as -user.\n")
(let ((l command-switch-alist)
(insert (lambda (&rest x)
'external-debugging-output))
(if (null emacs-roots)
- (startup-find-roots-warning)
- (startup-setup-paths emacs-roots
- user-init-directory
- inhibit-early-packages
- inhibit-site-lisp
- debug-paths))
+ (startup-find-roots-warning))
+ (startup-setup-paths emacs-roots
+ user-init-directory
+ inhibit-early-packages
+ inhibit-site-lisp
+ debug-paths)
(startup-setup-paths-warning))
- (if (and (not inhibit-autoloads)
- lisp-directory)
- (load (expand-file-name (file-name-sans-extension autoload-file-name)
- lisp-directory) nil t))
+ (when (and (not inhibit-autoloads)
+ lisp-directory)
+ (load (expand-file-name (file-name-sans-extension autoload-file-name)
+ lisp-directory) nil t)
+ (if (featurep 'utf-2000)
+ (load (expand-file-name
+ (file-name-sans-extension autoload-file-name)
+ (expand-file-name "utf-2000" lisp-directory))
+ nil t)))
(if (not inhibit-autoloads)
(progn
(packages-load-package-auto-autoloads late-package-load-path)
(packages-load-package-auto-autoloads last-package-load-path)))
- (unwind-protect
- (command-line)
- ;; Do this again, in case .emacs defined more abbreviations.
+ (let (error-data)
+ (condition-case data
+ (command-line)
+ ;; catch non-error signals, especially quit
+ (t (setq error-data data)))
+ ;; Do this again, in case the init file defined more abbreviations.
(setq default-directory (abbreviate-file-name default-directory))
;; Specify the file for recording all the auto save files of
;; this session. This is used by recover-session.
- (setq auto-save-list-file-name
- (expand-file-name
- (format "%s%d-%s"
- auto-save-list-file-prefix
- (emacs-pid)
- (system-name))))
+ (if auto-save-list-file-prefix
+ (setq auto-save-list-file-name
+ (expand-file-name
+ (format "%s%d-%s"
+ auto-save-list-file-prefix
+ (emacs-pid)
+ (system-name)))))
(run-hooks 'emacs-startup-hook)
(and term-setup-hook
(run-hooks 'term-setup-hook))
(setq term-setup-hook nil)
- ;; ;; Modify the initial frame based on what .emacs puts into
+ ;; ;; Modify the initial frame based on what the init file puts into
;; ;; ...-frame-alist.
(frame-notice-user-settings)
;; ;;####FSFmacs junk
;; (font-menu-add-default))
(when window-setup-hook
(run-hooks 'window-setup-hook))
- (setq window-setup-hook nil))
+ (setq window-setup-hook nil)
+ (if error-data
+ ;; re-signal, and don't allow continuation as that will probably
+ ;; wipe out the user's .emacs if she hasn't migrated yet!
+ (signal-error (car error-data) (cdr error-data))))
(if load-user-init-file-p
(maybe-migrate-user-init-file))
- ;;####FSFmacs junk
- ;; (or menubar-bindings-done
- ;; (precompute-menubar-bindings))
+ ;; FSF calls precompute-menubar-bindings. We don't mix menubars
+ ;; and keymaps.
))
-;;####FSFmacs junk
-;;; Precompute the keyboard equivalents in the menu bar items.
-;;(defun precompute-menubar-bindings ()
-;; (if (eq window-system 'x)
-;; (let ((submap (lookup-key global-map [menu-bar])))
-;; (while submap
-;; (and (consp (car submap))
-;; (symbolp (car (car submap)))
-;; (stringp (car-safe (cdr (car submap))))
-;; (keymapp (cdr (cdr (car submap))))
-;; (x-popup-menu nil (cdr (cdr (car submap)))))
-;; (setq submap (cdr submap))))))
-
(defun command-line-early (args)
;; This processes those switches which need to be processed before
;; starting up the window system.
(push (pop args) new-args)))
(t (push arg new-args))))
+ ;; obsolete, initialize for backward compatibility
(setq init-file-user (and load-user-init-file-p ""))
(nreverse new-args)))
;; handled here instead of down in C.
(setq command-line-args-left (command-line-early command-line-args-left))
+ (when (eq system-type 'windows-nt)
+ (init-mswindows-at-startup))
+
;; Setup the toolbar icon directory
(when (featurep 'toolbar)
(init-toolbar-location))
initialization code. Moreover the customize settings will be in
custom.el.
+You can undo the migration at any time with
+M-x maybe-unmigrate-user-init-file.
+
If you choose not to do this now, XEmacs will not ask you this
question in the future. However, you can still make XEmacs
perform the migration at any time with M-x migrate-user-init-file.")
(yes-or-no-p-minibuf (concat "Migrate init file to "
user-init-directory
"? "))))
- (migrate-user-init-file)
+ (progn
+ (migrate-user-init-file)
+ (maybe-create-compatibility-dot-emacs))
(customize-save-variable 'load-home-init-file t))))
+(defun maybe-create-compatibility-dot-emacs ()
+ "Ask user if she wants to create a .emacs compatibility file."
+ (if (with-output-to-temp-buffer (help-buffer-name nil)
+ (progn
+ (princ "The initialization code has now been migrated to the ")
+ (princ user-init-directory)
+ (princ "directory.
+
+For backwards compatibility with, for example, older versions of XEmacs,
+XEmacs can create a special old-style .emacs file in your home
+directory which will load the relocated initialization code.")
+ (show-temp-buffer-in-current-frame standard-output)
+ (yes-or-no-p-minibuf "Create compatibility .emacs? ")))
+ (create-compatibility-dot-emacs)))
+
(defun migrate-user-init-file ()
"Migrate the init file from the home directory."
(interactive)
(message "Creating %s directory..." user-init-directory)
(make-directory user-init-directory)))
(message "Migrating custom file...")
+ (customize-set-value 'load-home-init-file nil)
(custom-migrate-custom-file (make-custom-file-name user-init-file
'force-new))
(message "Moving init file...")
- (rename-file user-init-file
- (expand-file-name user-init-file-base
- user-init-directory))
+ (let ((new-user-init-file (expand-file-name user-init-file-base
+ user-init-directory)))
+ (rename-file user-init-file new-user-init-file)
+ (setq user-init-file new-user-init-file))
(message "Migration done."))
+(defun create-compatibility-dot-emacs ()
+ "Create .emacs compatibility file for migrated setup."
+ (message "Creating .emacs compatibility file.")
+ (with-temp-file (expand-file-name ".emacs" "~")
+ (insert ";;; XEmacs backwards compatibility file\n")
+ (insert "(setq user-init-file\n")
+ (insert " (expand-file-name \"init.el\"\n")
+ (insert " (expand-file-name \".xemacs\" \"~\")))\n")
+ (insert "(setq custom-file\n")
+ (insert " (expand-file-name \"custom.el\"\n")
+ (insert " (expand-file-name \".xemacs\" \"~\")))\n")
+ (insert "\n")
+ (insert "(load-file user-init-file)\n")
+ (insert "(load-file custom-file)"))
+ (message "Created .emacs compatibility file."))
+
+(defun maybe-unmigrate-user-init-file ()
+ "Possibly unmigrate the user's init and custom files."
+ (interactive)
+ (let ((dot-emacs-file-name (expand-file-name ".emacs" "~")))
+ (if (and (not load-home-init-file)
+ (or (not (file-exists-p dot-emacs-file-name))
+ (yes-or-no-p-minibuf (concat "Overwrite " dot-emacs-file-name
+ "? "))))
+ (unmigrate-user-init-file dot-emacs-file-name))))
+
+(defun unmigrate-user-init-file (&optional target-file-name)
+ "Unmigrate the user's init and custom files."
+ (interactive)
+ (let ((target-file-name
+ (or target-file-name (expand-file-name ".emacs" "~"))))
+ (rename-file user-init-file target-file-name 'ok-if-already-exists)
+ (setq user-init-file target-file-name)
+ (let ((old-custom-file custom-file))
+ (custom-migrate-custom-file target-file-name)
+ (customize-save-variable 'load-home-init-file t)
+ (delete-file old-custom-file))))
+
(defun load-user-init-file ()
"This function actually reads the init file."
(if (not user-init-file)
(setq user-init-file
(find-user-init-file user-init-directory)))
+ (if (not custom-file)
+ (setq custom-file (make-custom-file-name user-init-file)))
+ ;; #### should test load-user-init-file-p here, not in load-init-file
+ ;; see comment there
(if (and user-init-file
(file-readable-p user-init-file))
(load user-init-file t t t))
- (if (not custom-file)
- (setq custom-file (make-custom-file-name user-init-file)))
(if (and custom-file
(or (not user-init-file)
(not (string= custom-file user-init-file)))
(debug-on-error-initial
(if (eq init-file-debug t) 'startup init-file-debug)))
(let ((debug-on-error debug-on-error-initial))
+ ;; #### I believe this test is incorrect, it leads to custom-file
+ ;; (at least) being undefined
(if (and load-user-init-file-p init-file-debug)
(progn
;; Do this without a condition-case if the user wants to debug.
(load-user-init-file))
(condition-case error
(progn
+ ;; #### probably incorrect, see comment above
(if load-user-init-file-p
(load-user-init-file))
(setq init-file-had-error nil))
": how to get the latest version\n")
"\n--\n"
(face italic "\
-Copyright (C) 1985-1999 Free Software Foundation, Inc.
+Copyright (C) 1985-2001 Free Software Foundation, Inc.
Copyright (C) 1990-1994 Lucid, Inc.
Copyright (C) 1993-1997 Sun Microsystems, Inc. All Rights Reserved.
Copyright (C) 1994-1996 Board of Trustees, University of Illinois
-Copyright (C) 1995-1996 Ben Wing\n"))
+Copyright (C) 1995-2001 Ben Wing
+Copyright (C) 1996-2002 MORIOKA Tomohiko
+"))
((face (blue bold underline) "\nInformation, on-line help:\n\n")
"XEmacs comes with plenty of documentation...\n\n"
((key about-xemacs) ": see who's developing XEmacs\n"))
((face (blue bold underline) "\nUseful stuff:\n\n")
- "Things that you should know rather quickly...\n\n"
+ "Things that you should learn rather quickly...\n\n"
((key find-file) ": visit a file\n")
((key save-buffer) ": save changes\n")
((key advertised-undo) ": undo changes\n")
(princ (format "lisp-directory:\n%S\n" lisp-directory)
'external-debugging-output))
+ (if (featurep 'mule)
+ (progn
+ (setq mule-lisp-directory
+ (paths-find-mule-lisp-directory roots
+ lisp-directory))
+ (if debug-paths
+ (princ (format "mule-lisp-directory:\n%S\n"
+ mule-lisp-directory)
+ 'external-debugging-output)))
+ (setq mule-lisp-directory '()))
+
+ (if (featurep 'utf-2000)
+ (progn
+ (setq utf-2000-lisp-directory
+ (paths-find-utf-2000-lisp-directory roots
+ lisp-directory))
+ (if debug-paths
+ (princ (format "utf-2000-lisp-directory:\n%S\n"
+ utf-2000-lisp-directory)
+ 'external-debugging-output)))
+ (setq utf-2000-lisp-directory '()))
+
(setq site-directory (and (null inhibit-site-lisp)
(paths-find-site-lisp-directory roots)))
late-package-load-path
last-package-load-path
lisp-directory
- site-directory))
+ site-directory
+ mule-lisp-directory
+ utf-2000-lisp-directory))
(setq Info-directory-list
(paths-construct-info-path roots
(erase-buffer)
(buffer-disable-undo (current-buffer))
(if (null lisp-directory) (push "lisp-directory" warnings))
+ (if (and (featurep 'mule)
+ (null mule-lisp-directory))
+ (push "mule-lisp-directory" warnings))
+ (if (and (featurep 'utf-2000)
+ (null utf-2000-lisp-directory))
+ (push "utf-2000-lisp-directory" warnings))
(if (null exec-directory) (push "exec-directory" warnings))
(if (null data-directory) (push "data-directory" warnings))
(if (null doc-directory) (push "doc-directory" warnings))