Add the `recenter-redisplay' variable, and make `recenter' use it.
[bpt/emacs.git] / lisp / loadup.el
CommitLineData
55535639 1;;; loadup.el --- load up standardly loaded Lisp files for Emacs
6594deb0 2
0d30b337 3;; Copyright (C) 1985, 1986, 1992, 1994, 2001, 2002, 2003,
ae940284 4;; 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
eea8d4ef 5
e5167999 6;; Maintainer: FSF
fd7fa35a 7;; Keywords: internal
e5167999 8
0d20f9a0
JB
9;; This file is part of GNU Emacs.
10
eb3fa2cf 11;; GNU Emacs is free software: you can redistribute it and/or modify
0d20f9a0 12;; it under the terms of the GNU General Public License as published by
eb3fa2cf
GM
13;; the Free Software Foundation, either version 3 of the License, or
14;; (at your option) any later version.
0d20f9a0
JB
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
eb3fa2cf 22;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
0d20f9a0 23
eea8d4ef
ER
24;;; Commentary:
25
26;; This is loaded into a bare Emacs to make a dumpable one.
27
e5167999
ER
28;;; Code:
29
ce87039d
SM
30;; add subdirectories to the load-path for files that might
31;; get autoloaded when bootstrapping
32(if (or (equal (nth 3 command-line-args) "bootstrap")
49fc4500 33 (equal (nth 4 command-line-args) "bootstrap")
3579a658
KH
34 (equal (nth 3 command-line-args) "unidata-gen.el")
35 (equal (nth 4 command-line-args) "unidata-gen-files")
49fc4500
KR
36 ;; in case CANNOT_DUMP
37 (equal (nth 0 command-line-args) "../src/bootstrap-emacs"))
ceec5b6d 38 (let ((dir (car load-path)))
397869a4
SM
39 ;; We'll probably overflow the pure space.
40 (setq purify-flag nil)
ceec5b6d
RS
41 (setq load-path (list dir
42 (expand-file-name "emacs-lisp" dir)
43 (expand-file-name "language" dir)
44 (expand-file-name "international" dir)
45 (expand-file-name "textmodes" dir)))))
ce87039d 46
8c74709f 47(message "Using load-path %s" load-path)
8c74709f 48
8c766df1
KH
49(if (or (member (nth 3 command-line-args) '("dump" "bootstrap"))
50 (member (nth 4 command-line-args) '("dump" "bootstrap")))
51 ;; To reduce the size of dumped Emacs, we avoid making huge
52 ;; char-tables.
53 (setq inhibit-load-charset-map t))
54
86db31d5 55;; We don't want to have any undo records in the dumped Emacs.
f6e43712
RS
56(set-buffer "*scratch*")
57(setq buffer-undo-list t)
0d20f9a0 58
693e59d6 59(load "emacs-lisp/byte-run")
86db31d5 60(load "emacs-lisp/backquote")
0d20f9a0 61(load "subr")
15897347
RS
62
63;; We specify .el in case someone compiled version.el by mistake.
64(load "version.el")
65
d038ca1d 66(load "widget")
d038ca1d 67(load "custom")
693e59d6 68(load "emacs-lisp/map-ynp")
4d100a01 69(load "cus-start")
5dcd1261 70(load "international/mule")
5dcd1261 71(load "international/mule-conf.el") ;Don't get confused if someone compiled this by mistake.
911650d2 72(load "env")
8f89dc56 73(load "format")
9b73022f
RS
74(load "bindings")
75(setq load-source-file-function 'load-with-code-conversion)
0d20f9a0 76(load "files")
838d57f6 77
3fad47d8 78(load "cus-face")
d6af189a 79(load "faces") ; after here, `defface' may be used.
beec574c 80(load "minibuffer")
d6af189a 81
d4e9f067
JL
82(load "button")
83(load "startup")
84
6f76277f
RS
85(message "Lists of integers (garbage collection statistics) are normal output")
86(message "while building Emacs; they do not indicate a problem.")
838d57f6 87(message "%s" (garbage-collect))
23c2e0e4
SM
88
89(condition-case nil
90 ;; Don't get confused if someone compiled this by mistake.
91 (load "loaddefs.el")
92 ;; In case loaddefs hasn't been generated yet.
93 (file-error (load "ldefs-boot.el")))
94
838d57f6 95(message "%s" (garbage-collect))
e2947429 96(load "abbrev") ;lisp-mode.el and simple.el use define-abbrev-table.
3bce0243 97(load "simple")
838d57f6 98
301d6830 99(load "help")
d6af189a 100
274925df 101(load "jka-cmpr-hook")
8900c52c 102(load "epa-hook")
301d6830
GM
103;; Any Emacs Lisp source file (*.el) loaded here after can contain
104;; multilingual text.
105(load "international/mule-cmds")
106(load "case-table")
b0c654c0 107(load "international/characters")
d8b52430 108(load "composite")
90ce1bb9
KH
109;; This file doesn't exist when building Emacs from CVS. It is
110;; generated just after temacs is build.
111(load "international/charprop.el" t)
301d6830 112
8f89dc56 113;; Load language-specific files.
5e14f0f5 114(load "language/chinese")
5e14f0f5 115(load "language/cyrillic")
5e14f0f5 116(load "language/indian")
43d8c495 117(load "language/sinhala")
4366b45e 118(load "language/english")
5e14f0f5 119(load "language/ethiopic")
5e14f0f5 120(load "language/european")
c90c0be0
RS
121(load "language/czech")
122(load "language/slovak")
23e7714e 123(load "language/romanian")
5e14f0f5 124(load "language/greek")
5e14f0f5 125(load "language/hebrew")
5e14f0f5 126(load "language/japanese")
5e14f0f5 127(load "language/korean")
f35c859c 128(load "language/lao")
201bc379 129(load "language/tai-viet")
5e14f0f5 130(load "language/thai")
4366b45e 131(load "language/tibetan")
5e14f0f5 132(load "language/vietnamese")
5e14f0f5 133(load "language/misc-lang")
69c34764
DL
134(load "language/utf-8-lang")
135(load "language/georgian")
44f44190 136(load "language/khmer")
f81e37a0 137(load "language/burmese")
b03e8a93 138(load "language/cham")
86db31d5 139
0d20f9a0
JB
140(load "indent")
141(load "window")
fd727f4a 142(load "frame")
f795f633 143(load "term/tty-colors")
63a29a5d 144(load "font-core")
633537d7
LT
145;; facemenu must be loaded before font-lock, because `facemenu-keymap'
146;; needs to be defined when font-lock is loaded.
a4a19809 147(load "facemenu")
c94f08ff
DN
148(load "emacs-lisp/syntax")
149(load "font-lock")
150(load "jit-lock")
d6af189a 151
7a701b9f
KH
152(if (fboundp 'track-mouse)
153 (progn
7a701b9f 154 (load "mouse")
9315353b 155 (and (boundp 'x-toolkit-scroll-bars)
449ab688 156 (load "scroll-bar"))
36974751 157 (load "select")))
693e59d6 158(load "emacs-lisp/timer")
01c86c56 159(load "isearch")
1f423851 160(load "rfn-eshadow")
838d57f6
RS
161
162(message "%s" (garbage-collect))
afcd9910 163(load "menu-bar")
0d20f9a0 164(load "paths.el") ;Don't get confused if someone compiled paths by mistake.
5dcd1261 165(load "emacs-lisp/lisp")
5dcd1261 166(load "textmodes/page")
0d20f9a0 167(load "register")
5dcd1261 168(load "textmodes/paragraphs")
5dcd1261 169(load "emacs-lisp/lisp-mode")
5dcd1261 170(load "textmodes/text-mode")
5dcd1261 171(load "textmodes/fill")
838d57f6
RS
172(message "%s" (garbage-collect))
173
0d20f9a0 174(load "replace")
0d20f9a0 175(load "buff-menu")
165b0fa0
RS
176
177(if (fboundp 'x-create-frame)
178 (progn
e541cbfc 179 (load "fringe")
165b0fa0
RS
180 (load "image")
181 (load "international/fontset")
182 (load "dnd")
183 (load "mwheel")
184 (load "tool-bar")))
185(if (featurep 'x)
ddaa8057 186 (progn
9d488d86 187 (load "x-dnd")
d5e4dda5 188 (load "term/common-win")
79c3172f 189 (load "term/x-win")))
d5e4dda5 190
165b0fa0
RS
191(message "%s" (garbage-collect))
192
b7521474
RS
193(if (eq system-type 'windows-nt)
194 (progn
729f1525 195 (load "w32-vars")
d5e4dda5 196 (load "term/common-win")
ddaa8057 197 (load "term/w32-win")
b7521474 198 (load "ls-lisp")
bbe44805 199 (load "disp-table")
489f9371 200 (load "dos-w32")
63abf612 201 (load "w32-fns")))
ed10e0ab
RS
202(if (eq system-type 'ms-dos)
203 (progn
489f9371 204 (load "dos-w32")
ed10e0ab 205 (load "dos-fns")
7298263a 206 (load "dos-vars")
bbe44805
EZ
207 ;; Don't load term/common-win: it isn't appropriate for the `pc'
208 ;; ``window system'', which generally behaves like a terminal.
209 (load "term/pc-win")
210 (load "ls-lisp")
63abf612 211 (load "disp-table"))) ; needed to setup ibm-pc char set, see internal.el
591b63b4
AC
212(if (eq system-type 'macos)
213 (progn
214 (load "ls-lisp")))
601fb9b8 215(if (featurep 'ns)
edfda783
AR
216 (progn
217 (load "emacs-lisp/easymenu") ;; for platform-related menu adjustments
edfda783 218 (load "term/ns-win")))
e04d21aa 219(if (fboundp 'atan) ; preload some constants and
63abf612 220 (progn ; floating pt. functions if we have float support.
693e59d6 221 (load "emacs-lisp/float-sup")))
838d57f6 222(message "%s" (garbage-collect))
e4636528 223
637a8ae9 224(load "vc-hooks")
a63926db 225(load "ediff-hook")
8a902fd2 226(if (fboundp 'x-show-tip) (load "tooltip"))
165b0fa0 227
838d57f6 228(message "%s" (garbage-collect))
0d20f9a0
JB
229
230;If you want additional libraries to be preloaded and their
231;doc strings kept in the DOC file rather than in core,
232;you may load them with a "site-load.el" file.
233;But you must also cause them to be scanned when the DOC file
7c2fb837 234;is generated.
fd322fae 235;For other systems, you must edit ../src/Makefile.in.
0d20f9a0
JB
236(if (load "site-load" t)
237 (garbage-collect))
238
f5263a5c
RS
239(if (fboundp 'x-popup-menu)
240 (precompute-menubar-bindings))
241;; Turn on recording of which commands get rebound,
242;; for the sake of the next call to precompute-menubar-bindings.
243(setq define-key-rebound-commands nil)
244
de78a7ba
RS
245;; Determine which last version number to use
246;; based on the executables that now exist.
24cffc68
RS
247(if (and (or (equal (nth 3 command-line-args) "dump")
248 (equal (nth 4 command-line-args) "dump"))
249 (not (eq system-type 'ms-dos)))
0c39a403 250 (let* ((base (concat "emacs-" emacs-version "."))
de78a7ba
RS
251 (files (file-name-all-completions base default-directory))
252 (versions (mapcar (function (lambda (name)
9b04b1b7 253 (string-to-int (substring name (length base)))))
de78a7ba 254 files)))
86db31d5
SM
255 ;; `emacs-version' is a constant, so we shouldn't change it with `setq'.
256 (defconst emacs-version
257 (format "%s.%d"
258 emacs-version (if versions (1+ (apply 'max versions)) 1)))))
de78a7ba 259
0d20f9a0
JB
260;; Note: all compiled Lisp files loaded above this point
261;; must be among the ones parsed by make-docfile
262;; to construct DOC. Any that are not processed
263;; for DOC will not have doc strings in the dumped Emacs.
264
265(message "Finding pointers to doc strings...")
24cffc68
RS
266(if (or (equal (nth 3 command-line-args) "dump")
267 (equal (nth 4 command-line-args) "dump"))
0d20f9a0
JB
268 (let ((name emacs-version))
269 (while (string-match "[^-+_.a-zA-Z0-9]+" name)
270 (setq name (concat (downcase (substring name 0 (match-beginning 0)))
271 "-"
272 (substring name (match-end 0)))))
b7521474 273 (if (memq system-type '(ms-dos windows-nt))
87485d6f 274 (setq name (expand-file-name
753a134f 275 (if (fboundp 'x-create-frame) "DOC-X" "DOC") "../etc"))
ed10e0ab
RS
276 (setq name (concat (expand-file-name "../etc/DOC-") name))
277 (if (file-exists-p name)
278 (delete-file name))
279 (copy-file (expand-file-name "../etc/DOC") name t))
450a90e2 280 (Snarf-documentation (file-name-nondirectory name)))
ce87039d
SM
281 (condition-case nil
282 (Snarf-documentation "DOC")
283 (error nil)))
0d20f9a0
JB
284(message "Finding pointers to doc strings...done")
285
0f4b266c
KH
286;;;Note: You can cause additional libraries to be preloaded
287;;;by writing a site-init.el that loads them.
288;;;See also "site-load" above.
0d20f9a0 289(load "site-init" t)
95227eb2 290(setq current-load-list nil)
c2509060 291
b7b75652
AS
292;; Write the value of load-history into fns-VERSION.el,
293;; then clear out load-history.
4744f265
SM
294;; (if (or (equal (nth 3 command-line-args) "dump")
295;; (equal (nth 4 command-line-args) "dump"))
296;; (let ((buffer-undo-list t))
297;; (princ "(setq load-history\n" (current-buffer))
298;; (princ " (nconc load-history\n" (current-buffer))
299;; (princ " '(" (current-buffer))
300;; (let ((tem load-history))
301;; (while tem
302;; (prin1 (car tem) (current-buffer))
303;; (terpri (current-buffer))
304;; (if (cdr tem)
305;; (princ " " (current-buffer)))
306;; (setq tem (cdr tem))))
307;; (princ ")))\n" (current-buffer))
308;; (write-region (point-min) (point-max)
309;; (expand-file-name
310;; (cond
311;; ((eq system-type 'ms-dos)
312;; "../lib-src/fns.el")
313;; ((eq system-type 'windows-nt)
314;; (format "../../../lib-src/fns-%s.el" emacs-version))
315;; (t
316;; (format "../lib-src/fns-%s.el" emacs-version)))
317;; invocation-directory))
318;; (erase-buffer)
319;; (setq load-history nil))
320;; (setq symbol-file-load-history-loaded t))
321;; We don't use this fns-*.el file. Instead we keep the data in PURE space.
322;; Make sure that the spine of the list is not in pure space because it can
323;; be destructively mutated in lread.c:build_load_history.
324(setq load-history (mapcar 'purecopy load-history))
325(setq symbol-file-load-history-loaded t)
326
b7b75652 327(set-buffer-modified-p nil)
c2509060 328
ce87039d
SM
329;; reset the load-path. See lread.c:init_lread why.
330(if (or (equal (nth 3 command-line-args) "bootstrap")
331 (equal (nth 4 command-line-args) "bootstrap"))
332 (setcdr load-path nil))
333
8c766df1 334(setq inhibit-load-charset-map nil)
5bb65bd4 335(clear-charset-maps)
0d20f9a0
JB
336(garbage-collect)
337
ffd56f97
JB
338;;; At this point, we're ready to resume undo recording for scratch.
339(buffer-enable-undo "*scratch*")
340
6a4803ec
RS
341(if (null (garbage-collect))
342 (setq pure-space-overflow t))
343
ce87039d
SM
344(if (or (member (nth 3 command-line-args) '("dump" "bootstrap"))
345 (member (nth 4 command-line-args) '("dump" "bootstrap")))
7c2fb837 346 (progn
fc46d219
SM
347 (if (memq system-type '(ms-dos windows-nt cygwin))
348 (message "Dumping under the name emacs")
349 (message "Dumping under the name emacs"))
0d20f9a0 350 (condition-case ()
59f3e9a2 351 (delete-file "emacs")
0d20f9a0 352 (file-error nil))
59f3e9a2
JB
353 ;; We used to dump under the name xemacs, but that occasionally
354 ;; confused people installing Emacs (they'd install the file
355 ;; under the name `xemacs'), and it's inconsistent with every
0f4b266c 356 ;; other GNU program's build process.
59f3e9a2 357 (dump-emacs "emacs" "temacs")
4d337390 358 (message "%d pure bytes used" pure-bytes-used)
0d20f9a0 359 ;; Recompute NAME now, so that it isn't set when we dump.
fc46d219
SM
360 (if (not (or (memq system-type '(ms-dos windows-nt cygwin))
361 ;; Don't bother adding another name if we're just
362 ;; building bootstrap-emacs.
363 (equal (nth 3 command-line-args) "bootstrap")
364 (equal (nth 4 command-line-args) "bootstrap")))
ed10e0ab
RS
365 (let ((name (concat "emacs-" emacs-version)))
366 (while (string-match "[^-+_.a-zA-Z0-9]+" name)
367 (setq name (concat (downcase (substring name 0 (match-beginning 0)))
368 "-"
369 (substring name (match-end 0)))))
fc46d219 370 (message "Adding name %s" name)
ed10e0ab 371 (add-name-to-file "emacs" name t)))
0d20f9a0
JB
372 (kill-emacs)))
373
374;; Avoid error if user loads some more libraries now.
375(setq purify-flag nil)
376
377;; For machines with CANNOT_DUMP defined in config.h,
378;; this file must be loaded each time Emacs is run.
7fa26c0a 379;; So run the startup code now. First, remove `-l loadup' from args.
0d20f9a0 380
7fa26c0a
KH
381(if (and (equal (nth 1 command-line-args) "-l")
382 (equal (nth 2 command-line-args) "loadup"))
383 (setcdr command-line-args (nthcdr 3 command-line-args)))
384
385(eval top-level)
6594deb0 386
86db31d5 387\f
6e6c6aaf
SM
388;; Local Variables:
389;; no-byte-compile: t
390;; no-update-autoloads: t
391;; End:
6b61353c 392
6e6c6aaf 393;; arch-tag: 121e1dd4-36e1-45ac-860e-239f577a6335
6594deb0 394;;; loadup.el ends here