658
|
1 ;;; startup.el --- process Emacs shell arguments
|
|
2
|
55801
6fe3d9ff80b9
(command-line): Keep the first regexp of auto-save-file-name-transforms intact.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
3 ;; Copyright (C) 1985, 86, 92, 94, 95, 96, 97, 98, 99, 2000, 01, 02, 2004
|
34286
|
4 ;; Free Software Foundation, Inc.
|
840
|
5
|
787
|
6 ;; Maintainer: FSF
|
814
|
7 ;; Keywords: internal
|
787
|
8
|
322
|
9 ;; This file is part of GNU Emacs.
|
|
10
|
|
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
|
|
12 ;; it under the terms of the GNU General Public License as published by
|
621
|
13 ;; the Free Software Foundation; either version 2, or (at your option)
|
322
|
14 ;; any later version.
|
|
15
|
|
16 ;; GNU Emacs is distributed in the hope that it will be useful,
|
|
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19 ;; GNU General Public License for more details.
|
|
20
|
|
21 ;; You should have received a copy of the GNU General Public License
|
14169
|
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
|
|
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
24 ;; Boston, MA 02111-1307, USA.
|
322
|
25
|
787
|
26 ;;; Commentary:
|
322
|
27
|
54099
a401292753e2
Remove table of command line arguments from the Commentary section.
Eli Zaretskii <eliz@is.elta.co.il>
diff
changeset
|
28 ;; This file parses the command line and gets Emacs running. Options
|
a401292753e2
Remove table of command line arguments from the Commentary section.
Eli Zaretskii <eliz@is.elta.co.il>
diff
changeset
|
29 ;; on the command line are handled in precedence order. For priorities
|
a401292753e2
Remove table of command line arguments from the Commentary section.
Eli Zaretskii <eliz@is.elta.co.il>
diff
changeset
|
30 ;; see the structure standard_args in the emacs.c file.
|
322
|
31
|
787
|
32 ;;; Code:
|
|
33
|
322
|
34 (setq top-level '(normal-top-level))
|
|
35
|
18294
|
36 (defvar command-line-processed nil
|
41155
|
37 "Non-nil once command line has been processed.")
|
322
|
38
|
18294
|
39 (defgroup initialization nil
|
|
40 "Emacs start-up procedure"
|
|
41 :group 'internal)
|
|
42
|
|
43 (defcustom inhibit-startup-message nil
|
5930
|
44 "*Non-nil inhibits the initial startup message.
|
322
|
45 This is for use in your personal init file, once you are familiar
|
18294
|
46 with the contents of the startup message."
|
|
47 :type 'boolean
|
|
48 :group 'initialization)
|
322
|
49
|
45530
|
50 (defvaralias 'inhibit-splash-screen 'inhibit-startup-message)
|
|
51
|
18294
|
52 (defcustom inhibit-startup-echo-area-message nil
|
5930
|
53 "*Non-nil inhibits the initial startup echo area message.
|
18294
|
54 Setting this variable takes effect
|
|
55 only if you do it with the customization buffer
|
22529
|
56 or if your `.emacs' file contains a line of this form:
|
6119
|
57 (setq inhibit-startup-echo-area-message \"YOUR-USER-NAME\")
|
7880
|
58 If your `.emacs' file is byte-compiled, use the following form instead:
|
|
59 (eval '(setq inhibit-startup-echo-area-message \"YOUR-USER-NAME\"))
|
5930
|
60 Thus, someone else using a copy of your `.emacs' file will see
|
18294
|
61 the startup message unless he personally acts to inhibit it."
|
|
62 :type '(choice (const :tag "Don't inhibit")
|
|
63 (string :tag "Enter your user name, to inhibit"))
|
|
64 :group 'initialization)
|
5930
|
65
|
18294
|
66 (defcustom inhibit-default-init nil
|
|
67 "*Non-nil inhibits loading the `default' library."
|
|
68 :type 'boolean
|
|
69 :group 'initialization)
|
322
|
70
|
39556
|
71 (defcustom inhibit-startup-buffer-menu nil
|
|
72 "*Non-nil inhibits display of buffer list when more than 2 files are loaded."
|
|
73 :type 'boolean
|
|
74 :group 'initialization)
|
|
75
|
16687
|
76 (defvar command-switch-alist nil
|
322
|
77 "Alist of command-line switches.
|
|
78 Elements look like (SWITCH-STRING . HANDLER-FUNCTION).
|
54260
|
79 HANDLER-FUNCTION receives the switch string as its sole argument;
|
|
80 the remaining command-line args are in the variable `command-line-args-left'.")
|
322
|
81
|
8335
|
82 (defvar command-line-args-left nil
|
|
83 "List of command-line args not yet processed.")
|
|
84
|
322
|
85 (defvar command-line-functions nil ;; lrs 7/31/89
|
|
86 "List of functions to process unrecognized command-line arguments.
|
|
87 Each function should access the dynamically bound variables
|
6593
|
88 `argi' (the current argument) and `command-line-args-left' (the remaining
|
322
|
89 arguments). The function should return non-nil only if it recognizes and
|
6593
|
90 processes `argi'. If it does so, it may consume successive arguments by
|
|
91 altering `command-line-args-left' to remove them.")
|
322
|
92
|
7022
|
93 (defvar command-line-default-directory nil
|
|
94 "Default directory to use for command line arguments.
|
|
95 This is normally copied from `default-directory' when Emacs starts.")
|
|
96
|
13889
|
97 ;;; This is here, rather than in x-win.el, so that we can ignore these
|
|
98 ;;; options when we are not using X.
|
27365
|
99 (defconst command-line-x-option-alist
|
13889
|
100 '(("-bw" 1 x-handle-numeric-switch border-width)
|
|
101 ("-d" 1 x-handle-display)
|
|
102 ("-display" 1 x-handle-display)
|
15537
|
103 ("-name" 1 x-handle-name-switch)
|
14985
|
104 ("-title" 1 x-handle-switch title)
|
14986
|
105 ("-T" 1 x-handle-switch title)
|
13889
|
106 ("-r" 0 x-handle-switch reverse t)
|
|
107 ("-rv" 0 x-handle-switch reverse t)
|
|
108 ("-reverse" 0 x-handle-switch reverse t)
|
|
109 ("-reverse-video" 0 x-handle-switch reverse t)
|
|
110 ("-fn" 1 x-handle-switch font)
|
|
111 ("-font" 1 x-handle-switch font)
|
42711
|
112 ("-fs" 0 x-handle-initial-switch fullscreen fullboth)
|
|
113 ("-fw" 0 x-handle-initial-switch fullscreen fullwidth)
|
|
114 ("-fh" 0 x-handle-initial-switch fullscreen fullheight)
|
13889
|
115 ("-ib" 1 x-handle-numeric-switch internal-border-width)
|
13912
|
116 ("-g" 1 x-handle-geometry)
|
28694
|
117 ("-lsp" 1 x-handle-numeric-switch line-spacing)
|
13912
|
118 ("-geometry" 1 x-handle-geometry)
|
13889
|
119 ("-fg" 1 x-handle-switch foreground-color)
|
|
120 ("-foreground" 1 x-handle-switch foreground-color)
|
|
121 ("-bg" 1 x-handle-switch background-color)
|
|
122 ("-background" 1 x-handle-switch background-color)
|
|
123 ("-ms" 1 x-handle-switch mouse-color)
|
|
124 ("-itype" 0 x-handle-switch icon-type t)
|
|
125 ("-i" 0 x-handle-switch icon-type t)
|
|
126 ("-iconic" 0 x-handle-iconic)
|
|
127 ("-xrm" 1 x-handle-xrm-switch)
|
|
128 ("-cr" 1 x-handle-switch cursor-color)
|
|
129 ("-vb" 0 x-handle-switch vertical-scroll-bars t)
|
|
130 ("-hb" 0 x-handle-switch horizontal-scroll-bars t)
|
|
131 ("-bd" 1 x-handle-switch)
|
|
132 ("--border-width" 1 x-handle-numeric-switch border-width)
|
|
133 ("--display" 1 x-handle-display)
|
15537
|
134 ("--name" 1 x-handle-name-switch)
|
14985
|
135 ("--title" 1 x-handle-switch title)
|
13889
|
136 ("--reverse-video" 0 x-handle-switch reverse t)
|
|
137 ("--font" 1 x-handle-switch font)
|
42711
|
138 ("--fullscreen" 0 x-handle-initial-switch fullscreen fullboth)
|
|
139 ("--fullwidth" 0 x-handle-initial-switch fullscreen fullwidth)
|
|
140 ("--fullheight" 0 x-handle-initial-switch fullscreen fullheight)
|
13889
|
141 ("--internal-border" 1 x-handle-numeric-switch internal-border-width)
|
13912
|
142 ("--geometry" 1 x-handle-geometry)
|
13889
|
143 ("--foreground-color" 1 x-handle-switch foreground-color)
|
|
144 ("--background-color" 1 x-handle-switch background-color)
|
|
145 ("--mouse-color" 1 x-handle-switch mouse-color)
|
|
146 ("--icon-type" 0 x-handle-switch icon-type t)
|
|
147 ("--iconic" 0 x-handle-iconic)
|
|
148 ("--xrm" 1 x-handle-xrm-switch)
|
|
149 ("--cursor-color" 1 x-handle-switch cursor-color)
|
|
150 ("--vertical-scroll-bars" 0 x-handle-switch vertical-scroll-bars t)
|
28694
|
151 ("--line-spacing" 1 x-handle-numeric-switch line-spacing)
|
50027
95d928fb74f3
(command-line-x-option-alist): Make --border-color set the border-color frame
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
152 ("--border-color" 1 x-handle-switch border-color)
|
43821
|
153 ("--smid" 1 x-handle-smid))
|
13889
|
154 "Alist of X Windows options.
|
|
155 Each element has the form
|
|
156 (NAME NUMARGS HANDLER FRAME-PARAM VALUE)
|
|
157 where NAME is the option name string, NUMARGS is the number of arguments
|
|
158 that the option accepts, HANDLER is a function to call to handle the option.
|
|
159 FRAME-PARAM (optional) is the frame parameter this option specifies,
|
|
160 and VALUE is the value which is given to that frame parameter
|
|
161 \(most options use the argument for this, so VALUE is not present).")
|
|
162
|
688
|
163 (defvar before-init-hook nil
|
14623
|
164 "Normal hook run after handling urgent options but before loading init files.")
|
370
|
165
|
688
|
166 (defvar after-init-hook nil
|
14623
|
167 "Normal hook run after loading the init files, `~/.emacs' and `default.el'.
|
|
168 There is no `condition-case' around the running of these functions;
|
|
169 therefore, if you set `debug-on-error' non-nil in `.emacs',
|
|
170 an error in one of these functions will invoke the debugger.")
|
|
171
|
|
172 (defvar emacs-startup-hook nil
|
|
173 "Normal hook run after loading init files and handling the command line.")
|
688
|
174
|
322
|
175 (defvar term-setup-hook nil
|
14623
|
176 "Normal hook run after loading terminal-specific Lisp code.
|
|
177 It also follows `emacs-startup-hook'. This hook exists for users to set,
|
322
|
178 so as to override the definitions made by the terminal-specific file.
|
|
179 Emacs never sets this variable itself.")
|
|
180
|
49934
|
181 (defvar inhibit-startup-hooks nil
|
|
182 "Non-nil means don't run `term-setup-hook' and `emacs-startup-hook'.
|
|
183 This is because we already did so.")
|
|
184
|
322
|
185 (defvar keyboard-type nil
|
6593
|
186 "The brand of keyboard you are using.
|
|
187 This variable is used to define
|
322
|
188 the proper function and keypad keys for use under X. It is used in a
|
22529
|
189 fashion analogous to the environment variable TERM.")
|
322
|
190
|
|
191 (defvar window-setup-hook nil
|
6593
|
192 "Normal hook run to initialize window system display.
|
|
193 Emacs runs this hook after processing the command line arguments and loading
|
|
194 the user's init file.")
|
322
|
195
|
18294
|
196 (defcustom initial-major-mode 'lisp-interaction-mode
|
|
197 "Major mode command symbol to use for the initial *scratch* buffer."
|
19941
|
198 :type 'function
|
18294
|
199 :group 'initialization)
|
322
|
200
|
18294
|
201 (defcustom init-file-user nil
|
322
|
202 "Identity of user whose `.emacs' file is or was read.
|
16687
|
203 The value is nil if `-q' or `--no-init-file' was specified,
|
|
204 meaning do not load any init file.
|
|
205
|
|
206 Otherwise, the value may be the null string, meaning use the init file
|
|
207 for the user that originally logged in, or it may be a
|
|
208 string containing a user's name meaning use that person's init file.
|
322
|
209
|
6980
|
210 In either of the latter cases, `(concat \"~\" init-file-user \"/\")'
|
|
211 evaluates to the name of the directory where the `.emacs' file was
|
11083
|
212 looked for.
|
|
213
|
|
214 Setting `init-file-user' does not prevent Emacs from loading
|
18294
|
215 `site-start.el'. The only way to do that is to use `--no-site-file'."
|
|
216 :type '(choice (const :tag "none" nil) string)
|
|
217 :group 'initialization)
|
322
|
218
|
18294
|
219 (defcustom site-run-file "site-start"
|
4599
|
220 "File containing site-wide run-time initializations.
|
|
221 This file is loaded at run-time before `~/.emacs'. It contains inits
|
|
222 that need to be in place for the entire site, but which, due to their
|
56731
|
223 higher incidence of change, don't make sense to load into Emacs's
|
4599
|
224 dumped image. Thus, the run-time load order is: 1. file described in
|
11083
|
225 this variable, if non-nil; 2. `~/.emacs'; 3. `default.el'.
|
|
226
|
|
227 Don't use the `site-start.el' file for things some users may not like.
|
|
228 Put them in `default.el' instead, so that users can more easily
|
|
229 override them. Users can prevent loading `default.el' with the `-q'
|
|
230 option or by setting `inhibit-default-init' in their own init files,
|
|
231 but inhibiting `site-start.el' requires `--no-site-file', which
|
18294
|
232 is less convenient."
|
23276
|
233 :type '(choice (const :tag "none" nil) string)
|
18294
|
234 :group 'initialization)
|
4599
|
235
|
18294
|
236 (defcustom mail-host-address nil
|
|
237 "*Name of this machine, for purposes of naming users."
|
|
238 :type '(choice (const nil) string)
|
|
239 :group 'mail)
|
8989
|
240
|
47688
|
241 (defcustom user-mail-address (if command-line-processed
|
|
242 (concat (user-login-name) "@"
|
|
243 (or mail-host-address
|
|
244 (system-name)))
|
|
245 ;; Empty string means "not set yet".
|
|
246 "")
|
13479
|
247 "*Full mailing address of this user.
|
|
248 This is initialized based on `mail-host-address',
|
18294
|
249 after your init file is read, in case it sets `mail-host-address'."
|
|
250 :type 'string
|
|
251 :group 'mail)
|
8048
|
252
|
18294
|
253 (defcustom auto-save-list-file-prefix
|
28698
|
254 (cond ((eq system-type 'ms-dos)
|
|
255 ;; MS-DOS cannot have initial dot, and allows only 8.3 names
|
28777
|
256 "~/_emacs.d/auto-save.list/_s")
|
28698
|
257 (t
|
|
258 "~/.emacs.d/auto-save-list/.saves-"))
|
13811
|
259 "Prefix for generating `auto-save-list-file-name'.
|
|
260 This is used after reading your `.emacs' file to initialize
|
|
261 `auto-save-list-file-name', by appending Emacs's pid and the system name,
|
|
262 if you have not already set `auto-save-list-file-name' yourself.
|
28698
|
263 Directories in the prefix will be created if necessary.
|
13811
|
264 Set this to nil if you want to prevent `auto-save-list-file-name'
|
18294
|
265 from being initialized."
|
20063
|
266 :type '(choice (const :tag "Don't record a session's auto save list" nil)
|
|
267 string)
|
18294
|
268 :group 'auto-save)
|
13117
|
269
|
54852
|
270 (defvar emacs-quick-startup nil)
|
|
271
|
322
|
272 (defvar init-file-debug nil)
|
|
273
|
5109
|
274 (defvar init-file-had-error nil)
|
|
275
|
24198
|
276 (defvar normal-top-level-add-subdirs-inode-list nil)
|
|
277
|
51698
|
278 (defvar pure-space-overflow nil
|
|
279 "Non-nil if building Emacs overflowed pure space.")
|
|
280
|
21264
|
281 (defun normal-top-level-add-subdirs-to-load-path ()
|
22024
|
282 "Add all subdirectories of current directory to `load-path'.
|
|
283 More precisely, this uses only the subdirectories whose names
|
22334
|
284 start with letters or digits; it excludes any subdirectory named `RCS'
|
|
285 or `CVS', and any subdirectory that contains a file named `.nosearch'."
|
49597
|
286 (let (dirs
|
24198
|
287 attrs
|
21264
|
288 (pending (list default-directory)))
|
|
289 ;; This loop does a breadth-first tree walk on DIR's subtree,
|
|
290 ;; putting each subdir into DIRS as its contents are examined.
|
|
291 (while pending
|
41171
|
292 (push (pop pending) dirs)
|
38516
|
293 (let* ((this-dir (car dirs))
|
|
294 (contents (directory-files this-dir))
|
|
295 (default-directory this-dir)
|
56731
|
296 (canonicalized (if (fboundp 'untranslated-canonical-name)
|
|
297 (untranslated-canonical-name this-dir))))
|
38516
|
298 ;; The Windows version doesn't report meaningful inode
|
|
299 ;; numbers, so use the canonicalized absolute file name of the
|
|
300 ;; directory instead.
|
|
301 (setq attrs (or canonicalized
|
|
302 (nthcdr 10 (file-attributes this-dir))))
|
24198
|
303 (unless (member attrs normal-top-level-add-subdirs-inode-list)
|
41171
|
304 (push attrs normal-top-level-add-subdirs-inode-list)
|
|
305 (dolist (file contents)
|
34349
|
306 ;; The lower-case variants of RCS and CVS are for DOS/Windows.
|
41171
|
307 (unless (member file '("." ".." "RCS" "CVS" "rcs" "cvs"))
|
|
308 (when (and (string-match "\\`[[:alnum:]]" file)
|
24923
702b3d792db9
(normal-top-level-add-subdirs-to-load-path): Avoid doing a `stat' when
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
309 ;; Avoid doing a `stat' when it isn't necessary
|
702b3d792db9
(normal-top-level-add-subdirs-to-load-path): Avoid doing a `stat' when
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
310 ;; because that can cause trouble when an NFS server
|
702b3d792db9
(normal-top-level-add-subdirs-to-load-path): Avoid doing a `stat' when
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
311 ;; is down.
|
41171
|
312 (not (string-match "\\.elc?\\'" file))
|
|
313 (file-directory-p file))
|
|
314 (let ((expanded (expand-file-name file)))
|
24198
|
315 (unless (file-exists-p (expand-file-name ".nosearch"
|
|
316 expanded))
|
41171
|
317 (setq pending (nconc pending (list expanded)))))))))))
|
21292
|
318 (normal-top-level-add-to-load-path (cdr (nreverse dirs)))))
|
21264
|
319
|
22176
|
320 ;; This function is called from a subdirs.el file.
|
|
321 ;; It assumes that default-directory is the directory
|
|
322 ;; in which the subdirs.el file exists,
|
|
323 ;; and it adds to load-path the subdirs of that directory
|
|
324 ;; as specified in DIRS. Normally the elements of DIRS are relative.
|
9443
|
325 (defun normal-top-level-add-to-load-path (dirs)
|
19955
|
326 (let ((tail load-path)
|
|
327 (thisdir (directory-file-name default-directory)))
|
|
328 (while (and tail
|
28722
|
329 ;;Don't go all the way to the nil terminator.
|
|
330 (cdr tail)
|
19955
|
331 (not (equal thisdir (car tail)))
|
|
332 (not (and (memq system-type '(ms-dos windows-nt))
|
|
333 (equal (downcase thisdir) (downcase (car tail))))))
|
|
334 (setq tail (cdr tail)))
|
28722
|
335 ;;Splice the new section in.
|
|
336 (when tail
|
|
337 (setcdr tail (append (mapcar 'expand-file-name dirs) (cdr tail))))))
|
9443
|
338
|
322
|
339 (defun normal-top-level ()
|
|
340 (if command-line-processed
|
|
341 (message "Back to top level.")
|
|
342 (setq command-line-processed t)
|
11294
|
343 ;; Give *Messages* the same default-directory as *scratch*,
|
|
344 ;; just to keep things predictable.
|
|
345 (let ((dir default-directory))
|
56731
|
346 (with-current-buffer "*Messages*"
|
11294
|
347 (setq default-directory dir)))
|
47733
d1dbe1fc93d6
(normal-top-level): Reset standard-value of `user-full-name' here.
Markus Rost <rost@math.uni-bielefeld.de>
diff
changeset
|
348 ;; `user-full-name' is now known; reset its standard-value here.
|
d1dbe1fc93d6
(normal-top-level): Reset standard-value of `user-full-name' here.
Markus Rost <rost@math.uni-bielefeld.de>
diff
changeset
|
349 (put 'user-full-name 'standard-value
|
d1dbe1fc93d6
(normal-top-level): Reset standard-value of `user-full-name' here.
Markus Rost <rost@math.uni-bielefeld.de>
diff
changeset
|
350 (list (default-value 'user-full-name)))
|
22512
|
351 ;; For root, preserve owner and group when editing files.
|
|
352 (if (equal (user-uid) 0)
|
|
353 (setq backup-by-copying-when-mismatch t))
|
9443
|
354 ;; Look in each dir in load-path for a subdirs.el file.
|
|
355 ;; If we find one, load it, which will add the appropriate subdirs
|
|
356 ;; of that dir into load-path,
|
30899
429c384fc024
(normal-top-level): Look in each dir in load-path for a leim-list.el
Kenichi Handa <handa@m17n.org>
diff
changeset
|
357 ;; Look for a leim-list.el file too. Loading it will register
|
429c384fc024
(normal-top-level): Look in each dir in load-path for a leim-list.el
Kenichi Handa <handa@m17n.org>
diff
changeset
|
358 ;; available input methods.
|
56731
|
359 (dolist (dir load-path)
|
|
360 (let ((default-directory dir))
|
|
361 (load (expand-file-name "subdirs.el") t t t))
|
|
362 (let ((default-directory dir))
|
|
363 (load (expand-file-name "leim-list.el") t t t)))
|
|
364 (unless (eq system-type 'vax-vms)
|
|
365 ;; If the PWD environment variable isn't accurate, delete it.
|
|
366 (let ((pwd (getenv "PWD")))
|
|
367 (and (stringp pwd)
|
|
368 ;; Use FOO/., so that if FOO is a symlink, file-attributes
|
|
369 ;; describes the directory linked to, not FOO itself.
|
|
370 (or (equal (file-attributes
|
|
371 (concat (file-name-as-directory pwd) "."))
|
|
372 (file-attributes
|
|
373 (concat (file-name-as-directory default-directory)
|
|
374 ".")))
|
|
375 (setq process-environment
|
|
376 (delete (concat "PWD=" pwd)
|
|
377 process-environment))))))
|
707
|
378 (setq default-directory (abbreviate-file-name default-directory))
|
7371
|
379 (let ((menubar-bindings-done nil))
|
|
380 (unwind-protect
|
|
381 (command-line)
|
|
382 ;; Do this again, in case .emacs defined more abbreviations.
|
|
383 (setq default-directory (abbreviate-file-name default-directory))
|
13279
|
384 ;; Specify the file for recording all the auto save files of this session.
|
|
385 ;; This is used by recover-session.
|
13811
|
386 (or auto-save-list-file-name
|
|
387 (and auto-save-list-file-prefix
|
|
388 (setq auto-save-list-file-name
|
13912
|
389 ;; Under MS-DOS our PID is almost always reused between
|
|
390 ;; Emacs invocations. We need something more unique.
|
28777
|
391 (cond ((eq system-type 'ms-dos)
|
|
392 ;; We are going to access the auto-save
|
|
393 ;; directory, so make sure it exists.
|
|
394 (make-directory
|
|
395 (file-name-directory auto-save-list-file-prefix)
|
|
396 t)
|
49597
|
397 (concat
|
28777
|
398 (make-temp-name
|
|
399 (expand-file-name
|
|
400 auto-save-list-file-prefix))
|
|
401 "~"))
|
|
402 (t
|
|
403 (expand-file-name
|
|
404 (format "%s%d-%s~"
|
|
405 auto-save-list-file-prefix
|
|
406 (emacs-pid)
|
|
407 (system-name))))))))
|
49934
|
408 (unless inhibit-startup-hooks
|
|
409 (run-hooks 'emacs-startup-hook)
|
|
410 (and term-setup-hook
|
|
411 (run-hooks 'term-setup-hook)))
|
38347
|
412
|
|
413 ;; Don't do this if we failed to create the initial frame,
|
|
414 ;; for instance due to a dense colormap.
|
40304
|
415 (when (or frame-initial-frame
|
|
416 ;; If frame-initial-frame has no meaning, do this anyway.
|
|
417 (not (and window-system
|
|
418 (not noninteractive)
|
|
419 (not (eq window-system 'pc)))))
|
38347
|
420 ;; Modify the initial frame based on what .emacs puts into
|
|
421 ;; ...-frame-alist.
|
|
422 (if (fboundp 'frame-notice-user-settings)
|
|
423 (frame-notice-user-settings))
|
|
424 (if (fboundp 'frame-set-background-mode)
|
|
425 ;; Set the faces for the initial background mode even if
|
|
426 ;; frame-notice-user-settings didn't (such as on a tty).
|
|
427 ;; frame-set-background-mode is idempotent, so it won't
|
|
428 ;; cause any harm if it's already been done.
|
|
429 (let ((frame-background-mode frame-background-mode)
|
|
430 (frame (selected-frame))
|
|
431 term)
|
|
432 (when (and (null window-system)
|
|
433 ;; Don't override a possibly customized value.
|
|
434 (null frame-background-mode)
|
|
435 ;; Don't override user specifications.
|
|
436 (null (frame-parameter frame 'reverse))
|
|
437 (let ((bg (frame-parameter frame 'background-color)))
|
|
438 (or (null bg)
|
|
439 (member bg '(unspecified "unspecified-bg")))))
|
|
440 (setq term (getenv "TERM"))
|
42963
019acf15aa7a
Explain in a comment why the default background-setting code is still
Eli Zaretskii <eliz@gnu.org>
diff
changeset
|
441 ;; Some files in lisp/term do a better job with the
|
019acf15aa7a
Explain in a comment why the default background-setting code is still
Eli Zaretskii <eliz@gnu.org>
diff
changeset
|
442 ;; background mode, but we leave this here anyway, in
|
019acf15aa7a
Explain in a comment why the default background-setting code is still
Eli Zaretskii <eliz@gnu.org>
diff
changeset
|
443 ;; case they remove those files.
|
38347
|
444 (if (string-match "^\\(xterm\\|rxvt\\|dtterm\\|eterm\\)"
|
|
445 term)
|
|
446 (setq frame-background-mode 'light)))
|
|
447 (frame-set-background-mode (selected-frame)))))
|
32651
|
448
|
7371
|
449 ;; Now we know the user's default font, so add it to the menu.
|
|
450 (if (fboundp 'font-menu-add-default)
|
|
451 (font-menu-add-default))
|
|
452 (and window-setup-hook
|
|
453 (run-hooks 'window-setup-hook))
|
|
454 (or menubar-bindings-done
|
32436
|
455 (if (display-popup-menus-p)
|
|
456 (precompute-menubar-bindings)))))))
|
7371
|
457
|
|
458 ;; Precompute the keyboard equivalents in the menu bar items.
|
|
459 (defun precompute-menubar-bindings ()
|
12300
|
460 (let ((submap (lookup-key global-map [menu-bar])))
|
|
461 (while submap
|
|
462 (and (consp (car submap))
|
|
463 (symbolp (car (car submap)))
|
|
464 (stringp (car-safe (cdr (car submap))))
|
|
465 (keymapp (cdr (cdr (car submap))))
|
12346
|
466 (progn
|
|
467 (x-popup-menu nil (cdr (cdr (car submap))))
|
|
468 (if purify-flag
|
|
469 (garbage-collect))))
|
12300
|
470 (setq submap (cdr submap))))
|
32141
|
471 (setq define-key-rebound-commands t))
|
322
|
472
|
33010
|
473 ;; Command-line options supported by tty's:
|
|
474 (defconst tty-long-option-alist
|
42745
|
475 '(("--name" . "-name")
|
|
476 ("--title" . "-T")
|
|
477 ("--reverse-video" . "-reverse")
|
33010
|
478 ("--foreground-color" . "-fg")
|
42745
|
479 ("--background-color" . "-bg")
|
|
480 ("--color" . "-color")))
|
33010
|
481
|
35510
|
482 (defconst tool-bar-images-pixel-height 24
|
|
483 "Height in pixels of images in the tool bar.")
|
|
484
|
36321
|
485 (defvar tool-bar-originally-present nil
|
|
486 "Non-nil if tool-bars are present before user and site init files are read.")
|
|
487
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
488 ;; Handle the X-like command-line arguments "-fg", "-bg", "-name", etc.
|
33010
|
489 (defun tty-handle-args (args)
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
490 (let (rest)
|
33010
|
491 (message "%s" args)
|
|
492 (while (and args
|
|
493 (not (equal (car args) "--")))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
494 (let* ((argi (pop args))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
495 (orig-argi argi)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
496 argval completion)
|
33010
|
497 ;; Check for long options with attached arguments
|
|
498 ;; and separate out the attached option argument into argval.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
499 (when (string-match "^\\(--[^=]*\\)=" argi)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
500 (setq argval (substring argi (match-end 0))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
501 argi (match-string 1 argi)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
502 (when (string-match "^--" argi)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
503 (setq completion (try-completion argi tty-long-option-alist))
|
33010
|
504 (if (eq completion t)
|
|
505 ;; Exact match for long option.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
506 (setq argi (cdr (assoc argi tty-long-option-alist)))
|
33010
|
507 (if (stringp completion)
|
|
508 (let ((elt (assoc completion tty-long-option-alist)))
|
|
509 ;; Check for abbreviated long option.
|
|
510 (or elt
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
511 (error "Option `%s' is ambiguous" argi))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
512 (setq argi (cdr elt)))
|
33010
|
513 ;; Check for a short option.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
514 (setq argval nil
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
515 argi orig-argi))))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
516 (cond ((member argi '("-fg" "-foreground"))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
517 (push (cons 'foreground-color (or argval (pop args)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
518 default-frame-alist))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
519 ((member argi '("-bg" "-background"))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
520 (push (cons 'background-color (or argval (pop args)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
521 default-frame-alist))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
522 ((member argi '("-T" "-name"))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
523 (unless argval (setq argval (pop args)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
524 (push (cons 'title
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
525 (if (stringp argval)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
526 argval
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
527 (let ((case-fold-search t)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
528 i)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
529 (setq argval (invocation-name))
|
33010
|
530
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
531 ;; Change any . or * characters in name to
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
532 ;; hyphens, so as to emulate behavior on X.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
533 (while
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
534 (setq i (string-match "[.*]" argval))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
535 (aset argval i ?-))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
536 argval)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
537 default-frame-alist))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
538 ((member argi '("-r" "-rv" "-reverse"))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
539 (push '(reverse . t)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
540 default-frame-alist))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
541 ((equal argi "-color")
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
542 (unless argval (setq argval 8)) ; default --color means 8 ANSI colors
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
543 (push (cons 'tty-color-mode
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
544 (cond
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
545 ((numberp argval) argval)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
546 ((string-match "-?[0-9]+" argval)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
547 (string-to-number argval))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
548 (t (intern argval))))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
549 default-frame-alist))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
550 (t
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
551 (push argi rest)))))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
552 (nreverse rest)))
|
33010
|
553
|
322
|
554 (defun command-line ()
|
7022
|
555 (setq command-line-default-directory default-directory)
|
|
556
|
22429
|
557 ;; Choose a reasonable location for temporary files.
|
|
558 (setq temporary-file-directory
|
|
559 (file-name-as-directory
|
|
560 (cond ((memq system-type '(ms-dos windows-nt))
|
|
561 (or (getenv "TEMP") (getenv "TMPDIR") (getenv "TMP") "c:/temp"))
|
|
562 ((memq system-type '(vax-vms axp-vms))
|
|
563 (or (getenv "TMPDIR") (getenv "TMP") (getenv "TEMP") "SYS$SCRATCH:"))
|
|
564 (t
|
|
565 (or (getenv "TMPDIR") (getenv "TMP") (getenv "TEMP") "/tmp")))))
|
25485
|
566 (setq small-temporary-file-directory
|
|
567 (if (eq system-type 'ms-dos)
|
25559
|
568 (getenv "TMPDIR")))
|
44232
|
569 (setq auto-save-file-name-transforms
|
55801
6fe3d9ff80b9
(command-line): Keep the first regexp of auto-save-file-name-transforms intact.
Stefan Monnier <monnier@iro.umontreal.ca>
diff
changeset
|
570 (list (list (car (car auto-save-file-name-transforms))
|
44232
|
571 ;; Don't put "\\2" inside expand-file-name, since
|
|
572 ;; it will be transformed to "/2" on DOS/Windows.
|
44716
|
573 (concat temporary-file-directory "\\2") t)))
|
22429
|
574
|
823
|
575 ;; See if we should import version-control from the environment variable.
|
322
|
576 (let ((vc (getenv "VERSION_CONTROL")))
|
|
577 (cond ((eq vc nil)) ;don't do anything if not set
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
578 ((member vc '("t" "numbered"))
|
322
|
579 (setq version-control t))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
580 ((member vc '("nil" "existing"))
|
322
|
581 (setq version-control nil))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
582 ((member vc '("never" "simple"))
|
322
|
583 (setq version-control 'never))))
|
|
584
|
755
|
585 ;;! This has been commented out; I currently find the behavior when
|
|
586 ;;! split-window-keep-point is nil disturbing, but if I can get used
|
|
587 ;;! to it, then it would be better to eliminate the option.
|
|
588 ;;! ;; Choose a good default value for split-window-keep-point.
|
|
589 ;;! (setq split-window-keep-point (> baud-rate 2400))
|
384
|
590
|
24203
|
591 ;; Set the default strings to display in mode line for
|
|
592 ;; end-of-line formats that aren't native to this platform.
|
|
593 (cond
|
|
594 ((memq system-type '(ms-dos windows-nt emx))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
595 (setq eol-mnemonic-unix "(Unix)"
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
596 eol-mnemonic-mac "(Mac)"))
|
42790
|
597 ;; Both Mac and Unix EOLs are now "native" on Mac OS so keep the
|
|
598 ;; abbreviated strings `/' and `:' set in coding.c for them.
|
|
599 ((eq system-type 'macos)
|
|
600 (setq eol-mnemonic-dos "(DOS)"))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
601 (t ; this is for Unix/GNU/Linux systems
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
602 (setq eol-mnemonic-dos "(DOS)"
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
603 eol-mnemonic-mac "(Mac)")))
|
24203
|
604
|
322
|
605 ;; Read window system's init file if using a window system.
|
8748
|
606 (condition-case error
|
|
607 (if (and window-system (not noninteractive))
|
|
608 (load (concat term-file-prefix
|
|
609 (symbol-name window-system)
|
|
610 "-win")
|
|
611 ;; Every window system should have a startup file;
|
|
612 ;; barf if we can't find it.
|
|
613 nil t))
|
|
614 ;; If we can't read it, print the error message and exit.
|
|
615 (error
|
8749
|
616 (princ
|
|
617 (if (eq (car error) 'error)
|
|
618 (apply 'concat (cdr error))
|
|
619 (if (memq 'file-error (get (car error) 'error-conditions))
|
|
620 (format "%s: %s"
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
621 (nth 1 error)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
622 (mapconcat (lambda (obj) (prin1-to-string obj t))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
623 (cdr (cdr error)) ", "))
|
8749
|
624 (format "%s: %s"
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
625 (get (car error) 'error-message)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
626 (mapconcat (lambda (obj) (prin1-to-string obj t))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
627 (cdr error) ", "))))
|
8749
|
628 'external-debugging-output)
|
37320
|
629 (terpri 'external-debugging-output)
|
8749
|
630 (setq window-system nil)
|
8748
|
631 (kill-emacs)))
|
322
|
632
|
33010
|
633 ;; Windowed displays do this inside their *-win.el.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
634 (unless (or (display-graphic-p) noninteractive)
|
33010
|
635 (setq command-line-args (tty-handle-args command-line-args)))
|
|
636
|
33880
29bb0c0782b1
Do not call set-locale-environment until after terminal is initialized.
Jason Rumney <jasonr@gnu.org>
diff
changeset
|
637 (set-locale-environment nil)
|
29bb0c0782b1
Do not call set-locale-environment until after terminal is initialized.
Jason Rumney <jasonr@gnu.org>
diff
changeset
|
638
|
42332
|
639 ;; Convert the arguments to Emacs internal representation.
|
|
640 (let ((args (cdr command-line-args)))
|
|
641 (while args
|
|
642 (setcar args
|
|
643 (decode-coding-string (car args) locale-coding-system t))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
644 (pop args)))
|
42332
|
645
|
326
|
646 (let ((done nil)
|
|
647 (args (cdr command-line-args)))
|
|
648
|
322
|
649 ;; Figure out which user's init file to load,
|
|
650 ;; either from the environment or from the options.
|
|
651 (setq init-file-user (if noninteractive nil (user-login-name)))
|
|
652 ;; If user has not done su, use current $HOME to find .emacs.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
653 (and init-file-user
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
654 (equal init-file-user (user-real-login-name))
|
322
|
655 (setq init-file-user ""))
|
326
|
656
|
|
657 ;; Process the command-line args, and delete the arguments
|
|
658 ;; processed. This is consistent with the way main in emacs.c
|
|
659 ;; does things.
|
322
|
660 (while (and (not done) args)
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
661 (let* ((longopts '(("--no-init-file") ("--no-site-file") ("--user")
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
662 ("--debug-init") ("--iconic") ("--icon-type")))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
663 (argi (pop args))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
664 (orig-argi argi)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
665 argval)
|
13479
|
666 ;; Handle --OPTION=VALUE format.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
667 (when (string-match "^\\(--[^=]*\\)=" argi)
|
45530
|
668 (setq argval (substring argi (match-end 0))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
669 argi (match-string 1 argi)))
|
45530
|
670 (unless (equal argi "--")
|
|
671 (let ((completion (try-completion argi longopts)))
|
|
672 (if (eq completion t)
|
|
673 (setq argi (substring argi 1))
|
|
674 (if (stringp completion)
|
|
675 (let ((elt (assoc completion longopts)))
|
|
676 (or elt
|
|
677 (error "Option `%s' is ambiguous" argi))
|
|
678 (setq argi (substring (car elt) 1)))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
679 (setq argval nil
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
680 argi orig-argi)))))
|
322
|
681 (cond
|
54852
|
682 ((equal argi "-Q")
|
|
683 (setq init-file-user nil
|
|
684 site-run-file nil
|
|
685 emacs-quick-startup t)
|
|
686 (push '(vertical-scroll-bars . nil) initial-frame-alist))
|
41171
|
687 ((member argi '("-q" "-no-init-file"))
|
|
688 (setq init-file-user nil))
|
|
689 ((member argi '("-u" "-user"))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
690 (setq init-file-user (or argval (pop args))
|
41171
|
691 argval nil))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
692 ((equal argi "-no-site-file")
|
41171
|
693 (setq site-run-file nil))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
694 ((equal argi "-debug-init")
|
41171
|
695 (setq init-file-debug t))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
696 ((equal argi "-iconic")
|
41171
|
697 (push '(visibility . icon) initial-frame-alist))
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
698 ((member argi '("-icon-type" "-i" "-itype"))
|
41171
|
699 (push '(icon-type . t) default-frame-alist))
|
|
700 ;; Push the popped arg back on the list of arguments.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
701 (t
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
702 (push argi args)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
703 (setq done t)))
|
9173
6ee3eeec722b
(command-line): Recognize --longopt synonyms for all options handled here.
Karl Heuer <kwzh@gnu.org>
diff
changeset
|
704 ;; Was argval set but not used?
|
6ee3eeec722b
(command-line): Recognize --longopt synonyms for all options handled here.
Karl Heuer <kwzh@gnu.org>
diff
changeset
|
705 (and argval
|
6ee3eeec722b
(command-line): Recognize --longopt synonyms for all options handled here.
Karl Heuer <kwzh@gnu.org>
diff
changeset
|
706 (error "Option `%s' doesn't allow an argument" argi))))
|
6ee3eeec722b
(command-line): Recognize --longopt synonyms for all options handled here.
Karl Heuer <kwzh@gnu.org>
diff
changeset
|
707
|
326
|
708 ;; Re-attach the program name to the front of the arg list.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
709 (and command-line-args
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
710 (setcdr command-line-args args)))
|
322
|
711
|
2761
|
712 ;; Under X Windows, this creates the X frame and deletes the terminal frame.
|
35736
|
713 (when (fboundp 'frame-initialize)
|
|
714 (frame-initialize))
|
|
715
|
8759
19d9177069c4
(command-line): If initial X frame has a menu bar, mark menu-bar-mode as on.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
716 ;; If frame was created with a menu bar, set menu-bar-mode on.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
717 (unless (or noninteractive
|
54852
|
718 emacs-quick-startup
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
719 (and (memq window-system '(x w32))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
720 (<= (frame-parameter nil 'menu-bar-lines) 0)))
|
49997
afcd12db0367
* startup.el (command-line): Call menu-bar-mode with 1 instead of t.
Jan Djärv <jan.h.d@swipnet.se>
diff
changeset
|
721 (menu-bar-mode 1))
|
2761
|
722
|
31823
|
723 ;; If frame was created with a tool bar, switch tool-bar-mode on.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
724 (unless (or noninteractive
|
54852
|
725 emacs-quick-startup
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
726 (not (display-graphic-p))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
727 (<= (frame-parameter nil 'tool-bar-lines) 0))
|
35510
|
728 (tool-bar-mode 1))
|
31823
|
729
|
30016
|
730 ;; Can't do this init in defcustom because window-system isn't set.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
731 (unless (or noninteractive
|
54852
|
732 emacs-quick-startup
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
733 (eq system-type 'ms-dos)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
734 (not (memq window-system '(x w32))))
|
30016
|
735 (setq-default blink-cursor t)
|
|
736 (blink-cursor-mode 1))
|
|
737
|
35826
|
738 (unless noninteractive
|
|
739 ;; DOS/Windows systems have a PC-type keyboard which has both
|
|
740 ;; <delete> and <backspace> keys.
|
|
741 (when (or (memq system-type '(ms-dos windows-nt))
|
|
742 (and (memq window-system '(x))
|
|
743 (fboundp 'x-backspace-delete-keys-p)
|
40612
|
744 (x-backspace-delete-keys-p))
|
|
745 ;; If the terminal Emacs is running on has erase char
|
|
746 ;; set to ^H, use the Backspace key for deleting
|
|
747 ;; backward and, and the Delete key for deleting forward.
|
|
748 (and (null window-system)
|
|
749 (eq tty-erase-char 8)))
|
37191
|
750 (setq-default normal-erase-is-backspace t)
|
|
751 (normal-erase-is-backspace-mode 1)))
|
34552
|
752
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
753 (unless (or noninteractive
|
54852
|
754 emacs-quick-startup
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
755 (not (display-graphic-p))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
756 (not (fboundp 'x-show-tip)))
|
33355
|
757 (setq-default tooltip-mode t)
|
|
758 (tooltip-mode 1))
|
|
759
|
32583
|
760 ;; Register default TTY colors for the case the terminal hasn't a
|
|
761 ;; terminal init file.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
762 (unless (memq window-system '(x w32))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
763 ;; We do this regardles of whether the terminal supports colors
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
764 ;; or not, since they can switch that support on or off in
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
765 ;; mid-session by setting the tty-color-mode frame parameter.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
766 (tty-register-default-colors))
|
32583
|
767
|
36321
|
768 ;; Record whether the tool-bar is present before the user and site
|
|
769 ;; init files are processed. frame-notice-user-settings uses this
|
|
770 ;; to determine if the tool-bar has been disabled by the init files,
|
|
771 ;; and the frame needs to be resized.
|
|
772 (when (fboundp 'frame-notice-user-settings)
|
|
773 (let ((tool-bar-lines (or (assq 'tool-bar-lines initial-frame-alist)
|
|
774 (assq 'tool-bar-lines default-frame-alist))))
|
|
775 (setq tool-bar-originally-present
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
776 (and tool-bar-lines
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
777 (cdr tool-bar-lines)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
778 (not (eq 0 (cdr tool-bar-lines)))))))
|
36321
|
779
|
37688
|
780 (let ((old-scalable-fonts-allowed scalable-fonts-allowed)
|
|
781 (old-font-list-limit font-list-limit)
|
|
782 (old-face-ignored-fonts face-ignored-fonts))
|
370
|
783
|
37688
|
784 (run-hooks 'before-init-hook)
|
4672
|
785
|
37688
|
786 ;; Run the site-start library if it exists. The point of this file is
|
|
787 ;; that it is run before .emacs. There is no point in doing this after
|
|
788 ;; .emacs; that is useless.
|
49597
|
789 (if site-run-file
|
37688
|
790 (load site-run-file t t))
|
33850
|
791
|
37688
|
792 ;; Sites should not disable this. Only individuals should disable
|
|
793 ;; the startup message.
|
|
794 (setq inhibit-startup-message nil)
|
33850
|
795
|
37688
|
796 ;; Load that user's init file, or the default one, or none.
|
|
797 (let (debug-on-error-from-init-file
|
|
798 debug-on-error-should-be-set
|
|
799 (debug-on-error-initial
|
|
800 (if (eq init-file-debug t) 'startup init-file-debug))
|
|
801 (orig-enable-multibyte default-enable-multibyte-characters))
|
|
802 (let ((debug-on-error debug-on-error-initial)
|
|
803 ;; This function actually reads the init files.
|
|
804 (inner
|
|
805 (function
|
|
806 (lambda ()
|
|
807 (if init-file-user
|
|
808 (let ((user-init-file-1
|
41171
|
809 (cond
|
37688
|
810 ((eq system-type 'ms-dos)
|
|
811 (concat "~" init-file-user "/_emacs"))
|
|
812 ((eq system-type 'windows-nt)
|
57171
|
813 ;; Prefer .emacs on Windows.
|
37688
|
814 (if (directory-files "~" nil "^\\.emacs\\(\\.elc?\\)?$")
|
|
815 "~/.emacs"
|
57171
|
816 ;; Also support _emacs for compatibility.
|
|
817 (if (directory-files "~" nil "^_emacs\\(\\.elc?\\)?$")
|
|
818 "~/_emacs"
|
|
819 ;; But default to .emacs if _emacs does not exist.
|
|
820 "~/.emacs")))
|
49597
|
821 ((eq system-type 'vax-vms)
|
37688
|
822 "sys$login:.emacs")
|
41171
|
823 (t
|
37688
|
824 (concat "~" init-file-user "/.emacs")))))
|
|
825 ;; This tells `load' to store the file name found
|
|
826 ;; into user-init-file.
|
|
827 (setq user-init-file t)
|
|
828 (load user-init-file-1 t t)
|
49597
|
829
|
48015
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
830 (when (eq user-init-file t)
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
831 ;; If we did not find ~/.emacs, try
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
832 ;; ~/.emacs.d/.emacs.
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
833 (let ((otherfile
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
834 (expand-file-name
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
835 (file-name-nondirectory user-init-file-1)
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
836 (file-name-as-directory
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
837 (expand-file-name
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
838 ".emacs.d"
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
839 (file-name-directory user-init-file-1))))))
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
840 (load otherfile t t)
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
841
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
842 ;; If we did not find the user's init file,
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
843 ;; set user-init-file conclusively.
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
844 ;; Don't let it be set from default.el.
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
845 (when (eq user-init-file t)
|
68b29ca63a54
(command-line): Look for .emacs under ~/.emacs.d after looking in ~.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
846 (setq user-init-file user-init-file-1))))
|
49597
|
847
|
37688
|
848 ;; If we loaded a compiled file, set
|
|
849 ;; `user-init-file' to the source version if that
|
|
850 ;; exists.
|
|
851 (when (and user-init-file
|
|
852 (equal (file-name-extension user-init-file)
|
|
853 "elc"))
|
|
854 (let* ((source (file-name-sans-extension user-init-file))
|
|
855 (alt (concat source ".el")))
|
|
856 (setq source (cond ((file-exists-p alt) alt)
|
|
857 ((file-exists-p source) source)
|
|
858 (t nil)))
|
|
859 (when source
|
|
860 (when (file-newer-than-file-p source user-init-file)
|
|
861 (message "Warning: %s is newer than %s"
|
|
862 source user-init-file)
|
|
863 (sit-for 1))
|
|
864 (setq user-init-file source))))
|
49597
|
865
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
866 (when (stringp custom-file)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
867 (unless (assoc custom-file load-history)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
868 ;; If the .emacs file has set `custom-file' but hasn't
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
869 ;; loaded the file yet, let's load it.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
870 (load custom-file t t)))
|
49597
|
871
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
872 (unless inhibit-default-init
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
873 (let ((inhibit-startup-message nil))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
874 ;; Users are supposed to be told their rights.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
875 ;; (Plus how to get help and how to undo.)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
876 ;; Don't you dare turn this off for anyone
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
877 ;; except yourself.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
878 (load "default" t t)))))))))
|
37688
|
879 (if init-file-debug
|
|
880 ;; Do this without a condition-case if the user wants to debug.
|
|
881 (funcall inner)
|
|
882 (condition-case error
|
|
883 (progn
|
|
884 (funcall inner)
|
|
885 (setq init-file-had-error nil))
|
|
886 (error
|
|
887 (let ((message-log-max nil))
|
|
888 (save-excursion
|
|
889 (set-buffer (get-buffer-create "*Messages*"))
|
|
890 (insert "\n\n"
|
|
891 (format "An error has occurred while loading `%s':\n\n"
|
|
892 user-init-file)
|
|
893 (format "%s%s%s"
|
|
894 (get (car error) 'error-message)
|
|
895 (if (cdr error) ": " "")
|
49897
|
896 (mapconcat (lambda (s) (prin1-to-string s t)) (cdr error) ", "))
|
37688
|
897 "\n\n"
|
49897
|
898 "To ensure normal operation, you should investigate and remove the\n"
|
|
899 "cause of the error in your initialization file. Start Emacs with\n"
|
|
900 "the `--debug-init' option to view a complete error backtrace.\n\n"))
|
37688
|
901 (message "Error in init file: %s%s%s"
|
|
902 (get (car error) 'error-message)
|
|
903 (if (cdr error) ": " "")
|
|
904 (mapconcat 'prin1-to-string (cdr error) ", "))
|
49897
|
905 (let ((pop-up-windows nil))
|
|
906 (pop-to-buffer "*Messages*"))
|
37688
|
907 (setq init-file-had-error t)))))
|
40906
|
908
|
|
909 ;; If the user has a file of abbrevs, read it.
|
|
910 (if (file-exists-p abbrev-file-name)
|
|
911 (quietly-read-abbrev-file abbrev-file-name))
|
|
912
|
41231
|
913 ;; If the abbrevs came entirely from the init file or the
|
|
914 ;; abbrevs file, they do not need saving.
|
|
915 (setq abbrevs-changed nil)
|
|
916
|
37688
|
917 ;; If we can tell that the init file altered debug-on-error,
|
|
918 ;; arrange to preserve the value that it set up.
|
|
919 (or (eq debug-on-error debug-on-error-initial)
|
|
920 (setq debug-on-error-should-be-set t
|
|
921 debug-on-error-from-init-file debug-on-error)))
|
|
922 (if debug-on-error-should-be-set
|
|
923 (setq debug-on-error debug-on-error-from-init-file))
|
|
924 (unless (or default-enable-multibyte-characters
|
|
925 (eq orig-enable-multibyte default-enable-multibyte-characters))
|
|
926 ;; Init file changed to unibyte. Reset existing multibyte
|
|
927 ;; buffers (probably *scratch*, *Messages*, *Minibuff-0*).
|
|
928 ;; Arguably this should only be done if they're free of
|
|
929 ;; multibyte characters.
|
|
930 (mapcar (lambda (buffer)
|
|
931 (with-current-buffer buffer
|
|
932 (if enable-multibyte-characters
|
|
933 (set-buffer-multibyte nil))))
|
|
934 (buffer-list))
|
|
935 ;; Also re-set the language environment in case it was
|
|
936 ;; originally done before unibyte was set and is sensitive to
|
|
937 ;; unibyte (display table, terminal coding system &c).
|
|
938 (set-language-environment current-language-environment)))
|
49597
|
939
|
37688
|
940 ;; Do this here in case the init file sets mail-host-address.
|
47692
|
941 (if (equal user-mail-address "")
|
37688
|
942 (setq user-mail-address (concat (user-login-name) "@"
|
|
943 (or mail-host-address
|
|
944 (system-name)))))
|
370
|
945
|
37688
|
946 ;; If parameter have been changed in the init file which influence
|
|
947 ;; face realization, clear the face cache so that new faces will
|
|
948 ;; be realized.
|
|
949 (unless (and (eq scalable-fonts-allowed old-scalable-fonts-allowed)
|
|
950 (eq font-list-limit old-font-list-limit)
|
|
951 (eq face-ignored-fonts old-face-ignored-fonts))
|
|
952 (clear-face-cache)))
|
49597
|
953
|
688
|
954 (run-hooks 'after-init-hook)
|
|
955
|
322
|
956 ;; If *scratch* exists and init file didn't change its mode, initialize it.
|
|
957 (if (get-buffer "*scratch*")
|
46889
|
958 (with-current-buffer "*scratch*"
|
322
|
959 (if (eq major-mode 'fundamental-mode)
|
|
960 (funcall initial-major-mode))))
|
49597
|
961
|
322
|
962 ;; Load library for our terminal type.
|
|
963 ;; User init file can set term-file-prefix to nil to prevent this.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
964 (unless (or noninteractive
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
965 window-system
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
966 (null term-file-prefix))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
967 (let ((term (getenv "TERM"))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
968 hyphend)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
969 (while (and term
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
970 (not (load (concat term-file-prefix term) t t)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
971 ;; Strip off last hyphen and what follows, then try again
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
972 (setq term
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
973 (if (setq hyphend (string-match "[-_][^-_]+$" term))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
974 (substring term 0 hyphend)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
975 nil)))))
|
322
|
976
|
46330
|
977 ;; Update the out-of-memory error message based on user's key bindings
|
|
978 ;; for save-some-buffers.
|
|
979 (setq memory-signal-data
|
|
980 (list 'error
|
|
981 (substitute-command-keys "Memory exhausted--use \\[save-some-buffers] then exit and restart Emacs")))
|
|
982
|
326
|
983 ;; Process the remaining args.
|
322
|
984 (command-line-1 (cdr command-line-args))
|
|
985
|
|
986 ;; If -batch, terminate after processing the command options.
|
43821
|
987 (if noninteractive (kill-emacs t))
|
|
988
|
|
989 ;; Run emacs-session-restore (session management) if started by
|
|
990 ;; the session manager and we have a session manager connection.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
991 (if (and (boundp 'x-session-previous-id)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
992 (stringp x-session-previous-id))
|
43865
|
993 (emacs-session-restore x-session-previous-id)))
|
322
|
994
|
27365
|
995 (defcustom initial-scratch-message (purecopy "\
|
26405
|
996 ;; This buffer is for notes you don't want to save, and for Lisp evaluation.
|
|
997 ;; If you want to create a file, visit that file with C-x C-f,
|
|
998 ;; then enter the text in that file's own buffer.
|
19927
|
999
|
27365
|
1000 ")
|
19927
|
1001 "Initial message displayed in *scratch* buffer at startup.
|
|
1002 If this is nil, no message will be displayed."
|
42664
|
1003 :type '(choice (text :tag "Message")
|
|
1004 (const :tag "none" nil))
|
|
1005 :group 'initialization)
|
19927
|
1006
|
31714
|
1007
|
|
1008 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1009 ;;; Fancy splash screen
|
|
1010 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1011
|
|
1012 (defvar fancy-splash-text
|
31765
|
1013 '((:face variable-pitch
|
31863
|
1014 "You can do basic editing with the menu bar and scroll bar \
|
|
1015 using the mouse.\n\n"
|
31765
|
1016 :face (variable-pitch :weight bold)
|
31714
|
1017 "Important Help menu items:\n"
|
31765
|
1018 :face variable-pitch "\
|
36278
|
1019 Emacs Tutorial\tLearn-by-doing tutorial for using Emacs efficiently
|
33169
|
1020 Emacs FAQ\tFrequently asked questions and answers
|
46330
|
1021 Read the Emacs Manual\tView the Emacs manual using Info
|
33169
|
1022 \(Non)Warranty\tGNU Emacs comes with "
|
31765
|
1023 :face (variable-pitch :slant oblique)
|
31714
|
1024 "ABSOLUTELY NO WARRANTY\n"
|
31765
|
1025 :face variable-pitch
|
32575
|
1026 "\
|
36278
|
1027 Copying Conditions\tConditions for redistributing and changing Emacs
|
46364
|
1028 More Manuals / Ordering Manuals Buying printed manuals from the FSF\n")
|
36278
|
1029 (:face variable-pitch
|
|
1030 "You can do basic editing with the menu bar and scroll bar \
|
|
1031 using the mouse.\n\n"
|
|
1032 :face (variable-pitch :weight bold)
|
|
1033 "Useful File menu items:\n"
|
|
1034 :face variable-pitch "\
|
|
1035 Exit Emacs\t(Or type Control-x followed by Control-c)
|
|
1036 Recover Session\tRecover files you were editing before a crash
|
|
1037
|
|
1038
|
|
1039
|
46331
bdd4f73e1fec
(fancy-splash-text, actions page): Add blank line to balance help page.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1040
|
36278
|
1041 "
|
|
1042 ))
|
31714
|
1043 "A list of texts to show in the middle part of splash screens.
|
|
1044 Each element in the list should be a list of strings or pairs
|
|
1045 `:face FACE', like `fancy-splash-insert' accepts them.")
|
|
1046
|
|
1047
|
31736
|
1048 (defgroup fancy-splash-screen ()
|
31722
|
1049 "Fancy splash screen when Emacs starts."
|
31736
|
1050 :version "21.1"
|
31722
|
1051 :group 'initialization)
|
|
1052
|
|
1053
|
33236
|
1054 (defcustom fancy-splash-delay 10
|
31759
|
1055 "*Delay in seconds between splash screens."
|
31722
|
1056 :group 'fancy-splash-screen
|
31714
|
1057 :type 'integer)
|
|
1058
|
|
1059
|
33236
|
1060 (defcustom fancy-splash-max-time 60
|
|
1061 "*Show splash screens for at most this number of seconds.
|
|
1062 Values less than 60 seconds are ignored."
|
|
1063 :group 'fancy-splash-screen
|
|
1064 :type 'integer)
|
|
1065
|
|
1066
|
31769
|
1067 (defcustom fancy-splash-image nil
|
|
1068 "*The image to show in the splash screens, or nil for defaults."
|
31722
|
1069 :group 'fancy-splash-screen
|
31769
|
1070 :type '(choice (const :tag "Default" nil)
|
|
1071 (file :tag "File")))
|
31714
|
1072
|
|
1073
|
32015
|
1074 ;; These are temporary storage areas for the splash screen display.
|
|
1075
|
|
1076 (defvar fancy-current-text nil)
|
|
1077 (defvar fancy-splash-help-echo nil)
|
33236
|
1078 (defvar fancy-splash-stop-time nil)
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1079 (defvar fancy-splash-outer-buffer nil)
|
32015
|
1080
|
31714
|
1081 (defun fancy-splash-insert (&rest args)
|
|
1082 "Insert text into the current buffer, with faces.
|
|
1083 Arguments from ARGS should be either strings or pairs `:face FACE',
|
|
1084 where FACE is a valid face specification, as it can be used with
|
|
1085 `put-text-properties'."
|
|
1086 (let ((current-face nil))
|
|
1087 (while args
|
|
1088 (if (eq (car args) :face)
|
|
1089 (setq args (cdr args) current-face (car args))
|
32015
|
1090 (insert (propertize (car args)
|
|
1091 'face current-face
|
|
1092 'help-echo fancy-splash-help-echo)))
|
31714
|
1093 (setq args (cdr args)))))
|
|
1094
|
|
1095
|
|
1096 (defun fancy-splash-head ()
|
|
1097 "Insert the head part of the splash screen into the current buffer."
|
37166
|
1098 (let* ((image-file (cond ((stringp fancy-splash-image)
|
|
1099 fancy-splash-image)
|
|
1100 ((and (display-color-p)
|
|
1101 (image-type-available-p 'xpm))
|
|
1102 (if (and (fboundp 'x-display-planes)
|
|
1103 (= (funcall 'x-display-planes) 8))
|
|
1104 "splash8.xpm"
|
|
1105 "splash.xpm"))
|
|
1106 (t "splash.pbm")))
|
|
1107 (img (create-image image-file))
|
31714
|
1108 (image-width (and img (car (image-size img))))
|
|
1109 (window-width (window-width (selected-window))))
|
|
1110 (when img
|
|
1111 (when (> window-width image-width)
|
32015
|
1112 ;; Center the image in the window.
|
54852
|
1113 (insert (propertize " " 'display
|
|
1114 `(space :align-to (+ center (-0.5 . ,img)))))
|
32015
|
1115
|
40681
|
1116 ;; Change the color of the XPM version of the splash image
|
|
1117 ;; so that it is visible with a dark frame background.
|
|
1118 (when (and (memq 'xpm img)
|
|
1119 (eq (frame-parameter nil 'background-mode) 'dark))
|
|
1120 (setq img (append img '(:color-symbols (("#000000" . "gray30"))))))
|
|
1121
|
32015
|
1122 ;; Insert the image with a help-echo and a keymap.
|
|
1123 (let ((map (make-sparse-keymap))
|
32424
|
1124 (help-echo "mouse-2: browse http://www.gnu.org/"))
|
32015
|
1125 (define-key map [mouse-2]
|
|
1126 (lambda ()
|
|
1127 (interactive)
|
32424
|
1128 (browse-url "http://www.gnu.org/")
|
32015
|
1129 (throw 'exit nil)))
|
|
1130 (define-key map [down-mouse-2] 'ignore)
|
|
1131 (define-key map [up-mouse-2] 'ignore)
|
|
1132 (insert-image img (propertize "xxx" 'help-echo help-echo
|
|
1133 'keymap map)))
|
31714
|
1134 (insert "\n"))))
|
47331
|
1135 (fancy-splash-insert
|
|
1136 :face '(variable-pitch :foreground "red")
|
|
1137 (if (eq system-type 'gnu/linux)
|
|
1138 "GNU Emacs is one component of the GNU/Linux operating system."
|
32067
|
1139 "GNU Emacs is one component of the GNU operating system."))
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1140 (insert "\n")
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1141 (unless (equal (buffer-name fancy-splash-outer-buffer) "*scratch*")
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1142 (fancy-splash-insert :face 'variable-pitch
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1143 (substitute-command-keys
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1144 "Type \\[recenter] to begin editing your file.\n"))))
|
31714
|
1145
|
|
1146
|
|
1147 (defun fancy-splash-tail ()
|
|
1148 "Insert the tail part of the splash screen into the current buffer."
|
31800
|
1149 (let ((fg (if (eq (frame-parameter nil 'background-mode) 'dark)
|
|
1150 "cyan" "darkblue")))
|
|
1151 (fancy-splash-insert :face `(variable-pitch :foreground ,fg)
|
|
1152 "\nThis is "
|
|
1153 (emacs-version)
|
|
1154 "\n"
|
|
1155 :face '(variable-pitch :height 0.5)
|
57545
0e1bc02edee6
(fancy-splash-tail, normal-splash-screen): Update copyright year.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1156 "Copyright (C) 2004 Free Software Foundation, Inc.")
|
40675
|
1157 (and auto-save-list-file-prefix
|
|
1158 ;; Don't signal an error if the
|
|
1159 ;; directory for auto-save-list files
|
|
1160 ;; does not yet exist.
|
|
1161 (file-directory-p (file-name-directory
|
|
1162 auto-save-list-file-prefix))
|
|
1163 (directory-files
|
|
1164 (file-name-directory auto-save-list-file-prefix)
|
|
1165 nil
|
|
1166 (concat "\\`"
|
|
1167 (regexp-quote (file-name-nondirectory
|
|
1168 auto-save-list-file-prefix)))
|
|
1169 t)
|
|
1170 (fancy-splash-insert :face '(variable-pitch :foreground "red")
|
|
1171 "\n\nIf an Emacs session crashed recently, "
|
|
1172 "type M-x recover-session RET\nto recover"
|
|
1173 " the files you were editing."))))
|
31714
|
1174
|
32015
|
1175 (defun fancy-splash-screens-1 (buffer)
|
|
1176 "Timer function displaying a splash screen."
|
33236
|
1177 (when (> (float-time) fancy-splash-stop-time)
|
|
1178 (throw 'stop-splashing nil))
|
32015
|
1179 (unless fancy-current-text
|
|
1180 (setq fancy-current-text fancy-splash-text))
|
|
1181 (let ((text (car fancy-current-text)))
|
|
1182 (set-buffer buffer)
|
|
1183 (erase-buffer)
|
51698
|
1184 (if pure-space-overflow
|
|
1185 (insert "Warning Warning Pure space overflow Warning Warning\n"))
|
32015
|
1186 (fancy-splash-head)
|
|
1187 (apply #'fancy-splash-insert text)
|
|
1188 (fancy-splash-tail)
|
|
1189 (unless (current-message)
|
|
1190 (message fancy-splash-help-echo))
|
|
1191 (set-buffer-modified-p nil)
|
32417
|
1192 (goto-char (point-min))
|
32015
|
1193 (force-mode-line-update)
|
|
1194 (setq fancy-current-text (cdr fancy-current-text))))
|
|
1195
|
|
1196
|
|
1197 (defun fancy-splash-default-action ()
|
50933
|
1198 "Stop displaying the splash screen buffer.
|
|
1199 This is an internal function used to turn off the splash screen after
|
|
1200 the user caused an input event by hitting a key or clicking with the
|
|
1201 mouse."
|
32015
|
1202 (interactive)
|
|
1203 (push last-command-event unread-command-events)
|
|
1204 (throw 'exit nil))
|
|
1205
|
|
1206
|
31714
|
1207 (defun fancy-splash-screens ()
|
32015
|
1208 "Display fancy splash screens when Emacs starts."
|
32141
|
1209 (setq fancy-splash-help-echo (startup-echo-area-message))
|
36258
|
1210 (let ((old-hourglass display-hourglass)
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1211 (fancy-splash-outer-buffer (current-buffer))
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1212 splash-buffer
|
39005
|
1213 (old-minor-mode-map-alist minor-mode-map-alist)
|
46135
|
1214 (frame (fancy-splash-frame))
|
32141
|
1215 timer)
|
46135
|
1216 (save-selected-window
|
|
1217 (select-frame frame)
|
|
1218 (switch-to-buffer "GNU Emacs")
|
|
1219 (setq tab-width 20)
|
|
1220 (setq splash-buffer (current-buffer))
|
|
1221 (catch 'stop-splashing
|
|
1222 (unwind-protect
|
|
1223 (let ((map (make-sparse-keymap)))
|
|
1224 (use-local-map map)
|
|
1225 (define-key map [switch-frame] 'ignore)
|
|
1226 (define-key map [t] 'fancy-splash-default-action)
|
|
1227 (define-key map [mouse-movement] 'ignore)
|
|
1228 (define-key map [mode-line t] 'ignore)
|
|
1229 (setq cursor-type nil
|
|
1230 display-hourglass nil
|
|
1231 minor-mode-map-alist nil
|
|
1232 buffer-undo-list t
|
49597
|
1233 mode-line-format (propertize "---- %b %-"
|
46135
|
1234 'face '(:weight bold))
|
|
1235 fancy-splash-stop-time (+ (float-time)
|
|
1236 (max 60 fancy-splash-max-time))
|
|
1237 timer (run-with-timer 0 fancy-splash-delay
|
|
1238 #'fancy-splash-screens-1
|
|
1239 splash-buffer))
|
|
1240 (recursive-edit))
|
33236
|
1241 (cancel-timer timer)
|
39005
|
1242 (setq display-hourglass old-hourglass
|
|
1243 minor-mode-map-alist old-minor-mode-map-alist)
|
46135
|
1244 (kill-buffer splash-buffer))))))
|
32015
|
1245
|
46135
|
1246 (defun fancy-splash-frame ()
|
|
1247 "Return the frame to use for the fancy splash screen.
|
|
1248 Returning non-nil does not mean we should necessarily
|
|
1249 use the fancy splash screen, but if we do use it,
|
|
1250 we put it on this frame."
|
|
1251 (let (chosen-frame)
|
46803
|
1252 (dolist (frame (append (frame-list) (list (selected-frame))))
|
46135
|
1253 (if (and (frame-visible-p frame)
|
|
1254 (not (window-minibuffer-p (frame-selected-window frame))))
|
|
1255 (setq chosen-frame frame)))
|
|
1256 chosen-frame))
|
32015
|
1257
|
34129
|
1258 (defun use-fancy-splash-screens-p ()
|
|
1259 "Return t if fancy splash screens should be used."
|
52553
|
1260 (when (and (display-graphic-p)
|
|
1261 (or (and (display-color-p)
|
34129
|
1262 (image-type-available-p 'xpm))
|
52553
|
1263 (image-type-available-p 'pbm)))
|
47230
|
1264 (let ((frame (fancy-splash-frame)))
|
|
1265 (when frame
|
|
1266 (let* ((img (create-image (or fancy-splash-image
|
|
1267 (if (and (display-color-p)
|
|
1268 (image-type-available-p 'xpm))
|
|
1269 "splash.xpm" "splash.pbm"))))
|
|
1270 (image-height (and img (cdr (image-size img))))
|
|
1271 (window-height (1- (window-height (frame-selected-window frame)))))
|
|
1272 (> window-height (+ image-height 19)))))))
|
34129
|
1273
|
|
1274
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1275 (defun normal-splash-screen ()
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1276 "Display splash screen when Emacs starts."
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1277 (let ((prev-buffer (current-buffer)))
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1278 (unwind-protect
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1279 (with-current-buffer (get-buffer-create "GNU Emacs")
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1280 (let ((tab-width 8)
|
49597
|
1281 (mode-line-format (propertize "---- %b %-"
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1282 'face '(:weight bold))))
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1283
|
51698
|
1284 (if pure-space-overflow
|
|
1285 (insert "Warning Warning Pure space overflow Warning Warning\n"))
|
|
1286
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1287 ;; The convention for this piece of code is that
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1288 ;; each piece of output starts with one or two newlines
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1289 ;; and does not end with any newlines.
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1290 (insert "Welcome to GNU Emacs")
|
47331
|
1291 (insert
|
|
1292 (if (eq system-type 'gnu/linux)
|
|
1293 ", one component of the GNU/Linux operating system.\n"
|
|
1294 ", a part of the GNU operating system.\n"))
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1295
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1296 (unless (equal (buffer-name prev-buffer) "*scratch*")
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1297 (insert (substitute-command-keys
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1298 "\nType \\[recenter] to begin editing your file.\n")))
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1299
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1300 (if (display-mouse-p)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1301 ;; The user can use the mouse to activate menus
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1302 ;; so give help in terms of menu items.
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1303 (progn
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1304 (insert "\
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1305 You can do basic editing with the menu bar and scroll bar using the mouse.
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1306
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1307 Useful File menu items:
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1308 Exit Emacs (or type Control-x followed by Control-c)
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1309 Recover Session recover files you were editing before a crash
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1310
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1311 Important Help menu items:
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1312 Emacs Tutorial Learn-by-doing tutorial for using Emacs efficiently.
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1313 Emacs FAQ Frequently asked questions and answers
|
46330
|
1314 Read the Emacs Manual View the Emacs manual using Info
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1315 \(Non)Warranty GNU Emacs comes with ABSOLUTELY NO WARRANTY
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1316 Copying Conditions Conditions for redistributing and changing Emacs.
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1317 Getting New Versions How to obtain the latest version of Emacs.
|
46364
|
1318 More Manuals / Ordering Manuals How to order printed manuals from the FSF.
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1319 ")
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1320 (insert "\n\n" (emacs-version)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1321 "
|
57545
0e1bc02edee6
(fancy-splash-tail, normal-splash-screen): Update copyright year.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1322 Copyright (C) 2004 Free Software Foundation, Inc."))
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1323
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1324 ;; No mouse menus, so give help using kbd commands.
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1325
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1326 ;; If keys have their default meanings,
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1327 ;; use precomputed string to save lots of time.
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1328 (if (and (eq (key-binding "\C-h") 'help-command)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1329 (eq (key-binding "\C-xu") 'advertised-undo)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1330 (eq (key-binding "\C-x\C-c") 'save-buffers-kill-emacs)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1331 (eq (key-binding "\C-ht") 'help-with-tutorial)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1332 (eq (key-binding "\C-hi") 'info)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1333 (eq (key-binding "\C-hr") 'info-emacs-manual)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1334 (eq (key-binding "\C-h\C-n") 'view-emacs-news))
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1335 (insert "
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1336 Get help C-h (Hold down CTRL and press h)
|
46330
|
1337 Emacs manual C-h r
|
|
1338 Emacs tutorial C-h t Undo changes C-x u
|
|
1339 Buy manuals C-h C-m Exit Emacs C-x C-c
|
|
1340 Browse manuals C-h i")
|
|
1341
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1342 (insert (substitute-command-keys
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1343 (format "\n
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1344 Get help %s
|
46330
|
1345 Emacs manual \\[info-emacs-manual]
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1346 Emacs tutorial \\[help-with-tutorial]\tUndo changes\t\\[advertised-undo]
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1347 Buy manuals \\[view-order-manuals]\tExit Emacs\t\\[save-buffers-kill-emacs]
|
46330
|
1348 Browse manuals \\[info]"
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1349 (let ((where (where-is-internal
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1350 'help-command nil t)))
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1351 (if where
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1352 (key-description where)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1353 "M-x help"))))))
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1354
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1355 ;; Say how to use the menu bar with the keyboard.
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1356 (if (and (eq (key-binding "\M-`") 'tmm-menubar)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1357 (eq (key-binding [f10]) 'tmm-menubar))
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1358 (insert "
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1359 Activate menubar F10 or ESC ` or M-`")
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1360 (insert (substitute-command-keys "
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1361 Activate menubar \\[tmm-menubar]")))
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1362
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1363 ;; Many users seem to have problems with these.
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1364 (insert "
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1365 \(`C-' means use the CTRL key. `M-' means use the Meta (or Alt) key.
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1366 If you have no Meta key, you may instead type ESC followed by the character.)")
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1367
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1368 (insert "\n\n" (emacs-version)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1369 "
|
57545
0e1bc02edee6
(fancy-splash-tail, normal-splash-screen): Update copyright year.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1370 Copyright (C) 2004 Free Software Foundation, Inc.")
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1371
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1372 (if (and (eq (key-binding "\C-h\C-c") 'describe-copying)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1373 (eq (key-binding "\C-h\C-d") 'describe-distribution)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1374 (eq (key-binding "\C-h\C-w") 'describe-no-warranty))
|
49597
|
1375 (insert
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1376 "\n
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1377 GNU Emacs comes with ABSOLUTELY NO WARRANTY; type C-h C-w for full details.
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1378 Emacs is Free Software--Free as in Freedom--so you can redistribute copies
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1379 of Emacs and modify it; type C-h C-c to see the conditions.
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1380 Type C-h C-d for information on getting the latest version.")
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1381 (insert (substitute-command-keys
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1382 "\n
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1383 GNU Emacs comes with ABSOLUTELY NO WARRANTY; type \\[describe-no-warranty] for full details.
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1384 Emacs is Free Software--Free as in Freedom--so you can redistribute copies
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1385 of Emacs and modify it; type \\[describe-copying] to see the conditions.
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1386 Type \\[describe-distribution] for information on getting the latest version."))))
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1387
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1388 ;; The rest of the startup screen is the same on all
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1389 ;; kinds of terminals.
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1390
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1391 ;; Give information on recovering, if there was a crash.
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1392 (and auto-save-list-file-prefix
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1393 ;; Don't signal an error if the
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1394 ;; directory for auto-save-list files
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1395 ;; does not yet exist.
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1396 (file-directory-p (file-name-directory
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1397 auto-save-list-file-prefix))
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1398 (directory-files
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1399 (file-name-directory auto-save-list-file-prefix)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1400 nil
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1401 (concat "\\`"
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1402 (regexp-quote (file-name-nondirectory
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1403 auto-save-list-file-prefix)))
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1404 t)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1405 (insert "\n\nIf an Emacs session crashed recently, "
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1406 "type M-x recover-session RET\nto recover"
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1407 " the files you were editing."))
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1408
|
47024
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1409 ;; Display the input that we set up in the buffer.
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1410 (set-buffer-modified-p nil)
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1411 (goto-char (point-min))
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1412 (save-window-excursion
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1413 (switch-to-buffer (current-buffer))
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1414 (sit-for 120))))
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1415 ;; Unwind ... ensure splash buffer is killed
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1416 (kill-buffer "GNU Emacs"))))
|
15430c8d0eaa
* startup.el (normal-splash-screen): Ensure splash buffer is
John Paul Wallington <jpw@pobox.com>
diff
changeset
|
1417
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1418
|
32015
|
1419 (defun startup-echo-area-message ()
|
|
1420 (if (eq (key-binding "\C-h\C-p") 'describe-project)
|
|
1421 "For information about the GNU Project and its goals, type C-h C-p."
|
|
1422 (substitute-command-keys
|
|
1423 "For information about the GNU Project and its goals, type \
|
|
1424 \\[describe-project].")))
|
31714
|
1425
|
|
1426
|
31759
|
1427 (defun display-startup-echo-area-message ()
|
35601
|
1428 (let ((resize-mini-windows t))
|
|
1429 (message (startup-echo-area-message))))
|
32015
|
1430
|
31759
|
1431
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1432 (defun display-splash-screen ()
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1433 "Display splash screen according to display.
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1434 Fancy splash screens are used on graphic displays,
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1435 normal otherwise."
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1436 (interactive)
|
52553
|
1437 (if (use-fancy-splash-screens-p)
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1438 (fancy-splash-screens)
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1439 (normal-splash-screen)))
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1440
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1441
|
322
|
1442 (defun command-line-1 (command-line-args-left)
|
5109
|
1443 (or noninteractive (input-pending-p) init-file-had-error
|
40675
|
1444 ;; t if the init file says to inhibit the echo area startup message.
|
|
1445 (and inhibit-startup-echo-area-message
|
|
1446 user-init-file
|
|
1447 (or (and (get 'inhibit-startup-echo-area-message 'saved-value)
|
|
1448 (equal inhibit-startup-echo-area-message
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1449 (if (equal init-file-user "")
|
40675
|
1450 (user-login-name)
|
|
1451 init-file-user)))
|
|
1452 ;; Wasn't set with custom; see if .emacs has a setq.
|
|
1453 (let ((buffer (get-buffer-create " *temp*")))
|
|
1454 (prog1
|
|
1455 (condition-case nil
|
|
1456 (save-excursion
|
|
1457 (set-buffer buffer)
|
|
1458 (insert-file-contents user-init-file)
|
|
1459 (re-search-forward
|
|
1460 (concat
|
|
1461 "([ \t\n]*setq[ \t\n]+"
|
|
1462 "inhibit-startup-echo-area-message[ \t\n]+"
|
|
1463 (regexp-quote
|
|
1464 (prin1-to-string
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1465 (if (equal init-file-user "")
|
40675
|
1466 (user-login-name)
|
|
1467 init-file-user)))
|
|
1468 "[ \t\n]*)")
|
|
1469 nil t))
|
|
1470 (error nil))
|
|
1471 (kill-buffer buffer)))))
|
52550
|
1472 ;; Stop any "Loading image..." message hiding echo-area-message.
|
|
1473 (use-fancy-splash-screens-p)
|
40675
|
1474 (display-startup-echo-area-message))
|
|
1475
|
|
1476 ;; Delay 2 seconds after an init file error message
|
|
1477 ;; was displayed, so user can read it.
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1478 (when init-file-had-error
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1479 (sit-for 2))
|
40675
|
1480
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1481 (when command-line-args-left
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1482 ;; We have command args; process them.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1483 (let ((dir command-line-default-directory)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1484 (file-count 0)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1485 first-file-buffer
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1486 tem
|
57002
|
1487 ;; This approach loses for "-batch -L DIR --eval "(require foo)",
|
|
1488 ;; if foo is intended to be found in DIR.
|
|
1489 ;;
|
|
1490 ;; ;; The directories listed in --directory/-L options will *appear*
|
|
1491 ;; ;; at the front of `load-path' in the order they appear on the
|
|
1492 ;; ;; command-line. We cannot do this by *placing* them at the front
|
|
1493 ;; ;; in the order they appear, so we need this variable to hold them,
|
|
1494 ;; ;; temporarily.
|
|
1495 ;; extra-load-path
|
|
1496 ;;
|
|
1497 ;; To DTRT we keep track of the splice point and modify `load-path'
|
|
1498 ;; straight away upon any --directory/-L option.
|
|
1499 splice
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1500 just-files ;; t if this follows the magic -- option.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1501 ;; This includes our standard options' long versions
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1502 ;; and long versions of what's on command-switch-alist.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1503 (longopts
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1504 (append '(("--funcall") ("--load") ("--insert") ("--kill")
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1505 ("--directory") ("--eval") ("--execute") ("--no-splash")
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1506 ("--find-file") ("--visit") ("--file"))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1507 (mapcar (lambda (elt)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1508 (list (concat "-" (car elt))))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1509 command-switch-alist)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1510 (line 0)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1511 (column 0))
|
40675
|
1512
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1513 ;; Add the long X options to longopts.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1514 (dolist (tem command-line-x-option-alist)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1515 (if (string-match "^--" (car tem))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1516 (push (list (car tem)) longopts)))
|
40675
|
1517
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1518 ;; Loop, processing options.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1519 (while command-line-args-left
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1520 (let* ((argi (car command-line-args-left))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1521 (orig-argi argi)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1522 argval completion)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1523 (setq command-line-args-left (cdr command-line-args-left))
|
40675
|
1524
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1525 ;; Do preliminary decoding of the option.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1526 (if just-files
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1527 ;; After --, don't look for options; treat all args as files.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1528 (setq argi "")
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1529 ;; Convert long options to ordinary options
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1530 ;; and separate out an attached option argument into argval.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1531 (when (string-match "^\\(--[^=]*\\)=" argi)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1532 (setq argval (substring argi (match-end 0))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1533 argi (match-string 1 argi)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1534 (if (equal argi "--")
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1535 (setq completion nil)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1536 (setq completion (try-completion argi longopts)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1537 (if (eq completion t)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1538 (setq argi (substring argi 1))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1539 (if (stringp completion)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1540 (let ((elt (assoc completion longopts)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1541 (or elt
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1542 (error "Option `%s' is ambiguous" argi))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1543 (setq argi (substring (car elt) 1)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1544 (setq argval nil
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1545 argi orig-argi))))
|
40675
|
1546
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1547 ;; Execute the option.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1548 (cond ((setq tem (assoc argi command-switch-alist))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1549 (if argval
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1550 (let ((command-line-args-left
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1551 (cons argval command-line-args-left)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1552 (funcall (cdr tem) argi))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1553 (funcall (cdr tem) argi)))
|
40675
|
1554
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1555 ((equal argi "-no-splash")
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1556 (setq inhibit-startup-message t))
|
45530
|
1557
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1558 ((member argi '("-f" ; what the manual claims
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1559 "-funcall"
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1560 "-e")) ; what the source used to say
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1561 (setq tem (intern (or argval (pop command-line-args-left))))
|
50187
|
1562 (if (commandp tem)
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1563 (command-execute tem)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1564 (funcall tem)))
|
40675
|
1565
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1566 ((member argi '("-eval" "-execute"))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1567 (eval (read (or argval (pop command-line-args-left)))))
|
40675
|
1568
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1569 ((member argi '("-L" "-directory"))
|
57002
|
1570 (setq tem (expand-file-name
|
|
1571 (command-line-normalize-file-name
|
|
1572 (or argval (pop command-line-args-left)))))
|
|
1573 (cond (splice (setcdr splice (cons tem (cdr splice)))
|
|
1574 (setq splice (cdr splice)))
|
|
1575 (t (setq load-path (cons tem load-path)
|
|
1576 splice load-path))))
|
40675
|
1577
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1578 ((member argi '("-l" "-load"))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1579 (let* ((file (command-line-normalize-file-name
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1580 (or argval (pop command-line-args-left))))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1581 ;; Take file from default dir if it exists there;
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1582 ;; otherwise let `load' search for it.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1583 (file-ex (expand-file-name file)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1584 (when (file-exists-p file-ex)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1585 (setq file file-ex))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1586 (load file nil t)))
|
2869
|
1587
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1588 ((equal argi "-insert")
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1589 (setq tem (or argval (pop command-line-args-left)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1590 (or (stringp tem)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1591 (error "File name omitted from `-insert' option"))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1592 (insert-file-contents (command-line-normalize-file-name tem)))
|
40675
|
1593
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1594 ((equal argi "-kill")
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1595 (kill-emacs t))
|
40675
|
1596
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1597 ((string-match "^\\+[0-9]+\\'" argi)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1598 (setq line (string-to-int argi)))
|
40675
|
1599
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1600 ((string-match "^\\+\\([0-9]+\\):\\([0-9]+\\)\\'" argi)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1601 (setq line (string-to-int (match-string 1 argi))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1602 column (string-to-int (match-string 2 argi))))
|
40675
|
1603
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1604 ((setq tem (assoc argi command-line-x-option-alist))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1605 ;; Ignore X-windows options and their args if not using X.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1606 (setq command-line-args-left
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1607 (nthcdr (nth 1 tem) command-line-args-left)))
|
40675
|
1608
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1609 ((member argi '("-find-file" "-file" "-visit"))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1610 ;; An explicit option to specify visiting a file.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1611 (setq tem (or argval (pop command-line-args-left)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1612 (unless (stringp tem)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1613 (error "File name omitted from `%s' option" argi))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1614 (setq file-count (1+ file-count))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1615 (let ((file (expand-file-name
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1616 (command-line-normalize-file-name tem) dir)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1617 (if (= file-count 1)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1618 (setq first-file-buffer (find-file file))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1619 (find-file-other-window file)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1620 (or (zerop line)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1621 (goto-line line))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1622 (setq line 0)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1623 (unless (< column 1)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1624 (move-to-column (1- column)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1625 (setq column 0))
|
2869
|
1626
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1627 ((equal argi "--")
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1628 (setq just-files t))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1629 (t
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1630 ;; We have almost exhausted our options. See if the
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1631 ;; user has made any other command-line options available
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1632 (let ((hooks command-line-functions) ;; lrs 7/31/89
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1633 (did-hook nil))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1634 (while (and hooks
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1635 (not (setq did-hook (funcall (car hooks)))))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1636 (setq hooks (cdr hooks)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1637 (if (not did-hook)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1638 ;; Presume that the argument is a file name.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1639 (progn
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1640 (if (string-match "\\`-" argi)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1641 (error "Unknown option `%s'" argi))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1642 (setq file-count (1+ file-count))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1643 (let ((file
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1644 (expand-file-name
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1645 (command-line-normalize-file-name orig-argi)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1646 dir)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1647 (if (= file-count 1)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1648 (setq first-file-buffer (find-file file))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1649 (find-file-other-window file)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1650 (or (zerop line)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1651 (goto-line line))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1652 (setq line 0)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1653 (unless (< column 1)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1654 (move-to-column (1- column)))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1655 (setq column 0))))))))
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1656
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1657 ;; If 3 or more files visited, and not all visible,
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1658 ;; show user what they all are. But leave the last one current.
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1659 (and (> file-count 2)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1660 (not noninteractive)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1661 (not inhibit-startup-buffer-menu)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1662 (or (get-buffer-window first-file-buffer)
|
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1663 (list-buffers)))))
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1664
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1665 ;; Maybe display a startup screen.
|
54852
|
1666 (unless (or inhibit-startup-message
|
|
1667 noninteractive
|
|
1668 emacs-quick-startup
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1669 ;; Don't display startup screen if init file
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1670 ;; has started some sort of server.
|
54852
|
1671 (and (fboundp 'process-list)
|
|
1672 (process-list)))
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1673 ;; Display a startup screen, after some preparations.
|
40675
|
1674
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1675 ;; If there are no switches to process, we might as well
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1676 ;; run this hook now, and there may be some need to do it
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1677 ;; before doing any output.
|
49934
|
1678 (run-hooks 'emacs-startup-hook)
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1679 (and term-setup-hook
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1680 (run-hooks 'term-setup-hook))
|
49934
|
1681 (setq inhibit-startup-hooks t)
|
40675
|
1682
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1683 ;; It's important to notice the user settings before we
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1684 ;; display the startup message; otherwise, the settings
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1685 ;; won't take effect until the user gives the first
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1686 ;; keystroke, and that's distracting.
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1687 (when (fboundp 'frame-notice-user-settings)
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1688 (frame-notice-user-settings))
|
40675
|
1689
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1690 ;; If there are no switches to process, we might as well
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1691 ;; run this hook now, and there may be some need to do it
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1692 ;; before doing any output.
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1693 (when window-setup-hook
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1694 (run-hooks 'window-setup-hook)
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1695 ;; Don't let the hook be run twice.
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1696 (setq window-setup-hook nil))
|
40675
|
1697
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1698 ;; Do this now to avoid an annoying delay if the user
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1699 ;; clicks the menu bar during the sit-for.
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1700 (when (display-popup-menus-p)
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1701 (precompute-menubar-bindings))
|
51287
|
1702 (with-no-warnings
|
|
1703 (setq menubar-bindings-done t))
|
40675
|
1704
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1705 ;; If *scratch* is selected and it is empty, insert an
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1706 ;; initial message saying not to create a file there.
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1707 (when (and initial-scratch-message
|
49988
2076fa933620
* startup.el: Streamline code in several functions and use a more
Matthew Swift <swift@alum.mit.edu>
diff
changeset
|
1708 (equal (buffer-name) "*scratch*")
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1709 (= 0 (buffer-size)))
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1710 (insert initial-scratch-message)
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1711 (set-buffer-modified-p nil))
|
40675
|
1712
|
42080
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1713 ;; If user typed input during all that work,
|
4dd93ea3bc4f
(command-line-1): Display startup screen even if there are command line args.
Richard M. Stallman <rms@gnu.org>
diff
changeset
|
1714 ;; abort the startup screen. Otherwise, display it now.
|
43017
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1715 (unless (input-pending-p)
|
a73bc2f013fc
(normal-splash-screen, display-splash-screen): New functions (separated
Pavel Janík <Pavel@Janik.cz>
diff
changeset
|
1716 (display-splash-screen))))
|
658
|
1717
|
31759
|
1718
|
14386
|
1719 (defun command-line-normalize-file-name (file)
|
|
1720 "Collapse multiple slashes to one, to handle non-Emacs file names."
|
14729
|
1721 (save-match-data
|
|
1722 ;; Use arg 1 so that we don't collapse // at the start of the file name.
|
|
1723 ;; That is significant on some systems.
|
|
1724 ;; However, /// at the beginning is supposed to mean just /, not //.
|
|
1725 (if (string-match "^///+" file)
|
|
1726 (setq file (replace-match "/" t t file)))
|
|
1727 (while (string-match "//+" file 1)
|
|
1728 (setq file (replace-match "/" t t file)))
|
|
1729 file))
|
14386
|
1730
|
52401
|
1731 ;;; arch-tag: 7e294698-244d-4758-984b-4047f887a5db
|
658
|
1732 ;;; startup.el ends here
|