Merge lp:~laney/ubuntu/quantal/emacs23/merge-23.4 into lp:ubuntu/quantal/emacs23

Proposed by Iain Lane
Status: Merged
Merge reported by: Bryce Harrington
Merged at revision: not available
Proposed branch: lp:~laney/ubuntu/quantal/emacs23/merge-23.4
Merge into: lp:ubuntu/quantal/emacs23
Diff against target: 453578 lines
To merge this branch: bzr merge lp:~laney/ubuntu/quantal/emacs23/merge-23.4
Reviewer Review Type Date Requested Status
Bryce Harrington Needs Fixing
Barry Warsaw Pending
Review via email:

Description of the change

I stole this from barry without asking (well, he wasn't on IRC, what was I supposed to do?). I suspect he won't mind :P.

Perhaps he wants to review. :-)

It might make sense for bug #998460 to be processed first, but I suspect that not many people will have it installed so it shouldn't matter in practice.

To post a comment you must log in.
Revision history for this message
Barry Warsaw (barry) wrote :

That's for doing this merge, and no I don't mind at all :). It'll be nice to have 23.4 in Quantal. Do you know what the plans are for Emacs 24 in Debian? (I know it hasn't been released yet.)

I think I'll refrain from reviewing the 453k line diff. :)

Revision history for this message
Bryce Harrington (bryce) wrote :

<slangasek> it sounds like it might be easier to just shuffle the pockets, and keep the packages in sync with Debian
<infinity> Laney: If... Err, what vorlon said. :P
<infinity> If emacs23-non-dfsg really is just the same stuff that we're adding back in our diff, that seems like a silly amount of effort for us.
<slangasek> the only binary package it builds is emacs23-common-non-dfsg... should that be a dependency of emacs?
<slangasek> honestly, either way, I think that may be the simpler route
<slangasek> i.e. I don't see any barrier to having it in main if that's where it belongs
<slangasek> in fact since it's just a binary package split, it shouldn't need a MIR
<Laney> if we're OK having it in main as a Depends, that should get us to ~ where we are now
<Laney> and let us drop a bunch of delta
<infinity> Sounds reasonable to me.
<bryceh> dropping delta sounds nice
<slangasek> it's just the docs, after all
<slangasek> Laney: I'm in favor of just making it a binary dep from emacs23 and avoiding the horror deltas :)
<slangasek> rather, from emacs23-common
<Laney> rock
<Laney> deleted debian/patches/ubuntu-restore-nondfsg-files.diff

