Remove internal_with_output_to_temp_buffer, replacing sole user with Lisp.
[bpt/emacs.git] / lisp / startup.el
index 384d813..3285d47 100644 (file)
@@ -1,4 +1,4 @@
-;;; startup.el --- process Emacs shell arguments
+;;; startup.el --- process Emacs shell arguments  -*- lexical-binding: t -*-
 
 ;; Copyright (C) 1985-1986, 1992, 1994-2011  Free Software Foundation, Inc.
 
 
 ;; Copyright (C) 1985-1986, 1992, 1994-2011  Free Software Foundation, Inc.
 
@@ -98,6 +98,7 @@ the remaining command-line args are in the variable `command-line-args-left'.")
   "List of command-line args not yet processed.")
 
 (defvaralias 'argv 'command-line-args-left
   "List of command-line args not yet processed.")
 
 (defvaralias 'argv 'command-line-args-left
+  ;; FIXME: Bad name for a dynamically bound variable.
   "List of command-line args not yet processed.
 This is a convenience alias, so that one can write \(pop argv\)
 inside of --eval command line arguments in order to access
   "List of command-line args not yet processed.
 This is a convenience alias, so that one can write \(pop argv\)
 inside of --eval command line arguments in order to access
@@ -326,7 +327,7 @@ this variable usefully is to set it while building and dumping Emacs."
   :type '(choice (const :tag "none" nil) string)
   :group 'initialization
   :initialize 'custom-initialize-default
   :type '(choice (const :tag "none" nil) string)
   :group 'initialization
   :initialize 'custom-initialize-default
-  :set (lambda (variable value)
+  :set (lambda (_variable _value)
          (error "Customizing `site-run-file' does not work")))
 
 (defcustom mail-host-address nil
          (error "Customizing `site-run-file' does not work")))
 
 (defcustom mail-host-address nil
@@ -392,6 +393,15 @@ Warning Warning!!!  Pure space overflow    !!!Warning Warning
   :type 'directory
   :initialize 'custom-initialize-delay)
 
   :type 'directory
   :initialize 'custom-initialize-delay)
 
+(defconst package-subdirectory-regexp
+  "\\([^.].*?\\)-\\([0-9]+\\(?:[.][0-9]+\\|\\(?:pre\\|beta\\|alpha\\)[0-9]+\\)*\\)"
+  "Regular expression matching the name of a package subdirectory.
+The first subexpression is the package name.
+The second subexpression is the version string.
+
+The regexp should not contain a starting \"\\`\" or a trailing
+ \"\\'\"; those are added automatically by callers.")
+
 (defun normal-top-level-add-subdirs-to-load-path ()
   "Add all subdirectories of current directory to `load-path'.
 More precisely, this uses only the subdirectories whose names
 (defun normal-top-level-add-subdirs-to-load-path ()
   "Add all subdirectories of current directory to `load-path'.
 More precisely, this uses only the subdirectories whose names
@@ -896,7 +906,8 @@ opening the first frame (e.g. open a connection to an X server).")
       ;; spec, but mark it as changed outside of Customize.
       (let ((color (x-get-resource "cursorColor" "CursorColor")))
        (when color
       ;; spec, but mark it as changed outside of Customize.
       (let ((color (x-get-resource "cursorColor" "CursorColor")))
        (when color
-         (face-spec-set 'cursor `((t (:background ,color))))
+         (put 'cursor 'theme-face
+              `((changed ((t :background ,color)))))
          (put 'cursor 'face-modified t)))))
     (frame-initialize))
 
          (put 'cursor 'face-modified t)))))
     (frame-initialize))
 
@@ -1006,19 +1017,23 @@ opening the first frame (e.g. open a connection to an X server).")
                (if init-file-user
                    (let ((user-init-file-1
                           (cond
                (if init-file-user
                    (let ((user-init-file-1
                           (cond
-                           ((eq system-type 'ms-dos)
-                            (concat "~" init-file-user "/_emacs"))
-                           ((eq system-type 'windows-nt)
-                            ;; Prefer .emacs on Windows.
-                            (if (directory-files "~" nil "^\\.emacs\\(\\.elc?\\)?$")
-                                "~/.emacs"
-                              ;; Also support _emacs for compatibility.
-                              (if (directory-files "~" nil "^_emacs\\(\\.elc?\\)?$")
-                                  "~/_emacs"
-                                ;; But default to .emacs if _emacs does not exist.
-                                "~/.emacs")))
-                           (t
-                            (concat "~" init-file-user "/.emacs")))))
+                            ((eq system-type 'ms-dos)
+                             (concat "~" init-file-user "/_emacs"))
+                            ((not (eq system-type 'windows-nt))
+                             (concat "~" init-file-user "/.emacs"))
+                            ;; Else deal with the Windows situation
+                            ((directory-files "~" nil "^\\.emacs\\(\\.elc?\\)?$")
+                             ;; Prefer .emacs on Windows.
+                             "~/.emacs")
+                            ((directory-files "~" nil "^_emacs\\(\\.elc?\\)?$")
+                             ;; Also support _emacs for compatibility, but warn about it.
+                             (display-warning
+                              'initialization
+                              "`_emacs' init file is deprecated, please use `.emacs'"
+                              :warning)
+                             "~/_emacs")
+                            (t ;; But default to .emacs if _emacs does not exist.
+                             "~/.emacs"))))
                      ;; This tells `load' to store the file name found
                      ;; into user-init-file.
                      (setq user-init-file t)
                      ;; This tells `load' to store the file name found
                      ;; into user-init-file.
                      (setq user-init-file t)
@@ -1082,7 +1097,8 @@ the `--debug-init' option to view a complete error backtrace."
                      user-init-file
                      (get (car error) 'error-message)
                      (if (cdr error) ": " "")
                      user-init-file
                      (get (car error) 'error-message)
                      (if (cdr error) ": " "")
-                     (mapconcat (lambda (s) (prin1-to-string s t)) (cdr error) ", "))
+                     (mapconcat (lambda (s) (prin1-to-string s t))
+                                 (cdr error) ", "))
              :warning)
             (setq init-file-had-error t))))
 
              :warning)
             (setq init-file-had-error t))))
 
@@ -1190,9 +1206,9 @@ the `--debug-init' option to view a complete error backtrace."
             (when (file-directory-p dir)
               (dolist (subdir (directory-files dir))
                 (when (and (file-directory-p (expand-file-name subdir dir))
             (when (file-directory-p dir)
               (dolist (subdir (directory-files dir))
                 (when (and (file-directory-p (expand-file-name subdir dir))
-                           ;; package-subdirectory-regexp from package.el
-                           (string-match "^\\([^.].*\\)-\\([0-9]+\\(?:[.][0-9]+\\)*\\)$"
-                                         subdir))
+                           (string-match
+                            (concat "\\`" package-subdirectory-regexp "\\'")
+                            subdir))
                   (throw 'package-dir-found t)))))))
        (package-initialize))
 
                   (throw 'package-dir-found t)))))))
        (package-initialize))
 
@@ -1278,25 +1294,25 @@ If this is nil, no message will be displayed."
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (defconst fancy-startup-text
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (defconst fancy-startup-text
-  '((:face (variable-pitch (:foreground "red"))
+  `((:face (variable-pitch (:foreground "red"))
      "Welcome to "
      :link ("GNU Emacs"
      "Welcome to "
      :link ("GNU Emacs"
-           (lambda (button) (browse-url "http://www.gnu.org/software/emacs/"))
+           ,(lambda (_button) (browse-url "http://www.gnu.org/software/emacs/"))
            "Browse http://www.gnu.org/software/emacs/")
      ", one component of the "
      :link
            "Browse http://www.gnu.org/software/emacs/")
      ", one component of the "
      :link
-     (lambda ()
+     ,(lambda ()
        (if (eq system-type 'gnu/linux)
        (if (eq system-type 'gnu/linux)
-          '("GNU/Linux"
-            (lambda (button) (browse-url "http://www.gnu.org/gnu/linux-and-gnu.html"))
+            `("GNU/Linux"
+              ,(lambda (_button) (browse-url "http://www.gnu.org/gnu/linux-and-gnu.html"))
             "Browse http://www.gnu.org/gnu/linux-and-gnu.html")
             "Browse http://www.gnu.org/gnu/linux-and-gnu.html")
-        '("GNU" (lambda (button) (describe-gnu-project))
+          `("GNU" ,(lambda (_button) (describe-gnu-project))
           "Display info on the GNU project")))
      " operating system.\n\n"
      :face variable-pitch
           "Display info on the GNU project")))
      " operating system.\n\n"
      :face variable-pitch
-     :link ("Emacs Tutorial" (lambda (button) (help-with-tutorial)))
+     :link ("Emacs Tutorial" ,(lambda (_button) (help-with-tutorial)))
      "\tLearn basic keystroke commands"
      "\tLearn basic keystroke commands"
-     (lambda ()
+     ,(lambda ()
        (let* ((en "TUTORIAL")
              (tut (or (get-language-info current-language-environment
                                          'tutorial)
        (let* ((en "TUTORIAL")
              (tut (or (get-language-info current-language-environment
                                          'tutorial)
@@ -1314,19 +1330,20 @@ If this is nil, no message will be displayed."
           (concat " (" title ")"))))
      "\n"
      :link ("Emacs Guided Tour"
           (concat " (" title ")"))))
      "\n"
      :link ("Emacs Guided Tour"
-           (lambda (button) (browse-url "http://www.gnu.org/software/emacs/tour/"))
+           ,(lambda (_button)
+               (browse-url "http://www.gnu.org/software/emacs/tour/"))
            "Browse http://www.gnu.org/software/emacs/tour/")
      "\tOverview of Emacs features at gnu.org\n"
            "Browse http://www.gnu.org/software/emacs/tour/")
      "\tOverview of Emacs features at gnu.org\n"
-     :link ("View Emacs Manual" (lambda (button) (info-emacs-manual)))
+     :link ("View Emacs Manual" ,(lambda (_button) (info-emacs-manual)))
      "\tView the Emacs manual using Info\n"
      "\tView the Emacs manual using Info\n"
-     :link ("Absence of Warranty" (lambda (button) (describe-no-warranty)))
+     :link ("Absence of Warranty" ,(lambda (_button) (describe-no-warranty)))
      "\tGNU Emacs comes with "
      :face (variable-pitch (:slant oblique))
      "ABSOLUTELY NO WARRANTY\n"
      :face variable-pitch
      "\tGNU Emacs comes with "
      :face (variable-pitch (:slant oblique))
      "ABSOLUTELY NO WARRANTY\n"
      :face variable-pitch
-     :link ("Copying Conditions" (lambda (button) (describe-copying)))
+     :link ("Copying Conditions" ,(lambda (_button) (describe-copying)))
      "\tConditions for redistributing and changing Emacs\n"
      "\tConditions for redistributing and changing Emacs\n"
-     :link ("Ordering Manuals" (lambda (button) (view-order-manuals)))
+     :link ("Ordering Manuals" ,(lambda (_button) (view-order-manuals)))
      "\tPurchasing printed copies of manuals\n"
      "\n"))
   "A list of texts to show in the middle part of splash screens.
      "\tPurchasing printed copies of manuals\n"
      "\n"))
   "A list of texts to show in the middle part of splash screens.
@@ -1334,61 +1351,62 @@ Each element in the list should be a list of strings or pairs
 `:face FACE', like `fancy-splash-insert' accepts them.")
 
 (defconst fancy-about-text
 `:face FACE', like `fancy-splash-insert' accepts them.")
 
 (defconst fancy-about-text
-  '((:face (variable-pitch (:foreground "red"))
+  `((:face (variable-pitch (:foreground "red"))
      "This is "
      :link ("GNU Emacs"
      "This is "
      :link ("GNU Emacs"
-           (lambda (button) (browse-url "http://www.gnu.org/software/emacs/"))
+           ,(lambda (_button) (browse-url "http://www.gnu.org/software/emacs/"))
            "Browse http://www.gnu.org/software/emacs/")
      ", one component of the "
      :link
            "Browse http://www.gnu.org/software/emacs/")
      ", one component of the "
      :link
-     (lambda ()
+     ,(lambda ()
        (if (eq system-type 'gnu/linux)
        (if (eq system-type 'gnu/linux)
-          '("GNU/Linux"
-            (lambda (button) (browse-url "http://www.gnu.org/gnu/linux-and-gnu.html"))
+          `("GNU/Linux"
+            ,(lambda (_button)
+                (browse-url "http://www.gnu.org/gnu/linux-and-gnu.html"))
             "Browse http://www.gnu.org/gnu/linux-and-gnu.html")
             "Browse http://www.gnu.org/gnu/linux-and-gnu.html")
-        '("GNU" (lambda (button) (describe-gnu-project))
+        `("GNU" ,(lambda (_button) (describe-gnu-project))
           "Display info on the GNU project.")))
      " operating system.\n"
           "Display info on the GNU project.")))
      " operating system.\n"
-     :face (lambda ()
+     :face ,(lambda ()
             (list 'variable-pitch
                   (list :foreground
                         (if (eq (frame-parameter nil 'background-mode) 'dark)
                             "cyan" "darkblue"))))
      "\n"
             (list 'variable-pitch
                   (list :foreground
                         (if (eq (frame-parameter nil 'background-mode) 'dark)
                             "cyan" "darkblue"))))
      "\n"
-     (lambda () (emacs-version))
+     ,(lambda () (emacs-version))
      "\n"
      :face (variable-pitch (:height 0.8))
      "\n"
      :face (variable-pitch (:height 0.8))
-     (lambda () emacs-copyright)
+     ,(lambda () emacs-copyright)
      "\n\n"
      :face variable-pitch
      :link ("Authors"
      "\n\n"
      :face variable-pitch
      :link ("Authors"
-           (lambda (button)
+           ,(lambda (_button)
              (view-file (expand-file-name "AUTHORS" data-directory))
              (goto-char (point-min))))
      "\tMany people have contributed code included in GNU Emacs\n"
      :link ("Contributing"
              (view-file (expand-file-name "AUTHORS" data-directory))
              (goto-char (point-min))))
      "\tMany people have contributed code included in GNU Emacs\n"
      :link ("Contributing"
-           (lambda (button)
+           ,(lambda (_button)
              (view-file (expand-file-name "CONTRIBUTE" data-directory))
              (goto-char (point-min))))
      "\tHow to contribute improvements to Emacs\n"
      "\n"
              (view-file (expand-file-name "CONTRIBUTE" data-directory))
              (goto-char (point-min))))
      "\tHow to contribute improvements to Emacs\n"
      "\n"
-     :link ("GNU and Freedom" (lambda (button) (describe-gnu-project)))
+     :link ("GNU and Freedom" ,(lambda (_button) (describe-gnu-project)))
      "\tWhy we developed GNU Emacs, and the GNU operating system\n"
      "\tWhy we developed GNU Emacs, and the GNU operating system\n"
-     :link ("Absence of Warranty" (lambda (button) (describe-no-warranty)))
+     :link ("Absence of Warranty" ,(lambda (_button) (describe-no-warranty)))
      "\tGNU Emacs comes with "
      :face (variable-pitch (:slant oblique))
      "ABSOLUTELY NO WARRANTY\n"
      :face variable-pitch
      "\tGNU Emacs comes with "
      :face (variable-pitch (:slant oblique))
      "ABSOLUTELY NO WARRANTY\n"
      :face variable-pitch
-     :link ("Copying Conditions" (lambda (button) (describe-copying)))
+     :link ("Copying Conditions" ,(lambda (_button) (describe-copying)))
      "\tConditions for redistributing and changing Emacs\n"
      "\tConditions for redistributing and changing Emacs\n"
-     :link ("Getting New Versions" (lambda (button) (describe-distribution)))
+     :link ("Getting New Versions" ,(lambda (_button) (describe-distribution)))
      "\tHow to obtain the latest version of Emacs\n"
      "\tHow to obtain the latest version of Emacs\n"
-     :link ("Ordering Manuals" (lambda (button) (view-order-manuals)))
+     :link ("Ordering Manuals" ,(lambda (_button) (view-order-manuals)))
      "\tBuying printed manuals from the FSF\n"
      "\n"
      "\tBuying printed manuals from the FSF\n"
      "\n"
-     :link ("Emacs Tutorial" (lambda (button) (help-with-tutorial)))
+     :link ("Emacs Tutorial" ,(lambda (_button) (help-with-tutorial)))
      "\tLearn basic Emacs keystroke commands"
      "\tLearn basic Emacs keystroke commands"
-     (lambda ()
+     ,(lambda ()
        (let* ((en "TUTORIAL")
              (tut (or (get-language-info current-language-environment
                                          'tutorial)
        (let* ((en "TUTORIAL")
              (tut (or (get-language-info current-language-environment
                                          'tutorial)
@@ -1406,7 +1424,8 @@ Each element in the list should be a list of strings or pairs
           (concat " (" title ")"))))
      "\n"
      :link ("Emacs Guided Tour"
           (concat " (" title ")"))))
      "\n"
      :link ("Emacs Guided Tour"
-           (lambda (button) (browse-url "http://www.gnu.org/software/emacs/tour/"))
+           ,(lambda (_button)
+               (browse-url "http://www.gnu.org/software/emacs/tour/"))
            "Browse http://www.gnu.org/software/emacs/tour/")
      "\tSee an overview of Emacs features at gnu.org"
      ))
            "Browse http://www.gnu.org/software/emacs/tour/")
      "\tSee an overview of Emacs features at gnu.org"
      ))
@@ -1513,7 +1532,7 @@ a face or button specification."
        (make-button (prog1 (point) (insert-image img)) (point)
                     'face 'default
                     'help-echo "mouse-2, RET: Browse http://www.gnu.org/"
        (make-button (prog1 (point) (insert-image img)) (point)
                     'face 'default
                     'help-echo "mouse-2, RET: Browse http://www.gnu.org/"
-                    'action (lambda (button) (browse-url "http://www.gnu.org/"))
+                    'action (lambda (_button) (browse-url "http://www.gnu.org/"))
                     'follow-link t)
        (insert "\n\n")))))
 
                     'follow-link t)
        (insert "\n\n")))))
 
@@ -1525,16 +1544,16 @@ a face or button specification."
       (fancy-splash-insert
        :face 'variable-pitch
        "\nTo start...     "
       (fancy-splash-insert
        :face 'variable-pitch
        "\nTo start...     "
-       :link '("Open a File"
-              (lambda (button) (call-interactively 'find-file))
+       :link `("Open a File"
+              ,(lambda (_button) (call-interactively 'find-file))
               "Specify a new file's name, to edit the file")
        "     "
               "Specify a new file's name, to edit the file")
        "     "
-       :link '("Open Home Directory"
-              (lambda (button) (dired "~"))
+       :link `("Open Home Directory"
+              ,(lambda (_button) (dired "~"))
               "Open your home directory, to operate on its files")
        "     "
               "Open your home directory, to operate on its files")
        "     "
-       :link '("Customize Startup"
-              (lambda (button) (customize-group 'initialization))
+       :link `("Customize Startup"
+              ,(lambda (_button) (customize-group 'initialization))
               "Change initialization settings including this screen")
        "\n"))
     (fancy-splash-insert
               "Change initialization settings including this screen")
        "\n"))
     (fancy-splash-insert
@@ -1573,15 +1592,15 @@ a face or button specification."
     (when concise
       (fancy-splash-insert
        :face 'variable-pitch "\n"
     (when concise
       (fancy-splash-insert
        :face 'variable-pitch "\n"
-       :link '("Dismiss this startup screen"
-              (lambda (button)
-                (when startup-screen-inhibit-startup-screen
-                  (customize-set-variable 'inhibit-startup-screen t)
-                  (customize-mark-to-save 'inhibit-startup-screen)
-                  (custom-save-all))
-                (let ((w (get-buffer-window "*GNU Emacs*")))
-                  (and w (not (one-window-p)) (delete-window w)))
-                (kill-buffer "*GNU Emacs*")))
+       :link `("Dismiss this startup screen"
+              ,(lambda (_button)
+                  (when startup-screen-inhibit-startup-screen
+                    (customize-set-variable 'inhibit-startup-screen t)
+                    (customize-mark-to-save 'inhibit-startup-screen)
+                    (custom-save-all))
+                  (let ((w (get-buffer-window "*GNU Emacs*")))
+                    (and w (not (one-window-p)) (delete-window w)))
+                  (kill-buffer "*GNU Emacs*")))
        "  ")
       (when (or user-init-file custom-file)
        (let ((checked (create-image "checked.xpm"
        "  ")
       (when (or user-init-file custom-file)
        (let ((checked (create-image "checked.xpm"
@@ -1796,37 +1815,37 @@ To quit a partially entered command, type Control-g.\n")
 
   (insert "\nImportant Help menu items:\n")
   (insert-button "Emacs Tutorial"
 
   (insert "\nImportant Help menu items:\n")
   (insert-button "Emacs Tutorial"
-                'action (lambda (button) (help-with-tutorial))
+                'action (lambda (_button) (help-with-tutorial))
                 'follow-link t)
   (insert "\t\tLearn basic Emacs keystroke commands\n")
   (insert-button "Read the Emacs Manual"
                 'follow-link t)
   (insert "\t\tLearn basic Emacs keystroke commands\n")
   (insert-button "Read the Emacs Manual"
-                'action (lambda (button) (info-emacs-manual))
+                'action (lambda (_button) (info-emacs-manual))
                 'follow-link t)
   (insert "\tView the Emacs manual using Info\n")
   (insert-button "\(Non)Warranty"
                 'follow-link t)
   (insert "\tView the Emacs manual using Info\n")
   (insert-button "\(Non)Warranty"
-                'action (lambda (button) (describe-no-warranty))
+                'action (lambda (_button) (describe-no-warranty))
                 'follow-link t)
   (insert "\t\tGNU Emacs comes with ABSOLUTELY NO WARRANTY\n")
   (insert-button "Copying Conditions"
                 'follow-link t)
   (insert "\t\tGNU Emacs comes with ABSOLUTELY NO WARRANTY\n")
   (insert-button "Copying Conditions"
-                'action (lambda (button) (describe-copying))
+                'action (lambda (_button) (describe-copying))
                 'follow-link t)
   (insert "\tConditions for redistributing and changing Emacs\n")
   (insert-button "More Manuals / Ordering Manuals"
                 'follow-link t)
   (insert "\tConditions for redistributing and changing Emacs\n")
   (insert-button "More Manuals / Ordering Manuals"
-                'action (lambda (button) (view-order-manuals))
+                'action (lambda (_button) (view-order-manuals))
                 'follow-link t)
   (insert "  How to order printed manuals from the FSF\n")
 
   (insert "\nUseful tasks:\n")
   (insert-button "Visit New File"
                 'follow-link t)
   (insert "  How to order printed manuals from the FSF\n")
 
   (insert "\nUseful tasks:\n")
   (insert-button "Visit New File"
-                'action (lambda (button) (call-interactively 'find-file))
+                'action (lambda (_button) (call-interactively 'find-file))
                 'follow-link t)
   (insert "\t\tSpecify a new file's name, to edit the file\n")
   (insert-button "Open Home Directory"
                 'follow-link t)
   (insert "\t\tSpecify a new file's name, to edit the file\n")
   (insert-button "Open Home Directory"
-                'action (lambda (button) (dired "~"))
+                'action (lambda (_button) (dired "~"))
                 'follow-link t)
   (insert "\tOpen your home directory, to operate on its files\n")
   (insert-button "Customize Startup"
                 'follow-link t)
   (insert "\tOpen your home directory, to operate on its files\n")
   (insert-button "Customize Startup"
-                'action (lambda (button) (customize-group 'initialization))
+                'action (lambda (_button) (customize-group 'initialization))
                 'follow-link t)
   (insert "\tChange initialization settings including this screen\n")
 
                 'follow-link t)
   (insert "\tChange initialization settings including this screen\n")
 
@@ -1860,20 +1879,20 @@ To quit a partially entered command, type Control-g.\n")
                        (where (key-description where))
                        (t "M-x help")))))
     (insert-button "Emacs manual"
                        (where (key-description where))
                        (t "M-x help")))))
     (insert-button "Emacs manual"
-                   'action (lambda (button) (info-emacs-manual))
+                   'action (lambda (_button) (info-emacs-manual))
                    'follow-link t)
     (insert (substitute-command-keys"\t   \\[info-emacs-manual]\t"))
     (insert-button "Browse manuals"
                    'follow-link t)
     (insert (substitute-command-keys"\t   \\[info-emacs-manual]\t"))
     (insert-button "Browse manuals"
-                   'action (lambda (button) (Info-directory))
+                   'action (lambda (_button) (Info-directory))
                    'follow-link t)
     (insert (substitute-command-keys "\t   \\[info]\n"))
     (insert-button "Emacs tutorial"
                    'follow-link t)
     (insert (substitute-command-keys "\t   \\[info]\n"))
     (insert-button "Emacs tutorial"
-                   'action (lambda (button) (help-with-tutorial))
+                   'action (lambda (_button) (help-with-tutorial))
                    'follow-link t)
     (insert (substitute-command-keys
              "\t   \\[help-with-tutorial]\tUndo changes\t   \\[undo]\n"))
     (insert-button "Buy manuals"
                    'follow-link t)
     (insert (substitute-command-keys
              "\t   \\[help-with-tutorial]\tUndo changes\t   \\[undo]\n"))
     (insert-button "Buy manuals"
-                   'action (lambda (button) (view-order-manuals))
+                   'action (lambda (_button) (view-order-manuals))
                    'follow-link t)
     (insert (substitute-command-keys
              "\t   \\[view-order-manuals]\tExit Emacs\t   \\[save-buffers-kill-terminal]")))
                    'follow-link t)
     (insert (substitute-command-keys
              "\t   \\[view-order-manuals]\tExit Emacs\t   \\[save-buffers-kill-terminal]")))
@@ -1881,7 +1900,7 @@ To quit a partially entered command, type Control-g.\n")
   ;; Say how to use the menu bar with the keyboard.
   (insert "\n")
   (insert-button "Activate menubar"
   ;; Say how to use the menu bar with the keyboard.
   (insert "\n")
   (insert-button "Activate menubar"
-                'action (lambda (button) (tmm-menubar))
+                'action (lambda (_button) (tmm-menubar))
                 'follow-link t)
   (if (and (eq (key-binding "\M-`") 'tmm-menubar)
           (eq (key-binding [f10]) 'tmm-menubar))
                 'follow-link t)
   (if (and (eq (key-binding "\M-`") 'tmm-menubar)
           (eq (key-binding [f10]) 'tmm-menubar))
@@ -1897,21 +1916,21 @@ If you have no Meta key, you may instead type ESC followed by the character.)")
   (insert "\nUseful tasks:\n")
 
   (insert-button "Visit New File"
   (insert "\nUseful tasks:\n")
 
   (insert-button "Visit New File"
-                'action (lambda (button) (call-interactively 'find-file))
+                'action (lambda (_button) (call-interactively 'find-file))
                 'follow-link t)
   (insert "\t\t\t")
   (insert-button "Open Home Directory"
                 'follow-link t)
   (insert "\t\t\t")
   (insert-button "Open Home Directory"
-                'action (lambda (button) (dired "~"))
+                'action (lambda (_button) (dired "~"))
                 'follow-link t)
   (insert "\n")
 
   (insert-button "Customize Startup"
                 'follow-link t)
   (insert "\n")
 
   (insert-button "Customize Startup"
-                'action (lambda (button) (customize-group 'initialization))
+                'action (lambda (_button) (customize-group 'initialization))
                 'follow-link t)
   (insert "\t\t")
   (insert-button "Open *scratch* buffer"
                 'follow-link t)
   (insert "\t\t")
   (insert-button "Open *scratch* buffer"
-                'action (lambda (button) (switch-to-buffer
-                                          (get-buffer-create "*scratch*")))
+                'action (lambda (_button) (switch-to-buffer
+                                       (get-buffer-create "*scratch*")))
                 'follow-link t)
   (insert "\n")
   (insert "\n" (emacs-version) "\n" emacs-copyright "\n")
                 'follow-link t)
   (insert "\n")
   (insert "\n" (emacs-version) "\n" emacs-copyright "\n")
@@ -1924,36 +1943,36 @@ If you have no Meta key, you may instead type ESC followed by the character.)")
         "
 GNU Emacs comes with ABSOLUTELY NO WARRANTY; type C-h C-w for ")
        (insert-button "full details"
         "
 GNU Emacs comes with ABSOLUTELY NO WARRANTY; type C-h C-w for ")
        (insert-button "full details"
-                      'action (lambda (button) (describe-no-warranty))
+                      'action (lambda (_button) (describe-no-warranty))
                       'follow-link t)
        (insert ".
 Emacs is Free Software--Free as in Freedom--so you can redistribute copies
 of Emacs and modify it; type C-h C-c to see ")
        (insert-button "the conditions"
                       'follow-link t)
        (insert ".
 Emacs is Free Software--Free as in Freedom--so you can redistribute copies
 of Emacs and modify it; type C-h C-c to see ")
        (insert-button "the conditions"
-                      'action (lambda (button) (describe-copying))
+                      'action (lambda (_button) (describe-copying))
                       'follow-link t)
        (insert ".
 Type C-h C-d for information on ")
        (insert-button "getting the latest version"
                       'follow-link t)
        (insert ".
 Type C-h C-d for information on ")
        (insert-button "getting the latest version"
-                      'action (lambda (button) (describe-distribution))
+                      'action (lambda (_button) (describe-distribution))
                       'follow-link t)
        (insert "."))
     (insert (substitute-command-keys
             "
 GNU Emacs comes with ABSOLUTELY NO WARRANTY; type \\[describe-no-warranty] for "))
     (insert-button "full details"
                       'follow-link t)
        (insert "."))
     (insert (substitute-command-keys
             "
 GNU Emacs comes with ABSOLUTELY NO WARRANTY; type \\[describe-no-warranty] for "))
     (insert-button "full details"
-                  'action (lambda (button) (describe-no-warranty))
+                  'action (lambda (_button) (describe-no-warranty))
                   'follow-link t)
     (insert (substitute-command-keys ".
 Emacs is Free Software--Free as in Freedom--so you can redistribute copies
 of Emacs and modify it; type \\[describe-copying] to see "))
     (insert-button "the conditions"
                   'follow-link t)
     (insert (substitute-command-keys ".
 Emacs is Free Software--Free as in Freedom--so you can redistribute copies
 of Emacs and modify it; type \\[describe-copying] to see "))
     (insert-button "the conditions"
-                  'action (lambda (button) (describe-copying))
+                  'action (lambda (_button) (describe-copying))
                   'follow-link t)
     (insert (substitute-command-keys".
 Type \\[describe-distribution] for information on "))
     (insert-button "getting the latest version"
                   'follow-link t)
     (insert (substitute-command-keys".
 Type \\[describe-distribution] for information on "))
     (insert-button "getting the latest version"
-                  'action (lambda (button) (describe-distribution))
+                  'action (lambda (_button) (describe-distribution))
                   'follow-link t)
     (insert ".")))
 
                   'follow-link t)
     (insert ".")))
 
@@ -1964,7 +1983,7 @@ Type \\[describe-distribution] for information on "))
 
   (insert-button "Authors"
                 'action
 
   (insert-button "Authors"
                 'action
-                (lambda (button)
+                (lambda (_button)
                   (view-file (expand-file-name "AUTHORS" data-directory))
                   (goto-char (point-min)))
                 'follow-link t)
                   (view-file (expand-file-name "AUTHORS" data-directory))
                   (goto-char (point-min)))
                 'follow-link t)
@@ -1972,34 +1991,34 @@ Type \\[describe-distribution] for information on "))
 
   (insert-button "Contributing"
                 'action
 
   (insert-button "Contributing"
                 'action
-                (lambda (button)
+                (lambda (_button)
                   (view-file (expand-file-name "CONTRIBUTE" data-directory))
                   (goto-char (point-min)))
                 'follow-link t)
   (insert "\tHow to contribute improvements to Emacs\n\n")
 
   (insert-button "GNU and Freedom"
                   (view-file (expand-file-name "CONTRIBUTE" data-directory))
                   (goto-char (point-min)))
                 'follow-link t)
   (insert "\tHow to contribute improvements to Emacs\n\n")
 
   (insert-button "GNU and Freedom"
-                'action (lambda (button) (describe-gnu-project))
+                'action (lambda (_button) (describe-gnu-project))
                 'follow-link t)
   (insert "\t\tWhy we developed GNU Emacs and the GNU system\n")
 
   (insert-button "Absence of Warranty"
                 'follow-link t)
   (insert "\t\tWhy we developed GNU Emacs and the GNU system\n")
 
   (insert-button "Absence of Warranty"
-                'action (lambda (button) (describe-no-warranty))
+                'action (lambda (_button) (describe-no-warranty))
                 'follow-link t)
   (insert "\tGNU Emacs comes with ABSOLUTELY NO WARRANTY\n")
 
   (insert-button "Copying Conditions"
                 'follow-link t)
   (insert "\tGNU Emacs comes with ABSOLUTELY NO WARRANTY\n")
 
   (insert-button "Copying Conditions"
-                'action (lambda (button) (describe-copying))
+                'action (lambda (_button) (describe-copying))
                 'follow-link t)
   (insert "\tConditions for redistributing and changing Emacs\n")
 
   (insert-button "Getting New Versions"
                 'follow-link t)
   (insert "\tConditions for redistributing and changing Emacs\n")
 
   (insert-button "Getting New Versions"
-                'action (lambda (button) (describe-distribution))
+                'action (lambda (_button) (describe-distribution))
                 'follow-link t)
   (insert "\tHow to get the latest version of GNU Emacs\n")
 
   (insert-button "More Manuals / Ordering Manuals"
                 'follow-link t)
   (insert "\tHow to get the latest version of GNU Emacs\n")
 
   (insert-button "More Manuals / Ordering Manuals"
-                'action (lambda (button) (view-order-manuals))
+                'action (lambda (_button) (view-order-manuals))
                 'follow-link t)
   (insert "\tBuying printed manuals from the FSF\n"))
 
                 'follow-link t)
   (insert "\tBuying printed manuals from the FSF\n"))
 
@@ -2065,7 +2084,7 @@ A fancy display is used on graphic displays, normal otherwise."
 (defalias 'about-emacs 'display-about-screen)
 (defalias 'display-splash-screen 'display-startup-screen)
 
 (defalias 'about-emacs 'display-about-screen)
 (defalias 'display-splash-screen 'display-startup-screen)
 
-(defun command-line-1 (command-line-args-left)
+(defun command-line-1 (args-left)
   (display-startup-echo-area-message)
   (when (and pure-space-overflow
             (not noninteractive))
   (display-startup-echo-area-message)
   (when (and pure-space-overflow
             (not noninteractive))
@@ -2076,14 +2095,12 @@ A fancy display is used on graphic displays, normal otherwise."
      :warning))
 
   (let ((file-count 0)
      :warning))
 
   (let ((file-count 0)
+        (command-line-args-left args-left)
        first-file-buffer)
     (when command-line-args-left
       ;; We have command args; process them.
        first-file-buffer)
     (when command-line-args-left
       ;; We have command args; process them.
-      ;; Note that any local variables in this function affect the
-      ;; ability of -f batch-byte-compile to detect free variables.
-      ;; So we give some of them with common names a cl1- prefix.
-      (let ((cl1-dir command-line-default-directory)
-           cl1-tem
+      (let ((dir command-line-default-directory)
+           tem
            ;; This approach loses for "-batch -L DIR --eval "(require foo)",
            ;; if foo is intended to be found in DIR.
            ;;
            ;; This approach loses for "-batch -L DIR --eval "(require foo)",
            ;; if foo is intended to be found in DIR.
            ;;
@@ -2106,8 +2123,8 @@ A fancy display is used on graphic displays, normal otherwise."
                      "--find-file" "--visit" "--file" "--no-desktop")
                    (mapcar (lambda (elt) (concat "-" (car elt)))
                             command-switch-alist)))
                      "--find-file" "--visit" "--file" "--no-desktop")
                    (mapcar (lambda (elt) (concat "-" (car elt)))
                             command-switch-alist)))
-           (cl1-line 0)
-           (cl1-column 0))
+           (line 0)
+           (column 0))
 
        ;; Add the long X options to longopts.
        (dolist (tem command-line-x-option-alist)
 
        ;; Add the long X options to longopts.
        (dolist (tem command-line-x-option-alist)
@@ -2148,12 +2165,12 @@ A fancy display is used on graphic displays, normal otherwise."
                          argi orig-argi)))))
 
            ;; Execute the option.
                          argi orig-argi)))))
 
            ;; Execute the option.
-           (cond ((setq cl1-tem (assoc argi command-switch-alist))
+           (cond ((setq tem (assoc argi command-switch-alist))
                   (if argval
                       (let ((command-line-args-left
                              (cons argval command-line-args-left)))
                   (if argval
                       (let ((command-line-args-left
                              (cons argval command-line-args-left)))
-                        (funcall (cdr cl1-tem) argi))
-                    (funcall (cdr cl1-tem) argi)))
+                        (funcall (cdr tem) argi))
+                    (funcall (cdr tem) argi)))
 
                  ((equal argi "-no-splash")
                   (setq inhibit-startup-screen t))
 
                  ((equal argi "-no-splash")
                   (setq inhibit-startup-screen t))
@@ -2162,22 +2179,22 @@ A fancy display is used on graphic displays, normal otherwise."
                                  "-funcall"
                                  "-e"))  ; what the source used to say
                   (setq inhibit-startup-screen t)
                                  "-funcall"
                                  "-e"))  ; what the source used to say
                   (setq inhibit-startup-screen t)
-                  (setq cl1-tem (intern (or argval (pop command-line-args-left))))
-                  (if (commandp cl1-tem)
-                      (command-execute cl1-tem)
-                    (funcall cl1-tem)))
+                  (setq tem (intern (or argval (pop command-line-args-left))))
+                  (if (commandp tem)
+                      (command-execute tem)
+                    (funcall tem)))
 
                  ((member argi '("-eval" "-execute"))
                   (setq inhibit-startup-screen t)
                   (eval (read (or argval (pop command-line-args-left)))))
 
                  ((member argi '("-L" "-directory"))
 
                  ((member argi '("-eval" "-execute"))
                   (setq inhibit-startup-screen t)
                   (eval (read (or argval (pop command-line-args-left)))))
 
                  ((member argi '("-L" "-directory"))
-                  (setq cl1-tem (expand-file-name
+                  (setq tem (expand-file-name
                              (command-line-normalize-file-name
                               (or argval (pop command-line-args-left)))))
                              (command-line-normalize-file-name
                               (or argval (pop command-line-args-left)))))
-                  (cond (splice (setcdr splice (cons cl1-tem (cdr splice)))
+                  (cond (splice (setcdr splice (cons tem (cdr splice)))
                                 (setq splice (cdr splice)))
                                 (setq splice (cdr splice)))
-                        (t (setq load-path (cons cl1-tem load-path)
+                        (t (setq load-path (cons tem load-path)
                                  splice load-path))))
 
                  ((member argi '("-l" "-load"))
                                  splice load-path))))
 
                  ((member argi '("-l" "-load"))
@@ -2201,10 +2218,10 @@ A fancy display is used on graphic displays, normal otherwise."
 
                  ((equal argi "-insert")
                   (setq inhibit-startup-screen t)
 
                  ((equal argi "-insert")
                   (setq inhibit-startup-screen t)
-                  (setq cl1-tem (or argval (pop command-line-args-left)))
-                  (or (stringp cl1-tem)
+                  (setq tem (or argval (pop command-line-args-left)))
+                  (or (stringp tem)
                       (error "File name omitted from `-insert' option"))
                       (error "File name omitted from `-insert' option"))
-                  (insert-file-contents (command-line-normalize-file-name cl1-tem)))
+                  (insert-file-contents (command-line-normalize-file-name tem)))
 
                  ((equal argi "-kill")
                   (kill-emacs t))
 
                  ((equal argi "-kill")
                   (kill-emacs t))
@@ -2217,42 +2234,42 @@ A fancy display is used on graphic displays, normal otherwise."
                   (message "\"--no-desktop\" ignored because the Desktop package is not loaded"))
 
                  ((string-match "^\\+[0-9]+\\'" argi)
                   (message "\"--no-desktop\" ignored because the Desktop package is not loaded"))
 
                  ((string-match "^\\+[0-9]+\\'" argi)
-                  (setq cl1-line (string-to-number argi)))
+                  (setq line (string-to-number argi)))
 
                  ((string-match "^\\+\\([0-9]+\\):\\([0-9]+\\)\\'" argi)
 
                  ((string-match "^\\+\\([0-9]+\\):\\([0-9]+\\)\\'" argi)
-                  (setq cl1-line (string-to-number (match-string 1 argi))
-                        cl1-column (string-to-number (match-string 2 argi))))
+                  (setq line (string-to-number (match-string 1 argi))
+                        column (string-to-number (match-string 2 argi))))
 
 
-                 ((setq cl1-tem (assoc orig-argi command-line-x-option-alist))
+                 ((setq tem (assoc orig-argi command-line-x-option-alist))
                   ;; Ignore X-windows options and their args if not using X.
                   (setq command-line-args-left
                   ;; Ignore X-windows options and their args if not using X.
                   (setq command-line-args-left
-                        (nthcdr (nth 1 cl1-tem) command-line-args-left)))
+                        (nthcdr (nth 1 tem) command-line-args-left)))
 
 
-                 ((setq cl1-tem (assoc orig-argi command-line-ns-option-alist))
+                 ((setq tem (assoc orig-argi command-line-ns-option-alist))
                   ;; Ignore NS-windows options and their args if not using NS.
                   (setq command-line-args-left
                   ;; Ignore NS-windows options and their args if not using NS.
                   (setq command-line-args-left
-                        (nthcdr (nth 1 cl1-tem) command-line-args-left)))
+                        (nthcdr (nth 1 tem) command-line-args-left)))
 
                  ((member argi '("-find-file" "-file" "-visit"))
                   (setq inhibit-startup-screen t)
                   ;; An explicit option to specify visiting a file.
 
                  ((member argi '("-find-file" "-file" "-visit"))
                   (setq inhibit-startup-screen t)
                   ;; An explicit option to specify visiting a file.
-                  (setq cl1-tem (or argval (pop command-line-args-left)))
-                  (unless (stringp cl1-tem)
+                  (setq tem (or argval (pop command-line-args-left)))
+                  (unless (stringp tem)
                     (error "File name omitted from `%s' option" argi))
                   (setq file-count (1+ file-count))
                   (let ((file (expand-file-name
                     (error "File name omitted from `%s' option" argi))
                   (setq file-count (1+ file-count))
                   (let ((file (expand-file-name
-                               (command-line-normalize-file-name cl1-tem)
-                               cl1-dir)))
+                               (command-line-normalize-file-name tem)
+                               dir)))
                     (if (= file-count 1)
                         (setq first-file-buffer (find-file file))
                       (find-file-other-window file)))
                     (if (= file-count 1)
                         (setq first-file-buffer (find-file file))
                       (find-file-other-window file)))
-                  (unless (zerop cl1-line)
+                  (unless (zerop line)
                     (goto-char (point-min))
                     (goto-char (point-min))
-                    (forward-line (1- cl1-line)))
-                  (setq cl1-line 0)
-                  (unless (< cl1-column 1)
-                    (move-to-column (1- cl1-column)))
-                  (setq cl1-column 0))
+                    (forward-line (1- line)))
+                  (setq line 0)
+                  (unless (< column 1)
+                    (move-to-column (1- column)))
+                  (setq column 0))
 
                  ;; These command lines now have no effect.
                  ((string-match "\\`--?\\(no-\\)?\\(uni\\|multi\\)byte$" argi)
 
                  ;; These command lines now have no effect.
                  ((string-match "\\`--?\\(no-\\)?\\(uni\\|multi\\)byte$" argi)
@@ -2280,19 +2297,19 @@ A fancy display is used on graphic displays, normal otherwise."
                           (let ((file
                                  (expand-file-name
                                   (command-line-normalize-file-name orig-argi)
                           (let ((file
                                  (expand-file-name
                                   (command-line-normalize-file-name orig-argi)
-                                  cl1-dir)))
+                                  dir)))
                             (cond ((= file-count 1)
                                    (setq first-file-buffer (find-file file)))
                                   (inhibit-startup-screen
                                    (find-file-other-window file))
                                   (t (find-file file))))
                             (cond ((= file-count 1)
                                    (setq first-file-buffer (find-file file)))
                                   (inhibit-startup-screen
                                    (find-file-other-window file))
                                   (t (find-file file))))
-                          (unless (zerop cl1-line)
+                          (unless (zerop line)
                             (goto-char (point-min))
                             (goto-char (point-min))
-                            (forward-line (1- cl1-line)))
-                          (setq cl1-line 0)
-                          (unless (< cl1-column 1)
-                            (move-to-column (1- cl1-column)))
-                          (setq cl1-column 0))))))
+                            (forward-line (1- line)))
+                          (setq line 0)
+                          (unless (< column 1)
+                            (move-to-column (1- column)))
+                          (setq column 0))))))
            ;; In unusual circumstances, the execution of Lisp code due
            ;; to command-line options can cause the last visible frame
            ;; to be deleted.  In this case, kill emacs to avoid an
            ;; In unusual circumstances, the execution of Lisp code due
            ;; to command-line options can cause the last visible frame
            ;; to be deleted.  In this case, kill emacs to avoid an