(setup-english-environment): Adjusted for the change of coding
[bpt/emacs.git] / lisp / startup.el
index b5fa0b5..f0e853a 100644 (file)
 
 (setq top-level '(normal-top-level))
 
-(defvar command-line-processed nil "t once command line has been processed")
+(defvar command-line-processed nil
+  "Non-nil once command line has been processed")
 
-(defvar inhibit-startup-message nil
+(defgroup initialization nil
+  "Emacs start-up procedure"
+  :group 'internal)
+
+(defcustom inhibit-startup-message nil
   "*Non-nil inhibits the initial startup message.
 This is for use in your personal init file, once you are familiar
-with the contents of the startup message.")
+with the contents of the startup message."
+  :type 'boolean
+  :group 'initialization)
 
-(defvar inhibit-startup-echo-area-message nil
+(defcustom inhibit-startup-echo-area-message nil
   "*Non-nil inhibits the initial startup echo area message.
-Inhibition takes effect only if your `.emacs' file contains
-a line of this form:
+Setting this variable takes effect
+only if you do it with the customization buffer
+or it your `.emacs' file contains a line of this form:
  (setq inhibit-startup-echo-area-message \"YOUR-USER-NAME\")
 If your `.emacs' file is byte-compiled, use the following form instead:
  (eval '(setq inhibit-startup-echo-area-message \"YOUR-USER-NAME\"))
 Thus, someone else using a copy of your `.emacs' file will see
-the startup message unless he personally acts to inhibit it.")
+the startup message unless he personally acts to inhibit it."
+  :type '(choice (const :tag "Don't inhibit")
+                (string :tag "Enter your user name, to inhibit"))
+  :group 'initialization)
 
-(defvar inhibit-default-init nil
-  "*Non-nil inhibits loading the `default' library.")
+(defcustom inhibit-default-init nil
+  "*Non-nil inhibits loading the `default' library."
+  :type 'boolean
+  :group 'initialization)
 
 (defvar command-switch-alist nil
   "Alist of command-line switches.
@@ -243,10 +256,12 @@ fashion analogous to the environment value TERM.")
 Emacs runs this hook after processing the command line arguments and loading
 the user's init file.")
 
-(defvar initial-major-mode 'lisp-interaction-mode
-  "Major mode command symbol to use for the initial *scratch* buffer.")
+(defcustom initial-major-mode 'lisp-interaction-mode
+  "Major mode command symbol to use for the initial *scratch* buffer."
+  :type 'command
+  :group 'initialization)
 
-(defvar init-file-user nil
+(defcustom init-file-user nil
   "Identity of user whose `.emacs' file is or was read.
 The value is nil if `-q' or `--no-init-file' was specified,
 meaning do not load any init file.
@@ -260,9 +275,11 @@ evaluates to the name of the directory where the `.emacs' file was
 looked for.
 
 Setting `init-file-user' does not prevent Emacs from loading
-`site-start.el'.  The only way to do that is to use `--no-site-file'.")
+`site-start.el'.  The only way to do that is to use `--no-site-file'."
+  :type '(choice (const :tag "none" nil) string)
+  :group 'initialization)
 
-(defvar site-run-file "site-start"
+(defcustom site-run-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 which, due to their
@@ -275,24 +292,30 @@ Put them in `default.el' instead, so that users can more easily
 override them.  Users can prevent loading `default.el' with the `-q'
 option or by setting `inhibit-default-init' in their own init files,
 but inhibiting `site-start.el' requires `--no-site-file', which
-is less convenient.")
+is less convenient."
+  :type 'string
+  :group 'initialization)
 
-(defconst iso-8859-n-locale-regexp "8859[-_]?\\([1-5]\\)"
+(defconst iso-8859-n-locale-regexp "8859[-_]?\\([1-49]\\)"
   "Regexp that specifies when to enable an ISO 8859-N character set.
 We do that if this regexp matches the locale name
 specified by the LC_ALL, LC_CTYPE and LANG environment variables.
 The paren group in the regexp should match the specific character
 set number, N.")
 
-(defvar mail-host-address nil
-  "*Name of this machine, for purposes of naming users.")
+(defcustom mail-host-address nil
+  "*Name of this machine, for purposes of naming users."
+  :type '(choice (const nil) string)
+  :group 'mail)
 
-(defvar user-mail-address nil
+(defcustom user-mail-address nil
   "*Full mailing address of this user.
 This is initialized based on `mail-host-address',
-after your init file is read, in case it sets `mail-host-address'.")
+after your init file is read, in case it sets `mail-host-address'."
+  :type 'string
+  :group 'mail)
 
-(defvar auto-save-list-file-prefix
+(defcustom auto-save-list-file-prefix
   (if (eq system-type 'ms-dos)
       "~/_s"  ; MS-DOS cannot have initial dot, and allows only 8.3 names
     "~/.saves-")
@@ -301,7 +324,9 @@ This is used after reading your `.emacs' file to initialize
 `auto-save-list-file-name', by appending Emacs's pid and the system name,
 if you have not already set `auto-save-list-file-name' yourself.
 Set this to nil if you want to prevent `auto-save-list-file-name'
-from being initialized.")
+from being initialized."
+  :type 'string
+  :group 'auto-save)
 
 (defvar init-file-debug nil)
 
@@ -424,14 +449,16 @@ from being initialized.")
             (let ((string (getenv "LC_CTYPE")))
               (and (not (equal string "")) string))
             (let ((string (getenv "LANG")))
-              (and (not (equal string "")) string))))
-       charset)
+              (and (not (equal string "")) string)))))
     (when (and ctype
               (string-match iso-8859-n-locale-regexp ctype))
-      (setq charset (concat "latin-" (match-string 1 ctype)))
-      ;; Set up for this character set in multibyte mode.
-      (if (string-match "latin-[12345]" charset)
-         (set-language-environment charset))
+      (let (charset (which (match-string 1 ctype)))
+       (if (equal "5" which)
+           (setq which "9"))
+       (setq charset (concat "latin-" which))
+       ;; Set up for this character set in multibyte mode.
+       (if (string-match "latin-[12345]" charset)
+           (set-language-environment charset)))
       ;; These two lines are ok for any Latin-N character set,
       ;; as long as the terminal displays it.
       (require 'disp-table)
@@ -556,6 +583,9 @@ from being initialized.")
   (if site-run-file 
       (load site-run-file t t))
 
+  ;; Register avairable input methods by loading LEIM list file.
+  (load "leim-list.el" 'noerror 'nomessage 'nosuffix)
+
   ;; Sites should not disable this.  Only individuals should disable
   ;; the startup message.
   (setq inhibit-startup-message nil)
@@ -647,25 +677,31 @@ from being initialized.")
 (defun command-line-1 (command-line-args-left)
   (or noninteractive (input-pending-p) init-file-had-error
       (and inhibit-startup-echo-area-message
-          (let ((buffer (get-buffer-create " *temp*")))
-            (prog1
-                (condition-case nil
-                    (save-excursion
-                      (set-buffer buffer)
-                      (insert-file-contents user-init-file)
-                      (re-search-forward
-                       (concat
-                        "([ \t\n]*setq[ \t\n]+"
-                        "inhibit-startup-echo-area-message[ \t\n]+"
-                        (regexp-quote
-                         (prin1-to-string
+          (or (and (get 'inhibit-startup-echo-area-message 'saved-value)
+                   (equal inhibit-startup-echo-area-message
                           (if (string= init-file-user "")
                               (user-login-name)
                             init-file-user)))
-                        "[ \t\n]*)")
-                       nil t))
-                  (error nil))
-              (kill-buffer buffer))))
+              ;; Wasn't set with custom; see if .emacs has a setq.
+              (let ((buffer (get-buffer-create " *temp*")))
+                (prog1
+                    (condition-case nil
+                        (save-excursion
+                          (set-buffer buffer)
+                          (insert-file-contents user-init-file)
+                          (re-search-forward
+                           (concat
+                            "([ \t\n]*setq[ \t\n]+"
+                            "inhibit-startup-echo-area-message[ \t\n]+"
+                            (regexp-quote
+                             (prin1-to-string
+                              (if (string= init-file-user "")
+                                  (user-login-name)
+                                init-file-user)))
+                            "[ \t\n]*)")
+                           nil t))
+                      (error nil))
+                  (kill-buffer buffer)))))
       (message (if (eq (key-binding "\C-h\C-p") 'describe-project)
                   "For information about the GNU Project and its goals, type C-h C-p."
                 (substitute-command-keys
@@ -699,100 +735,103 @@ from being initialized.")
             (if (memq window-system '(x w32))
                 (precompute-menubar-bindings))
             (setq menubar-bindings-done t)
-            (unwind-protect
-                (progn
-                  ;; The convention for this piece of code is that
-                  ;; each piece of output starts with one or two newlines
-                  ;; and does not end with any newlines.
-                  (insert "Welcome to GNU Emacs")
-                  (if (eq system-type 'gnu/linux)
-                      (insert ", one component of a Linux-based GNU system."))
-                  (insert "\n")
-                  ;; If keys have their default meanings,
-                  ;; use precomputed string to save lots of time.
-                  (if (and (eq (key-binding "\C-h") 'help-command)
-                           (eq (key-binding "\C-xu") 'advertised-undo)
-                           (eq (key-binding "\C-x\C-c") 'save-buffers-kill-emacs)
-                           (eq (key-binding "\C-ht") 'help-with-tutorial)
-                           (eq (key-binding "\C-hi") 'info)
-                           (eq (key-binding "\C-h\C-n") 'view-emacs-news))
-                      (insert "
+            (when (= (buffer-size) 0)
+              (let ((buffer-undo-list t))
+                (unwind-protect
+                    (progn
+                      (goto-char (point-max))
+                      ;; The convention for this piece of code is that
+                      ;; each piece of output starts with one or two newlines
+                      ;; and does not end with any newlines.
+                      (insert "Welcome to GNU Emacs")
+                      (if (eq system-type 'gnu/linux)
+                          (insert ", one component of a Linux-based GNU system."))
+                      (insert "\n")
+                      ;; If keys have their default meanings,
+                      ;; use precomputed string to save lots of time.
+                      (if (and (eq (key-binding "\C-h") 'help-command)
+                               (eq (key-binding "\C-xu") 'advertised-undo)
+                               (eq (key-binding "\C-x\C-c") 'save-buffers-kill-emacs)
+                               (eq (key-binding "\C-ht") 'help-with-tutorial)
+                               (eq (key-binding "\C-hi") 'info)
+                               (eq (key-binding "\C-h\C-n") 'view-emacs-news))
+                          (insert "
 Get help          C-h  (Hold down CTRL and press h)
 Undo changes      C-x u       Exit Emacs               C-x C-c
 Get a tutorial    C-h t       Use Info to read docs    C-h i")
-                    (insert (substitute-command-keys
-                             (format "\n
+                        (insert (substitute-command-keys
+                                 (format "\n
 Get help          %s
 Undo changes      \\[advertised-undo]
 Exit Emacs        \\[save-buffers-kill-emacs]
 Get a tutorial    \\[help-with-tutorial]
 Use Info to read docs  \\[info]"
-                                     (let ((where (where-is-internal
-                                                   'help-command nil t)))
-                                       (if where
-                                           (key-description where)
-                                         "M-x help"))))))
-                  ;; Say how to use the menu bar
-                  ;; if that is not with the mouse.
-                  (if (not (assq 'display (frame-parameters)))
-                      (if (and (eq (key-binding "\M-`") 'tmm-menubar)
-                               (eq (key-binding [f10]) 'tmm-menubar))
-                          (insert "
+                                         (let ((where (where-is-internal
+                                                       'help-command nil t)))
+                                           (if where
+                                               (key-description where)
+                                             "M-x help"))))))
+                      ;; Say how to use the menu bar
+                      ;; if that is not with the mouse.
+                      (if (not (assq 'display (frame-parameters)))
+                          (if (and (eq (key-binding "\M-`") 'tmm-menubar)
+                                   (eq (key-binding [f10]) 'tmm-menubar))
+                              (insert "
 Activate menubar   F10  or  ESC `  or   M-`")
-                        (insert (substitute-command-keys "
+                            (insert (substitute-command-keys "
 Activate menubar     \\[tmm-menubar]"))))
 
-                  ;; Windows and MSDOS (currently) do not count as
-                  ;; window systems, but do have mouse support.
-                  (if window-system
-                      (insert "
+                      ;; Windows and MSDOS (currently) do not count as
+                      ;; window systems, but do have mouse support.
+                      (if window-system
+                          (insert "
 Mode-specific menu   C-mouse-3 (third button, with CTRL)"))
-                  ;; Many users seem to have problems with these.
-                  (insert "
+                      ;; Many users seem to have problems with these.
+                      (insert "
 \(`C-' means use the CTRL key.  `M-' means use the Meta (or Alt) key.
 If you have no Meta key, you may instead type ESC followed by the character.)")
-                  (and auto-save-list-file-prefix
-                       (directory-files
-                        (file-name-directory auto-save-list-file-prefix)
-                        nil
-                        (concat "\\`"
-                                (regexp-quote (file-name-nondirectory
-                                               auto-save-list-file-prefix)))
-                        t)
-                       (insert "\n\nIf an Emacs session crashed recently, "
-                               "type M-x recover-session RET\nto recover"
-                               " the files you were editing."))
-
-                  (insert "\n\n" (emacs-version)
-                          "
+                      (and auto-save-list-file-prefix
+                           (directory-files
+                            (file-name-directory auto-save-list-file-prefix)
+                            nil
+                            (concat "\\`"
+                                    (regexp-quote (file-name-nondirectory
+                                                   auto-save-list-file-prefix)))
+                            t)
+                           (insert "\n\nIf an Emacs session crashed recently, "
+                                   "type M-x recover-session RET\nto recover"
+                                   " the files you were editing."))
+
+                      (insert "\n\n" (emacs-version)
+                              "
 Copyright (C) 1996 Free Software Foundation, Inc.")
-                  (if (and (eq (key-binding "\C-h\C-c") 'describe-copying)
-                           (eq (key-binding "\C-h\C-d") 'describe-distribution)
-                           (eq (key-binding "\C-h\C-w") 'describe-no-warranty))
-                      (insert 
-                       "\n
+                      (if (and (eq (key-binding "\C-h\C-c") 'describe-copying)
+                               (eq (key-binding "\C-h\C-d") 'describe-distribution)
+                               (eq (key-binding "\C-h\C-w") 'describe-no-warranty))
+                          (insert 
+                           "\n
 GNU Emacs comes with ABSOLUTELY NO WARRANTY; type C-h C-w for full details.
 You may give out copies of Emacs; type C-h C-c to see the conditions.
 Type C-h C-d for information on getting the latest version.")
-                    (insert (substitute-command-keys
-                             "\n
+                        (insert (substitute-command-keys
+                                 "\n
 GNU Emacs comes with ABSOLUTELY NO WARRANTY; type \\[describe-no-warranty] for full details.
 You may give out copies of Emacs; type \\[describe-copying] to see the conditions.
 Type \\[describe-distribution] for information on getting the latest version.")))
-                  (goto-char (point-min))
+                      (goto-char (point-min))
 
-                  (set-buffer-modified-p nil)
-                  (sit-for 120))
-              (with-current-buffer (get-buffer "*scratch*")
-                (erase-buffer)
-                (insert "\
+                      (set-buffer-modified-p nil)
+                      (sit-for 120))
+                  (with-current-buffer (get-buffer "*scratch*")
+                    (erase-buffer)
+                    (insert "\
 If you want to create a file, don't type the text in this buffer.
 This buffer is for notes you don't want to save, and for Lisp evaluation.
 If you want to create a file, first visit that file with C-x C-f,
 then enter the text in that file's own buffer.
 
 ")
-                (set-buffer-modified-p nil)))))
+                    (set-buffer-modified-p nil)))))))
     ;; Delay 2 seconds after the init file error message
     ;; was displayed, so user can read it.
     (if init-file-had-error