review: Needs Fixing

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== removed directory '.pc/0001-Prefer-usr-share-info-emacs-23-over-usr-share-info.patch'
2=== removed directory '.pc/0001-Prefer-usr-share-info-emacs-23-over-usr-share-info.patch/lisp'
3=== removed file '.pc/0001-Prefer-usr-share-info-emacs-23-over-usr-share-info.patch/lisp/site-init.el'
4=== removed directory '.pc/0002-Run-debian-startup-and-set-debian-emacs-flavor.patch'
5=== removed directory '.pc/0002-Run-debian-startup-and-set-debian-emacs-flavor.patch/lisp'
6=== removed file '.pc/0002-Run-debian-startup-and-set-debian-emacs-flavor.patch/lisp/startup.el'
7--- .pc/0002-Run-debian-startup-and-set-debian-emacs-flavor.patch/lisp/startup.el 2011-04-10 10:33:31 +0000
8+++ .pc/0002-Run-debian-startup-and-set-debian-emacs-flavor.patch/lisp/startup.el 1970-01-01 00:00:00 +0000
9@@ -1,2346 +0,0 @@
10-;;; startup.el --- process Emacs shell arguments
12-;; Copyright (C) 1985, 1986, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
13-;; 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
14-;; Free Software Foundation, Inc.
16-;; Maintainer: FSF
17-;; Keywords: internal
19-;; This file is part of GNU Emacs.
21-;; GNU Emacs is free software: you can redistribute it and/or modify
22-;; it under the terms of the GNU General Public License as published by
23-;; the Free Software Foundation, either version 3 of the License, or
24-;; (at your option) any later version.
26-;; GNU Emacs is distributed in the hope that it will be useful,
27-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
29-;; GNU General Public License for more details.
31-;; You should have received a copy of the GNU General Public License
32-;; along with GNU Emacs. If not, see <>.
34-;;; Commentary:
36-;; This file parses the command line and gets Emacs running. Options
37-;; on the command line are handled in precedence order. For priorities
38-;; see the structure standard_args in the emacs.c file.
40-;;; Code:
42-(setq top-level '(normal-top-level))
44-(defvar command-line-processed nil
45- "Non-nil once command line has been processed.")
47-(defgroup initialization nil
48- "Emacs start-up procedure."
49- :group 'environment)
51-(defcustom initial-buffer-choice nil
52- "Buffer to show after starting Emacs.
53-If the value is nil and `inhibit-startup-screen' is nil, show the
54-startup screen. If the value is string, visit the specified file or
55-directory using `find-file'. If t, open the `*scratch*' buffer."
56- :type '(choice
57- (const :tag "Startup screen" nil)
58- (directory :tag "Directory" :value "~/")
59- (file :tag "File" :value "~/.emacs")
60- (const :tag "Lisp scratch buffer" t))
61- :version "23.1"
62- :group 'initialization)
64-(defcustom inhibit-startup-screen nil
65- "Non-nil inhibits the startup screen.
67-This is for use in your personal init file (but NOT site-start.el),
68-once you are familiar with the contents of the startup screen."
69- :type 'boolean
70- :group 'initialization)
72-(defvaralias 'inhibit-splash-screen 'inhibit-startup-screen)
73-(defvaralias 'inhibit-startup-message 'inhibit-startup-screen)
75-(defvar startup-screen-inhibit-startup-screen nil)
77-(defcustom inhibit-startup-echo-area-message nil
78- "Non-nil inhibits the initial startup echo area message.
79-Setting this variable takes effect
80-only if you do it with the customization buffer
81-or if your `.emacs' file contains a line of this form:
82- (setq inhibit-startup-echo-area-message \"YOUR-USER-NAME\")
83-If your `.emacs' file is byte-compiled, use the following form instead:
84- (eval '(setq inhibit-startup-echo-area-message \"YOUR-USER-NAME\"))
85-Thus, someone else using a copy of your `.emacs' file will see
86-the startup message unless he personally acts to inhibit it."
87- :type '(choice (const :tag "Don't inhibit")
88- (string :tag "Enter your user name, to inhibit"))
89- :group 'initialization)
91-(defcustom inhibit-default-init nil
92- "Non-nil inhibits loading the `default' library."
93- :type 'boolean
94- :group 'initialization)
96-(defcustom inhibit-startup-buffer-menu nil
97- "Non-nil inhibits display of buffer list when more than 2 files are loaded."
98- :type 'boolean
99- :group 'initialization)
101-(defvar command-switch-alist nil
102- "Alist of command-line switches.
103-Elements look like (SWITCH-STRING . HANDLER-FUNCTION).
104-HANDLER-FUNCTION receives the switch string as its sole argument;
105-the remaining command-line args are in the variable `command-line-args-left'.")
107-(defvar command-line-args-left nil
108- "List of command-line args not yet processed.")
110-(defvaralias 'argv 'command-line-args-left
111- "List of command-line args not yet processed.
112-This is a convenience alias, so that one can write \(pop argv\)
113-inside of --eval command line arguments in order to access
114-following arguments.")
116-(defvar command-line-functions nil ;; lrs 7/31/89
117- "List of functions to process unrecognized command-line arguments.
118-Each function should access the dynamically bound variables
119-`argi' (the current argument) and `command-line-args-left' (the remaining
120-arguments). The function should return non-nil only if it recognizes and
121-processes `argi'. If it does so, it may consume successive arguments by
122-altering `command-line-args-left' to remove them.")
124-(defvar command-line-default-directory nil
125- "Default directory to use for command line arguments.
126-This is normally copied from `default-directory' when Emacs starts.")
128-;;; This is here, rather than in x-win.el, so that we can ignore these
129-;;; options when we are not using X.
130-(defconst command-line-x-option-alist
131- '(("-bw" 1 x-handle-numeric-switch border-width)
132- ("-d" 1 x-handle-display)
133- ("-display" 1 x-handle-display)
134- ("-name" 1 x-handle-name-switch)
135- ("-title" 1 x-handle-switch title)
136- ("-T" 1 x-handle-switch title)
137- ("-r" 0 x-handle-switch reverse t)
138- ("-rv" 0 x-handle-switch reverse t)
139- ("-reverse" 0 x-handle-switch reverse t)
140- ("-reverse-video" 0 x-handle-switch reverse t)
141- ("-fn" 1 x-handle-switch font)
142- ("-font" 1 x-handle-switch font)
143- ("-fs" 0 x-handle-initial-switch fullscreen fullboth)
144- ("-fw" 0 x-handle-initial-switch fullscreen fullwidth)
145- ("-fh" 0 x-handle-initial-switch fullscreen fullheight)
146- ("-mm" 0 x-handle-initial-switch fullscreen maximized)
147- ("-ib" 1 x-handle-numeric-switch internal-border-width)
148- ("-g" 1 x-handle-geometry)
149- ("-lsp" 1 x-handle-numeric-switch line-spacing)
150- ("-geometry" 1 x-handle-geometry)
151- ("-fg" 1 x-handle-switch foreground-color)
152- ("-foreground" 1 x-handle-switch foreground-color)
153- ("-bg" 1 x-handle-switch background-color)
154- ("-background" 1 x-handle-switch background-color)
155- ("-ms" 1 x-handle-switch mouse-color)
156- ("-nbi" 0 x-handle-switch icon-type nil)
157- ("-iconic" 0 x-handle-iconic)
158- ("-xrm" 1 x-handle-xrm-switch)
159- ("-cr" 1 x-handle-switch cursor-color)
160- ("-vb" 0 x-handle-switch vertical-scroll-bars t)
161- ("-hb" 0 x-handle-switch horizontal-scroll-bars t)
162- ("-bd" 1 x-handle-switch)
163- ("--border-width" 1 x-handle-numeric-switch border-width)
164- ("--display" 1 x-handle-display)
165- ("--name" 1 x-handle-name-switch)
166- ("--title" 1 x-handle-switch title)
167- ("--reverse-video" 0 x-handle-switch reverse t)
168- ("--font" 1 x-handle-switch font)
169- ("--fullscreen" 0 x-handle-initial-switch fullscreen fullboth)
170- ("--fullwidth" 0 x-handle-initial-switch fullscreen fullwidth)
171- ("--fullheight" 0 x-handle-initial-switch fullscreen fullheight)
172- ("--maximized" 0 x-handle-initial-switch fullscreen maximized)
173- ("--internal-border" 1 x-handle-numeric-switch internal-border-width)
174- ("--geometry" 1 x-handle-geometry)
175- ("--foreground-color" 1 x-handle-switch foreground-color)
176- ("--background-color" 1 x-handle-switch background-color)
177- ("--mouse-color" 1 x-handle-switch mouse-color)
178- ("--no-bitmap-icon" 0 x-handle-no-bitmap-icon)
179- ("--iconic" 0 x-handle-iconic)
180- ("--xrm" 1 x-handle-xrm-switch)
181- ("--cursor-color" 1 x-handle-switch cursor-color)
182- ("--vertical-scroll-bars" 0 x-handle-switch vertical-scroll-bars t)
183- ("--line-spacing" 1 x-handle-numeric-switch line-spacing)
184- ("--border-color" 1 x-handle-switch border-color)
185- ("--smid" 1 x-handle-smid)
186- ("--parent-id" 1 x-handle-parent-id))
187- "Alist of X Windows options.
188-Each element has the form
190-where NAME is the option name string, NUMARGS is the number of arguments
191-that the option accepts, HANDLER is a function to call to handle the option.
192-FRAME-PARAM (optional) is the frame parameter this option specifies,
193-and VALUE is the value which is given to that frame parameter
194-\(most options use the argument for this, so VALUE is not present).")
196-(defconst command-line-ns-option-alist
197- '(("-NSAutoLaunch" 1 ns-ignore-1-arg)
198- ("-NXAutoLaunch" 1 ns-ignore-1-arg)
199- ("-macosx" 0 ignore)
200- ("-NSHost" 1 ns-ignore-1-arg)
201- ("-_NSMachLaunch" 1 ns-ignore-1-arg)
202- ("-MachLaunch" 1 ns-ignore-1-arg)
203- ("-NXOpen" 1 ns-ignore-1-arg)
204- ("-NSOpen" 1 ns-handle-nxopen)
205- ("-NXOpenTemp" 1 ns-ignore-1-arg)
206- ("-NSOpenTemp" 1 ns-handle-nxopentemp)
207- ("-GSFilePath" 1 ns-handle-nxopen)
208- ;;("-bw" . x-handle-numeric-switch)
209- ;;("-d" . x-handle-display)
210- ;;("-display" . x-handle-display)
211- ("-name" 1 ns-handle-name-switch)
212- ("-title" 1 ns-handle-switch title)
213- ("-T" 1 ns-handle-switch title)
214- ("-r" 0 ns-handle-switch reverse t)
215- ("-rv" 0 ns-handle-switch reverse t)
216- ("-reverse" 0 ns-handle-switch reverse t)
217- ("-fn" 1 ns-handle-switch font)
218- ("-font" 1 ns-handle-switch font)
219- ("-ib" 1 ns-handle-numeric-switch internal-border-width)
220- ;;("-g" . x-handle-geometry)
221- ;;("-geometry" . x-handle-geometry)
222- ("-fg" 1 ns-handle-switch foreground-color)
223- ("-foreground" 1 ns-handle-switch foreground-color)
224- ("-bg" 1 ns-handle-switch background-color)
225- ("-background" 1 ns-handle-switch background-color)
226-; ("-ms" 1 ns-handle-switch mouse-color)
227- ("-itype" 0 ns-handle-switch icon-type t)
228- ("-i" 0 ns-handle-switch icon-type t)
229- ("-iconic" 0 ns-handle-iconic icon-type t)
230- ;;("-xrm" . x-handle-xrm-switch)
231- ("-cr" 1 ns-handle-switch cursor-color)
232- ("-vb" 0 ns-handle-switch vertical-scroll-bars t)
233- ("-hb" 0 ns-handle-switch horizontal-scroll-bars t)
234- ("-bd" 1 ns-handle-switch)
235- ;; ("--border-width" 1 ns-handle-numeric-switch border-width)
236- ;; ("--display" 1 ns-handle-display)
237- ("--name" 1 ns-handle-name-switch)
238- ("--title" 1 ns-handle-switch title)
239- ("--reverse-video" 0 ns-handle-switch reverse t)
240- ("--font" 1 ns-handle-switch font)
241- ("--internal-border" 1 ns-handle-numeric-switch internal-border-width)
242- ;; ("--geometry" 1 ns-handle-geometry)
243- ("--foreground-color" 1 ns-handle-switch foreground-color)
244- ("--background-color" 1 ns-handle-switch background-color)
245- ("--mouse-color" 1 ns-handle-switch mouse-color)
246- ("--icon-type" 0 ns-handle-switch icon-type t)
247- ("--iconic" 0 ns-handle-iconic)
248- ;; ("--xrm" 1 ns-handle-xrm-switch)
249- ("--cursor-color" 1 ns-handle-switch cursor-color)
250- ("--vertical-scroll-bars" 0 ns-handle-switch vertical-scroll-bars t)
251- ("--border-color" 1 ns-handle-switch border-width))
252- "Alist of NS options.
253-Each element has the form
255-where NAME is the option name string, NUMARGS is the number of arguments
256-that the option accepts, HANDLER is a function to call to handle the option.
257-FRAME-PARAM (optional) is the frame parameter this option specifies,
258-and VALUE is the value which is given to that frame parameter
259-\(most options use the argument for this, so VALUE is not present).")
262-(defvar before-init-hook nil
263- "Normal hook run after handling urgent options but before loading init files.")
265-(defvar after-init-hook nil
266- "Normal hook run after loading the init files, `~/.emacs' and `default.el'.
267-There is no `condition-case' around the running of these functions;
268-therefore, if you set `debug-on-error' non-nil in `.emacs',
269-an error in one of these functions will invoke the debugger.")
271-(defvar emacs-startup-hook nil
272- "Normal hook run after loading init files and handling the command line.")
274-(defvar term-setup-hook nil
275- "Normal hook run after loading terminal-specific Lisp code.
276-It also follows `emacs-startup-hook'. This hook exists for users to set,
277-so as to override the definitions made by the terminal-specific file.
278-Emacs never sets this variable itself.")
280-(defvar inhibit-startup-hooks nil
281- "Non-nil means don't run `term-setup-hook' and `emacs-startup-hook'.
282-This is because we already did so.")
284-(defvar keyboard-type nil
285- "The brand of keyboard you are using.
286-This variable is used to define the proper function and keypad
287-keys for use under X. It is used in a fashion analogous to the
288-environment variable TERM.")
290-(defvar window-setup-hook nil
291- "Normal hook run to initialize window system display.
292-Emacs runs this hook after processing the command line arguments and loading
293-the user's init file.")
295-(defcustom initial-major-mode 'lisp-interaction-mode
296- "Major mode command symbol to use for the initial `*scratch*' buffer."
297- :type 'function
298- :group 'initialization)
300-(defvar init-file-user nil
301- "Identity of user whose `.emacs' file is or was read.
302-The value is nil if `-q' or `--no-init-file' was specified,
303-meaning do not load any init file.
305-Otherwise, the value may be an empty string, meaning
306-use the init file for the user who originally logged in,
307-or it may be a string containing a user's name meaning
308-use that person's init file.
310-In either of the latter cases, `(concat \"~\" init-file-user \"/\")'
311-evaluates to the name of the directory where the `.emacs' file was
312-looked for.
314-Setting `init-file-user' does not prevent Emacs from loading
315-`site-start.el'. The only way to do that is to use `--no-site-file'.")
317-(defcustom site-run-file (purecopy "site-start")
318- "File containing site-wide run-time initializations.
319-This file is loaded at run-time before `~/.emacs'. It contains inits
320-that need to be in place for the entire site, but which, due to their
321-higher incidence of change, don't make sense to load into Emacs's
322-dumped image. Thus, the run-time load order is: 1. file described in
323-this variable, if non-nil; 2. `~/.emacs'; 3. `default.el'.
325-Don't use the `site-start.el' file for things some users may not like.
326-Put them in `default.el' instead, so that users can more easily
327-override them. Users can prevent loading `default.el' with the `-q'
328-option or by setting `inhibit-default-init' in their own init files,
329-but inhibiting `site-start.el' requires `--no-site-file', which
330-is less convenient.
332-This variable is defined for customization so as to make
333-it visible in the relevant context. However, actually customizing it
334-is not allowed, since it would not work anyway. The only way to set
335-this variable usefully is to set it while building and dumping Emacs."
336- :type '(choice (const :tag "none" nil) string)
337- :group 'initialization
338- :initialize 'custom-initialize-default
339- :set (lambda (variable value)
340- (error "Customizing `site-run-file' does not work")))
342-(defcustom mail-host-address nil
343- "Name of this machine, for purposes of naming users."
344- :type '(choice (const nil) string)
345- :group 'mail)
347-(defcustom user-mail-address (if command-line-processed
348- (or (getenv "EMAIL")
349- (concat (user-login-name) "@"
350- (or mail-host-address
351- (system-name))))
352- ;; Empty string means "not set yet".
353- "")
354- "Full mailing address of this user.
355-This is initialized with environment variable `EMAIL' or, as a
356-fallback, using `mail-host-address'. This is done after your
357-init file is read, in case it sets `mail-host-address'."
358- :type 'string
359- :group 'mail)
361-(defcustom auto-save-list-file-prefix
362- (cond ((eq system-type 'ms-dos)
363- ;; MS-DOS cannot have initial dot, and allows only 8.3 names
364- (concat user-emacs-directory "auto-save.list/_s"))
365- (t
366- (concat user-emacs-directory "auto-save-list/.saves-")))
367- "Prefix for generating `auto-save-list-file-name'.
368-This is used after reading your `.emacs' file to initialize
369-`auto-save-list-file-name', by appending Emacs's pid and the system name,
370-if you have not already set `auto-save-list-file-name' yourself.
371-Directories in the prefix will be created if necessary.
372-Set this to nil if you want to prevent `auto-save-list-file-name'
373-from being initialized."
374- :type '(choice (const :tag "Don't record a session's auto save list" nil)
375- string)
376- :group 'auto-save)
378-(defvar emacs-basic-display nil)
380-(defvar init-file-debug nil)
382-(defvar init-file-had-error nil
383- "Non-nil if there was an error loading the user's init file.")
385-(defvar normal-top-level-add-subdirs-inode-list nil)
387-(defvar no-blinking-cursor nil)
389-(defvar default-frame-background-mode)
391-(defvar pure-space-overflow nil
392- "Non-nil if building Emacs overflowed pure space.")
394-(defvar pure-space-overflow-message (purecopy "\
395-Warning Warning!!! Pure space overflow !!!Warning Warning
396-\(See the node Pure Storage in the Lisp manual for details.)\n"))
398-(defcustom tutorial-directory
399- (file-name-as-directory (expand-file-name "tutorials" data-directory))
400- "Directory containing the Emacs TUTORIAL files."
401- :group 'installation
402- :type 'directory
403- :initialize 'custom-initialize-delay)
405-(defun normal-top-level-add-subdirs-to-load-path ()
406- "Add all subdirectories of current directory to `load-path'.
407-More precisely, this uses only the subdirectories whose names
408-start with letters or digits; it excludes any subdirectory named `RCS'
409-or `CVS', and any subdirectory that contains a file named `.nosearch'."
410- (let (dirs
411- attrs
412- (pending (list default-directory)))
413- ;; This loop does a breadth-first tree walk on DIR's subtree,
414- ;; putting each subdir into DIRS as its contents are examined.
415- (while pending
416- (push (pop pending) dirs)
417- (let* ((this-dir (car dirs))
418- (contents (directory-files this-dir))
419- (default-directory this-dir)
420- (canonicalized (if (fboundp 'untranslated-canonical-name)
421- (untranslated-canonical-name this-dir))))
422- ;; The Windows version doesn't report meaningful inode
423- ;; numbers, so use the canonicalized absolute file name of the
424- ;; directory instead.
425- (setq attrs (or canonicalized
426- (nthcdr 10 (file-attributes this-dir))))
427- (unless (member attrs normal-top-level-add-subdirs-inode-list)
428- (push attrs normal-top-level-add-subdirs-inode-list)
429- (dolist (file contents)
430- ;; The lower-case variants of RCS and CVS are for DOS/Windows.
431- (unless (member file '("." ".." "RCS" "CVS" "rcs" "cvs"))
432- (when (and (string-match "\\`[[:alnum:]]" file)
433- ;; Avoid doing a `stat' when it isn't necessary
434- ;; because that can cause trouble when an NFS server
435- ;; is down.
436- (not (string-match "\\.elc?\\'" file))
437- (file-directory-p file))
438- (let ((expanded (expand-file-name file)))
439- (unless (file-exists-p (expand-file-name ".nosearch"
440- expanded))
441- (setq pending (nconc pending (list expanded)))))))))))
442- (normal-top-level-add-to-load-path (cdr (nreverse dirs)))))
444-;; This function is called from a subdirs.el file.
445-;; It assumes that default-directory is the directory
446-;; in which the subdirs.el file exists,
447-;; and it adds to load-path the subdirs of that directory
448-;; as specified in DIRS. Normally the elements of DIRS are relative.
449-(defun normal-top-level-add-to-load-path (dirs)
450- (let ((tail load-path)
451- (thisdir (directory-file-name default-directory)))
452- (while (and tail
453- ;;Don't go all the way to the nil terminator.
454- (cdr tail)
455- (not (equal thisdir (car tail)))
456- (not (and (memq system-type '(ms-dos windows-nt))
457- (equal (downcase thisdir) (downcase (car tail))))))
458- (setq tail (cdr tail)))
459- ;;Splice the new section in.
460- (when tail
461- (setcdr tail (append (mapcar 'expand-file-name dirs) (cdr tail))))))
463-(defun normal-top-level ()
464- (if command-line-processed
465- (message "Back to top level.")
466- (setq command-line-processed t)
467- (let ((dir default-directory))
468- (with-current-buffer "*Messages*"
469- ;; Make it easy to do like "tail -f".
470- (set (make-local-variable 'window-point-insertion-type) t)
471- ;; Give *Messages* the same default-directory as *scratch*,
472- ;; just to keep things predictable.
473- (setq default-directory dir)))
474- ;; `user-full-name' is now known; reset its standard-value here.
475- (put 'user-full-name 'standard-value
476- (list (default-value 'user-full-name)))
477- ;; For root, preserve owner and group when editing files.
478- (if (equal (user-uid) 0)
479- (setq backup-by-copying-when-mismatch t))
480- ;; Look in each dir in load-path for a subdirs.el file.
481- ;; If we find one, load it, which will add the appropriate subdirs
482- ;; of that dir into load-path,
483- ;; Look for a leim-list.el file too. Loading it will register
484- ;; available input methods.
485- (let ((tail load-path) dir)
486- (while tail
487- (setq dir (car tail))
488- (let ((default-directory dir))
489- (load (expand-file-name "subdirs.el") t t t))
490- (let ((default-directory dir))
491- (load (expand-file-name "leim-list.el") t t t))
492- ;; We don't use a dolist loop and we put this "setq-cdr" command at
493- ;; the end, because the subdirs.el files may add elements to the end
494- ;; of load-path and we want to take it into account.
495- (setq tail (cdr tail))))
496- ;; If the PWD environment variable isn't accurate, delete it.
497- (let ((pwd (getenv "PWD")))
498- (and (stringp pwd)
499- ;; Use FOO/., so that if FOO is a symlink, file-attributes
500- ;; describes the directory linked to, not FOO itself.
501- (or (equal (file-attributes
502- (concat (file-name-as-directory pwd) "."))
503- (file-attributes
504- (concat (file-name-as-directory default-directory)
505- ".")))
506- (setq process-environment
507- (delete (concat "PWD=" pwd)
508- process-environment)))))
509- (setq default-directory (abbreviate-file-name default-directory))
510- (let ((old-face-font-rescale-alist face-font-rescale-alist))
511- (unwind-protect
512- (command-line)
513- ;; Do this again, in case .emacs defined more abbreviations.
514- (setq default-directory (abbreviate-file-name default-directory))
515- ;; Specify the file for recording all the auto save files of this session.
516- ;; This is used by recover-session.
517- (or auto-save-list-file-name
518- (and auto-save-list-file-prefix
519- (setq auto-save-list-file-name
520- ;; Under MS-DOS our PID is almost always reused between
521- ;; Emacs invocations. We need something more unique.
522- (cond ((eq system-type 'ms-dos)
523- ;; We are going to access the auto-save
524- ;; directory, so make sure it exists.
525- (make-directory
526- (file-name-directory auto-save-list-file-prefix)
527- t)
528- (concat
529- (make-temp-name
530- (expand-file-name
531- auto-save-list-file-prefix))
532- "~"))
533- (t
534- (expand-file-name
535- (format "%s%d-%s~"
536- auto-save-list-file-prefix
537- (emacs-pid)
538- (system-name))))))))
539- (unless inhibit-startup-hooks
540- (run-hooks 'emacs-startup-hook)
541- (and term-setup-hook
542- (run-hooks 'term-setup-hook)))
544- ;; Don't do this if we failed to create the initial frame,
545- ;; for instance due to a dense colormap.
546- (when (or frame-initial-frame
547- ;; If frame-initial-frame has no meaning, do this anyway.
548- (not (and initial-window-system
549- (not noninteractive)
550- (not (eq initial-window-system 'pc)))))
552- ;; FIXME: The user's init file may change
553- ;; face-font-rescale-alist. However, the default face
554- ;; already has an assigned font object, which does not take
555- ;; face-font-rescale-alist into account. For such
556- ;; situations, we ought to have a way to find all font
557- ;; objects and regenerate them; currently we do not. As a
558- ;; workaround, we specifically reset te default face's :font
559- ;; attribute here. See bug#1785.
560- (unless (eq face-font-rescale-alist
561- old-face-font-rescale-alist)
562- (set-face-attribute 'default nil :font (font-spec)))
564- ;; Modify the initial frame based on what .emacs puts into
565- ;; ...-frame-alist.
566- (if (fboundp 'frame-notice-user-settings)
567- (frame-notice-user-settings))
568- ;; Set the faces for the initial background mode even if
569- ;; frame-notice-user-settings didn't (such as on a tty).
570- ;; frame-set-background-mode is idempotent, so it won't
571- ;; cause any harm if it's already been done.
572- (if (fboundp 'frame-set-background-mode)
573- (frame-set-background-mode (selected-frame))))
575- ;; Now we know the user's default font, so add it to the menu.
576- (if (fboundp 'font-menu-add-default)
577- (font-menu-add-default))
578- (and window-setup-hook
579- (run-hooks 'window-setup-hook))))
580- ;; Subprocesses of Emacs do not have direct access to the terminal, so
581- ;; unless told otherwise they should only assume a dumb terminal.
582- ;; We are careful to do it late (after term-setup-hook), although the
583- ;; new multi-tty code does not use $TERM any more there anyway.
584- (setenv "TERM" "dumb")
585- ;; Remove DISPLAY from the process-environment as well. This allows
586- ;; `callproc.c' to give it a useful adaptive default which is either
587- ;; the value of the `display' frame-parameter or the DISPLAY value
588- ;; from initial-environment.
589- (let ((display (frame-parameter nil 'display)))
590- ;; Be careful which DISPLAY to remove from process-environment: follow
591- ;; the logic of `callproc.c'.
592- (if (stringp display) (setq display (concat "DISPLAY=" display))
593- (dolist (varval initial-environment)
594- (if (string-match "\\`DISPLAY=" varval)
595- (setq display varval))))
596- (when display
597- (delete display process-environment)))))
599-;; Precompute the keyboard equivalents in the menu bar items.
600-;; Command-line options supported by tty's:
601-(defconst tty-long-option-alist
602- '(("--name" . "-name")
603- ("--title" . "-T")
604- ("--reverse-video" . "-reverse")
605- ("--foreground-color" . "-fg")
606- ("--background-color" . "-bg")
607- ("--color" . "-color")))
609-(defconst tool-bar-images-pixel-height 24
610- "Height in pixels of images in the tool-bar.")
612-(defvar tool-bar-originally-present nil
613- "Non-nil if tool-bars are present before user and site init files are read.")
615-(defvar handle-args-function-alist '((nil . tty-handle-args))
616- "Functions for processing window-system dependent command-line arguments.
617-Window system startup files should add their own function to this
618-alist, which should parse the command line arguments. Those
619-pertaining to the window system should be processed and removed
620-from the returned command line.")
622-(defvar window-system-initialization-alist '((nil . ignore))
623- "Alist of window-system initialization functions.
624-Window-system startup files should add their own initialization
625-function to this list. The function should take no arguments,
626-and initialize the window system environment to prepare for
627-opening the first frame (e.g. open a connection to an X server).")
629-;; Handle the X-like command-line arguments "-fg", "-bg", "-name", etc.
630-(defun tty-handle-args (args)
631- (let (rest)
632- (message "%S" args)
633- (while (and args
634- (not (equal (car args) "--")))
635- (let* ((argi (pop args))
636- (orig-argi argi)
637- argval completion)
638- ;; Check for long options with attached arguments
639- ;; and separate out the attached option argument into argval.
640- (when (string-match "^\\(--[^=]*\\)=" argi)
641- (setq argval (substring argi (match-end 0))
642- argi (match-string 1 argi)))
643- (when (string-match "^--" argi)
644- (setq completion (try-completion argi tty-long-option-alist))
645- (if (eq completion t)
646- ;; Exact match for long option.
647- (setq argi (cdr (assoc argi tty-long-option-alist)))
648- (if (stringp completion)
649- (let ((elt (assoc completion tty-long-option-alist)))
650- ;; Check for abbreviated long option.
651- (or elt
652- (error "Option `%s' is ambiguous" argi))
653- (setq argi (cdr elt)))
654- ;; Check for a short option.
655- (setq argval nil
656- argi orig-argi))))
657- (cond ((member argi '("-fg" "-foreground"))
658- (push (cons 'foreground-color (or argval (pop args)))
659- default-frame-alist))
660- ((member argi '("-bg" "-background"))
661- (push (cons 'background-color (or argval (pop args)))
662- default-frame-alist))
663- ((member argi '("-T" "-name"))
664- (unless argval (setq argval (pop args)))
665- (push (cons 'title
666- (if (stringp argval)
667- argval
668- (let ((case-fold-search t)
669- i)
670- (setq argval (invocation-name))
672- ;; Change any . or * characters in name to
673- ;; hyphens, so as to emulate behavior on X.
674- (while
675- (setq i (string-match "[.*]" argval))
676- (aset argval i ?-))
677- argval)))
678- default-frame-alist))
679- ((member argi '("-r" "-rv" "-reverse"))
680- (push '(reverse . t)
681- default-frame-alist))
682- ((equal argi "-color")
683- (unless argval (setq argval 8)) ; default --color means 8 ANSI colors
684- (push (cons 'tty-color-mode
685- (cond
686- ((numberp argval) argval)
687- ((string-match "-?[0-9]+" argval)
688- (string-to-number argval))
689- (t (intern argval))))
690- default-frame-alist))
691- (t
692- (push argi rest)))))
693- (nreverse rest)))
695-(declare-function x-get-resource "frame.c"
696- (attribute class &optional component subclass))
697-(declare-function tool-bar-mode "tool-bar" (&optional arg))
698-(declare-function tool-bar-setup "tool-bar")
700-(defvar server-name)
701-(defvar server-process)
703-(defun command-line ()
704- (setq before-init-time (current-time)
705- after-init-time nil
706- command-line-default-directory default-directory)
708- ;; Force recomputation, in case it was computed during the dump.
709- (setq abbreviated-home-dir nil)
711- ;; See if we should import version-control from the environment variable.
712- (let ((vc (getenv "VERSION_CONTROL")))
713- (cond ((eq vc nil)) ;don't do anything if not set
714- ((member vc '("t" "numbered"))
715- (setq version-control t))
716- ((member vc '("nil" "existing"))
717- (setq version-control nil))
718- ((member vc '("never" "simple"))
719- (setq version-control 'never))))
721- ;;! This has been commented out; I currently find the behavior when
722- ;;! split-window-keep-point is nil disturbing, but if I can get used
723- ;;! to it, then it would be better to eliminate the option.
724- ;;! ;; Choose a good default value for split-window-keep-point.
725- ;;! (setq split-window-keep-point (> baud-rate 2400))
727- ;; Set the default strings to display in mode line for
728- ;; end-of-line formats that aren't native to this platform.
729- (cond
730- ((memq system-type '(ms-dos windows-nt))
731- (setq eol-mnemonic-unix "(Unix)"
732- eol-mnemonic-mac "(Mac)"))
733- (t ; this is for Unix/GNU/Linux systems
734- (setq eol-mnemonic-dos "(DOS)"
735- eol-mnemonic-mac "(Mac)")))
737- (set-locale-environment nil)
739- ;; Convert preloaded file names in load-history to absolute.
740- (let ((simple-file-name
741- ;; Look for simple.el or simple.elc and use their directory
742- ;; as the place where all Lisp files live.
743- (locate-file "simple" load-path (get-load-suffixes)))
744- lisp-dir)
745- ;; Don't abort if simple.el cannot be found, but print a warning.
746- (if (null simple-file-name)
747- (progn
748- (princ "Warning: Could not find simple.el nor simple.elc"
749- 'external-debugging-output)
750- (terpri 'external-debugging-output))
751- (setq lisp-dir (file-truename (file-name-directory simple-file-name)))
752- (setq load-history
753- (mapcar (lambda (elt)
754- (if (and (stringp (car elt))
755- (not (file-name-absolute-p (car elt))))
756- (cons (concat lisp-dir
757- (car elt))
758- (cdr elt))
759- elt))
760- load-history))))
762- ;; Convert the arguments to Emacs internal representation.
763- (let ((args (cdr command-line-args)))
764- (while args
765- (setcar args
766- (decode-coding-string (car args) locale-coding-system t))
767- (pop args)))
769- (let ((done nil)
770- (args (cdr command-line-args))
771- display-arg)
773- ;; Figure out which user's init file to load,
774- ;; either from the environment or from the options.
775- (setq init-file-user (if noninteractive nil (user-login-name)))
776- ;; If user has not done su, use current $HOME to find .emacs.
777- (and init-file-user
778- (equal init-file-user (user-real-login-name))
779- (setq init-file-user ""))
781- ;; Process the command-line args, and delete the arguments
782- ;; processed. This is consistent with the way main in emacs.c
783- ;; does things.
784- (while (and (not done) args)
785- (let* ((longopts '(("--no-init-file") ("--no-site-file") ("--debug-init")
786- ("--user") ("--iconic") ("--icon-type") ("--quick")
787- ("--no-blinking-cursor") ("--basic-display")))
788- (argi (pop args))
789- (orig-argi argi)
790- argval)
791- ;; Handle --OPTION=VALUE format.
792- (when (string-match "\\`\\(--[^=]*\\)=" argi)
793- (setq argval (substring argi (match-end 0))
794- argi (match-string 1 argi)))
795- (when (string-match "\\`--." orig-argi)
796- (let ((completion (try-completion argi longopts)))
797- (if (eq completion t)
798- (setq argi (substring argi 1))
799- (if (stringp completion)
800- (let ((elt (assoc completion longopts)))
801- (or elt
802- (error "Option `%s' is ambiguous" argi))
803- (setq argi (substring (car elt) 1)))
804- (setq argval nil
805- argi orig-argi)))))
806- (cond
807- ;; The --display arg is handled partly in C, partly in Lisp.
808- ;; When it shows up here, we just put it back to be handled
809- ;; by `command-line-1'.
810- ((member argi '("-d" "-display"))
811- (setq display-arg (list argi (pop args))))
812- ((member argi '("-Q" "-quick"))
813- (setq init-file-user nil
814- site-run-file nil
815- inhibit-x-resources t))
816- ((member argi '("-D" "-basic-display"))
817- (setq no-blinking-cursor t
818- emacs-basic-display t)
819- (push '(vertical-scroll-bars . nil) initial-frame-alist))
820- ((member argi '("-q" "-no-init-file"))
821- (setq init-file-user nil))
822- ((member argi '("-u" "-user"))
823- (setq init-file-user (or argval (pop args))
824- argval nil))
825- ((equal argi "-no-site-file")
826- (setq site-run-file nil))
827- ((equal argi "-debug-init")
828- (setq init-file-debug t))
829- ((equal argi "-iconic")
830- (push '(visibility . icon) initial-frame-alist))
831- ((member argi '("-nbc" "-no-blinking-cursor"))
832- (setq no-blinking-cursor t))
833- ;; Push the popped arg back on the list of arguments.
834- (t
835- (push argi args)
836- (setq done t)))
837- ;; Was argval set but not used?
838- (and argval
839- (error "Option `%s' doesn't allow an argument" argi))))
841- ;; Re-attach the --display arg.
842- (and display-arg (setq args (append display-arg args)))
844- ;; Re-attach the program name to the front of the arg list.
845- (and command-line-args
846- (setcdr command-line-args args)))
848- ;; Make sure window system's init file was loaded in loadup.el if
849- ;; using a window system.
850- ;; Initialize the window-system only after processing the command-line
851- ;; args so that -Q can influence this initialization.
852- (condition-case error
853- (unless noninteractive
854- (if (and initial-window-system
855- (not (featurep
856- (intern
857- (concat (symbol-name initial-window-system) "-win")))))
858- (error "Unsupported window system `%s'" initial-window-system))
859- ;; Process window-system specific command line parameters.
860- (setq command-line-args
861- (funcall
862- (or (cdr (assq initial-window-system handle-args-function-alist))
863- (error "Unsupported window system `%s'" initial-window-system))
864- command-line-args))
865- ;; Initialize the window system. (Open connection, etc.)
866- (funcall
867- (or (cdr (assq initial-window-system window-system-initialization-alist))
868- (error "Unsupported window system `%s'" initial-window-system))))
869- ;; If there was an error, print the error message and exit.
870- (error
871- (princ
872- (if (eq (car error) 'error)
873- (apply 'concat (cdr error))
874- (if (memq 'file-error (get (car error) 'error-conditions))
875- (format "%s: %s"
876- (nth 1 error)
877- (mapconcat (lambda (obj) (prin1-to-string obj t))
878- (cdr (cdr error)) ", "))
879- (format "%s: %s"
880- (get (car error) 'error-message)
881- (mapconcat (lambda (obj) (prin1-to-string obj t))
882- (cdr error) ", "))))
883- 'external-debugging-output)
884- (terpri 'external-debugging-output)
885- (setq initial-window-system nil)
886- (kill-emacs)))
888- (run-hooks 'before-init-hook)
890- ;; Under X Window, this creates the X frame and deletes the terminal frame.
891- (unless (daemonp)
892- (frame-initialize))
894- ;; Turn off blinking cursor if so specified in X resources. This is here
895- ;; only because all other settings of no-blinking-cursor are here.
896- (unless (or noninteractive
897- emacs-basic-display
898- (and (memq window-system '(x w32 ns))
899- (not (member (x-get-resource "cursorBlink" "CursorBlink")
900- '("off" "false")))))
901- (setq no-blinking-cursor t))
903- ;; If frame was created with a menu bar, set menu-bar-mode on.
904- (unless (or noninteractive
905- emacs-basic-display
906- (and (memq initial-window-system '(x w32))
907- (<= (frame-parameter nil 'menu-bar-lines) 0)))
908- (menu-bar-mode 1))
910- (unless (or noninteractive (not (fboundp 'tool-bar-mode)))
911- ;; Set up the tool-bar. Do this even in tty frames, so that there
912- ;; is a tool-bar if Emacs later opens a graphical frame.
913- (if (or emacs-basic-display
914- (and (numberp (frame-parameter nil 'tool-bar-lines))
915- (<= (frame-parameter nil 'tool-bar-lines) 0)))
916- ;; On a graphical display with the toolbar disabled via X
917- ;; resources, set up the toolbar without enabling it.
918- (tool-bar-setup)
919- ;; Otherwise, enable tool-bar-mode.
920- (tool-bar-mode 1)))
922- ;; Re-evaluate predefined variables whose initial value depends on
923- ;; the runtime context.
924- (mapc 'custom-reevaluate-setting
925- ;; Initialize them in the same order they were loaded, in case there
926- ;; are dependencies between them.
927- (prog1 (nreverse custom-delayed-init-variables)
928- (setq custom-delayed-init-variables nil)))
930- (normal-erase-is-backspace-setup-frame)
932- ;; Register default TTY colors for the case the terminal hasn't a
933- ;; terminal init file. We do this regardles of whether the terminal
934- ;; supports colors or not and regardless the current display type,
935- ;; since users can connect to color-capable terminals and also
936- ;; switch color support on or off in mid-session by setting the
937- ;; tty-color-mode frame parameter.
938- ;; Exception: the `pc' ``window system'' has only 16 fixed colors,
939- ;; and they are already set at this point by a suitable function in
940- ;; window-system-initialization-alist.
941- (or (eq initial-window-system 'pc)
942- (tty-register-default-colors))
944- ;; Record whether the tool-bar is present before the user and site
945- ;; init files are processed. frame-notice-user-settings uses this
946- ;; to determine if the tool-bar has been disabled by the init files,
947- ;; and the frame needs to be resized.
948- (when (fboundp 'frame-notice-user-settings)
949- (let ((tool-bar-lines (or (assq 'tool-bar-lines initial-frame-alist)
950- (assq 'tool-bar-lines default-frame-alist))))
951- (setq tool-bar-originally-present
952- (and tool-bar-lines
953- (cdr tool-bar-lines)
954- (not (eq 0 (cdr tool-bar-lines)))))))
956- (let ((old-scalable-fonts-allowed scalable-fonts-allowed)
957- (old-font-list-limit font-list-limit)
958- (old-face-ignored-fonts face-ignored-fonts))
960- ;; Run the site-start library if it exists. The point of this file is
961- ;; that it is run before .emacs. There is no point in doing this after
962- ;; .emacs; that is useless.
963- ;; Note that user-init-file is nil at this point. Code that might
964- ;; be loaded from site-run-file and wants to test if -q was given
965- ;; should check init-file-user instead, since that is already set.
966- ;; See cus-edit.el for an example.
967- (if site-run-file
968- (load site-run-file t t))
970- ;; Sites should not disable this. Only individuals should disable
971- ;; the startup screen.
972- (setq inhibit-startup-screen nil)
974- ;; Warn for invalid user name.
975- (when init-file-user
976- (if (string-match "[~/:\n]" init-file-user)
977- (display-warning 'initialization
978- (format "Invalid user name %s"
979- init-file-user)
980- :error)
981- (if (file-directory-p (expand-file-name
982- ;; We don't support ~USER on MS-Windows
983- ;; and MS-DOS except for the current
984- ;; user, and always load .emacs from
985- ;; the current user's home directory
986- ;; (see below). So always check "~",
987- ;; even if invoked with "-u USER", or
988- ;; if $USER or $LOGNAME are set to
989- ;; something different.
990- (if (memq system-type '(windows-nt ms-dos))
991- "~"
992- (concat "~" init-file-user))))
993- nil
994- (display-warning 'initialization
995- (format "User %s has no home directory"
996- init-file-user)
997- :error))))
999- ;; Load that user's init file, or the default one, or none.
1000- (let (debug-on-error-from-init-file
1001- debug-on-error-should-be-set
1002- (debug-on-error-initial
1003- (if (eq init-file-debug t) 'startup init-file-debug))
1004- (orig-enable-multibyte (default-value 'enable-multibyte-characters)))
1005- (let ((debug-on-error debug-on-error-initial)
1006- ;; This function actually reads the init files.
1007- (inner
1008- (function
1009- (lambda ()
1010- (if init-file-user
1011- (let ((user-init-file-1
1012- (cond
1013- ((eq system-type 'ms-dos)
1014- (concat "~" init-file-user "/_emacs"))
1015- ((eq system-type 'windows-nt)
1016- ;; Prefer .emacs on Windows.
1017- (if (directory-files "~" nil "^\\.emacs\\(\\.elc?\\)?$")
1018- "~/.emacs"
1019- ;; Also support _emacs for compatibility.
1020- (if (directory-files "~" nil "^_emacs\\(\\.elc?\\)?$")
1021- "~/_emacs"
1022- ;; But default to .emacs if _emacs does not exist.
1023- "~/.emacs")))
1024- (t
1025- (concat "~" init-file-user "/.emacs")))))
1026- ;; This tells `load' to store the file name found
1027- ;; into user-init-file.
1028- (setq user-init-file t)
1029- (load user-init-file-1 t t)
1031- (when (eq user-init-file t)
1032- ;; If we did not find ~/.emacs, try
1033- ;; ~/.emacs.d/init.el.
1034- (let ((otherfile
1035- (expand-file-name
1036- "init"
1037- (file-name-as-directory
1038- (concat "~" init-file-user "/.emacs.d")))))
1039- (load otherfile t t)
1041- ;; If we did not find the user's init file,
1042- ;; set user-init-file conclusively.
1043- ;; Don't let it be set from default.el.
1044- (when (eq user-init-file t)
1045- (setq user-init-file user-init-file-1))))
1047- ;; If we loaded a compiled file, set
1048- ;; `user-init-file' to the source version if that
1049- ;; exists.
1050- (when (and user-init-file
1051- (equal (file-name-extension user-init-file)
1052- "elc"))
1053- (let* ((source (file-name-sans-extension user-init-file))
1054- (alt (concat source ".el")))
1055- (setq source (cond ((file-exists-p alt) alt)
1056- ((file-exists-p source) source)
1057- (t nil)))
1058- (when source
1059- (when (file-newer-than-file-p source user-init-file)
1060- (message "Warning: %s is newer than %s"
1061- source user-init-file)
1062- (sit-for 1))
1063- (setq user-init-file source))))
1065- (unless inhibit-default-init
1066- (let ((inhibit-startup-screen nil))
1067- ;; Users are supposed to be told their rights.
1068- ;; (Plus how to get help and how to undo.)
1069- ;; Don't you dare turn this off for anyone
1070- ;; except yourself.
1071- (load "default" t t)))))))))
1072- (if init-file-debug
1073- ;; Do this without a condition-case if the user wants to debug.
1074- (funcall inner)
1075- (condition-case error
1076- (progn
1077- (funcall inner)
1078- (setq init-file-had-error nil))
1079- (error
1080- (display-warning
1081- 'initialization
1082- (format "An error occurred while loading `%s':\n\n%s%s%s\n\n\
1083-To ensure normal operation, you should investigate and remove the
1084-cause of the error in your initialization file. Start Emacs with
1085-the `--debug-init' option to view a complete error backtrace."
1086- user-init-file
1087- (get (car error) 'error-message)
1088- (if (cdr error) ": " "")
1089- (mapconcat (lambda (s) (prin1-to-string s t)) (cdr error) ", "))
1090- :warning)
1091- (setq init-file-had-error t))))
1093- (if (and deactivate-mark transient-mark-mode)
1094- (with-current-buffer (window-buffer)
1095- (deactivate-mark)))
1097- ;; If the user has a file of abbrevs, read it (unless -batch).
1098- (when (and (not noninteractive)
1099- (file-exists-p abbrev-file-name)
1100- (file-readable-p abbrev-file-name))
1101- (quietly-read-abbrev-file abbrev-file-name))
1103- ;; If the abbrevs came entirely from the init file or the
1104- ;; abbrevs file, they do not need saving.
1105- (setq abbrevs-changed nil)
1107- ;; If we can tell that the init file altered debug-on-error,
1108- ;; arrange to preserve the value that it set up.
1109- (or (eq debug-on-error debug-on-error-initial)
1110- (setq debug-on-error-should-be-set t
1111- debug-on-error-from-init-file debug-on-error)))
1112- (if debug-on-error-should-be-set
1113- (setq debug-on-error debug-on-error-from-init-file))
1114- (unless (or (default-value 'enable-multibyte-characters)
1115- (eq orig-enable-multibyte (default-value
1116- 'enable-multibyte-characters)))
1117- ;; Init file changed to unibyte. Reset existing multibyte
1118- ;; buffers (probably *scratch*, *Messages*, *Minibuff-0*).
1119- ;; Arguably this should only be done if they're free of
1120- ;; multibyte characters.
1121- (mapc (lambda (buffer)
1122- (with-current-buffer buffer
1123- (if enable-multibyte-characters
1124- (set-buffer-multibyte nil))))
1125- (buffer-list))
1126- ;; Also re-set the language environment in case it was
1127- ;; originally done before unibyte was set and is sensitive to
1128- ;; unibyte (display table, terminal coding system &c).
1129- (set-language-environment current-language-environment)))
1131- ;; Do this here in case the init file sets mail-host-address.
1132- (if (equal user-mail-address "")
1133- (setq user-mail-address (or (getenv "EMAIL")
1134- (concat (user-login-name) "@"
1135- (or mail-host-address
1136- (system-name))))))
1138- ;; Originally face attributes were specified via
1139- ;; `font-lock-face-attributes'. Users then changed the default
1140- ;; face attributes by setting that variable. However, we try and
1141- ;; be back-compatible and respect its value if set except for
1142- ;; faces where M-x customize has been used to save changes for the
1143- ;; face.
1144- (when (boundp 'font-lock-face-attributes)
1145- (let ((face-attributes font-lock-face-attributes))
1146- (while face-attributes
1147- (let* ((face-attribute (pop face-attributes))
1148- (face (car face-attribute)))
1149- ;; Rustle up a `defface' SPEC from a
1150- ;; `font-lock-face-attributes' entry.
1151- (unless (get face 'saved-face)
1152- (let ((foreground (nth 1 face-attribute))
1153- (background (nth 2 face-attribute))
1154- (bold-p (nth 3 face-attribute))
1155- (italic-p (nth 4 face-attribute))
1156- (underline-p (nth 5 face-attribute))
1157- face-spec)
1158- (when foreground
1159- (setq face-spec (cons ':foreground (cons foreground face-spec))))
1160- (when background
1161- (setq face-spec (cons ':background (cons background face-spec))))
1162- (when bold-p
1163- (setq face-spec (append '(:weight bold) face-spec)))
1164- (when italic-p
1165- (setq face-spec (append '(:slant italic) face-spec)))
1166- (when underline-p
1167- (setq face-spec (append '(:underline t) face-spec)))
1168- (face-spec-set face (list (list t face-spec)) nil)))))))
1170- ;; If parameter have been changed in the init file which influence
1171- ;; face realization, clear the face cache so that new faces will
1172- ;; be realized.
1173- (unless (and (eq scalable-fonts-allowed old-scalable-fonts-allowed)
1174- (eq font-list-limit old-font-list-limit)
1175- (eq face-ignored-fonts old-face-ignored-fonts))
1176- (clear-face-cache)))
1178- (setq after-init-time (current-time))
1179- (run-hooks 'after-init-hook)
1181- ;; Decode all default-directory.
1182- (if (and (default-value 'enable-multibyte-characters) locale-coding-system)
1183- (save-excursion
1184- (dolist (elt (buffer-list))
1185- (set-buffer elt)
1186- (if default-directory
1187- (setq default-directory
1188- (decode-coding-string default-directory
1189- locale-coding-system t))))
1190- (setq command-line-default-directory
1191- (decode-coding-string command-line-default-directory
1192- locale-coding-system t))))
1194- ;; If *scratch* exists and init file didn't change its mode, initialize it.
1195- (if (get-buffer "*scratch*")
1196- (with-current-buffer "*scratch*"
1197- (if (eq major-mode 'fundamental-mode)
1198- (funcall initial-major-mode))))
1200- ;; Load library for our terminal type.
1201- ;; User init file can set term-file-prefix to nil to prevent this.
1202- (unless (or noninteractive
1203- initial-window-system)
1204- (tty-run-terminal-initialization (selected-frame)))
1206- ;; Update the out-of-memory error message based on user's key bindings
1207- ;; for save-some-buffers.
1208- (setq memory-signal-data
1209- (list 'error
1210- (substitute-command-keys "Memory exhausted--use \\[save-some-buffers] then exit and restart Emacs")))
1212- ;; Process the remaining args.
1213- (command-line-1 (cdr command-line-args))
1215- ;; If -batch, terminate after processing the command options.
1216- (if noninteractive (kill-emacs t))
1218- ;; In daemon mode, start the server to allow clients to connect.
1219- ;; This is done after loading the user's init file and after
1220- ;; processing all command line arguments to allow e.g. `server-name'
1221- ;; to be changed before the server starts.
1222- (let ((dn (daemonp)))
1223- (when dn
1224- (when (stringp dn) (setq server-name dn))
1225- (server-start)
1226- (if server-process
1227- (daemon-initialized)
1228- (if (stringp dn)
1229- (message
1230- "Unable to start daemon: Emacs server named %S already running"
1231- server-name)
1232- (message "Unable to start the daemon.\nAnother instance of Emacs is running the server, either as daemon or interactively.\nYou can use emacsclient to connect to that Emacs process."))
1233- (kill-emacs 1))))
1235- ;; Run emacs-session-restore (session management) if started by
1236- ;; the session manager and we have a session manager connection.
1237- (if (and (boundp 'x-session-previous-id)
1238- (stringp x-session-previous-id))
1239- (with-no-warnings
1240- (emacs-session-restore x-session-previous-id))))
1242-(defcustom initial-scratch-message (purecopy "\
1243-;; This buffer is for notes you don't want to save, and for Lisp evaluation.
1244-;; If you want to create a file, visit that file with C-x C-f,
1245-;; then enter the text in that file's own buffer.
1248- "Initial message displayed in *scratch* buffer at startup.
1249-If this is nil, no message will be displayed."
1250- :type '(choice (text :tag "Message")
1251- (const :tag "none" nil))
1252- :group 'initialization)
1257-;;; Fancy splash screen
1260-(defconst fancy-startup-text
1261- '((:face (variable-pitch (:foreground "red"))
1262- "Welcome to "
1263- :link ("GNU Emacs"
1264- (lambda (button) (browse-url ""))
1265- "Browse")
1266- ", one component of the "
1267- :link
1268- (lambda ()
1269- (if (eq system-type 'gnu/linux)
1270- '("GNU/Linux"
1271- (lambda (button) (browse-url ""))
1272- "Browse")
1273- '("GNU" (lambda (button) (describe-gnu-project))
1274- "Display info on the GNU project")))
1275- " operating system.\n\n"
1276- :face variable-pitch
1277- :link ("Emacs Tutorial" (lambda (button) (help-with-tutorial)))
1278- "\tLearn basic keystroke commands"
1279- (lambda ()
1280- (let* ((en "TUTORIAL")
1281- (tut (or (get-language-info current-language-environment
1282- 'tutorial)
1283- en))
1284- (title (with-temp-buffer
1285- (insert-file-contents
1286- (expand-file-name tut tutorial-directory)
1287- nil 0 256)
1288- (search-forward ".")
1289- (buffer-substring (point-min) (1- (point))))))
1290- ;; If there is a specific tutorial for the current language
1291- ;; environment and it is not English, append its title.
1292- (if (string= en tut)
1293- ""
1294- (concat " (" title ")"))))
1295- "\n"
1296- :link ("Emacs Guided Tour"
1297- (lambda (button) (browse-url ""))
1298- "Browse")
1299- "\tOverview of Emacs features at\n"
1300- :link ("View Emacs Manual" (lambda (button) (info-emacs-manual)))
1301- "\tView the Emacs manual using Info\n"
1302- :link ("Absence of Warranty" (lambda (button) (describe-no-warranty)))
1303- "\tGNU Emacs comes with "
1304- :face (variable-pitch (:slant oblique))
1306- :face variable-pitch
1307- :link ("Copying Conditions" (lambda (button) (describe-copying)))
1308- "\tConditions for redistributing and changing Emacs\n"
1309- :link ("Ordering Manuals" (lambda (button) (view-order-manuals)))
1310- "\tPurchasing printed copies of manuals\n"
1311- "\n"))
1312- "A list of texts to show in the middle part of splash screens.
1313-Each element in the list should be a list of strings or pairs
1314-`:face FACE', like `fancy-splash-insert' accepts them.")
1316-(defconst fancy-about-text
1317- '((:face (variable-pitch (:foreground "red"))
1318- "This is "
1319- :link ("GNU Emacs"
1320- (lambda (button) (browse-url ""))
1321- "Browse")
1322- ", one component of the "
1323- :link
1324- (lambda ()
1325- (if (eq system-type 'gnu/linux)
1326- '("GNU/Linux"
1327- (lambda (button) (browse-url ""))
1328- "Browse")
1329- '("GNU" (lambda (button) (describe-gnu-project))
1330- "Display info on the GNU project.")))
1331- " operating system.\n"
1332- :face (lambda ()
1333- (list 'variable-pitch
1334- (list :foreground
1335- (if (eq (frame-parameter nil 'background-mode) 'dark)
1336- "cyan" "darkblue"))))
1337- "\n"
1338- (lambda () (emacs-version))
1339- "\n"
1340- :face (variable-pitch (:height 0.8))
1341- (lambda () emacs-copyright)
1342- "\n\n"
1343- :face variable-pitch
1344- :link ("Authors"
1345- (lambda (button)
1346- (view-file (expand-file-name "AUTHORS" data-directory))
1347- (goto-char (point-min))))
1348- "\tMany people have contributed code included in GNU Emacs\n"
1349- :link ("Contributing"
1350- (lambda (button)
1351- (view-file (expand-file-name "CONTRIBUTE" data-directory))
1352- (goto-char (point-min))))
1353- "\tHow to contribute improvements to Emacs\n"
1354- "\n"
1355- :link ("GNU and Freedom" (lambda (button) (describe-gnu-project)))
1356- "\tWhy we developed GNU Emacs, and the GNU operating system\n"
1357- :link ("Absence of Warranty" (lambda (button) (describe-no-warranty)))
1358- "\tGNU Emacs comes with "
1359- :face (variable-pitch (:slant oblique))
1361- :face variable-pitch
1362- :link ("Copying Conditions" (lambda (button) (describe-copying)))
1363- "\tConditions for redistributing and changing Emacs\n"
1364- :link ("Getting New Versions" (lambda (button) (describe-distribution)))
1365- "\tHow to obtain the latest version of Emacs\n"
1366- :link ("Ordering Manuals" (lambda (button) (view-order-manuals)))
1367- "\tBuying printed manuals from the FSF\n"
1368- "\n"
1369- :link ("Emacs Tutorial" (lambda (button) (help-with-tutorial)))
1370- "\tLearn basic Emacs keystroke commands"
1371- (lambda ()
1372- (let* ((en "TUTORIAL")
1373- (tut (or (get-language-info current-language-environment
1374- 'tutorial)
1375- en))
1376- (title (with-temp-buffer
1377- (insert-file-contents
1378- (expand-file-name tut tutorial-directory)
1379- nil 0 256)
1380- (search-forward ".")
1381- (buffer-substring (point-min) (1- (point))))))
1382- ;; If there is a specific tutorial for the current language
1383- ;; environment and it is not English, append its title.
1384- (if (string= en tut)
1385- ""
1386- (concat " (" title ")"))))
1387- "\n"
1388- :link ("Emacs Guided Tour"
1389- (lambda (button) (browse-url ""))
1390- "Browse")
1391- "\tSee an overview of Emacs features at"
1392- ))
1393- "A list of texts to show in the middle part of the About screen.
1394-Each element in the list should be a list of strings or pairs
1395-`:face FACE', like `fancy-splash-insert' accepts them.")
1398-(defgroup fancy-splash-screen ()
1399- "Fancy splash screen when Emacs starts."
1400- :version "21.1"
1401- :group 'initialization)
1403-(defcustom fancy-splash-image nil
1404- "The image to show in the splash screens, or nil for defaults."
1405- :group 'fancy-splash-screen
1406- :type '(choice (const :tag "Default" nil)
1407- (file :tag "File")))
1410-(defvar splash-screen-keymap
1411- (let ((map (make-sparse-keymap)))
1412- (suppress-keymap map)
1413- (set-keymap-parent map button-buffer-map)
1414- (define-key map "\C-?" 'scroll-down)
1415- (define-key map " " 'scroll-up)
1416- (define-key map "q" 'exit-splash-screen)
1417- map)
1418- "Keymap for splash screen buffer.")
1420-;; These are temporary storage areas for the splash screen display.
1422-(defun fancy-splash-insert (&rest args)
1423- "Insert text into the current buffer, with faces.
1424-Arguments from ARGS should be either strings; functions called
1425-with no args that return a string; pairs `:face FACE', where FACE
1426-is a face specification usable with `put-text-property'; or pairs
1427-`:link LINK' where LINK is a list of arguments to pass to
1428-`insert-button', of the form (LABEL ACTION [HELP-ECHO]), which
1429-specifies the button's label, `action' property and help-echo string.
1430-FACE and LINK can also be functions, which are evaluated to obtain
1431-a face or button specification."
1432- (let ((current-face nil))
1433- (while args
1434- (cond ((eq (car args) :face)
1435- (setq args (cdr args) current-face (car args))
1436- (if (functionp current-face)
1437- (setq current-face (funcall current-face))))
1438- ((eq (car args) :link)
1439- (setq args (cdr args))
1440- (let ((spec (car args)))
1441- (if (functionp spec)
1442- (setq spec (funcall spec)))
1443- (insert-button (car spec)
1444- 'face (list 'link current-face)
1445- 'action (cadr spec)
1446- 'help-echo (concat "mouse-2, RET: "
1447- (or (nth 2 spec)
1448- "Follow this link"))
1449- 'follow-link t)))
1450- (t (insert (propertize (let ((it (car args)))
1451- (if (functionp it)
1452- (funcall it)
1453- it))
1454- 'face current-face
1455- 'help-echo (startup-echo-area-message)))))
1456- (setq args (cdr args)))))
1458-(declare-function image-size "image.c" (spec &optional pixels frame))
1460-(defun fancy-splash-head ()
1461- "Insert the head part of the splash screen into the current buffer."
1462- (let* ((image-file (cond ((stringp fancy-splash-image)
1463- fancy-splash-image)
1464- ((display-color-p)
1465- (cond ((<= (display-planes) 8)
1466- (if (image-type-available-p 'xpm)
1467- "splash.xpm"
1468- "splash.pbm"))
1469- ((image-type-available-p 'svg)
1470- "splash.svg")
1471- ((image-type-available-p 'png)
1472- "splash.png")
1473- ((image-type-available-p 'xpm)
1474- "splash.xpm")
1475- (t "splash.pbm")))
1476- (t "splash.pbm")))
1477- (img (create-image image-file))
1478- (image-width (and img (car (image-size img))))
1479- (window-width (window-width (selected-window))))
1480- (when img
1481- (when (> window-width image-width)
1482- ;; Center the image in the window.
1483- (insert (propertize " " 'display
1484- `(space :align-to (+ center (-0.5 . ,img)))))
1486- ;; Change the color of the XPM version of the splash image
1487- ;; so that it is visible with a dark frame background.
1488- (when (and (memq 'xpm img)
1489- (eq (frame-parameter nil 'background-mode) 'dark))
1490- (setq img (append img '(:color-symbols (("#000000" . "gray30"))))))
1492- ;; Insert the image with a help-echo and a link.
1493- (make-button (prog1 (point) (insert-image img)) (point)
1494- 'face 'default
1495- 'help-echo "mouse-2, RET: Browse"
1496- 'action (lambda (button) (browse-url ""))
1497- 'follow-link t)
1498- (insert "\n\n")))))
1500-(defun fancy-startup-tail (&optional concise)
1501- "Insert the tail part of the splash screen into the current buffer."
1502- (let ((fg (if (eq (frame-parameter nil 'background-mode) 'dark)
1503- "cyan" "darkblue")))
1504- (unless concise
1505- (fancy-splash-insert
1506- :face 'variable-pitch
1507- "\nTo start... "
1508- :link '("Open a File"
1509- (lambda (button) (call-interactively 'find-file))
1510- "Specify a new file's name, to edit the file")
1511- " "
1512- :link '("Open Home Directory"
1513- (lambda (button) (dired "~"))
1514- "Open your home directory, to operate on its files")
1515- " "
1516- :link '("Customize Startup"
1517- (lambda (button) (customize-group 'initialization))
1518- "Change initialization settings including this screen")
1519- "\n"))
1520- (fancy-splash-insert
1521- :face 'variable-pitch "To quit a partially entered command, type "
1522- :face 'default "Control-g"
1523- :face 'variable-pitch ".\n")
1524- (fancy-splash-insert :face `(variable-pitch (:foreground ,fg))
1525- "\nThis is "
1526- (emacs-version)
1527- "\n"
1528- :face '(variable-pitch (:height 0.8))
1529- emacs-copyright
1530- "\n")
1531- (and auto-save-list-file-prefix
1532- ;; Don't signal an error if the
1533- ;; directory for auto-save-list files
1534- ;; does not yet exist.
1535- (file-directory-p (file-name-directory
1536- auto-save-list-file-prefix))
1537- (directory-files
1538- (file-name-directory auto-save-list-file-prefix)
1539- nil
1540- (concat "\\`"
1541- (regexp-quote (file-name-nondirectory
1542- auto-save-list-file-prefix)))
1543- t)
1544- (fancy-splash-insert :face '(variable-pitch (:foreground "red"))
1545- "\nIf an Emacs session crashed recently, "
1546- "type "
1547- :face '(fixed-pitch :foreground "red")
1548- "Meta-x recover-session RET"
1549- :face '(variable-pitch (:foreground "red"))
1550- "\nto recover"
1551- " the files you were editing."))
1553- (when concise
1554- (fancy-splash-insert
1555- :face 'variable-pitch "\n"
1556- :link '("Dismiss this startup screen"
1557- (lambda (button)
1558- (when startup-screen-inhibit-startup-screen
1559- (customize-set-variable 'inhibit-startup-screen t)
1560- (customize-mark-to-save 'inhibit-startup-screen)
1561- (custom-save-all))
1562- (let ((w (get-buffer-window "*GNU Emacs*")))
1563- (and w (not (one-window-p)) (delete-window w)))
1564- (kill-buffer "*GNU Emacs*")))
1565- " ")
1566- (when (or user-init-file custom-file)
1567- (let ((checked (create-image "\300\300\141\143\067\076\034\030"
1568- 'xbm t :width 8 :height 8 :background "grey75"
1569- :foreground "black" :relief -2 :ascent 'center))
1570- (unchecked (create-image (make-string 8 0)
1571- 'xbm t :width 8 :height 8 :background "grey75"
1572- :foreground "black" :relief -2 :ascent 'center)))
1573- (insert-button
1574- " " :on-glyph checked :off-glyph unchecked 'checked nil
1575- 'display unchecked 'follow-link t
1576- 'action (lambda (button)
1577- (if (overlay-get button 'checked)
1578- (progn (overlay-put button 'checked nil)
1579- (overlay-put button 'display (overlay-get button :off-glyph))
1580- (setq startup-screen-inhibit-startup-screen nil))
1581- (overlay-put button 'checked t)
1582- (overlay-put button 'display (overlay-get button :on-glyph))
1583- (setq startup-screen-inhibit-startup-screen t)))))
1584- (fancy-splash-insert :face '(variable-pitch (:height 0.9))
1585- " Never show it again.")))))
1587-(defun exit-splash-screen ()
1588- "Stop displaying the splash screen buffer."
1589- (interactive)
1590- (quit-window t))
1592-(defun fancy-startup-screen (&optional concise)
1593- "Display fancy startup screen.
1594-If CONCISE is non-nil, display a concise version of the
1595-splash screen in another window."
1596- (let ((splash-buffer (get-buffer-create "*GNU Emacs*")))
1597- (with-current-buffer splash-buffer
1598- (let ((inhibit-read-only t))
1599- (erase-buffer)
1600- (setq default-directory command-line-default-directory)
1601- (make-local-variable 'startup-screen-inhibit-startup-screen)
1602- (if pure-space-overflow
1603- (insert pure-space-overflow-message))
1604- (unless concise
1605- (fancy-splash-head))
1606- (dolist (text fancy-startup-text)
1607- (apply #'fancy-splash-insert text)
1608- (insert "\n"))
1609- (skip-chars-backward "\n")
1610- (delete-region (point) (point-max))
1611- (insert "\n")
1612- (fancy-startup-tail concise))
1613- (use-local-map splash-screen-keymap)
1614- (setq tab-width 22
1615- buffer-read-only t)
1616- (set-buffer-modified-p nil)
1617- (if (and view-read-only (not view-mode))
1618- (view-mode-enter nil 'kill-buffer))
1619- (goto-char (point-min))
1620- (forward-line (if concise 2 4)))
1621- (if concise
1622- (progn
1623- (display-buffer splash-buffer)
1624- ;; If the splash screen is in a split window, fit it.
1625- (let ((window (get-buffer-window splash-buffer t)))
1626- (or (null window)
1627- (eq window (selected-window))
1628- (eq window (next-window window))
1629- (fit-window-to-buffer window))))
1630- (switch-to-buffer splash-buffer))))
1632-(defun fancy-about-screen ()
1633- "Display fancy About screen."
1634- (let ((frame (fancy-splash-frame)))
1635- (save-selected-window
1636- (select-frame frame)
1637- (switch-to-buffer "*About GNU Emacs*")
1638- (setq buffer-undo-list t
1639- mode-line-format
1640- (concat "----"
1641- (propertize "%b" 'face 'mode-line-buffer-id)
1642- "%-"))
1643- (let ((inhibit-read-only t))
1644- (erase-buffer)
1645- (if pure-space-overflow
1646- (insert pure-space-overflow-message))
1647- (fancy-splash-head)
1648- (dolist (text fancy-about-text)
1649- (apply #'fancy-splash-insert text)
1650- (insert "\n"))
1651- (set-buffer-modified-p nil)
1652- (goto-char (point-min))
1653- (force-mode-line-update))
1654- (use-local-map splash-screen-keymap)
1655- (setq tab-width 22)
1656- (message "%s" (startup-echo-area-message))
1657- (setq buffer-read-only t)
1658- (goto-char (point-min))
1659- (forward-line 3))))
1661-(defun fancy-splash-frame ()
1662- "Return the frame to use for the fancy splash screen.
1663-Returning non-nil does not mean we should necessarily
1664-use the fancy splash screen, but if we do use it,
1665-we put it on this frame."
1666- (let (chosen-frame)
1667- (dolist (frame (append (frame-list) (list (selected-frame))))
1668- (if (and (frame-visible-p frame)
1669- (not (window-minibuffer-p (frame-selected-window frame))))
1670- (setq chosen-frame frame)))
1671- chosen-frame))
1673-(defun use-fancy-splash-screens-p ()
1674- "Return t if fancy splash screens should be used."
1675- (when (and (display-graphic-p)
1676- (or (and (display-color-p)
1677- (image-type-available-p 'xpm))
1678- (image-type-available-p 'pbm)))
1679- (let ((frame (fancy-splash-frame)))
1680- (when frame
1681- (let* ((img (create-image (or fancy-splash-image
1682- (if (and (display-color-p)
1683- (image-type-available-p 'xpm))
1684- "splash.xpm" "splash.pbm"))))
1685- (image-height (and img (cdr (image-size img nil frame))))
1686- ;; We test frame-height so that, if the frame is split
1687- ;; by displaying a warning, that doesn't cause the normal
1688- ;; splash screen to be used.
1689- (frame-height (1- (frame-height frame))))
1690- (> frame-height (+ image-height 19)))))))
1693-(defun normal-splash-screen (&optional startup concise)
1694- "Display non-graphic splash screen.
1695-If optional argument STARTUP is non-nil, display the startup screen
1696-after Emacs starts. If STARTUP is nil, display the About screen.
1697-If CONCISE is non-nil, display a concise version of the
1698-splash screen in another window."
1699- (let ((splash-buffer (get-buffer-create "*About GNU Emacs*")))
1700- (with-current-buffer splash-buffer
1701- (setq buffer-read-only nil)
1702- (erase-buffer)
1703- (setq default-directory command-line-default-directory)
1704- (set (make-local-variable 'tab-width) 8)
1705- (if (not startup)
1706- (set (make-local-variable 'mode-line-format)
1707- (propertize "---- %b %-" 'face 'mode-line-buffer-id)))
1709- (if pure-space-overflow
1710- (insert pure-space-overflow-message))
1712- ;; The convention for this piece of code is that
1713- ;; each piece of output starts with one or two newlines
1714- ;; and does not end with any newlines.
1715- (insert (if startup "Welcome to GNU Emacs" "This is GNU Emacs"))
1716- (insert
1717- (if (eq system-type 'gnu/linux)
1718- ", one component of the GNU/Linux operating system.\n"
1719- ", a part of the GNU operating system.\n"))
1721- (if startup
1722- (if (display-mouse-p)
1723- ;; The user can use the mouse to activate menus
1724- ;; so give help in terms of menu items.
1725- (normal-mouse-startup-screen)
1727- ;; No mouse menus, so give help using kbd commands.
1728- (normal-no-mouse-startup-screen))
1730- (normal-about-screen))
1732- ;; The rest of the startup screen is the same on all
1733- ;; kinds of terminals.
1735- ;; Give information on recovering, if there was a crash.
1736- (and startup
1737- auto-save-list-file-prefix
1738- ;; Don't signal an error if the
1739- ;; directory for auto-save-list files
1740- ;; does not yet exist.
1741- (file-directory-p (file-name-directory
1742- auto-save-list-file-prefix))
1743- (directory-files
1744- (file-name-directory auto-save-list-file-prefix)
1745- nil
1746- (concat "\\`"
1747- (regexp-quote (file-name-nondirectory
1748- auto-save-list-file-prefix)))
1749- t)
1750- (insert "\n\nIf an Emacs session crashed recently, "
1751- "type Meta-x recover-session RET\nto recover"
1752- " the files you were editing.\n"))
1754- (use-local-map splash-screen-keymap)
1756- ;; Display the input that we set up in the buffer.
1757- (set-buffer-modified-p nil)
1758- (setq buffer-read-only t)
1759- (if (and view-read-only (not view-mode))
1760- (view-mode-enter nil 'kill-buffer))
1761- (if startup (rename-buffer "*GNU Emacs*" t))
1762- (goto-char (point-min)))
1763- (if concise
1764- (display-buffer splash-buffer)
1765- (switch-to-buffer splash-buffer))))
1767-(defun normal-mouse-startup-screen ()
1768- ;; The user can use the mouse to activate menus
1769- ;; so give help in terms of menu items.
1770- (insert "\
1771-To follow a link, click Mouse-1 on it, or move to it and type RET.
1772-To quit a partially entered command, type Control-g.\n")
1774- (insert "\nImportant Help menu items:\n")
1775- (insert-button "Emacs Tutorial"
1776- 'action (lambda (button) (help-with-tutorial))
1777- 'follow-link t)
1778- (insert "\t\tLearn basic Emacs keystroke commands\n")
1779- (insert-button "Read the Emacs Manual"
1780- 'action (lambda (button) (info-emacs-manual))
1781- 'follow-link t)
1782- (insert "\tView the Emacs manual using Info\n")
1783- (insert-button "\(Non)Warranty"
1784- 'action (lambda (button) (describe-no-warranty))
1785- 'follow-link t)
1786- (insert "\t\tGNU Emacs comes with ABSOLUTELY NO WARRANTY\n")
1787- (insert-button "Copying Conditions"
1788- 'action (lambda (button) (describe-copying))
1789- 'follow-link t)
1790- (insert "\tConditions for redistributing and changing Emacs\n")
1791- (insert-button "More Manuals / Ordering Manuals"
1792- 'action (lambda (button) (view-order-manuals))
1793- 'follow-link t)
1794- (insert " How to order printed manuals from the FSF\n")
1796- (insert "\nUseful tasks:\n")
1797- (insert-button "Visit New File"
1798- 'action (lambda (button) (call-interactively 'find-file))
1799- 'follow-link t)
1800- (insert "\t\tSpecify a new file's name, to edit the file\n")
1801- (insert-button "Open Home Directory"
1802- 'action (lambda (button) (dired "~"))
1803- 'follow-link t)
1804- (insert "\tOpen your home directory, to operate on its files\n")
1805- (insert-button "Customize Startup"
1806- 'action (lambda (button) (customize-group 'initialization))
1807- 'follow-link t)
1808- (insert "\tChange initialization settings including this screen\n")
1810- (insert "\n" (emacs-version)
1811- "\n" emacs-copyright))
1813-;; No mouse menus, so give help using kbd commands.
1814-(defun normal-no-mouse-startup-screen ()
1816- ;; If keys have their default meanings,
1817- ;; use precomputed string to save lots of time.
1818- (let* ((c-h-accessible
1819- ;; If normal-erase-is-backspace is used on a tty, there's
1820- ;; no way to invoke C-h and you have to use F1 instead.
1821- (or (not (char-table-p keyboard-translate-table))
1822- (eq (aref keyboard-translate-table ?\C-h) ?\C-h)))
1823- (minor-mode-overriding-map-alist
1824- (cons (cons (not c-h-accessible)
1825- ;; If C-h can't be invoked, temporarily disable its
1826- ;; binding, so where-is uses alternative bindings.
1827- (let ((map (make-sparse-keymap)))
1828- (define-key map [?\C-h] 'undefined)
1829- map))
1830- minor-mode-overriding-map-alist)))
1832- (insert (format "\nGet help\t %s\n"
1833- (let ((where (where-is-internal 'help-command nil t)))
1834- (cond
1835- ((equal where [?\C-h])
1836- "C-h (Hold down CTRL and press h)")
1837- (where (key-description where))
1838- (t "M-x help")))))
1839- (insert-button "Emacs manual"
1840- 'action (lambda (button) (info-emacs-manual))
1841- 'follow-link t)
1842- (insert (substitute-command-keys"\t \\[info-emacs-manual]\t"))
1843- (insert-button "Browse manuals"
1844- 'action (lambda (button) (Info-directory))
1845- 'follow-link t)
1846- (insert (substitute-command-keys "\t \\[info]\n"))
1847- (insert-button "Emacs tutorial"
1848- 'action (lambda (button) (help-with-tutorial))
1849- 'follow-link t)
1850- (insert (substitute-command-keys
1851- "\t \\[help-with-tutorial]\tUndo changes\t \\[undo]\n"))
1852- (insert-button "Buy manuals"
1853- 'action (lambda (button) (view-order-manuals))
1854- 'follow-link t)
1855- (insert (substitute-command-keys
1856- "\t \\[view-order-manuals]\tExit Emacs\t \\[save-buffers-kill-terminal]")))
1858- ;; Say how to use the menu bar with the keyboard.
1859- (insert "\n")
1860- (insert-button "Activate menubar"
1861- 'action (lambda (button) (tmm-menubar))
1862- 'follow-link t)
1863- (if (and (eq (key-binding "\M-`") 'tmm-menubar)
1864- (eq (key-binding [f10]) 'tmm-menubar))
1865- (insert " F10 or ESC ` or M-`")
1866- (insert (substitute-command-keys " \\[tmm-menubar]")))
1868- ;; Many users seem to have problems with these.
1869- (insert "
1870-\(`C-' means use the CTRL key. `M-' means use the Meta (or Alt) key.
1871-If you have no Meta key, you may instead type ESC followed by the character.)")
1873- ;; Insert links to useful tasks
1874- (insert "\nUseful tasks:\n")
1876- (insert-button "Visit New File"
1877- 'action (lambda (button) (call-interactively 'find-file))
1878- 'follow-link t)
1879- (insert "\t\t\t")
1880- (insert-button "Open Home Directory"
1881- 'action (lambda (button) (dired "~"))
1882- 'follow-link t)
1883- (insert "\n")
1885- (insert-button "Customize Startup"
1886- 'action (lambda (button) (customize-group 'initialization))
1887- 'follow-link t)
1888- (insert "\t\t")
1889- (insert-button "Open *scratch* buffer"
1890- 'action (lambda (button) (switch-to-buffer
1891- (get-buffer-create "*scratch*")))
1892- 'follow-link t)
1893- (insert "\n")
1894- (insert "\n" (emacs-version) "\n" emacs-copyright "\n")
1896- (if (and (eq (key-binding "\C-h\C-c") 'describe-copying)
1897- (eq (key-binding "\C-h\C-d") 'describe-distribution)
1898- (eq (key-binding "\C-h\C-w") 'describe-no-warranty))
1899- (progn
1900- (insert
1901- "
1902-GNU Emacs comes with ABSOLUTELY NO WARRANTY; type C-h C-w for ")
1903- (insert-button "full details"
1904- 'action (lambda (button) (describe-no-warranty))
1905- 'follow-link t)
1906- (insert ".
1907-Emacs is Free Software--Free as in Freedom--so you can redistribute copies
1908-of Emacs and modify it; type C-h C-c to see ")
1909- (insert-button "the conditions"
1910- 'action (lambda (button) (describe-copying))
1911- 'follow-link t)
1912- (insert ".
1913-Type C-h C-d for information on ")
1914- (insert-button "getting the latest version"
1915- 'action (lambda (button) (describe-distribution))
1916- 'follow-link t)
1917- (insert "."))
1918- (insert (substitute-command-keys
1919- "
1920-GNU Emacs comes with ABSOLUTELY NO WARRANTY; type \\[describe-no-warranty] for "))
1921- (insert-button "full details"
1922- 'action (lambda (button) (describe-no-warranty))
1923- 'follow-link t)
1924- (insert (substitute-command-keys ".
1925-Emacs is Free Software--Free as in Freedom--so you can redistribute copies
1926-of Emacs and modify it; type \\[describe-copying] to see "))
1927- (insert-button "the conditions"
1928- 'action (lambda (button) (describe-copying))
1929- 'follow-link t)
1930- (insert (substitute-command-keys".
1931-Type \\[describe-distribution] for information on "))
1932- (insert-button "getting the latest version"
1933- 'action (lambda (button) (describe-distribution))
1934- 'follow-link t)
1935- (insert ".")))
1937-(defun normal-about-screen ()
1938- (insert "\n" (emacs-version) "\n" emacs-copyright "\n\n")
1940- (insert "To follow a link, click Mouse-1 on it, or move to it and type RET.\n\n")
1942- (insert-button "Authors"
1943- 'action
1944- (lambda (button)
1945- (view-file (expand-file-name "AUTHORS" data-directory))
1946- (goto-char (point-min)))
1947- 'follow-link t)
1948- (insert "\t\tMany people have contributed code included in GNU Emacs\n")
1950- (insert-button "Contributing"
1951- 'action
1952- (lambda (button)
1953- (view-file (expand-file-name "CONTRIBUTE" data-directory))
1954- (goto-char (point-min)))
1955- 'follow-link t)
1956- (insert "\tHow to contribute improvements to Emacs\n\n")
1958- (insert-button "GNU and Freedom"
1959- 'action (lambda (button) (describe-gnu-project))
1960- 'follow-link t)
1961- (insert "\t\tWhy we developed GNU Emacs and the GNU system\n")
1963- (insert-button "Absence of Warranty"
1964- 'action (lambda (button) (describe-no-warranty))
1965- 'follow-link t)
1966- (insert "\tGNU Emacs comes with ABSOLUTELY NO WARRANTY\n")
1968- (insert-button "Copying Conditions"
1969- 'action (lambda (button) (describe-copying))
1970- 'follow-link t)
1971- (insert "\tConditions for redistributing and changing Emacs\n")
1973- (insert-button "Getting New Versions"
1974- 'action (lambda (button) (describe-distribution))
1975- 'follow-link t)
1976- (insert "\tHow to get the latest version of GNU Emacs\n")
1978- (insert-button "More Manuals / Ordering Manuals"
1979- 'action (lambda (button) (view-order-manuals))
1980- 'follow-link t)
1981- (insert "\tBuying printed manuals from the FSF\n"))
1983-(defun startup-echo-area-message ()
1984- (cond ((daemonp)
1985- "Starting Emacs daemon.")
1986- ((eq (key-binding "\C-h\C-a") 'about-emacs)
1987- "For information about GNU Emacs and the GNU system, type C-h C-a.")
1988- (t
1989- (substitute-command-keys
1990- "For information about GNU Emacs and the GNU system, type \
1993-(defun display-startup-echo-area-message ()
1994- (let ((resize-mini-windows t))
1995- (or noninteractive ;(input-pending-p) init-file-had-error
1996- ;; t if the init file says to inhibit the echo area startup message.
1997- (and inhibit-startup-echo-area-message
1998- user-init-file
1999- (or (and (get 'inhibit-startup-echo-area-message 'saved-value)
2000- (equal inhibit-startup-echo-area-message
2001- (if (equal init-file-user "")
2002- (user-login-name)
2003- init-file-user)))
2004- ;; Wasn't set with custom; see if .emacs has a setq.
2005- (let ((buffer (get-buffer-create " *temp*")))
2006- (prog1
2007- (condition-case nil
2008- (with-current-buffer buffer
2009- (insert-file-contents user-init-file)
2010- (re-search-forward
2011- (concat
2012- "([ \t\n]*setq[ \t\n]+"
2013- "inhibit-startup-echo-area-message[ \t\n]+"
2014- (regexp-quote
2015- (prin1-to-string
2016- (if (equal init-file-user "")
2017- (user-login-name)
2018- init-file-user)))
2019- "[ \t\n]*)")
2020- nil t))
2021- (error nil))
2022- (kill-buffer buffer)))))
2023- (message "%s" (startup-echo-area-message)))))
2025-(defun display-startup-screen (&optional concise)
2026- "Display startup screen according to display.
2027-A fancy display is used on graphic displays, normal otherwise.
2029-If CONCISE is non-nil, display a concise version of the startup
2031- ;; Prevent recursive calls from server-process-filter.
2032- (if (not (get-buffer "*GNU Emacs*"))
2033- (if (use-fancy-splash-screens-p)
2034- (fancy-startup-screen concise)
2035- (normal-splash-screen t concise))))
2037-(defun display-about-screen ()
2038- "Display the *About GNU Emacs* buffer.
2039-A fancy display is used on graphic displays, normal otherwise."
2040- (interactive)
2041- (if (use-fancy-splash-screens-p)
2042- (fancy-about-screen)
2043- (normal-splash-screen nil)))
2045-(defalias 'about-emacs 'display-about-screen)
2046-(defalias 'display-splash-screen 'display-startup-screen)
2048-(defun command-line-1 (command-line-args-left)
2049- (display-startup-echo-area-message)
2050- (when (and pure-space-overflow
2051- (not noninteractive))
2052- (display-warning
2053- 'initialization
2054- "Building Emacs overflowed pure space.\
2055- (See the node Pure Storage in the Lisp manual for details.)"
2056- :warning))
2058- (let ((file-count 0)
2059- first-file-buffer)
2060- (when command-line-args-left
2061- ;; We have command args; process them.
2062- ;; Note that any local variables in this function affect the
2063- ;; ability of -f batch-byte-compile to detect free variables.
2064- ;; So we give some of them with common names a cl1- prefix.
2065- (let ((cl1-dir command-line-default-directory)
2066- cl1-tem
2067- ;; This approach loses for "-batch -L DIR --eval "(require foo)",
2068- ;; if foo is intended to be found in DIR.
2069- ;;
2070- ;; ;; The directories listed in --directory/-L options will *appear*
2071- ;; ;; at the front of `load-path' in the order they appear on the
2072- ;; ;; command-line. We cannot do this by *placing* them at the front
2073- ;; ;; in the order they appear, so we need this variable to hold them,
2074- ;; ;; temporarily.
2075- ;; extra-load-path
2076- ;;
2077- ;; To DTRT we keep track of the splice point and modify `load-path'
2078- ;; straight away upon any --directory/-L option.
2079- splice
2080- just-files ;; t if this follows the magic -- option.
2081- ;; This includes our standard options' long versions
2082- ;; and long versions of what's on command-switch-alist.
2083- (longopts
2084- (append '("--funcall" "--load" "--insert" "--kill"
2085- "--directory" "--eval" "--execute" "--no-splash"
2086- "--find-file" "--visit" "--file" "--no-desktop")
2087- (mapcar (lambda (elt) (concat "-" (car elt)))
2088- command-switch-alist)))
2089- (cl1-line 0)
2090- (cl1-column 0))
2092- ;; Add the long X options to longopts.
2093- (dolist (tem command-line-x-option-alist)
2094- (if (string-match "^--" (car tem))
2095- (push (car tem) longopts)))
2097- ;; Add the long NS options to longopts.
2098- (dolist (tem command-line-ns-option-alist)
2099- (if (string-match "^--" (car tem))
2100- (push (list (car tem)) longopts)))
2102- ;; Loop, processing options.
2103- (while command-line-args-left
2104- (let* ((argi (car command-line-args-left))
2105- (orig-argi argi)
2106- argval completion)
2107- (setq command-line-args-left (cdr command-line-args-left))
2109- ;; Do preliminary decoding of the option.
2110- (if just-files
2111- ;; After --, don't look for options; treat all args as files.
2112- (setq argi "")
2113- ;; Convert long options to ordinary options
2114- ;; and separate out an attached option argument into argval.
2115- (when (string-match "\\`\\(--[^=]*\\)=" argi)
2116- (setq argval (substring argi (match-end 0))
2117- argi (match-string 1 argi)))
2118- (when (string-match "\\`--?[^-]" orig-argi)
2119- (setq completion (try-completion argi longopts))
2120- (if (eq completion t)
2121- (setq argi (substring argi 1))
2122- (if (stringp completion)
2123- (let ((elt (member completion longopts)))
2124- (or elt
2125- (error "Option `%s' is ambiguous" argi))
2126- (setq argi (substring (car elt) 1)))
2127- (setq argval nil
2128- argi orig-argi)))))
2130- ;; Execute the option.
2131- (cond ((setq cl1-tem (assoc argi command-switch-alist))
2132- (if argval
2133- (let ((command-line-args-left
2134- (cons argval command-line-args-left)))
2135- (funcall (cdr cl1-tem) argi))
2136- (funcall (cdr cl1-tem) argi)))
2138- ((equal argi "-no-splash")
2139- (setq inhibit-startup-screen t))
2141- ((member argi '("-f" ; what the manual claims
2142- "-funcall"
2143- "-e")) ; what the source used to say
2144- (setq inhibit-startup-screen t)
2145- (setq cl1-tem (intern (or argval (pop command-line-args-left))))
2146- (if (commandp cl1-tem)
2147- (command-execute cl1-tem)
2148- (funcall cl1-tem)))
2150- ((member argi '("-eval" "-execute"))
2151- (setq inhibit-startup-screen t)
2152- (eval (read (or argval (pop command-line-args-left)))))
2154- ((member argi '("-L" "-directory"))
2155- (setq cl1-tem (expand-file-name
2156- (command-line-normalize-file-name
2157- (or argval (pop command-line-args-left)))))
2158- (cond (splice (setcdr splice (cons cl1-tem (cdr splice)))
2159- (setq splice (cdr splice)))
2160- (t (setq load-path (cons cl1-tem load-path)
2161- splice load-path))))
2163- ((member argi '("-l" "-load"))
2164- (let* ((file (command-line-normalize-file-name
2165- (or argval (pop command-line-args-left))))
2166- ;; Take file from default dir if it exists there;
2167- ;; otherwise let `load' search for it.
2168- (file-ex (expand-file-name file)))
2169- (when (file-exists-p file-ex)
2170- (setq file file-ex))
2171- (load file nil t)))
2173- ;; This is used to handle -script. It's not clear
2174- ;; we need to document it (it is totally internal).
2175- ((member argi '("-scriptload"))
2176- (let* ((file (command-line-normalize-file-name
2177- (or argval (pop command-line-args-left))))
2178- ;; Take file from default dir.
2179- (file-ex (expand-file-name file)))
2180- (load file-ex nil t t)))
2182- ((equal argi "-insert")
2183- (setq inhibit-startup-screen t)
2184- (setq cl1-tem (or argval (pop command-line-args-left)))
2185- (or (stringp cl1-tem)
2186- (error "File name omitted from `-insert' option"))
2187- (insert-file-contents (command-line-normalize-file-name cl1-tem)))
2189- ((equal argi "-kill")
2190- (kill-emacs t))
2192- ;; This is for when they use --no-desktop with -q, or
2193- ;; don't load Desktop in their .emacs. If desktop.el
2194- ;; _is_ loaded, it will handle this switch, and we
2195- ;; won't see it by the time we get here.
2196- ((equal argi "-no-desktop")
2197- (message "\"--no-desktop\" ignored because the Desktop package is not loaded"))
2199- ((string-match "^\\+[0-9]+\\'" argi)
2200- (setq cl1-line (string-to-number argi)))
2202- ((string-match "^\\+\\([0-9]+\\):\\([0-9]+\\)\\'" argi)
2203- (setq cl1-line (string-to-number (match-string 1 argi))
2204- cl1-column (string-to-number (match-string 2 argi))))
2206- ((setq cl1-tem (assoc orig-argi command-line-x-option-alist))
2207- ;; Ignore X-windows options and their args if not using X.
2208- (setq command-line-args-left
2209- (nthcdr (nth 1 cl1-tem) command-line-args-left)))
2211- ((setq cl1-tem (assoc orig-argi command-line-ns-option-alist))
2212- ;; Ignore NS-windows options and their args if not using NS.
2213- (setq command-line-args-left
2214- (nthcdr (nth 1 cl1-tem) command-line-args-left)))
2216- ((member argi '("-find-file" "-file" "-visit"))
2217- (setq inhibit-startup-screen t)
2218- ;; An explicit option to specify visiting a file.
2219- (setq cl1-tem (or argval (pop command-line-args-left)))
2220- (unless (stringp cl1-tem)
2221- (error "File name omitted from `%s' option" argi))
2222- (setq file-count (1+ file-count))
2223- (let ((file (expand-file-name
2224- (command-line-normalize-file-name cl1-tem)
2225- cl1-dir)))
2226- (if (= file-count 1)
2227- (setq first-file-buffer (find-file file))
2228- (find-file-other-window file)))
2229- (unless (zerop cl1-line)
2230- (goto-char (point-min))
2231- (forward-line (1- cl1-line)))
2232- (setq cl1-line 0)
2233- (unless (< cl1-column 1)
2234- (move-to-column (1- cl1-column)))
2235- (setq cl1-column 0))
2237- ((equal argi "--")
2238- (setq just-files t))
2239- (t
2240- ;; We have almost exhausted our options. See if the
2241- ;; user has made any other command-line options available
2242- (let ((hooks command-line-functions)
2243- (did-hook nil))
2244- (while (and hooks
2245- (not (setq did-hook (funcall (car hooks)))))
2246- (setq hooks (cdr hooks)))
2247- (if (not did-hook)
2248- ;; Presume that the argument is a file name.
2249- (progn
2250- (if (string-match "\\`-" argi)
2251- (error "Unknown option `%s'" argi))
2252- (unless initial-window-system
2253- (setq inhibit-startup-screen t))
2254- (setq file-count (1+ file-count))
2255- (let ((file
2256- (expand-file-name
2257- (command-line-normalize-file-name orig-argi)
2258- cl1-dir)))
2259- (cond ((= file-count 1)
2260- (setq first-file-buffer (find-file file)))
2261- (inhibit-startup-screen
2262- (find-file-other-window file))
2263- (t (find-file file))))
2264- (unless (zerop cl1-line)
2265- (goto-char (point-min))
2266- (forward-line (1- cl1-line)))
2267- (setq cl1-line 0)
2268- (unless (< cl1-column 1)
2269- (move-to-column (1- cl1-column)))
2270- (setq cl1-column 0))))))
2271- ;; In unusual circumstances, the execution of Lisp code due
2272- ;; to command-line options can cause the last visible frame
2273- ;; to be deleted. In this case, kill emacs to avoid an
2274- ;; abort later.
2275- (unless (frame-live-p (selected-frame)) (kill-emacs nil))))))
2277- (when initial-buffer-choice
2278- (cond ((eq initial-buffer-choice t)
2279- (switch-to-buffer (get-buffer-create "*scratch*")))
2280- ((stringp initial-buffer-choice)
2281- (find-file initial-buffer-choice))))
2283- ;; If *scratch* exists and is empty, insert initial-scratch-message.
2284- (and initial-scratch-message
2285- (get-buffer "*scratch*")
2286- (with-current-buffer "*scratch*"
2287- (when (zerop (buffer-size))
2288- (insert initial-scratch-message)
2289- (set-buffer-modified-p nil))))
2291- (if (or inhibit-startup-screen
2292- initial-buffer-choice
2293- noninteractive
2294- inhibit-x-resources)
2296- ;; Not displaying a startup screen. If 3 or more files
2297- ;; visited, and not all visible, show user what they all are.
2298- (and (> file-count 2)
2299- (not noninteractive)
2300- (not inhibit-startup-buffer-menu)
2301- (or (get-buffer-window first-file-buffer)
2302- (list-buffers)))
2304- ;; Display a startup screen, after some preparations.
2306- ;; If there are no switches to process, we might as well
2307- ;; run this hook now, and there may be some need to do it
2308- ;; before doing any output.
2309- (run-hooks 'emacs-startup-hook)
2310- (and term-setup-hook
2311- (run-hooks 'term-setup-hook))
2312- (setq inhibit-startup-hooks t)
2314- ;; It's important to notice the user settings before we
2315- ;; display the startup message; otherwise, the settings
2316- ;; won't take effect until the user gives the first
2317- ;; keystroke, and that's distracting.
2318- (when (fboundp 'frame-notice-user-settings)
2319- (frame-notice-user-settings))
2321- ;; If there are no switches to process, we might as well
2322- ;; run this hook now, and there may be some need to do it
2323- ;; before doing any output.
2324- (when window-setup-hook
2325- (run-hooks 'window-setup-hook)
2326- ;; Don't let the hook be run twice.
2327- (setq window-setup-hook nil))
2329- ;; ;; Do this now to avoid an annoying delay if the user
2330- ;; ;; clicks the menu bar during the sit-for.
2331- ;; (when (display-popup-menus-p)
2332- ;; (precompute-menubar-bindings))
2333- ;; (with-no-warnings
2334- ;; (setq menubar-bindings-done t))
2336- (if (> file-count 0)
2337- (display-startup-screen t)
2338- (display-startup-screen nil)))))
2340-(defun command-line-normalize-file-name (file)
2341- "Collapse multiple slashes to one, to handle non-Emacs file names."
2342- (save-match-data
2343- ;; Use arg 1 so that we don't collapse // at the start of the file name.
2344- ;; That is significant on some systems.
2345- ;; However, /// at the beginning is supposed to mean just /, not //.
2346- (if (string-match "^///+" file)
2347- (setq file (replace-match "/" t t file)))
2348- (and (memq system-type '(ms-dos windows-nt))
2349- (string-match "^[A-Za-z]:\\(\\\\[\\\\/]\\)" file) ; C:\/ or C:\\
2350- (setq file (replace-match "/" t t file 1)))
2351- (while (string-match "//+" file 1)
2352- (setq file (replace-match "/" t t file)))
2353- file))
2355-;; arch-tag: 7e294698-244d-4758-984b-4047f887a5db
2356-;;; startup.el ends here
2358=== removed directory '.pc/0004-Adjust-documentation-references-for-Debian.patch'
2359=== removed directory '.pc/0004-Adjust-documentation-references-for-Debian.patch/etc'
2360=== removed file '.pc/0004-Adjust-documentation-references-for-Debian.patch/etc/NEWS'
2361--- .pc/0004-Adjust-documentation-references-for-Debian.patch/etc/NEWS 2011-04-10 10:33:31 +0000
2362+++ .pc/0004-Adjust-documentation-references-for-Debian.patch/etc/NEWS 1970-01-01 00:00:00 +0000
2363@@ -1,2515 +0,0 @@
2364-GNU Emacs NEWS -- history of user-visible changes.
2366-Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
2367-See the end of the file for license conditions.
2369-Please send Emacs bug reports to
2370-If possible, use M-x report-emacs-bug.
2372-This file is about changes in Emacs version 23.
2374-See files NEWS.22, NEWS.21, NEWS.20, NEWS.19, NEWS.18, and NEWS.1-17
2375-for changes in older Emacs versions.
2377-You can narrow news to a specific version by calling `view-emacs-news'
2378-with a prefix argument or by typing C-u C-h C-n.
2382-* Installation Changes in Emacs 23.3
2384-** New configure option --with-crt-dir specifies the location of your
2385-crt*.o files, if they are in a non-standard location. This is only
2386-used on x86-64 and s390x GNU/Linux architectures.
2388-* Changes in Emacs 23.3
2390-** The last-resort backup file `%backup%~' is now written to
2391-`user-emacs-directory', instead of the user's home directory.
2393-** If Emacs creates `user-emacs-directory', that directory's
2394-permissions are now set to rwx------, ignoring the umask.
2398-* Changes in Specialized Modes and Packages in Emacs 23.3
2400-** Calendar and diary
2402-*** The appt-add command takes an optional argument, the warning time.
2403-This can be used in place of the default appt-message-warning-time.
2405-** Python mode
2407-*** You can allow inferior Python processes to load modules from the
2408-current directory by setting `python-remove-cwd-from-path' to nil.
2410-** Rmail
2412-*** The default value of `rmail-enable-mime' is now t. Rmail decodes
2413-MIME contents automatically. You can customize the variable
2414-`rmail-enable-mime' back to `nil' to disable this automatic MIME
2417-*** The command `rmail-mime' change the displaying of a MIME message
2418-between decoded presentation form and raw data if `rmail-enable-mime'
2419-is non-nil. And, with prefix argument, it change only the displaying
2420-of the MIME entity at point.
2422-*** The new command `rmail-mime-next-item' (bound to TAB) moves point
2423-to the next item of MIME message.
2425-*** The new command `rmail-mime-previous-item' (bound to backtab) moves
2426-point to the previous item of MIME message.
2428-*** The new command `rmail-mime-toggle-hidden' (RET) hide or show the
2429-body of the MIME entity at point.
2431-** VC and related modes
2433-*** New VC command `vc-log-incoming', bound to `C-x v I'.
2434-This shows a log of changes to be received with a pull operation.
2435-For Git, this runs "git fetch" to make the necessary data available
2436-locally; this requires version 1.7 or newer.
2438-*** New VC command `vc-log-outgoing', bound to `C-x v O'.
2439-This shows a log of changes to be sent in the next commit.
2441-*** New VC command vc-find-conflicted-file.
2443-*** The 'g' key in VC diff, log, log-incoming and log-outgoing buffers
2444-reruns the corresponding VC command to compute an up to date version
2445-of the buffer.
2447-*** vc-dir for Bzr supports viewing shelve contents and shelving snapshots.
2449-*** Special markup can be added to log-edit buffers.
2450-You can add headers specifying additional information to be supplied
2451-to the version control system. For example:
2453- Author: J. R. Hacker <>
2454- Fixes: 4204
2455- Actual text of log entry...
2457-Bazaar recognizes the headers "Author", "Date" and "Fixes".
2458-Git, Mercurial, and Monotone recognize "Author" and "Date".
2459-Any unknown header is left as is in the message, so it is not lost.
2461-** Obsolete packages
2463-*** lmenu.el and cl-compat.el are now obsolete.
2467-* New Modes and Packages in Emacs 23.3
2469-** smie.el is a generic navigation and indentation engine.
2470-It takes a simple BNF description of the grammar, and provides both
2471-sexp-style navigation (jumping over begin..end pairs) as well as
2472-indentation, which can be adjusted via ad-hoc indentation rules.
2476-* Incompatible Lisp Changes in Emacs 23.3
2478-** posn-col-row now excludes the header line from the row count
2479-If the frame has a header line, posn-col-row will count row numbers
2480-starting from the first line of text below the header line.
2484-* Lisp changes in Emacs 23.3
2486-** `e' and `pi' are now called `float-e' and `float-pi'.
2487- The old names are obsolete.
2489-** The use of unintern without an obarray arg is now obsolete.
2491-** The function `princ-list' is now obsolete.
2493-** The yank-handler argument to kill-region and friends is now obsolete.
2495-** New function byte-to-string, like char-to-string but for bytes.
2499-* Changes in Emacs 23.3 on non-free operating systems
2501-** The nextstep port can have different modifiers for the left and right
2502-alt/option key by customizing the value for ns-right-alternate-modifier.
2506-* Installation Changes in Emacs 23.2
2508-** New configure options for Emacs developers.
2509-These are not new features; only the configure flags are new.
2511-*** --enable-profiling builds Emacs with profiling enabled.
2512-This might not work on all platforms.
2514-*** --enable-checking[=OPTIONS] builds emacs with extra runtime checks.
2516-** `make install' now consistently ignores umask, creating a
2517-world-readable install.
2519-** Emacs compiles with Gconf support, if it is detected.
2520-Use the configure option --without-gconf to disable this.
2521-This is used by the `font-use-system-font' feature (see below).
2523-* Startup Changes in Emacs 23.2
2525-** The command-line option -Q (--quick) also inhibits loading X resources.
2526-However, if Emacs is compiled with the Lucid or Motif toolkit, X
2527-resource settings for the graphical widgets are still applied.
2528-On Windows, the -Q option causes Emacs to ignore Registry settings,
2529-but environment variables set on the Registry are still honored.
2531-*** The new variable `inhibit-x-resources' shows whether X resources
2532-were loaded.
2534-** New command-line option -mm (--maximized) maximizes the initial frame.
2536-* Changes in Emacs 23.2
2538-** The maximum size of buffers (and the largest fixnum) is doubled.
2539-On typical 32bit systems, buffers can now be up to 512MB.
2541-** The default value of `trash-directory' is now nil.
2542-This means that `move-file-to-trash' trashes files according to specifications, the same method used by the Gnome,
2544-KDE, and XFCE desktops. (This change has no effect on Windows, which
2545-uses `system-move-file-to-trash' for trashing.)
2547-** The pointer now becomes invisible when typing.
2548-Customize `make-pointer-invisible' to disable this feature.
2550-** Font changes
2552-*** Emacs can use the system default monospaced font in Gnome.
2553-To enable this feature, set `font-use-system-font' to non-nil (it is
2554-nil by default). If the system default changes, Emacs changes also.
2555-This feature requires Gconf support, which is automatically included
2556-at compile-time if configure detects the gconf libraries (you can
2557-disable this with the configure option --without-gconf).
2559-*** On X11, Emacs reacts to Xft changes made by configuration tools,
2560-via the XSETTINGS mechanism. This includes antialias, hinting,
2561-hintstyle, RGBA, DPI and lcdfilter changes.
2563-** Killing a buffer with a running process now asks for confirmation.
2564-To remove this query, remove `process-kill-buffer-query-function' from
2565-`kill-buffer-query-functions', or set the appropriate process flag
2566-with `set-process-query-on-exit-flag'.
2568-** File-local variable changes
2570-*** Specifying a minor mode as a local variables enables that mode,
2571-unconditionally. The previous behavior, toggling the mode, was
2572-neither reliable nor generally desirable.
2574-*** There are new commands for adding and removing file-local variables:
2575-`add-file-local-variable', `delete-file-local-variable',
2576-`add-file-local-variable-prop-line', and
2579-*** There are new commands for adding and removing directory-local variables,
2580-and copying them to and from file-local variable lists:
2581-`add-dir-local-variable', `delete-dir-local-variable',
2583-`copy-dir-locals-to-file-locals-prop-line' and
2586-** Internationalization changes
2588-*** Unibyte sessions are now considered obsolete.
2589-This refers to the EMACS_UNIBYTE environment variable as well as the
2590---unibyte, --multibyte, --no-multibyte, and --no-unibyte command line
2591-arguments. Customizing enable-multibyte-characters and setting
2592-default-enable-multibyte-characters are also deprecated.
2594-*** New coding system `utf-8-hfs'.
2595-This is suitable for default-file-name-coding-system on Mac OS X; see
2598-** Function arguments in *Help* buffers are now shown in upper-case.
2599-Customize `help-downcase-arguments' to t to show them in lower-case.
2601-** New command `async-shell-command', bound globally to `M-&'.
2602-This executes the command asynchronously, similar to calling `M-!' and
2603-manually adding an ampersand to the end of the command. With `M-&',
2604-you don't need the ampersand. The output appears in the buffer
2605-`*Async Shell Command*'.
2607-** When running in a new enough xterm (newer than version 242), Emacs
2608-asks xterm what the background color is and it sets up faces
2609-accordingly for a dark background if needed (the current default is to
2610-consider the background light).
2614-* Editing Changes in Emacs 23.2
2616-** Kill-ring and selection changes
2618-*** If `select-active-regions' is t, any active region automatically
2619-becomes the primary selection (for interaction with other window
2620-applications). If you enable this, you might want to bind
2621-`mouse-yank-primary' to Mouse-2.
2623-*** When `save-interprogram-paste-before-kill' is non-nil, the kill
2624-commands save the interprogram-paste selection into the kill ring
2625-before doing anything else. This avoids losing the selection.
2627-*** When `kill-do-not-save-duplicates' is non-nil, identical
2628-subsequent kills are not duplicated in the `kill-ring'.
2630-** Completion changes
2632-*** The new command `completion-at-point' provides mode-sensitive completion.
2634-*** tab-always-indent set to `complete' lets TAB do completion as well.
2636-*** The new completion-style `initials' is available.
2637-For instance, this can complete M-x lch to list-command-history.
2639-*** The new variable `completions-format' determines how completions
2640-are displayed in the *Completions* buffer. If you set it to
2641-`vertical', completions are sorted vertically in columns.
2643-** The default value of `blink-matching-paren-distance' is increased.
2645-** M-n provides more default values in the minibuffer for commands
2646-that read file names. These include the file name at point (when ffap
2647-is loaded without ffap-bindings), the file name on the current line
2648-(in Dired buffers), and the directory names of adjacent Dired windows
2649-(for Dired commands that operate on several directories, such as copy,
2650-rename, or diff).
2652-** M-r is bound to the new `move-to-window-line-top-bottom'.
2653-This moves point to the window center, top and bottom on successive
2654-invocations, in the same spirit as the C-l (recenter-top-bottom)
2657-** The new variable `recenter-positions' determines the default
2658-cycling order of C-l (`recenter-top-bottom').
2660-** The abbrevs file is now a file named abbrev_defs in
2661-user-emacs-directory; but the old location, ~/.abbrev_defs, is used if
2662-that file exists.
2666-* Changes in Specialized Modes and Packages in Emacs 23.2
2668-** The bookmark menu has a narrowing search via bookmark-bmenu-search.
2670-** Calc
2672-*** The Calc settings file is now a file named calc.el in
2673-user-emacs-directory; but the old location, ~/.calc.el, is used if
2674-that file exists.
2676-*** Graphing commands (`g f' etc.) now work on MS-Windows, if you have
2677-the native Windows port of Gnuplot version 3.8 or later installed.
2679-** Calendar and diary
2681-*** Fancy diary display is now the default.
2682-If you prefer the simple display, customize `diary-display-function'.
2684-*** The diary's fancy display now enables view-mode.
2686-*** The command `calendar-current-date' accepts an optional argument
2687-giving an offset from today.
2689-** Desktop
2691-*** The default value for `desktop-buffers-not-to-save' is nil.
2692-This means Desktop will try restoring all buffers, when you restart
2693-your Emacs session. Also, `desktop-buffers-not-to-save' is only
2694-effective for buffers that have no associated file. If you want to
2695-exempt buffers that do correspond to files, customize the value of
2696-`desktop-files-not-to-save' instead.
2698-** Dired
2700-*** The new variable `dired-auto-revert-buffer', if non-nil, causes
2701-Dired buffers to be reverted automatically on revisiting them.
2703-** DocView
2705-*** When `doc-view-continuous' is non-nil, scrolling a line
2706-on the page edge advances to the next/previous page.
2708-** Elint
2710-*** Elint now uses compilation-mode.
2712-*** Elint can now scan individual files and whole directories,
2713-and can be run in batch mode.
2715-*** Elint does a more thorough initialization, and recognizes more built-in
2716-functions and variables. Customize `elint-scan-preloaded' if you want
2717-to sacrifice some accuracy for a faster startup.
2719-*** Elint attempts some basic understanding of featurep and (f)boundp tests.
2721-*** Customize `elint-ignored-warnings' to suppress some warnings.
2723-** GDB-UI
2725-*** Toolbar functionality for reverse debugging. Display of STL
2726-collections as watch expressions. These features require GDB 7.0 or later.
2728-** Grep
2730-*** A new command `zrgrep' searches recursively in gzipped files.
2732-** Info
2734-*** The new command `Info-virtual-index' bound to "I" displays a menu of
2735-matched topics found in the index.
2737-*** The new command `info-finder' replaces finder.el with a virtual Info
2738-manual that generates an Info file which gives the same information
2739-through a menu structure.
2741-** LaTeX mode now provides completion (via completion-at-point).
2743-** Message mode is now the default mode for composing mail.
2745-The default for `mail-user-agent' is now message-user-agent, so the
2746-C-x m (`compose-mail') command uses Message mode instead of Mail mode.
2748-Message mode has been included in Emacs, as part of the Gnus package,
2749-for several years. It provides several features that are absent in
2750-Mail mode, such as MIME handling.
2752-*** If the user has not customized mail-user-agent, `compose-mail'
2753-checks for Mail mode customizations, and issues a warning if these
2754-customizations are found. This alerts users who may otherwise be
2755-unaware that their mail configuration has changed.
2757-To disable this check, set compose-mail-user-agent-warnings to nil.
2759-** The default value of mail-interactive is t, since Emacs 23.1.
2760-(This was not announced at the time.) It means that when sending mail,
2761-Emacs will wait for the process sending mail to return. If you
2762-experience delays when sending mail, you may wish to set this to nil.
2764-** nXML mode is now the default for editing XML files.
2766-** pcomplete provides a new command `pcomplete-std-completion' which
2767-is similar to `pcomplete' but using the standard completion UI code.
2769-** Shell (and other comint modes)
2771-*** M-s is no longer bound to `comint-next-matching-input'.
2773-*** M-r is now bound to `comint-history-isearch-backward-regexp'.
2774-This starts an incremental search of the comint/shell input history.
2776-*** ansi-color is now enabled by default in Shell mode.
2777-To disable it, set ansi-color-for-comint-mode to nil.
2779-** Tramp
2781-*** New connection methods "rsyncc", "imap" and "imaps".
2782-On systems which support GVFS-Fuse, Tramp offers also the new
2783-connection methods "dav", "davs", "obex" and "synce".
2785-** VC and related modes
2787-*** When using C-x v v or C-x v i on a unregistered file that is in a
2788-directory not controlled by any VCS, ask the user what VC backend to
2789-use to create a repository, create a new repository and register the
2792-*** New command `vc-root-print-log', bound to `C-x v L'.
2793-This displays a `*vc-change-log*' buffer showing the history of the
2794-version-controlled directory tree as a whole.
2796-*** New command `vc-root-diff', bound to `C-x v D'.
2797-This is similar to `vc-diff', but compares the entire directory tree
2798-of the current VC directory with its working revision.
2800-*** `C-x v l' and `C-x v L' do not show the full log by default.
2801-The number of entries shown can be chosen interactively with a prefix
2802-argument, or by customizing vc-log-show-limit. The `*vc-change-log*'
2803-buffer now contains buttons at the end of the buffer, which can be
2804-used to increase the number of entries shown. RCS, SCCS, and CVS do
2805-not support this feature.
2807-*** vc-annotate supports annotations through file copies and renames,
2808-it displays the old names for the files and it can show logs/diffs for
2809-the corresponding lines. Currently only Git and Mercurial take
2810-advantage of this feature.
2812-*** The log command in vc-annotate can display a single log entry
2813-instead of redisplaying the full log. The RCS, CVS and SCCS VC
2814-backends do not support this.
2816-*** When a file is not found, VC will not try to check it out of RCS anymore.
2818-*** Diff and log operations can be used from Dired buffers.
2820-*** vc-git changes
2822-**** The short log format for git makes use of the graph display,
2823-so it's not supported on git versions earlier than 1.5.6.
2825-**** vc-dir uses the --relative option of git, and so requires at least
2826-git version 1.5.5.
2828-**** Support for operating with stashes has been added to vc-dir:
2829-the stash list is displayed in the *vc-dir* header, stashes can be
2830-created, removed, applied and their content displayed.
2832-*** vc-bzr supports operating with shelves: the shelve list is
2833-displayed in the *vc-dir* header, shelves can be created, removed and applied.
2835-*** log-edit-strip-single-file-name controls whether or not single filenames
2836-are stripped when copying text from the ChangeLog to the *VC-Log* buffer.
2838-** Miscellaneous
2840-*** Interactively `multi-isearch-buffers' and `multi-isearch-buffers-regexp'
2841-read buffer names to search, one by one, ended with RET. With a prefix
2842-argument, they ask for a regexp, and search in buffers whose names match
2843-the specified regexp. Interactively `multi-isearch-files' and
2844-`multi-isearch-files-regexp' read file names to search, one by one,
2845-ended with RET. With a prefix argument, they ask for a wildcard, and
2846-search in file buffers whose file names match the specified wildcard.
2848-*** Autorevert Tail mode now works also for remote files.
2850-*** The new eshell built-in commands `su' and `sudo' support Tramp.
2851-Thus, they change `default-directory' to reflect the new user id, and
2852-let commands run under that user's permissions. This works even when
2853-`default-directory' is already remote. Calling the external commands
2854-is possible via `*su' or `*sudo', respectively.
2856-** Obsolete packages
2858-*** sym-comp.el is now obsolete, superseded by completion-at-point.
2860-*** lucid.el and levents.el are now obsolete.
2864-* New Modes and Packages in Emacs 23.2
2866-** CEDET (the Collection of Emacs Development Tools) is now in Emacs.
2867-This is a collection of packages to aid with using Emacs as an IDE
2868-(integrated development environment):
2870-*** The Semantic package allows the use of parsers to intelligently
2871-edit and navigate source code. Parsers for C/C++, Java, Javascript,
2872-and several other languages are included by default, and Semantic can
2873-also interface with external tools such as GNU Global and GNU Idutils.
2875-To enable Semantic, use the global minor mode `semantic-mode'.
2876-See the Semantic manual for details.
2878-*** EDE (Emacs Development Environment) is a package for managing code
2879-projects, including features such as automatic Makefile generation.
2881-To enable EDE, use the minor mode `global-ede-mode'.
2882-See the EDE manual for details.
2884-*** SRecode is a library for recoding Semantic tags back into source
2885-code. It is currently used by some parts of Semantic and EDE; in the
2886-future, it may be used for code generation features.
2888-*** The EIEIO library implements a subset of the Common Lisp Object
2889-System (CLOS). It is used by the other CEDET packages.
2891-** mpc.el is a front end for the Music Player Daemon. Run it with M-x mpc.
2893-** htmlfontify.el turns a fontified Emacs buffer into an HTML page.
2895-** js.el is a new major mode for JavaScript files.
2897-** imap-hash.el is a new library to address IMAP mailboxes as hashtables.
2901-* Incompatible Lisp Changes in Emacs 23.2
2903-** The Lisp reader turns integers that are too large/small into floats.
2904-For instance, on machines where `536870911' is the largest integer,
2905-reading `536870912' gives the floating-point object `536870912.0'.
2907-This change only concerns the Lisp reader; it does not affect how
2908-actual integer objects overflow.
2910-** Several obsolete functions removed.
2911-The functions have been obsolete since Emacs 19, and are unlikely to
2912-be in use:
2914- time-stamp-month-dd-yyyy, time-stamp-dd/mm/yyyy, time-stamp-mon-dd-yyyy
2915- time-stamp-dd-mon-yy, time-stamp-yy/mm/dd, time-stamp-yyyy/mm/dd,
2916- time-stamp-yyyy-mm-dd, time-stamp-yymmdd, time-stamp-hh:mm:ss,
2917- time-stamp-hhmm, baud-rate
2919-** Support for generating Emacs 18 compatible bytecode (by setting
2920-the variable `byte-compile-compatibility') has been removed.
2922-** In image-mode.el `image-mode-maybe' is obsolete.
2923-Instead, you can either use `image-mode' (which displays an image file
2924-as the actual image initially), or `image-mode-as-text' (when you want
2925-to display an image file as text initially). `image-mode-as-text' is a
2926-combination of a non-image mode from `auto-mode-alist' (or Fundamental
2927-mode) and `image-minor-mode'. `image-minor-mode' provides a `C-c C-c'
2928-key binding to toggle image display.
2929-`image-toggle-display-text' removes image properties.
2930-`image-toggle-display-image' adds image properties.
2931-`image-toggle-display' toggles between `image-mode-as-text' and `image-mode'.
2935-* Lisp changes in Emacs 23.2
2937-** All the default-FOO variables that hold the default value of the FOO
2938-variable, are now declared obsolete.
2940-** read-key is a function halfway between read-event and read-key-sequence.
2941-It reads a single key, but obeys input and escape sequence decoding.
2943-** Frame parameter changes
2945-*** You can give the `fullscreen' frame parameter the value `maximized'.
2946-This maximizes the frame.
2948-*** The new frame parameter `sticky' makes Emacs frames sticky in
2949-virtual desktops.
2951-** Completion changes
2953-*** completion-base-size is obsoleted by completion-base-position.
2954-This change causes a few backward incompatibilities, mostly with
2955-choose-completion-string-functions where the `mini-p' argument has
2956-been replaced by a `base-position' argument, and where the `base-size'
2957-argument is now always nil.
2959-*** New function `completion-in-region' to use the standard completion
2960-facilities on a particular region of text.
2962-*** The 4th arg to all-completions (aka hide-spaces) is declared obsolete.
2964-*** completion-annotate-function specifies how to compute annotations
2965-for completions displayed in *Completions*.
2967-** Minibuffer changes
2969-*** read-file-name-predicate is obsolete. It was used to pass the predicate
2970-to read-file-name-internal because read-file-name-internal abused its `pred'
2971-argument to pass the current directory, but this hack is not needed
2972-any more.
2974-** Changes to file-manipulation functions
2976-*** `delete-directory' has an optional parameter RECURSIVE.
2978-*** New function `copy-directory', which copies a directory recursively.
2980-** called-interactively-p now takes one argument and replaces interactive-p
2981-which is now marked obsolete.
2983-** New function set-advertised-calling-convention makes it possible
2984-to obsolete arguments as well as make some arguments mandatory.
2986-** You can control which binding is preferentially shown in menus and
2987-docstrings by adding a `:advertised-binding' property to the corresponding
2988-command's symbol. That property can hold a single binding or a list
2989-of bindings.
2991-** Network and process changes
2993-*** start-process-shell-command and start-file-process-shell-command
2994-now only take a single `command' argument.
2996-*** The new variable `process-file-side-effects' should be set to nil
2997-if a `process-file' call does not change a remote file. This allows
2998-file name handlers such as Tramp to optimizations.
3000-*** make-network-process can now also create `seqpacket' Unix sockets.
3002-** Loading changes
3004-*** eval-next-after-load is obsolete.
3006-*** New hook `after-load-functions' run after loading an Elisp file.
3008-** Byte compilation changes
3010-*** Changing the file-names generated by byte-compilation by redefining
3011-the function `byte-compile-dest-file' before loading bytecomp.el is obsolete.
3012-Instead, customize byte-compile-dest-file-function.
3014-*** `byte-compile-warnings' has new members, `constants' and `suspicious'.
3016-** New macro with-silent-modifications to tweak text properties without
3017-affecting the buffer's modification state.
3019-** Hash tables have a new printed representation that is readable.
3020-The feature `hashtable-print-readable' identifies this new
3023-** New functions for performing Unicode normalization:
3024-ucs-normalize-NFD-region, ucs-normalize-NFD-string,
3025-ucs-normalize-NFC-region, ucs-normalize-NFC-string,
3026-ucs-normalize-NFKD-region, ucs-normalize-NFKD-string,
3027-ucs-normalize-NFKC-region, ucs-normalize-NFKC-string,
3028-ucs-normalize-HFS-NFD-region, ucs-normalize-HFS-NFD-string,
3029-ucs-normalize-HFS-NFC-region, ucs-normalize-HFS-NFC-string.
3031-** Face aliases can now be marked as obsolete, using the macro
3034-** New function `window-full-height-p', analogous to the full-width version.
3038-* Changes in Emacs 23.2 on non-free operating systems
3040-** On MS-Windows, `display-time' now displays the system load average
3041-as well as the time, as it does on GNU and Unix.
3045-* Installation Changes in Emacs 23.1
3047-** The default X toolkit is now Gtk+, rather than Lucid.
3048-The configure option `--with-gtk' has been removed. Gtk is now the
3049-default toolkit, but you can use --with-x-toolkit=gtk if necessary.
3051-** New font code.
3052-Fonts are handled by new code capable of dealing with multiple font
3053-backends. This uses the freetype and fontconfig libraries.
3055-*** Emacs now accepts font names supplied in the fontconfig format
3056-(e.g. "monospace-12:bold") and GTK format (e.g. "Monospace Bold 12").
3058-*** Added support for local fonts (fonts installed on the machine
3059-where Emacs is running).
3061-*** Added support for the Xft library for antialiasing.
3063-*** Added support for the otf library for complex text layout by
3064-OpenType fonts.
3066-*** Added support for the m17n library for text shaping.
3068-** Changes to image support
3070-*** configure now checks for libgif before libungif when searching for
3071-a GIF library.
3073-*** Emacs now supports the SVG image format through librsvg2.
3075-*** Emacs now supports multi-page TIFF images.
3077-** New NeXTSTEP-based port.
3078-This provides support for GNUstep (via the GNUstep libraries) and Mac
3079-OS X (via the Cocoa libraries).
3081-Specify --with-ns to configure for this. By default, a self-contained
3082-app will be built (containing all lisp). To install/share lisp with
3083-other emacsen (e.g. X11 build) use --disable-ns-self-contained. See
3084-nextstep/README and nextstep/INSTALL in the Emacs source directory.
3086-** Mac OS X is no longer supported via Carbon.
3087-Use the NeXTSTEP port, described above.
3089-** The new configuration option "--with-dbus" enables D-Bus language
3090-bindings for Emacs.
3092-** Support for many obsolete platforms has been removed.
3093-See the list at the end of etc/MACHINES for details.
3095-*** Support for systems without alloca has been removed.
3097-*** Support for Sun windows has been removed.
3099-*** The `emacstool' utility has been removed.
3101-** The following platforms will be removed in a future Emacs version:
3102-If you are still using Emacs on one of these platforms, please email to inform the Emacs developers.
3105-*** Old GNU/Linux systems based on libc version 5.
3107-*** Old FreeBSD, NetBSD, and OpenBSD systems based on the COFF
3108-executable format.
3110-*** Solaris versions 2.6 and below.
3112-*** Solaris on IBM RS6000 machines.
3114-*** UNIX System V (the original SysV, not later platforms based on it).
3116-*** Unixware on non-x86 machines.
3118-*** Platforms not supporting shared libraries (i.e., requiring the
3119-NO_SHARED_LIBS compilation flag).
3121-** The configure options `--with-gcc', `--without-gcc' have been removed.
3122-Configure will use gcc by default. Set the CC environment variable if
3123-you need control over which C compiler is used.
3125-** The refcards are now shipped as PDF files.
3127-** The manuals are now licensed under the GNU Free Documentation License v1.3,
3128-or any later version.
3130-** Emacs 23 comes with a new set of default icons.
3131-Various resolutions are available as etc/images/icons/hicolor/*/apps/emacs.png.
3132-The Emacs 22 icon is available as `emacs22.png' in the same location.
3135-* Changes in Emacs 23.1
3137-** Improved X Window System support
3139-*** Emacs now supports using both X displays and ttys in one session.
3140-With an Emacs server active (M-x server-start), `emacsclient -t'
3141-creates a tty frame connected to the running emacs server. You can
3142-use any number of different ttys. `emacsclient -c' creates a new X11
3143-frame on the current $DISPLAY (or a tty frame if $DISPLAY is not set).
3144-There may be problems if a display exits unexpectedly and Emacs is compiled
3145-with Gtk+, see etc/PROBLEMS.
3147-You can test for the presence of this feature in your Lisp code by
3148-testing for the `multi-tty' feature.
3150-*** Emacs starts in the background, as a daemon, when given the
3151---daemon command line argument. It disconnects from the terminal and
3152-starts the server. Clients can connect and create graphical or
3153-terminal frames using emacsclient.
3155-**** emacsclient starts emacs in daemon mode and connects to it when
3156---alternate-editor="" is used (or when the evironment variable
3157-ALTERNATE_EDITOR is set to "") and emacsclient cannot connect to an
3158-emacs server.
3160-*** The new command close-display-connection closes a connection to a
3161-remote display. There are some bugs for Gtk+. See etc/PROBLEMS.
3163-*** Emacs now supports the XEmbed specification.
3164-You can embed Emacs in another application on X11. The new command line
3165-option --parent-id is used to pass the parent window id to Emacs. See
3167-for details about XEmbed.
3169-*** Emacs can now set the frame opacity.
3170-The opacity of a frame can be controlled by setting the `alpha' frame
3171-parameter. This only takes effect on a compositing window manager for
3172-the X Window System, such as Compiz, Beryl and Compiz Fusion, on Mac
3173-OS X, or on Windows 2000 and later versions of Windows.
3175-The alpha parameter should be an integer between 0 (transparent) and
3176-100 (opaque), or a float number between 0.0 and 1.0. It can also be a
3177-cons cell (ACTIVE . INACTIVE), where ACTIVE is the opacity of an
3178-active frame and INACTIVE is the opacity of non-active frames.
3180-The variable `frame-alpha-lower-limit' defines a lower bound for the
3181-opacity; the default is 20.
3183-** Internationalization changes
3185-*** The Emacs character set is now a superset of Unicode.
3186-(It has about four times the code space, which should be plenty).
3188-The internal encoding used for buffers and strings is now
3189-Unicode-based and called `utf-8-emacs' (`emacs-internal' is an alias
3190-for this). This encoding is backward-compatible with Unicode's UTF-8
3191-encoding. The internal encoding previously used by Emacs,
3192-`emacs-mule', is still available for reading and writing files.
3194-During byte-compilation, Emacs 23 uses `utf-8-emacs' to write files.
3195-As a result, byte-compiled files containing non-ASCII characters can't
3196-be read by earlier versions of Emacs. Files compiled by Emacs 20, 21,
3197-or 22 are loaded correctly as `emacs-mule' (whether or not they
3198-contain multibyte characters). This takes somewhat more time, so it
3199-may be worth recompiling existing .elc files which don't need to be
3200-shared with older Emacsen.
3202-*** There are new coding systems/aliases; see M-x list-coding-systems.
3204-*** There is a new charset implementation with many new charsets.
3205-See M-x list-character-sets. New charsets can be defined conveniently
3206-as tables of unicodes.
3208-*** There are new language environments for Chinese-GBK,
3209-Chinese-GB18030, Khmer, Bengali, Punjabi, Gujarati, Oriya, Telugu,
3210-Sinhala, and TaiViet.
3212-*** The minor modes unify-8859-on-encoding-mode and
3213-unify-8859-on-decoding-mode are obsolete.
3215-*** `ucs-insert' is bound to `C-x 8 RET' and in addition to hex numbers
3216-accepts numbers in hash notation (e.g. #o21430 for octal, or #10r8984 for
3217-decimal). It also accepts Unicode character names with completion.
3219-*** The `cyrillic-translit' input method supports many new characters.
3220-Common typographical characters available from Unicode were added to
3221-`cyrillic-translit': punctuation marks, accented characters, fractions,
3222-and others.
3224-** Emacs now supports serial port access on GNU/Linux, Unix, and
3225-Windows. The new command `serial-term' starts an interactive terminal
3226-on a serial port. The serial port can be configured at runtime with
3227-the mode-line mouse menu.
3229-** Menu Bar changes
3231-*** In the Options menu, the "Set Default Font" item applies the
3232-selected font to the `default' face on all frames, not just the
3233-current frame. Furthermore, if Emacs is compiled with both GTK and
3234-Fontconfig support, the "Set Default Font" item uses the GTK font
3235-selection dialog instead of an Emacs pop-up menu.
3237-*** The font setting chosen by "Set Default Font" is saved if the
3238-"Save Options" item is used.
3240-*** The Tools menu contains a new Encryption/Decryption submenu.
3241-This contains commands provided by EasyPG, the newly-included
3242-interface to GnuPG (see New Modes and Packages).
3244-*** In the Options menu, the "Truncate Long Lines in the Buffer" entry
3245-has been replaced with a submenu offering three different ways to
3246-handle long lines: truncation, continuation at the window edge, and
3247-the new word wrapping behavior (see Editing Changes, below).
3249-*** Improvements to menus for major and minor modes
3250-More major and minor modes now have a mode specific menu, and existing
3251-mode menus have been improved to include more functionality.
3253-** Mode-line changes
3255-*** The mode-line displays a `@', instead of `-', if the
3256-default-directory for the current buffer is on a remote machine.
3258-*** The mode-line displays a mode menu when mouse-1 is clicked on a
3259-minor mode, in the same way as it already did for major modes.
3261-*** The `mode-line-emphasis' face is used to highlight certain
3262-mode-line information (e.g. waiting for a VC command to finish).
3264-*** The mode-line tooltips have been improved to provide more details.
3266-*** The VC, line/colum number and minor mode indicators on the mode
3267-line are now interactive: mouse-1 can be used on them to pop up a menu.
3269-** File deletion can make use of the Recycle Bin or system Trash folder.
3270-Set `delete-by-moving-to-trash' non-nil to use this. Deleted files
3271-and directories will then be sent to the Recycle Bin on Windows, and
3272-to `trash-directory' on other systems.
3274-** Directory-local variables can now be defined.
3275-By default, Emacs looks in .dir-locals.el for directory-local
3276-variables. For more information, see `dir-locals-set-directory-class'
3277-and `dir-locals-set-class-variables'.
3279-** Emacs can now use `auth-source' for authentication.
3280-`smtpmail' and `url' (Tramp and Gnus also) use `auth-source' to obtain
3281-login names and passwords. The match, if found, is reported
3282-in *Messages* with the password blanked out.
3284-** `where-is-preferred-modifier' can specify your favorite modifier.
3288-* Startup Changes in Emacs 23.1
3290-** The option `inhibit-startup-screen' (with aliases to old names
3291-`inhibit-splash-screen' and `inhibit-startup-message') doesn't inhibit
3292-display of the initial message in the *scratch* buffer. If you don't
3293-want to display the initial message in the *scratch* buffer at startup,
3294-you can set the option `initial-scratch-message' to nil.
3296-** New user option `initial-buffer-choice' specifies what to display
3297-after starting Emacs: startup screen, *scratch* buffer, visiting a
3298-file or directory.
3300-** New alias `argv' for `command-line-args-left'
3301-This is a convenience alias, so that one can write `(pop argv)'
3302-inside of --eval command line arguments in order to access
3303-following arguments.
3305-** The abbrev file is no longer read at startup in batch mode.
3307-** Emacs now supports invocation by an X session manager.
3308-It can save a session and restore it later. See the documentation of
3309-the functions `emacs-session-save' and `emacs-session-restore'.
3310-(Actually, this feature was introduced with Emacs 22, but it was not
3314-* Incompatible Editing Changes in Emacs 23.1
3316-** In Dired, `dired-flag-garbage-files' is rebound from `&' to `%&'
3317-on the regexp command prefix map.
3319-** In Dired-x, all command guesses for ! are now added to the default
3320-list accessible by M-n instead of pushing all guesses temporarily into
3321-the history list.
3323-** In Isearch mode, a special case of typing `C-w' at the beginning of
3324-the minibuffer that toggles word search (i.e. using key sequences
3325-`C-s RET C-w' or `C-s M-e C-w') is obsolete. You can use the global key
3326-`M-s w' to start word search, or type `M-s w' in Isearch mode to
3327-toggle word search. To start nonincremental word search you can now use
3328-`M-s w RET' and `M-s w C-r RET' instead of `C-s RET C-w' and `C-r RET C-w'.
3330-** In Info, `Info-search' is unbound from `M-s' to allow using `M-s w'
3331-for word search as well as other search commands from the global prefix
3332-key `M-s'. `Info-search' is still bound to `s', and also incremental
3333-search commands `C-s', `C-M-s', `C-r', `C-M-r' are available for searching
3334-through multiple Info nodes, together with their nonincremental versions
3335-`C-s RET', `C-r RET', `C-M-s RET', `C-M-r RET', `M-s w RET'.
3337-** In Text mode, `center-line' and `center-paragraph' are rebound from
3338-`M-s' and `M-S' to global keys `M-o M-s' and `M-o M-S' on the global
3339-prefix map `M-o', which is intended for such formatting commands.
3341-** The following input methods were removed in Emacs 22.2, but this was
3342-not advertised: danish-alt-postfix, esperanto-alt-postfix,
3343-finnish-alt-postfix, german-alt-postfix, icelandic-alt-postfix,
3344-norwegian-alt-postfix, scandinavian-alt-postfix, spanish-alt-postfix,
3345-and swedish-alt-postfix. Use the versions without "alt-", which are
3350-* Editing Changes in Emacs 23.1
3352-** The C-n and C-p line-motion commands now move by screen lines,
3353-taking continued lines and variable-width characters into account.
3354-Setting `line-move-visual' to nil reverts this to the previous
3355-behavior (i.e., motion by logical lines based on buffer contents
3358-** C-x C-c now invokes `save-buffers-kill-terminal', and C-z now
3359-invokes `suspend-frame'. These changes are for compatibility with the
3360-new multi-tty support (see `Improved X Window System support' above).
3362-** Mark changes
3364-*** Transient Mark mode is now on by default.
3366-*** mark-even-if-inactive now defaults to t
3368-*** When Transient Mark mode is on, C-SPC C-SPC pushes a mark without
3369-activating it.
3371-*** When Transient Mark mode is on, M-q now fills the region if the
3372-region is active. Otherwise, it fills the current paragraph.
3374-*** When Transient Mark mode is on, M-$ now checks spelling of the
3375-region if the region is active. Otherwise, it checks spelling of the
3376-word at point.
3378-*** When Transient Mark mode is on, TAB now indents the region if the
3379-region is active.
3381-*** The variable `use-empty-active-region' controls whether an empty
3382-active region in Transient Mark mode should make commands operate on
3383-that empty region.
3385-** Temporarily active regions
3387-*** The new variable shift-select-mode, non-nil by default, controls
3388-shift-selection. When Shift Select mode is on, shift-translated
3389-motion keys (e.g. S-left and S-down) activate and extend a temporary
3390-region, similar to mouse-selection.
3392-*** Temporarily active regions, created using shift-selection or
3393-mouse-selection, are not necessarily deactivated in the next command.
3394-They are only deactivated after point motion commands that are not
3395-shift-translated, or after commands that would ordinarily deactivate
3396-the mark in Transient Mark mode (e.g., any command that modifies the
3399-** Minibuffer and completion changes
3401-*** Emacs may ask for confirmation before opening a non-existent file
3402-or buffer. By default, Emacs requests confirmation if you type RET
3403-immediately after TAB, and the resulting input is not an existing file
3404-or buffer; this usually happens when the minibuffer input did not
3405-complete far enough and you entered RET by mistake. In that case,
3406-Emacs puts the message "[Confirm]" in the minibuffer; type RET again
3407-to create the file or buffer.
3409-The new variable confirm-nonexistent-file-or-buffer determines whether
3410-Emacs asks for confirmation. The default value is `after-completion'.
3411-If you change it to t, Emacs always asks for confirmation; if you
3412-change it to nil, Emacs never asks for confirmation.
3414-*** The rules for performing completion have been changed.
3415-When generating completion alternatives, Emacs now takes the
3416-minibuffer text after point, if any, into account: this text is
3417-treated as a substring of the remaining part of the completion
3418-alternative (i.e., the part not matched by the minibuffer text before
3419-point). If no completion alternatives are found this way, Emacs
3420-attempts to perform partial-completion. If still no completion
3421-alternatives are found, we fall back on the Emacs 22 rules for
3422-performing completion.
3424-The new variable `completion-styles' can be customized to choose your
3425-favorite completion style.
3427-*** When M-n in the minibuffer reaches the end of the list of defaults,
3428-it adds the completion list to the end, so next M-n continues putting
3429-completion items to the minibuffer. The same principle applies to
3430-incremental search commands as well: C-s or C-M-s starts searching
3431-the default values and after the end of defaults they continue
3432-searching minibuffer completion items.
3434-*** Minibuffer input of shell commands now comes with completion.
3436-*** In the `C-x d' (Dired) prompt, typing M-n gives the visited file
3437-name of the current buffer.
3439-*** In the M-! (shell-command) prompt, M-n provides some default commands.
3440-These are guessed using the file extension of the current file, based
3441-on the file-handlers specified in the operating system's `mailcap'
3442-file. The ! command in Dired (dired-do-shell-command) works
3443-similarly, using the file displayed on the current line.
3445-*** A list of regexp default values is available via M-n for `occur',
3446-`keep-lines', `flush-lines' and `how-many'. This list includes the active
3447-region in transient-mark-mode, the word under the cursor, the last Isearch
3448-regexp, the last Isearch string and the last replacement regexp.
3450-*** When enable-recursive-minibuffers is non-nil, operations which use
3451-switch-to-buffer (such as C-x b and C-x C-f) do not fail any more when
3452-used in a minibuffer or a dedicated window. Instead, they fallback on
3453-using pop-to-buffer, which will use some other window. This change
3454-has no effect when enable-recursive-minibuffers is nil (the default).
3456-*** Isearch started in the minibuffer searches in the minibuffer history.
3457-Reverse Isearch commands (C-r, C-M-r) search in previous minibuffer
3458-history elements, and forward Isearch commands (C-s, C-M-s) search in
3459-next history elements. When the reverse search reaches the first history
3460-element, it wraps to the last history element, and the forward search
3461-wraps to the first history element. When the search is terminated, the
3462-history element containing the search string becomes the current.
3464-*** The variable read-file-name-completion-ignore-case overrides
3465-completion-ignore-case for file name completion.
3467-*** The variable read-buffer-completion-ignore-case overrides
3468-completion-ignore-case for buffer name completion.
3470-*** The new command `minibuffer-force-complete' chooses one of the
3471-possible completions, rather than stopping at the common prefix.
3473-*** If `completion-auto-help' is `lazy', Emacs shows the completions
3474-buffer only on the second attempt to complete. This was already
3475-supported in `partial-completion-mode'.
3477-** Face changes
3479-*** S-down-mouse-1 now pops up a menu for changing the font and text
3480-size of the default face in the current buffer. The face is changed
3481-via face remapping (see Lisp changes, below).
3483-*** New commands to change the default face size in the current buffer.
3484-To increase it, type `C-x C-+' or `C-x C-='. To decrease it, type
3485-`C-x C--'. To restore the default (global) face size, type `C-x C-0'.
3486-These work via Text Scale mode, a new minor mode.
3488-The final key in the above commands may be repeated without the
3489-leading `C-x', e.g. `C-x C-= C-= C-=' increases the face height by
3490-three steps. Each step scales the height of the default face by the
3491-value of the variable `text-scale-mode-step'.
3493-*** The commands buffer-face-mode and buffer-face-set can be used to
3494-remap the default face in the current buffer. See "Buffer Face mode",
3495-under New Modes and Packages.
3497-** Primary selection changes
3499-*** You can disable kill ring commands from accessing the primary
3500-selection by setting `x-select-enable-primary' to nil.
3502-** Continuation lines can now be wrapped at word boundaries
3503-(word-wrapping). This is controlled by the new per-buffer variable
3504-`word-wrap'. Word wrapping does not take place if continuation lines
3505-are not shown, e.g. if truncate-lines is non-nil. The most convenient
3506-way to enable word-wrapping is using the new minor mode Visual Line
3507-mode; in addition to setting `word-wrap' to t, this rebinds some
3508-editing commands to work on screen lines rather than text lines. See
3509-New Modes and Packages, below.
3511-** Window management changes
3513-*** truncate-partial-width-windows now accepts integer values, which
3514-specify a minimum window width for partial-width windows, below which
3515-lines are truncated. The default has been changed to 50.
3517-*** The new command balance-windows-area balances windows both
3518-vertically and horizontally.
3520-*** pop-to-buffer now always sets input focus when the popped-to window
3521-is on a different frame.
3523-** Miscellaneous changes:
3525-*** C-l is bound to the new command recenter-top-bottom, rather than recenter.
3526-This moves the current line to window center, top and bottom on
3527-successive invocations.
3529-*** scroll-preserve-screen-position also preserves the column position.
3531-*** If `yank-pop-change-selection' is t, rotating the kill ring also
3532-updates the selection or clipboard to the current yank, just as M-w
3533-would do so with the text it copies to the kill ring.
3535-*** C-M-% now shows replacement as it would look in the buffer, with
3536-`\N' and `\&' substituted according to the match. Old behavior can be
3537-restored by customizing `query-replace-show-replacement'.
3539-*** The command shell prompts for the default directory, when it is
3540-called with a prefix and the default directory is a remote file name.
3541-This is because some file name handlers (like ange-ftp) are not able to
3542-run processes remotely.
3544-*** The new command kill-matching-buffers kills buffers whose name
3545-matches a regexp.
3547-*** The value of comment-style now defaults to `indent'.
3548-Thefore, comment-start markers are inserted at the current indentation
3549-of the region to comment, rather than the leftmost column.
3551-*** The new commands `pp-macroexpand-expression' and
3552-`pp-macroexpand-last-sexp' pretty-print macro expansions.
3554-*** The new command `set-file-modes' allows to set file's mode bits.
3555-The mode bits can be specified in symbolic notation, like with GNU
3556-Coreutils, in addition to an octal number. `chmod' is a new
3557-convenience alias for this function.
3559-*** `next-error-recenter' specifies how next-error should recenter the
3560-visited source file. Its value can be a number (for example, 0 for
3561-top line, -1 for bottom line), or nil for no recentering.
3563-*** When typing in a password in the echo area, C-y yanks the current
3564-kill into the password.
3566-*** Tooltip frame parameters `font' and `color' in `tooltip-frame-parameters'
3567-are ignored. Customize the `tooltip' face instead.
3569-*** `mkdir' is a new convenience alias for `make-directory'.
3572-* New Modes and Packages in Emacs 23.1
3574-** Auto Composition Mode is a minor mode that composes characters
3575-automatically when they are displayed. It is globally on by default.
3576-It uses `auto-composition-function' (default `auto-compose-chars').
3578-** Bubbles, a new game, is similar to SameGame.
3580-** Buffer Face mode is a minor mode for remapping the default face in
3581-the current buffer. The variable `buffer-face-mode-face' specifies
3582-the face to remap to. The command `buffer-face-set' prompts for a
3583-face name, sets `buffer-face-mode-face' to it, and enables
3584-buffer-face-mode. See "Face changes", under Editing Changes, for a
3585-description of face remapping.
3587-** butterfly flips the desired bit on the drive platter.
3590-** bug-reference.el provides clickable links to bug reports.
3592-** dbus.el provides D-Bus language bindings.
3593-D-Bus is an inter-process communication mechanism for applications
3594-residing on the same host. See the manual for details.
3596-** DocView mode allows viewing of PDF, PostScript and DVI documents.
3597-One can also search for a regular expression in the document. For
3598-details, see the commentary in doc-view.el.
3600-PDF and DVI files are now opened in Doc View mode by default.
3602-In Postcript mode, C-c C-c launches Doc View minor mode for viewing
3603-the postscript file.
3605-** EasyPG provides an interface to the GNU Privacy Guard (GnuPG).
3606-It includes a GnuPG keyring browser, cryptographic operations on
3607-regions and files, and automatic encryption of *.gpg files. For
3608-details, see the EasyPG Assistant User's Manual.
3610-** json.el is a library for parsing and generating JSON
3611-(JavaScript Object Notation), a lightweight data-interchange format.
3613-** linum.el is a new minor mode to display line numbers for the
3614-current buffer.
3616-** mairix.el is an interface to mairix, a free tool for indexing and
3617-searching locally stored mail. It allows you to query mairix and
3618-display the search results with Rmail, Gnus and VM. Note that there
3619-is an existing Gnus back end, nnmairix.el, which should be used with
3620-Maildir/MH setups.
3622-** minibuffer-depth-indicate-mode shows the minibuffer depth in the prompt.
3624-** nXML Mode
3625-This is a new mode for editing XML documents. It allows a schema to
3626-be associated with the XML document being edited, using Relax NG as
3627-the schema language. The schema is used to provide two key features:
3629-*** Continuous validation. nXML validates as you type, highlighting
3630-any invalid parts of your document.
3632-*** Completion. nXML can assist you in entering an element name,
3633-attribute name or data value by using information about what is
3634-allowed by the schema in that context.
3636-** proced.el provides a Dired-like interface for operating on
3637-processes. Proced makes an Emacs buffer containing a listing of the
3638-current processes. You can use the normal Emacs commands to move
3639-around in this buffer, and special Proced commands to operate on the
3640-processes listed. It is currently only functional on GNU/Linux,
3641-MS-Windows and Solaris.
3643-** Remember Mode is a mode for jotting down things to remember.
3644-Notes can be saved to a Diary file. For details, see the Remember
3647-** RST mode is a major mode for editing reStructuredText files.
3649-** Ruby mode is a major mode for Ruby files.
3651-** Visual Line mode provides support for editing by visual lines.
3652-It turns on word-wrapping in the current buffer, and rebinds C-a, C-e,
3653-and C-k to commands that operate by visual lines instead of logical
3654-lines. This is a more reliable replacement for longlines-mode.
3655-This can also be turned on using the menu bar, via
3656-Options -> Line Wrapping in this Buffer -> Word Wrap
3658-** xesam.el is an implementation of Xesam, an interface to (desktop)
3659-search engines like Beagle, Strigi, and Tracker. The Xesam API
3660-requires D-Bus for communication.
3662-** zeroconf.el offers service discovery and service publishing
3663-interfaces according to the zeroconf specification. It communicates
3664-with Avahi, a zeroconf implementation, via D-Bus messages on systems
3665-which have installed this software.
3667-** There is a new `whitespace' package.
3668-(The pre-existing one has been renamed to `old-whitespace'.)
3669-Now, besides reporting bogus blanks, the whitespace package has a
3670-minor mode and a global minor mode to visualize blanks (TAB, (HARD)
3671-SPACE and NEWLINE). The visualization is made via faces and/or display
3672-table. It can also indicate lines that extend beyond a given column,
3673-trailing blanks, and empty lines at the start or end of a buffer.
3674-See `whitespace-style' for more details. The `whitespace-action' option
3675-specifies what to do when a buffer is visited, killed, or written.
3679-* Changes in Specialized Modes and Packages in Emacs 23.1
3681-** Abbrev has been rewritten in Elisp and extended with more flexibility.
3683-*** New functions: abbrev-get, abbrev-put, abbrev-table-get, abbrev-table-put,
3684-abbrev-table-p, abbrev-insert, abbrev-table-menu.
3686-*** Special hook `abbrev-expand-functions' obsoletes `pre-abbrev-expand-hook'.
3688-*** `make-abbrev-table', `define-abbrev', `define-abbrev-table' all take
3689-extra arguments for arbitrary properties.
3691-*** New variable `abbrev-minor-mode-table-alist'.
3693-*** `local-abbrev-table' can hold a list of abbrev-tables.
3695-*** Abbrevs have now the following special properties:
3696-`:count', `:system', `:enable-function', `:case-fixed'.
3698-*** Abbrev-tables have now the following special properties:
3699-`:parents', `:case-fixed', `:enable-function', `:regexp',
3702-** Apropos
3704-*** `apropos-library' describes the elements defined in a given library.
3706-*** Set `apropos-compact-layout' is you want a more compact (but wider) layout.
3708-** Archive Mode has basic support to browse Rar archives.
3709-Note, however, that the free version of the unrar command only handles
3710-versions 1 and 2 of the Rar format.
3712-** BibTeX mode
3714-*** New command `bibtex-initialize' (re)initializes BibTeX buffers.
3716-*** New `bibtex-entry-format' options `whitespace', `braces', and
3717-`string', disabled by default.
3719-*** New variable `bibtex-cite-matcher-alist' contains rules to
3720-identify cited keys in BibTeX entries, used by `bibtex-find-crossref'.
3722-*** Command `bibtex-url' allows multiple URLs per entry.
3724-** Bookmarks
3726-*** bookmark.el saves bookmarks in a pre-Emacs-23-incompatible file format
3727-bookmark.el can read a .emacs.bmk file saved by an older Emacs, but an
3728-older Emacs cannot read one saved by Emacs 23.
3730-** Calendar and diary
3732-*** There is a new date style, `iso', essentially year/month/day.
3733-The variable `european-calendar-style' is obsolete - use `calendar-date-style'.
3734-Similarly, the commands `american-calendar' and `european-calendar'
3735-should be replaced by `calendar-set-date-style'.
3737-*** The calendar namespace has been rationalized.
3738-All functions and variables now begin with a `calendar-', `diary-', or
3739-`holiday-' prefix. The various calendar systems have secondary
3740-prefixes, eg `calendar-french-'. The old names you are likely to use
3741-directly still exist, for the time being, as aliases, but please start
3742-using the new names.
3744-*** The whitespace in the calendar layout can be customized.
3745-See the variables:
3746-calendar-left-margin, calendar-intermonth-spacing, calendar-column-width,
3747-calendar-day-header-width, and calendar-day-digit-width.
3749-*** Text (e.g. ISO weeks) can be displayed between the calendar months.
3750-See the variables calendar-intermonth-header and calendar-intermonth-text.
3752-*** The function `holiday-chinese' computes holidays on the Chinese calendar.
3753-It has been used to add items to the list `holiday-oriental-holidays'.
3755-*** `diary-remind' accepts a negative number -DAYS as a shorthand for
3756-the list (1 2 ... DAYS).
3758-** Change Log mode
3760-*** The new command C-c C-f (change-log-find-file) finds the file
3761-associated with the current log entry.
3763-*** The new command C-c C-c (change-log-goto-source) goes to the
3764-source code associated with a log entry.
3766-** Compile and grep modes
3768-*** The mode-line entry for the *compilation* and *grep* buffer is color coded.
3769-It has different colors for to show that: (a) the command is still
3770-running, (b) successful completion, (c) error.
3772-*** compilation-auto-jump-to-first-error tells `compile' to jump to
3773-the first error encountered during compilations.
3775-*** compilation-scroll-output accepts a new value, `first-error', which
3776-says to stop auto scrolling at the first error that occurs.
3778-*** The `cc' alias for C++ files in `grep-file-aliases' has been
3779-improved. `hh' can be used to match C++ header files and `cchh' both
3780-C++ sources and headers.
3782-** Copyright
3784-*** You can specify your copyright holders' names.
3785-Only copyright lines with holders matching `copyright-names-regexp' are
3786-considered for update.
3788-*** Copyrights can be at the end of the buffer.
3789-This is controlled by `copyright-at-end-flag' (used by, e.g., change-log-mode).
3791-** Custom
3793-*** defcustom accepts new keyword arguments, `:safe' and `:risky', which
3794-set a variable's `safe-local-variable' and `risky-local-variable' property.
3796-** Diff mode
3798-*** diff-refine-hunk highlights word-level details of changes in a diff hunk.
3799-It's used automatically as you move through hunks, see
3800-diff-auto-refine-mode. It is bound to `C-c C-b'.
3802-*** diff-add-change-log-entries-other-window iterates through the diff
3803-buffer and tries to create ChangeLog entries for each change.
3804-It is bound to `C-x 4 A'.
3806-*** Turning on `whitespace-mode' in a diff buffer will show trailing
3807-whitespace problems in the modified lines.
3809-** Dired
3811-*** In Dired, C-x C-q now runs the command wdired-change-to-wdired-mode,
3812-and C-x C-q in wdired-mode exits it with asking a question about
3813-saving changes.
3815-*** `&' runs the command `dired-do-async-shell-command' that executes
3816-the command asynchronously without the need to manually add ampersand
3817-to the end of the command. Its output appears in the buffer `*Async Shell
3820-*** `M-s f C-s' and `M-s f M-C-s' run Isearch that matches only at file names.
3821-When a new user option `dired-isearch-filenames' is t, then even ordinary
3822-Isearch started with `C-s' and `C-M-s' matches only at file names in the
3823-Dired buffer. When `dired-isearch-filenames' is `dwim' then activation of
3824-file name Isearch depends on the position of point - if point is on a file
3825-name initially, then Isearch matches only file names, otherwise it matches
3826-everywhere in the Dired buffer. You can toggle file names matching on or
3827-off by typing `M-s f' in Isearch mode.
3829-*** `M-s a C-s' and `M-s a M-C-s' run multi-file Isearch on the marked files.
3830-They visit the first marked file in the sequence and display the usual Isearch
3831-prompt for a string or a regexp where all Isearch commands are available.
3833-*** `Q' in Dired provides two new keys for multi-file replacement.
3834-The upper case key `Y' replaces all remaining matches in all remaining files
3835-with no more questions. The upper case key `N' stops doing replacements
3836-in the current file and skips to the next file. These multi-file keys
3837-are available for all commands that use `tags-query-replace'
3838-including `dired-do-query-replace-regexp', `vc-dir-query-replace-regexp',
3841-** Fortran
3843-*** The line length of fixed-form Fortran is not fixed at 72 any more.
3844-Customize the variable `fortran-line-length' to change it.
3846-*** In Fortran mode, M-; is now bound to the standard comment-dwim,
3847-rather than fortran-indent-comment.
3849-*** (The increasingly misnamed) F90 mode supports Fortran 2003 syntax.
3851-** Gnus
3853-*** The Gnus package has been updated
3854-There are many new features, bug fixes and improvements; see the file
3855-GNUS-NEWS or the node "No Gnus" in the Gnus manual for details.
3857-*** In Emacs 23, Gnus uses Emacs' new internal coding system `utf-8-emacs' for
3858-saving articles, drafts, and ~/.newsrc.eld. These file may not be read
3859-correctly in Emacs 22 and below. If you want to Gnus across different Emacs
3860-versions, you may set `mm-auto-save-coding-system' to `emacs-mule'.
3862-*** Passwords are consistently loaded through `auth-source'
3863-Gnus can use `auth-source' for POP and IMAP passwords. Also see that
3864-`smtpmail' and `url' support `auth-source' for SMTP and HTTP/HTTPS/RSS
3865-authentication respectively.
3867-** Help mode
3869-*** New macro `with-help-window' should set up help windows better
3870-than `with-output-to-temp-buffer' with `print-help-return-message'.
3872-*** New option `help-window-select' permits to customize whether help
3873-window shall be automatically selected when invoking help.
3875-*** New variable `help-window-point-marker' permits one to specify a new
3876-position for point in help window (for example in `view-lossage').
3878-** Isearch
3880-*** New command `isearch-forward-word' bound globally to `M-s w' starts
3881-incremental word search. New command `isearch-toggle-word' bound to the
3882-same key `M-s w' in Isearch mode toggles word searching on or off
3883-while Isearch is active.
3885-*** New command `isearch-highlight-regexp' bound to `M-s h r' in Isearch
3886-mode runs `highlight-regexp' (`hi-lock-face-buffer') with the current
3887-search string as its regexp argument. The same key `M-s h r' and
3888-other keys on the `M-s h' prefix are bound globally to the command
3889-`highlight-regexp' and other hi-lock commands.
3891-*** New command `isearch-occur' bound to `M-s o' in Isearch mode
3892-runs `occur' with the current search string. The same key `M-s o'
3893-is bound globally to the command `occur'.
3895-*** Isearch can now search through multiple ChangeLog files.
3896-When running Isearch in a ChangeLog file, if the search fails,
3897-then another C-s tries searching the previous ChangeLog,
3898-if there is one (e.g. going from ChangeLog to ChangeLog.12).
3899-This is enabled if multi-isearch-search is non-nil.
3901-*** Two new commands to start Isearch on a list of marked buffers
3902-for buff-menu.el and ibuffer.el are bound to the keys `M-s a C-s' and
3903-`M-s a M-C-s'.
3905-*** The part of an Isearch that failed to match is highlighted in
3906-`isearch-fail' face.
3908-*** `C-h C-h' in Isearch mode displays isearch-specific Help screen,
3909-`C-h b' displays all Isearch key bindings, `C-h k' displays the full
3910-documentation of the given Isearch key sequence, `C-h m' displays
3911-documentation for Isearch mode. All the other Help commands exit
3912-Isearch mode and execute their global definitions.
3914-*** When started in the minibuffer, Isearch searches in the minibuffer
3915-history. See `Minibuffer changes', above.
3917-** MH-E
3919-*** Upgraded to MH-E version 8.2. See MH-E-NEWS for details.
3921-** Python
3922-*** The file etc/ now supports both Python 2 and 3, meaning
3923-that either version can be used as inferior Python by python.el.
3925-*** Python mode now has `pdbtrack' functionality. When using pdb to
3926-debug a Python program, pdbtrack notices the pdb prompt and displays
3927-the source file and line that the program is stopped at, much the same
3928-way as gud-mode does for debugging C programs with gdb.
3930-** Recentf
3932-*** The default value of `recentf-keep' prevents from checking of
3933-remote files, if there is no established connection to the
3934-corresponding remote host.
3936-** Rmail
3938-*** Rmail no longer converts the messages to Babyl format.
3939-Instead, it uses UNIX mbox format, both on disk and in Rmail buffers,
3940-and does conversion and decoding when a message is displayed.
3942-The first time you visit an Rmail file in Babyl format, Rmail
3943-automatically converts it to mbox format. This is a one-time
3944-conversion, but it can take a few minutes, depending on how fast is
3945-your machine and on the size of the file. You should find the rest of
3946-Rmail usage unaltered.
3948-However, M-x set-rmail-inbox-list now lasts only for one session
3949-because there is no way to save the list of inbox files in an
3950-mbox-format file.
3952-Also, whereas with Babyl format M-x find-file would switch to Rmail
3953-mode, with mbox format this is no longer the case (there being no way
3954-to add an "-*- rmail-*-" cookie to an mbox file). Use C-u M-x rmail
3957-If you have written any extensions to Rmail, they are likely to need
3958-updating. Conceptually, the Rmail buffer that you see is no longer
3959-just a narrowed portion of the whole. So you cannot access the whole
3960-of a message (or message collection) by a simple save-restriction and
3961-widen. Instead, there are two buffers: the rmail-buffer, and the
3962-rmail-view-buffer. The former is the buffer that you see, the latter
3963-is invisible. Most of the time, the invisible `view' buffer contains
3964-the full contents of the Rmail file, and the Rmail buffer contains a
3965-decoded copy of the current message (with only a subset of the
3966-headers). In this state, Rmail is said to be `swapped'.
3968-You may find the following functions useful:
3970-`rmail-get-header' and `rmail-set-header' get or set the value of a
3971-message header, whether or not it is currently visible.
3973-`rmail-apply-in-message' is a general purpose function that calls a
3974-function (with arguments) which you specify on the full text of a given
3975-message. To further narrow to just the headers, search forward for "\n\n".
3977-*** The new command `rmail-mime' displays MIME messages.
3978-It is bound to `v' in Rmail buffers and summaries. It displays plain
3979-text and multipart messages in a temporary buffer, and offers buttons
3980-to save attachments.
3982-*** The command `rmail-redecode-body' no longer accepts the optional arg RAW.
3983-Since Rmail now holds messages in their original undecoded form in a
3984-separate buffer, `rmail-redecode-body' no longer encodes the original
3985-message, and therefore there should be no need to avoid encoding it.
3987-*** The o command is now `rmail-output'. It is an all-purpose command
3988-for copying messages from Rmail and appending them to files. It
3989-handles Babyl-format files as well as mbox-format files, and it
3990-handles both kinds properly when they are visited in Emacs. It always
3991-copies the full headers of the message.
3993-*** The C-o command is now `rmail-output-as-seen'. It uses
3994-the message as displayed, appending it to an mbox file.
3996-*** The modified status of the Rmail buffer is reported in the mode-line.
3997-Previously, this information was hidden.
3999-** TeX modes
4001-*** New option latex-indent-within-escaped-parens
4002-permits to customize indentation of LaTeX environments delimited
4003-by escaped parens.
4005-** T-mouse Mode
4007-*** If the gpm mouse server is running and t-mouse-mode is enabled,
4008-Emacs uses a Unix socket in a GNU/Linux console to talk to server,
4009-rather than faking events using the client program mev. This C level
4010-approach provides mouse highlighting and help echoing in the
4013-** Tramp
4015-*** New connection methods.
4016-The new methods "plinkx", "plink2", "psftp", "sftp" and "fish" have
4017-been introduced. There are also new so-called gateway methods
4018-"tunnel" and "socks".
4020-*** IPv6 addresses.
4021-IPv6 addresses are supported now as host names. They must be embedded
4022-in square brackets, like in "/ssh:[::1]:".
4024-*** Multihop syntax has been removed.
4025-The pseudo-method "multi" has been removed. Instead, multi hops
4026-can be specified by the new variable `tramp-default-proxies-alist'.
4028-*** More default settings.
4029-Default values can be set via the variables `tramp-default-user',
4030-`tramp-default-user-alist' and `tramp-default-host'.
4032-*** Connection information is cached.
4033-In order to reduce connection setup, information about used
4034-connections is kept persistently in a file. The name of this file is
4035-defined in the variable `tramp-persistency-file-name'.
4037-*** Control of remote processes.
4038-Running processes on a remote host can be controlled by settings in
4039-`tramp-remote-path' and `tramp-remote-process-environment'.
4041-*** Success of remote copy is checked.
4042-When the variable `file-precious-flag' is set, the success of a remote
4043-file copy is checked via the file's checksum.
4045-*** Passwords can be read from an authentification file.
4046-Tramp uses the package `auth-source' to read passwords from a file, if
4049-** VC and related modes
4051-*** VC now supports applying VC operations to a set of files at a time.
4052-This enables VC to work much more effectively with changeset-oriented
4053-version-control systems such as Subversion, GNU Arch, Mercurial, Git
4054-and Bzr. VC will now pass a multiple-file commit to these systems as
4055-a single changeset.
4057-*** vc-dir is a new command that displays file names and their VC
4058-status. It allows to apply various VC operations to a file, a
4059-directory or a set of files/directories.
4061-*** VC switches are no longer appended, rather the first non-nil value is used.
4062-(This was for the most part true in Emacs 22, but was not advertised).
4063-This is because there is an increasing variety of VC systems, and they
4064-do not all accept the same "common" options. For example, a CVS diff
4065-command used to append the values of `vc-cvs-diff-switches',
4066-`vc-diff-switches', and `diff-switches'. Now the first non-nil value
4067-from that sequence is used. The special value `t' means "no switches".
4069-*** Clicking on the VC mode-line entry now pops the VC menu.
4071-*** The VC mode-line entry now has a tooltip that explains the VC file status.
4073-*** In VC Annotate mode, the key bindings have changed to use lower
4074-case keys instead of the upper case keys used in the past.
4076-*** In VC Annotate mode, for VC systems that support changesets, you can
4077-see the diff for the whole changeset (not only for the current file)
4078-by typing the D key. Using the "Show changeset diff of revision at
4079-line" menu entry does the same thing.
4081-*** In VC Annotate mode, you can type v to toggle the annotation visibility.
4083-*** In VC Annotate mode, you can type f to show the file revision on
4084-the current line.
4086-*** Asynchronous VC commands display [Waiting...] in the mode-line
4087-of the corresponding buffer as long as the asynchronous process is
4090-*** Log entries can be modified using the key "e" in log-view.
4091-For now only CVS, RCS, SCCS and SVN support this functionality.
4092-This is done by the `modify-change-comment' backend function.
4094-*** In log-view-mode, for VC systems that support changesets, you can
4095-see the diff for the whole changeset (not only for the current file)
4096-by typing the D key or using the "Changeset Diff" menu entry.
4098-*** In Log Edit mode, C-c C-d now shows the diff for the files involved.
4100-*** vc-git supports the "git grep" command.
4102-*** VC Support for Meta-CVS has been removed for lack of a maintainer able
4103-to update it to the new VC.
4105-** Miscellaneous
4107-*** comint-mode uses `start-file-process' now (see Lisp Changes).
4108-If `default-directory' is a remote file name, subprocesses are started
4109-on the corresponding remote system.
4111-*** Eldoc highlights the function argument under point
4112-with the face `eldoc-highlight-function-argument'.
4114-*** In Etags, the --members option is now the default.
4115-Use --no-members if you want the old default behavior of not tagging
4116-struct members in C, members variables in C++ and variables in PHP.
4118-*** The `gdb' command only works with the graphical interface now.
4119-Use `gud-gdb' if you want the (old) text command mode.
4121-*** goto-address.el provides two new minor modes, goto-address-mode and
4122-goto-address-prog-mode, which buttonize URLS and email addresses.
4124-*** The new command `eshell/info' runs info in an eshell buffer.
4126-*** The new variable `ffap-rfc-directories' specifies a list of local
4127-directories in which `ffap-rfc' will first search for RFCs.
4129-*** hide-ifdef-mode allows shadowing ifdef-blocks instead of hiding them.
4130-See option `hide-ifdef-shadow' and function `hide-ifdef-toggle-shadowing'.
4132-*** `icomplete-prospects-height' now supersedes `icomplete-prospects-length'.
4134-*** Info displays breadcrumbs in the header of the page.
4135-See Info-breadcrumbs-depth to control it.
4137-*** net-utils has an `iwconfig' command, similar to the existing `ifconfig'.
4138-It is used to configure wireless interfaces.
4140-*** The pcmpl-unix package supports hostname completion for ssh and scp.
4142-*** sgml-electric-tag-pair-mode lets you simultaneously edit matched tag pairs.
4144-*** smerge-refine highlights word-level details of changes in conflict.
4145-It's used automatically as you move through conflicts, see
4148-*** talk.el has been extended for multiple tty support.
4150-*** A new command `display-time-world' has been added to the Time
4151-package. It creates a buffer with an updating time display using
4152-several time zones.
4154-*** The appearance of superscript and subscript in TeX is more customizable.
4155-See the documentation of the variables: tex-fontify-script,
4156-tex-font-script-display, tex-suscript-height-ratio, and
4159-*** view-remove-frame-by-deleting is now by default t
4160-since users found iconification of view-mode frames distracting.
4162-*** WoMan tries to add locale-specific manual page directories to the
4163-search path. This can be disabled by setting `woman-locale' to nil.
4167-* Changes in Emacs 23.1 on non-free operating systems
4169-** Case is now considered significant in completion on MS-Windows.
4170-The default value of `completion-ignore-case' is now nil on
4171-MS-Windows, the same as it is for other operating systems. The
4172-variable doesn't apply to reading a file name -- in that case Emacs
4173-heeds `read-file-name-completion-ignore-case' instead.
4175-** IPv6 is supported on MS-Windows.
4176-Emacs now supports IPv6 on Windows XP and later, and earlier versions
4177-of Windows with third party IPv6 stacks installed. In Emacs 22, IPv6 was
4178-supported on other platforms, but not on Windows due to using the winsock
4179-1.1 header file, even though Emacs was linking to the winsock 2 library.
4181-** Busy cursor (hourglass) now displays on MS-Windows.
4182-When Emacs is busy, an hourglass mouse cursor is displayed on Windows.
4183-In Emacs 22 only X supported the busy cursor.
4185-** Battery status is available on MS-Windows
4186-Emacs can now display the battery status in the mode-line when enabled with
4187-display-battery-mode or from the Options menu. More verbose battery
4188-information is also available with the command `battery'. In Emacs 22
4189-battery status was supported only on GNU/Linux and Mac.
4191-** More keys available on MS-Windows.
4192-Keys normally associated with IMEs, and some exotic keys not normally found
4193-on standard keyboards have been given names so they can be bound to functions
4194-inside Emacs. If there are keys on your keyboard that have not been exposed
4195-to Emacs in the past, try C-h k to see if they are available now.
4197-Emacs can now bind functions to the extra buttons for media player and
4198-browser control present on some keyboards. These buttons are disabled
4199-by default, since enabling them prevents their system-wide use when
4200-Emacs has focus. To enable them, set the variable
4201-w32-pass-multimedia-buttons to nil. See the doc string of that variable
4202-for the list of extra keys that are available.
4204-** BDF fonts no longer supported on MS-Windows.
4205-The font backend was completely rewritten for this release. The focus
4206-on Windows has been getting acceptable performance and full unicode
4207-support, including complex script shaping for native Windows fonts. A
4208-rewrite of the BDF font support has not happened due to lack of time
4209-and developers. If demand still exists for such a backend even with
4210-the improved language support for native Windows fonts, future
4211-development in this direction will most likely be based on the
4212-freetype library, giving access to a wider range of font formats.
4216-* Incompatible Lisp Changes in Emacs 23.1
4218-** Variables cannot be both buffer-local and frame-local any more.
4220-** `functionp' returns nil for special forms.
4221-I.e., it only returns t for objects that can be passed to `funcall'.
4223-** The behavior of map-char-table has changed. It may call the
4224-specified function with a cons (FROM . TO) as a key if characters in
4225-that range have the same value.
4227-** Process changes
4229-*** The function `dired-call-process' has been removed.
4231-*** The multibyteness of process filters is now determined by the
4232-coding-system used for decoding. The functions
4233-`process-filter-multibyte-p' and `set-process-filter-multibyte' are
4236-** The variable `byte-compile-warnings' can now be a list starting with `not',
4237-meaning to disable the specified warnings. The meaning of this list
4238-may therefore be the reverse of what you expect (of course, this is
4239-only an issue if you make use of the new `not' syntax). Rather than
4240-checking/manipulating elements directly, use the new functions
4241-`byte-compile-warning-enabled-p', `byte-compile-disable-warning', and
4244-** `mode-name' is no longer guaranteed to be a string.
4245-Use `(format-mode-line mode-name)' to ensure a string value.
4247-** The function x-font-family-list has been removed.
4248-Use the new function font-family-list (see Lisp Changes, below).
4250-** Internationalization changes
4252-*** The value of the function `charset-id' is now always 0.
4254-*** The functions `register-char-codings' and `coding-system-spec'
4255-have been removed.
4257-*** The cpXXX coding systems are now supported automatically.
4258-The functions cp-...-codepage, which you had to use in Emacs 22 to
4259-enable support for these coding systems, have been deleted.
4261-*** The following features have been removed. They were used for
4262-displaying various scripts with specific fonts, and are no longer
4263-needed now that OpenType font support is available:
4265-**** `devanagari' and `devan-util', and all associated devanagari-* and
4266-dev-* functions and variables (formerly used for Devanagari script).
4268-**** `kannada' and `knd-util', and all associated kannada-* and knd-*
4269-functions and variables (formerly used for Kannada script).
4271-**** `malayalam' and `mlm-util', and all associated malayalam-* and
4272-mlm-* functions and variables (formerly used for Malayalam script).
4274-**** `tamil' and `tml-util, and all associated tamil-* and tml-*
4275-functions and variables (formerly used for Tamil script).
4277-*** The meaning of NAME argument of `set-fontset-font' is changed.
4278-Previously nil is accepted as the default fontset. Now, nil is for
4279-the fontset of the selected frame and t is for the default fontset.
4281-*** The meaning of FONTSET argument of `print-fontset' is changed.
4282-Now, nil is for the fontset of the selected frame and t is for the
4283-default fontset.
4285-** If a function in write-region-annotate-functions returns with a
4286-different buffer current, Emacs no longer kills that buffer
4287-automatically. This behavior existed in previous versions of Emacs,
4288-but was undocumented. To kill a buffer after write-region, give the
4289-variable `write-region-post-annotation-function' a buffer-local value
4290-of `kill-buffer'.
4292-** The variable temp-file-name-pattern has been removed.
4293-This variable was only used by call-process-region, which now uses
4294-temporary-file-directory instead.
4296-** The COUNT and SYSTEM-FLAG arguments to define-abbrev have been
4297-removed. The function now takes extra arguments for specifying
4298-arbitrary abbrev properties.
4300-** end-of-defun-function is now guaranteed to work only when called
4301-from the start of a defun. It must now leave point exactly at the end
4302-of defun, since `end-of-defun' now itself moves forward over
4303-whitespace after calling it.
4307-* Lisp Changes in Emacs 23.1
4309-** The new variable `generate-autoload-cookie' controls the magic comment
4310-string used by `update-file-autoloads' to find autoloaded forms. The
4311-variable `generated-autoload-file' similarly controls the name of the
4312-file where `update-file-autoloads' writes the calls to `autoload'.
4313-The default values are ";;;###autoload" and `loaddefs.el',
4316-** New primitives `list-system-processes' and `process-attributes'
4317-let Lisp programs access the processes that are running on the local
4318-machine. See the doc strings of these functions for more details.
4319-Not all platforms support accessing this information; on those that
4320-don't, these primitives will return nil.
4322-** New variable `user-emacs-directory'.
4323-Use this instead of "~/.emacs.d".
4325-** If a local hook function has a non-nil `permanent-local-hook'
4326-property, `kill-all-local-variables' does not remove it from the local
4327-value of the hook variable; it remains even if you change major modes.
4329-** `frame-inherited-parameters' lets new frames inherit parameters from
4330-the selected frame.
4332-** New keymap `input-decode-map' overrides like key-translation-map, but
4333-applies before function-key-map. Also it is terminal-local contrary to
4334-key-translation-map. Terminal-specific key-sequences are generally added to
4335-this map rather than to function-key-map now.
4337-** `ignore-errors' is now a standard macro (does not require the CL package).
4339-** `interprogram-paste-function' can now return one string or a list
4340-of strings. In the latter case, Emacs puts the second and following
4341-strings on the kill ring.
4343-** In `condition-case', a handler can specify "let the debugger run first".
4344-You do this by writing `debug' in the list of conditions to be handled,
4345-like this:
4347- (condition-case nil
4348- (foo bar)
4349- ((debug error) nil))
4351-** clone-indirect-buffer now runs the clone-indirect-buffer-hook.
4353-** `beginning-of-defun-function' now takes one argument, the count given to
4354-`beginning-of-defun'. (N.B. `end-of-defun-function' doesn't take any
4357-** `file-remote-p' has new optional parameters IDENTIFICATION and CONNECTED.
4358-IDENTIFICATION specifies which part of the remote identifier has to be
4359-returned. With CONNECTED passed non-nil, it is checked whether a
4360-remote connection has been established already.
4362-** The new macro `declare-function' suppresses compiler warnings about
4363-undefined functions.
4365-** Changes to interactive function handling
4367-*** The new interactive spec code ^ says to first call
4368-handle-shift-selection if shift-select-mode is non-nil, before reading
4369-the command arguments. This is used for shift-selection (see above).
4371-*** Built-in functions can now have an interactive specification that
4372-is not a prompt string. If the `intspec' parameter of a `DEFUN'
4373-starts with a `(', the string is evaluated as a Lisp form.
4375-*** The interactive-form of a function can be added post-facto via the
4376-`interactive-form' symbol property. Mostly useful to add complex
4377-interactive forms to subroutines.
4379-** Region changes
4381-*** Commands should use `use-region-p' to test whether there is
4382-an active region that they should operate on.
4384-*** `region-active-p' returns non-nil when Transient Mark mode is
4385-enabled and the mark is active. Most commands that act specially on
4386-the active region in Transient Mark mode should use `use-region-p'
4387-instead of `region-active-p', because `use-region-p' obeys the new
4388-user option `use-empty-active-region' (see Editing Changes, above).
4390-*** If a command sets `transient-mark-mode' to (only . OLDVAL), that
4391-means to activate transient-mark-mode temporarily, until the next
4392-unshifted point motion command or mark deactivation. Afterwards,
4393-reset transient-mark-mode to the value OLDVAL. The values `only' and
4394-`identity', introduced in Emacs 22, are now deprecated.
4396-** Emacs session information
4398-*** The new variables `before-init-time' and `after-init-time' record the
4399-value of `current-time' before and after Emacs loads the init files.
4401-*** The new function `emacs-uptime' returns the uptime of an Emacs instance.
4403-*** The new function `emacs-init-time' returns the duration of the
4404-Emacs initialization.
4406-** Changes affecting display-buffer
4408-*** display-buffer tries to be smarter when splitting windows.
4409-The new option split-window-preferred-function lets you specify your own
4410-function to pop up new windows. Its default value split-window-sensibly
4411-can split a window either vertically or horizontally, whichever seems
4412-more suitable in the current configuration. You can tune the behavior
4413-of split-window-sensibly by customizing split-height-threshold and the
4414-new option split-width-threshold. Both options now take the value nil
4415-to inhibit splitting in one direction. Setting split-width-threshold to
4416-nil inhibits horizontal splitting and gets you the behavior of Emacs 22
4417-in this respect. In any case, display-buffer may now split the largest
4418-window vertically even when it is not as wide as the containing frame.
4420-*** If pop-up-frames has the value `graphic-only', display-buffer only
4421-makes a separate frame on graphic displays.
4423-*** select-frame and set-frame-selected-window have a new optional
4424-argument NORECORD. If non-nil, this will avoid messing with the order
4425-of recently selected windows and the buffer list.
4427-** Window parameters can now be defined.
4428-These are analogous to frame parameters, but are associated with
4429-individual windows.
4431-*** The new functions window-parameters, window-parameter, and
4432-set-window-parameter are used to query and set window parameters.
4434-** Minibuffer and completion changes
4436-*** A list of default values can be specified for the DEFAULT argument of
4437-functions `read-from-minibuffer', `read-string', `read-command',
4438-`read-variable', `read-buffer', `completing-read'. Elements of this list
4439-are available for inserting into the minibuffer by typing `M-n'.
4440-For empty input these functions return the first element of this list.
4442-*** New function `read-regexp' uses the regexp history and some useful
4443-regexp defaults (string at point, last Isearch/replacement regexp/string)
4444-via M-n when reading a regexp in the minibuffer.
4446-*** minibuffer-local-must-match-filename-map is now named
4449-*** The `require-match' argument to `completing-read' accepts the new
4450-values `confirm-only' and `confirm-after-completion'.
4452-** Search and replacement changes
4454-*** The regexp form \(?<num>:<regexp>\) specifies the group number explicitly.
4456-*** New function `match-substitute-replacement' returns the result of
4457-`replace-match' without actually using it in the buffer.
4459-*** The new variable `replace-search-function' determines the function
4460-to use for searching in query-replace and replace-string. The
4461-function it specifies is called by `perform-replace' when its 4th
4462-argument is nil.
4464-*** The new variable `replace-re-search-function' determines the
4465-function to use for searching in `query-replace-regexp',
4466-`replace-regexp', `query-replace-regexp-eval', and
4467-`map-query-replace-regexp'. The function it specifies is called by
4468-`perform-replace' when its 4th argument is non-nil.
4470-*** New keymap `search-map' bound to `M-s' provides global bindings
4471-for search related commands.
4473-*** New keymap `multi-query-replace-map' contains additonal keys bound
4474-to `automatic-all' and `exit-current' for multi-buffer interactive replacement.
4476-*** The variable `inhibit-changing-match-data', if non-nil, prevents
4477-the search and match primitives from changing the match data.
4479-*** New functions `word-search-forward-lax' and `word-search-backward-lax'.
4480-These are like `word-search-forward and `word-search-backward', except
4481-that the end of the search string need not match a word boundary,
4482-unless it ends in whitespace.
4484-** File handling changes
4486-*** set-file-modes is now interactive and can take the mode value in
4487-symbolic notation thanks to auxiliary functions.
4489-*** file-local-variables-alist stores an alist of file-local
4490-variables defined in the current buffer.
4492-** Face-remapping
4494-*** Each face can be remapped to a different face definition using the
4495-variable `face-remapping-alist'. This is an alist that maps faces to
4496-replacement definitions (which can be face names, lists of face names,
4497-or attribute/value plists. If this variable is buffer-local, the
4498-remapping occurs only in that buffer.
4500-*** text-scale-mode remaps the default face to a larger or smaller
4501-size in the current buffer. This feature is used by the Buffer Face
4502-menu and the new `C-x C-+', `C-x C--', and `C-x C-0' commands (see
4503-Editing Changes, above).
4505-*** New functions:
4507-**** `face-remap-add-relative' adds a face remapping entry to the
4508-current buffer.
4510-**** ``face-remap-remove-relative' removes a face remapping entry from
4511-the current buffer.
4513-**** `face-remap-reset-base' restores a face to its global definition.
4515-**** `face-remap-set-base' sets the base remapping of a face.
4517-** Process changes
4519-*** The new function `start-file-process' is similar to `start-process',
4520-but obeys file handlers. The file handler is chosen based on
4521-`default-directory'. The functions `start-file-process-shell-command'
4522-and `process-file-shell-command' are also new; they call internally
4523-`start-file-process' and `process-file', respectively.
4525-*** The new function `process-lines' executes an external program and
4526-returns its output as a list of lines.
4528-** Character code, representation, and charset changes.
4530-*** In multibyte buffers and strings, characters are represented by
4531-UTF-8 byte sequences. The character code space is now 0x0..0x3FFFFF
4532-with no gap; code points 0x0..0x10FFFF are Unicode characters of the
4533-same code points, while code points 0x3FFF80..0x3FFFFF are raw 8-bit
4536-*** Generic characters no longer exist.
4538-*** The concept of a charset has changed. A single character may
4539-belong to multiple charsets (e.g. a-grave, U+00E0, belongs to charsets
4540-unicode, iso-8859-1, iso-8859-3, etc).
4542-**** The dimension of a charset is now 1, 2, 3, or 4, and the size of
4543-each dimension is no longer limited to 94 or 96.
4545-**** A dynamic charset priority list is used to infer the charset of
4546-characters for display.
4548-*** The functions `split-char' and `make-char' now accept up to 4
4549-positional codes instead of just 2.
4551-*** The functions `encode-char' and `decode-char' now accept any character sets.
4553-*** The function `define-charset' now accepts a completely different
4554-form of arguments (old-style arguments still work).
4556-*** The value of the function `char-charset' depends on the current
4557-priorities of charsets.
4559-*** The function get-char-code-property now accepts many Unicode base
4560-character properties. They are `name', `general-category',
4561-`canonical-combining-class', `bidi-class', `decomposition',
4562-`decimal-digit-value', `digit-value', `numeric-value', `mirrored',
4563-`old-name', `iso-10646-comment', `uppercase', `lowercase', and
4566-*** The functions `modify-syntax-entry' and `modify-category-entry' now
4567-accept a cons of characters as the first argument, and modify all
4568-entries in that range of characters.
4570-*** Use of `translation-table-for-input' for character code unification
4571-is now obsolete, since Emacs 23.1 and later uses Unicode as basis for
4572-internal representation of characters.
4574-*** New functions:
4576-**** `characterp' returns t if and only if the argument is a character.
4577-This replaces `char-valid-p', which is now obsolete.
4579-**** `max-char' returns the maximum character code (currently #x3FFFFF).
4581-**** `define-charset-alias' defines an alias of a charset.
4583-**** `set-charset-priority' sets priorities of charsets.
4585-**** `charset-priority-list' returns a prioritized list of charsets.
4587-**** `unibyte-string' makes a unibyte string from bytes.
4589-**** `define-char-code-property' defines a character code property.
4591-**** `char-code-property-description' returns the description string of
4592-a character code property.
4594-*** New variables:
4596-**** `find-word-boundary-function-table' is a char-table of functions to
4597-search for a word boundary.
4599-**** `char-script-table' is a char-table of script names.
4601-**** `char-width-table' is a char-table of character widths.
4603-**** `print-charset-text-property' controls how to handle `charset' text
4604-property on printing a string.
4606-**** `printable-chars' is a char-table of printable characters.
4608-** Code conversion changes
4610-*** The new function `define-coding-system' should be used to define a
4611-coding system instead of `make-coding-system' (which is now obsolete).
4613-*** The functions `encode-coding-region' and `decode-coding-region'
4614-have an optional 4th argument to specify where the result of
4615-conversion should go.
4617-*** The functions `encode-coding-string' and `decode-coding-string'
4618-have an optional 4th argument specifying a buffer to store the result
4619-of conversion.
4621-*** The new variable `inhibit-null-byte-detection' controls whether to
4622-consider text with null bytes as binary data. By default, it is
4623-`nil', and Emacs uses `no-conversion' for any text containing null
4626-*** The functions `set-coding-priority' and `make-coding-system' are obsolete.
4628-*** New functions:
4630-**** `with-coding-priority' executes Lisp code using the specified
4631-coding system priority order.
4633-**** `check-coding-systems-region' checks if the text in the region is
4634-encodable by the specified coding systems.
4636-**** `coding-system-aliases' returns a list of aliases of a coding system.
4638-**** `coding-system-charset-list' returns a list of charsets supported
4639-by a coding system.
4641-**** `coding-system-priority-list' returns a list of coding systems
4642-ordered by their priorities.
4644-**** `set-coding-system-priority' sets priorities of coding systems.
4646-**** `coding-system-from-name' returns a coding system matching with
4647-the argument name.
4649-** There is a new input method, Robin, different from Quail.
4650-It has three functionalities:
4651- i) a simple input method (converts an ASCII sequence into a string).
4652-ii) converts an existing buffer substring into another string
4653-iii) reverse conversion (each character produced by a
4654-robin rule can hold the original ASCII sequence as a char-code-property)
4656-*** The new function `robin-define-package' defines a Robin package.
4658-*** The new function `robin-modify-package' modifies an existing Robin package.
4660-*** The new function `robin-use-package' starts using a Robin package
4661-as an input method.
4663-*** The new function `string-to-unibyte' is like `string-as-unibyte'
4664-but signals an error if STRING contains a non-ASCII, non-eight-bit
4667-** Changes related to the new font backend
4669-*** Which font backends to use can be specified by the X resource
4670-"FontBackend". For instance, to use both X core fonts and Xft fonts:
4672-Emacs.FontBackend: x,xft
4674-If this resource is not set, Emacs tries to use all font backends
4675-available on your graphic device.
4677-*** New frame parameter `font-backend' specifies a list of
4678-font-backends supported by the frame's graphic device. On X, they are
4679-currently `x' and `xft'.
4681-*** The function `set-fontset-font' now accepts a script name as the
4682-second argument, and has an optional 5th argument to control how to
4683-set the font.
4685-*** New functions:
4687-**** `fontp' checks if the argument is a font-spec or font-entity.
4689-**** `font-spec' creates a new font-spec object.
4691-**** `font-get' returns a font property value.
4693-**** `font-put' sets a font property value.
4695-**** `font-face-attributes' returns a plist of face attributes set by a font.
4697-**** `list-fonts' returns a list of font-entities matching a font spec.
4699-**** `find-font' returns the font-entity best matching the given font spec.
4701-**** `font-family-list' returns a list of family names of available fonts.
4703-**** `font-xlfd-name' returns an XLFD name of a given font spec, font
4704-entity, or font object.
4706-**** `clear-font-cache' clears all font caches.
4708-** Changes related to multiple-terminal (multi-tty) support
4710-*** $TERM is now set to `dumb' for subprocesses. If you want to know the
4711-$TERM inherited by Emacs you will have to look inside initial-environment.
4713-*** $DISPLAY is now dynamically inherited from the frame's `display'.
4715-*** The `window-system' variable is now frame-local. The new
4716-`initial-window-system' variable contains the `window-system' value
4717-for the first frame. `window-system' is also now a function that
4718-takes a frame argument.
4720-*** The `keyboard-translate-table' variable and the terminal and
4721-keyboard coding systems are now terminal-local.
4723-*** You can specify a terminal device (`tty' parameter) and a terminal
4724-type (`tty-type' parameter) to `make-terminal-frame'.
4726-*** The function `make-frame-on-display' now works during a tty
4729-*** A new `terminal' data type.
4730-The functions `get-device-terminal', `terminal-parameters',
4731-`terminal-parameter', `set-terminal-parameter' use this data type.
4733-*** Function key sequences are now mapped using `local-function-key-map',
4734-a new variable. This inherits from the global variable function-key-map,
4735-which is not used directly any more.
4737-*** New hooks:
4739-**** before-hack-local-variables-hook is called after setting new
4740-variable file-local-variables-alist, and before actually applying the
4741-file-local variables.
4743-**** `suspend-tty-functions' and `resume-tty-functions' are called
4744-after a tty frame has been suspended or resumed, respectively. The
4745-functions are called with the terminal id of the frame being
4746-suspended/resumed as a parameter.
4748-**** The special hook `delete-terminal-functions' is called before
4749-deleting a terminal.
4751-*** New functions:
4753-**** `delete-terminal'
4755-**** `suspend-tty'
4757-**** `resume-tty'.
4759-*** `initial-environment' holds the environment inherited from Emacs's parent.
4761-** Redisplay changes
4763-*** For underlined characters, the distance between the underline and
4764-the baseline is controlled by a new variable, `underline-minimum-offset'.
4766-*** You can now pass the value of the `invisible' property to
4767-invisible-p to check whether it would cause the text to be invisible.
4768-This is convenient when checking invisibility of text with no buffer
4769-position (e.g. in before/after-strings).
4771-*** `clear-image-cache' can be told to flush only images of a specific file.
4773-*** `vertical-motion' can now be given a goal column.
4774-It now accepts a cons cell (COLS . LINES) in its first argument, which
4775-says to stop, where possible, at a pixel x-position equal to COLS
4776-times the default column width.
4778-*** redisplay-end-trigger-functions, set-window-redisplay-end-trigger,
4779-and window-redisplay-end-trigger are obsolete. Use `jit-lock-register'
4782-*** The new variables `wrap-prefix' and `line-prefix' specify display
4783-specs which are appended at display-time to every continuation line
4784-and non-continuation line, respectively. In addition, Emacs
4785-recognizes the `wrap-prefix' and `line-prefix' text or overlay
4786-properties; these have the same effects as the variables of the same
4787-name, but take precedence.
4789-** The Lisp interpreter now treats non-breaking space as whitespace.
4791-** Miscellaneous new functions
4793-*** `apply-partially' performs a "curried" application of a function.
4795-*** `buffer-swap-text' swaps text between two buffers. This can be
4796-useful for modes such as tar-mode, archive-mode, RMAIL.
4798-*** `combine-and-quote-strings' produces a single string from a list of strings
4799-sticking a separator string in between each pair, and quoting those
4800-strings that include the separator as their substring. Useful for
4801-consing shell command lines from the individual arguments.
4803-*** `custom-note-var-changed' tells Custom to treat the change in a
4804-certain variable as having been made within Custom.
4806-*** `face-all-attributes' returns an alist describing all the basic
4807-attributes of a given face.
4809-*** `format-seconds' converts a number of seconds into a readable
4810-string of days, hours, etc.
4812-*** `image-refresh' refreshes all images associated with a given image
4815-*** `locate-user-emacs-file' helps packages to select the appropriate
4816-place to save user-specific files. It defaults to `user-emacs-directory'
4817-unless the file already exists at $HOME.
4819-*** `read-color' reads a color name using the minibuffer.
4821-*** `read-shell-command' does what its name says, with completion. It
4822-uses the minibuffer-local-shell-command-map for that.
4824-*** `split-string-and-unquote' splits a string into a list of substrings
4825-on the boundaries of a given delimiter, and unquotes the substrings that
4826-are quoted. Useful for taking apart shell commands.
4828-*** The two new functions `looking-at-p' and `string-match-p' can do
4829-the same matching as `looking-at' and `string-match' without changing
4830-the match data.
4832-*** The two new functions `make-serial-process' and
4833-`serial-process-configure' provide a Lisp interface to the new serial
4834-port support (see Emacs changes, above).
4836-** Miscellaneous new variables
4838-*** `auto-save-include-big-deletions', if non-nil, means auto-save is
4839-not turned off automatically after a big deletion.
4841-*** `read-circle', if nil, disables the reading of recursive Lisp
4842-structures using the #N= and #N# syntax.
4844-*** `this-command-keys-shift-translated' is non-nil if the key
4845-sequence invoking the current command was found by shift-translation.
4847-*** `window-point-insertion-type' determines the insertion-type of the
4848-marker used for window-point.
4850-*** bookmark provides `bookmark-make-record-function' so special major
4851-modes like Info can teach bookmark.el how to save and restore the
4852-relevant data.
4854-*** `fill-forward-paragraph-function' specifies which function the
4855-filling code should use to find paragraph boundaries.
4859-* New Packages for Lisp Programming in Emacs 23.1
4861-** The new package avl-tree.el deals with the AVL tree data structure.
4863-** The new package check-declare.el verifies the accuracy of
4864-declare-function macros (see Lisp Changes, above).
4866-** find-cmd.el can build `find' commands using lisp syntax.
4868-** The package misearch.el has been added. It allows Isearch to search
4869-through multiple buffers. A variable `multi-isearch-next-buffer-function'
4870-defines the function to call to get the next buffer to search in the series
4871-of multiple buffers. Top-level functions `multi-isearch-buffers',
4872-`multi-isearch-buffers-regexp', `multi-isearch-files' and
4873-`multi-isearch-files-regexp' accept a single argument that specifies
4874-a list of buffers/files to search for a string/regexp.
4876-** The new major mode `special-mode' is intended as a parent for
4877-major modes such as those that set the "'mode-class 'special" property.
4882-This file is part of GNU Emacs.
4884-GNU Emacs is free software: you can redistribute it and/or modify
4885-it under the terms of the GNU General Public License as published by
4886-the Free Software Foundation, either version 3 of the License, or
4887-(at your option) any later version.
4889-GNU Emacs is distributed in the hope that it will be useful,
4890-but WITHOUT ANY WARRANTY; without even the implied warranty of
4892-GNU General Public License for more details.
4894-You should have received a copy of the GNU General Public License
4895-along with GNU Emacs. If not, see <>.
4899-Local variables:
4900-mode: outline
4901-paragraph-separate: "[
4905-arch-tag: e759449d-88b3-4de4-9900-3a6c3dfa23e2
4907=== removed directory '.pc/0005-Cause-the-build-to-fail-if-liblockfile-isn-t-selecte.patch'
4908=== removed directory '.pc/0005-Cause-the-build-to-fail-if-liblockfile-isn-t-selecte.patch/lib-src'
4909=== removed file '.pc/0005-Cause-the-build-to-fail-if-liblockfile-isn-t-selecte.patch/lib-src/movemail.c'
4910--- .pc/0005-Cause-the-build-to-fail-if-liblockfile-isn-t-selecte.patch/lib-src/movemail.c 2011-04-10 10:33:31 +0000
4911+++ .pc/0005-Cause-the-build-to-fail-if-liblockfile-isn-t-selecte.patch/lib-src/movemail.c 1970-01-01 00:00:00 +0000
4912@@ -1,964 +0,0 @@
4913-/* movemail foo bar -- move file foo to file bar,
4914- locking file foo the way /bin/mail respects.
4915- Copyright (C) 1986, 1992, 1993, 1994, 1996, 1999, 2001, 2002, 2003, 2004,
4916- 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
4918-This file is part of GNU Emacs.
4920-GNU Emacs is free software: you can redistribute it and/or modify
4921-it under the terms of the GNU General Public License as published by
4922-the Free Software Foundation, either version 3 of the License, or
4923-(at your option) any later version.
4925-GNU Emacs is distributed in the hope that it will be useful,
4926-but WITHOUT ANY WARRANTY; without even the implied warranty of
4928-GNU General Public License for more details.
4930-You should have received a copy of the GNU General Public License
4931-along with GNU Emacs. If not, see <>. */
4934-/* Important notice: defining MAIL_USE_FLOCK or MAIL_USE_LOCKF *will
4935- cause loss of mail* if you do it on a system that does not normally
4936- use flock as its way of interlocking access to inbox files. The
4937- setting of MAIL_USE_FLOCK and MAIL_USE_LOCKF *must agree* with the
4938- system's own conventions. It is not a choice that is up to you.
4940- So, if your system uses lock files rather than flock, then the only way
4941- you can get proper operation is to enable movemail to write lockfiles there.
4942- This means you must either give that directory access modes
4943- that permit everyone to write lockfiles in it, or you must make movemail
4944- a setuid or setgid program. */
4947- * Modified January, 1986 by Michael R. Gretzinger (Project Athena)
4948- *
4949- * Added POP (Post Office Protocol) service. When compiled -DMAIL_USE_POP
4950- * movemail will accept input filename arguments of the form
4951- * "po:username". This will cause movemail to open a connection to
4952- * a pop server running on $MAILHOST (environment variable). Movemail
4953- * must be setuid to root in order to work with POP.
4954- *
4955- * New module: popmail.c
4956- * Modified routines:
4957- * main - added code within #ifdef MAIL_USE_POP; added setuid (getuid ())
4958- * after POP code.
4959- * New routines in movemail.c:
4960- * get_errmsg - return pointer to system error message
4961- *
4962- * Modified August, 1993 by Jonathan Kamens (OpenVision Technologies)
4963- *
4964- * Move all of the POP code into a separate file, "pop.c".
4965- * Use strerror instead of get_errmsg.
4966- *
4967- */
4969-#include <config.h>
4970-#include <sys/types.h>
4971-#include <sys/stat.h>
4972-#include <sys/file.h>
4973-#include <stdio.h>
4974-#include <errno.h>
4975-#include <time.h>
4977-#include <getopt.h>
4978-#ifdef HAVE_UNISTD_H
4979-#include <unistd.h>
4981-#ifdef HAVE_FCNTL_H
4982-#include <fcntl.h>
4984-#include "syswait.h"
4985-#ifdef MAIL_USE_POP
4986-#include "pop.h"
4989-#ifdef MSDOS
4990-#undef access
4991-#endif /* MSDOS */
4993-#ifndef DIRECTORY_SEP
4994-#define DIRECTORY_SEP '/'
4996-#ifndef IS_DIRECTORY_SEP
4997-#define IS_DIRECTORY_SEP(_c_) ((_c_) == DIRECTORY_SEP)
5000-#ifdef WINDOWSNT
The diff has been truncated for viewing.


People subscribed via source and target branches

to all changes: