update.
[chise/xemacs-chise.git.1] / lisp / startup.el
index c821f84..26cc299 100644 (file)
@@ -421,10 +421,15 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n")
                           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
@@ -433,8 +438,11 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n")
          (packages-load-package-auto-autoloads late-package-load-path)
          (packages-load-package-auto-autoloads last-package-load-path)))
 
-    (unwind-protect
-       (command-line)
+    (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
@@ -459,28 +467,18 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n")
       ;;         (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.
@@ -565,6 +563,7 @@ Type ^H^H^H (Control-h Control-h Control-h) to get more help options.\n")
          (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)))
@@ -591,6 +590,9 @@ If this is nil, no message will be displayed.")
       ;; 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))
@@ -713,43 +715,56 @@ 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
                                           "? "))))
-         (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.
+         (let ((backup (migrate-user-init-file)))
+           (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? ")))
+             (if backup
+                 (progn
+                   (princ "\nMoreover, a backup of your old .emacs file was created as\n")
+                   (princ backup)
+                   (princ ".\n")))
+             (show-temp-buffer-in-current-frame standard-output)
+             (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 (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."
+  "Migrate the init file from the home directory.
+Return the name of backup file, if one was created."
   (interactive)
   (if (not (file-exists-p user-init-directory))
       (progn
        (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...")
-  (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."))
+  (let* ((backup (concat user-init-file ".backup"))
+        (backup-p
+         (and (not (file-exists-p backup))
+              (progn
+                (copy-file user-init-file backup)
+                t))))
+    (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...")
+    (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.")
+    (and backup-p backup)))
 
 (defun create-compatibility-dot-emacs ()
   "Create .emacs compatibility file for migrated setup."
@@ -794,11 +809,13 @@ directory which will load the relocated initialization code.")
   (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)))
@@ -830,12 +847,15 @@ directory which will load the relocated initialization code.")
        (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))
@@ -1124,11 +1144,13 @@ XEmacs, by either running the command `xemacs-mule', or by using the X resource
       ": 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"
@@ -1150,7 +1172,7 @@ Copyright (C) 1995-1996 Ben Wing\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")
@@ -1276,6 +1298,28 @@ It's idempotent, so call this as often as you like!"
       (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)))
 
@@ -1288,7 +1332,9 @@ It's idempotent, so call this as often as you like!"
                                             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
@@ -1355,6 +1401,12 @@ It's idempotent, so call this as often as you like!"
        (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))