aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Bader2005-03-31 09:58:14 +0000
committerMiles Bader2005-03-31 09:58:14 +0000
commit773415d9340f12db3bd8654de5014deec57d49b7 (patch)
tree579ecf466891c80df147934b0db24cb89d0abe3d
parente9d5a4e18a8955cf60e78c54a511fd8e1259716f (diff)
parent7c315e1cff9019c8af55921fab6f571e68b09623 (diff)
downloademacs-773415d9340f12db3bd8654de5014deec57d49b7.tar.gz
emacs-773415d9340f12db3bd8654de5014deec57d49b7.zip
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-31
Merge from emacs--cvs-trunk--0 Patches applied: * emacs--cvs-trunk--0 (patch 206-222) - Update from CVS - Merge from gnus--rel--5.10 * gnus--rel--5.10 (patch 45-52) - Update from CVS - Update from CVS: texi Makefile.in CVS keyw cruft - Update from CVS: ChangeLog tweaks
-rw-r--r--admin/FOR-RELEASE5
-rw-r--r--etc/ChangeLog13
-rw-r--r--etc/NEWS134
-rw-r--r--etc/TUTORIAL1
-rw-r--r--etc/TUTORIAL.bg1
-rw-r--r--etc/TUTORIAL.cn1
-rw-r--r--etc/TUTORIAL.cs1
-rw-r--r--etc/TUTORIAL.de1
-rw-r--r--etc/TUTORIAL.es1
-rw-r--r--etc/TUTORIAL.fr1
-rw-r--r--etc/TUTORIAL.it1
-rw-r--r--etc/TUTORIAL.ja1
-rw-r--r--etc/TUTORIAL.ko1
-rw-r--r--etc/TUTORIAL.nl1
-rw-r--r--etc/TUTORIAL.pl1
-rw-r--r--etc/TUTORIAL.pt_BR1
-rw-r--r--etc/TUTORIAL.ro1
-rw-r--r--etc/TUTORIAL.ru1
-rw-r--r--etc/TUTORIAL.sk1
-rw-r--r--etc/TUTORIAL.sl1
-rw-r--r--etc/TUTORIAL.sv1
-rw-r--r--etc/TUTORIAL.th1
-rw-r--r--etc/TUTORIAL.zh1
-rw-r--r--etc/gnus-logo.eps1055
-rw-r--r--etc/gnus-refcard.tex1427
-rw-r--r--leim/ChangeLog9
-rw-r--r--leim/quail/latin-ltx.el3
-rw-r--r--lisp/ChangeLog551
-rw-r--r--lisp/autoinsert.el13
-rw-r--r--lisp/autorevert.el2
-rw-r--r--lisp/bookmark.el12
-rw-r--r--lisp/calc/calc-embed.el22
-rw-r--r--lisp/calc/calc-forms.el7
-rw-r--r--lisp/calc/calc-help.el10
-rw-r--r--lisp/calc/calc-lang.el12
-rw-r--r--lisp/calc/calc-sel.el5
-rw-r--r--lisp/calc/calc.el6
-rw-r--r--lisp/calc/calcalg2.el2
-rw-r--r--lisp/calendar/appt.el9
-rw-r--r--lisp/calendar/cal-china.el4
-rw-r--r--lisp/calendar/cal-coptic.el4
-rw-r--r--lisp/calendar/cal-french.el4
-rw-r--r--lisp/calendar/cal-hebrew.el4
-rw-r--r--lisp/calendar/cal-islam.el4
-rw-r--r--lisp/calendar/cal-iso.el4
-rw-r--r--lisp/calendar/cal-julian.el4
-rw-r--r--lisp/calendar/cal-mayan.el4
-rw-r--r--lisp/calendar/cal-menu.el3
-rw-r--r--lisp/calendar/cal-move.el8
-rw-r--r--lisp/calendar/cal-persia.el4
-rw-r--r--lisp/calendar/cal-x.el13
-rw-r--r--lisp/calendar/calendar.el14
-rw-r--r--lisp/calendar/holidays.el4
-rw-r--r--lisp/calendar/lunar.el4
-rw-r--r--lisp/calendar/solar.el4
-rw-r--r--lisp/comint.el8
-rw-r--r--lisp/complete.el9
-rw-r--r--lisp/dired-aux.el10
-rw-r--r--lisp/dired.el3
-rw-r--r--lisp/ediff-hook.el16
-rw-r--r--lisp/emacs-lisp/advice.el14
-rw-r--r--lisp/emacs-lisp/cl-macs.el4
-rw-r--r--lisp/emacs-lisp/debug.el107
-rw-r--r--lisp/emacs-lisp/lisp-mode.el1
-rw-r--r--lisp/emacs-lisp/rx.el6
-rw-r--r--lisp/emulation/cua-base.el2
-rw-r--r--lisp/emulation/vi.el58
-rw-r--r--lisp/emulation/vip.el8
-rw-r--r--lisp/eshell/esh-io.el4
-rw-r--r--lisp/eshell/esh-var.el4
-rw-r--r--lisp/files.el39
-rw-r--r--lisp/filesets.el62
-rw-r--r--lisp/follow.el7
-rw-r--r--lisp/font-lock.el2
-rw-r--r--lisp/generic-x.el83
-rw-r--r--lisp/generic.el34
-rw-r--r--lisp/gnus/ChangeLog111
-rw-r--r--lisp/gnus/gnus-group.el6
-rw-r--r--lisp/gnus/gnus-srvr.el19
-rw-r--r--lisp/gnus/message.el3
-rw-r--r--lisp/gnus/mm-util.el30
-rw-r--r--lisp/gnus/nnmaildir.el4
-rw-r--r--lisp/gnus/rfc2047.el641
-rw-r--r--lisp/hi-lock.el8
-rw-r--r--lisp/hilit-chg.el20
-rw-r--r--lisp/image-mode.el84
-rw-r--r--lisp/info.el8
-rw-r--r--lisp/international/mule-cmds.el18
-rw-r--r--lisp/international/mule.el5
-rw-r--r--lisp/kmacro.el11
-rw-r--r--lisp/language/thai-util.el41
-rw-r--r--lisp/language/thai-word.el52
-rw-r--r--lisp/language/thai.el8
-rw-r--r--lisp/longlines.el393
-rw-r--r--lisp/mail/mailalias.el24
-rw-r--r--lisp/mail/supercite.el16
-rw-r--r--lisp/menu-bar.el18
-rw-r--r--lisp/mh-e/ChangeLog8
-rw-r--r--lisp/mh-e/mh-e.el10
-rw-r--r--lisp/mh-e/mh-identity.el4
-rw-r--r--lisp/mh-e/mh-mime.el7
-rw-r--r--lisp/midnight.el4
-rw-r--r--lisp/obsolete/iso-acc.el (renamed from lisp/international/iso-acc.el)5
-rw-r--r--lisp/progmodes/compile.el9
-rw-r--r--lisp/progmodes/cperl-mode.el4
-rw-r--r--lisp/progmodes/ebnf-abn.el6
-rw-r--r--lisp/progmodes/ebnf-bnf.el8
-rw-r--r--lisp/progmodes/ebnf-dtd.el6
-rw-r--r--lisp/progmodes/ebnf-ebx.el4
-rw-r--r--lisp/progmodes/ebnf-iso.el8
-rw-r--r--lisp/progmodes/ebnf-yac.el8
-rw-r--r--lisp/progmodes/ebnf2ps.el4
-rw-r--r--lisp/progmodes/f90.el29
-rw-r--r--lisp/progmodes/flymake.el486
-rw-r--r--lisp/progmodes/fortran.el183
-rw-r--r--lisp/progmodes/gdb-ui.el8
-rw-r--r--lisp/progmodes/gud.el22
-rw-r--r--lisp/progmodes/idlw-shell.el6
-rw-r--r--lisp/progmodes/idlwave.el13
-rw-r--r--lisp/progmodes/python.el65
-rw-r--r--lisp/progmodes/sh-script.el2
-rw-r--r--lisp/progmodes/vhdl-mode.el4
-rw-r--r--lisp/progmodes/which-func.el7
-rw-r--r--lisp/progmodes/xscheme.el5
-rw-r--r--lisp/ps-print.el13
-rw-r--r--lisp/register.el6
-rw-r--r--lisp/reveal.el4
-rw-r--r--lisp/simple.el61
-rw-r--r--lisp/term.el25
-rw-r--r--lisp/term/bobcat.el3
-rw-r--r--lisp/term/xterm.el2
-rw-r--r--lisp/textmodes/fill.el13
-rw-r--r--lisp/textmodes/ispell.el4
-rw-r--r--lisp/textmodes/org.el459
-rw-r--r--lisp/textmodes/refbib.el6
-rw-r--r--lisp/textmodes/refer.el4
-rw-r--r--lisp/textmodes/reftex-cite.el5
-rw-r--r--lisp/textmodes/reftex-index.el7
-rw-r--r--lisp/textmodes/reftex-parse.el5
-rw-r--r--lisp/textmodes/reftex-ref.el7
-rw-r--r--lisp/textmodes/reftex-vars.el25
-rw-r--r--lisp/textmodes/reftex.el19
-rw-r--r--lisp/textmodes/sgml-mode.el2
-rw-r--r--lisp/textmodes/tex-mode.el13
-rw-r--r--lisp/thumbs.el4
-rw-r--r--lisp/tooltip.el2
-rw-r--r--lisp/vc-cvs.el5
-rw-r--r--lisp/vc.el8
-rw-r--r--lisp/wdired.el3
-rw-r--r--lisp/window.el21
-rw-r--r--lispref/ChangeLog50
-rw-r--r--lispref/Makefile.in1
-rw-r--r--lispref/anti.texi4
-rw-r--r--lispref/calendar.texi996
-rw-r--r--lispref/display.texi52
-rw-r--r--lispref/elisp.texi2
-rw-r--r--lispref/keymaps.texi10
-rw-r--r--lispref/makefile.w32-in1
-rw-r--r--lispref/markers.texi6
-rw-r--r--lispref/minibuf.texi5
-rw-r--r--lispref/modes.texi2
-rw-r--r--lispref/os.texi2
-rw-r--r--lispref/positions.texi6
-rw-r--r--lispref/text.texi35
-rw-r--r--lispref/tips.texi7
-rw-r--r--lispref/vol1.texi2
-rw-r--r--lispref/vol2.texi2
-rw-r--r--man/ChangeLog224
-rw-r--r--man/basic.texi63
-rw-r--r--man/building.texi26
-rw-r--r--man/calc.texi278
-rw-r--r--man/calendar.texi116
-rw-r--r--man/cl.texi20
-rw-r--r--man/commands.texi4
-rw-r--r--man/custom.texi21
-rw-r--r--man/dired-x.texi9
-rw-r--r--man/dired.texi34
-rw-r--r--man/display.texi11
-rw-r--r--man/emacs-mime.texi33
-rw-r--r--man/emacs-xtra.texi919
-rw-r--r--man/emacs.texi13
-rw-r--r--man/files.texi97
-rw-r--r--man/frames.texi16
-rw-r--r--man/gnus-faq.texi3521
-rw-r--r--man/gnus.texi4
-rw-r--r--man/help.texi43
-rw-r--r--man/idlwave.texi184
-rw-r--r--man/message.texi2
-rw-r--r--man/misc.texi15
-rw-r--r--man/mule.texi84
-rw-r--r--man/org.texi107
-rw-r--r--man/programs.texi247
-rw-r--r--man/reftex.texi35
-rw-r--r--man/text.texi166
-rw-r--r--man/xresources.texi296
-rw-r--r--src/ChangeLog56
-rw-r--r--src/alloc.c2
-rw-r--r--src/callproc.c8
-rw-r--r--src/coding.c3
-rw-r--r--src/dired.c6
-rw-r--r--src/editfns.c4
-rw-r--r--src/fileio.c179
-rw-r--r--src/lisp.h6
-rw-r--r--src/minibuf.c17
-rw-r--r--src/process.c6
-rw-r--r--src/w32term.c95
-rw-r--r--src/w32term.h17
-rw-r--r--src/xdisp.c9
-rw-r--r--src/xmenu.c13
209 files changed, 10068 insertions, 5179 deletions
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE
index e182242276b..9ce510a6ee6 100644
--- a/admin/FOR-RELEASE
+++ b/admin/FOR-RELEASE
@@ -1,5 +1,10 @@
1Tasks needed before the next release. 1Tasks needed before the next release.
2 2
3* THINGS THAT HAVE TO BE DONE SHORTLY BEFORE RELEASE
4
5`undo-ask-before-discard', currently set to t for debugging purposes
6has to be set to nil: when t, it can leak memory and cause other problems.
7
3* NEW FEATURES 8* NEW FEATURES
4 9
5** Face remapping. 10** Face remapping.
diff --git a/etc/ChangeLog b/etc/ChangeLog
index 5632e1aaf12..aaefbea4b09 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,16 @@
12005-03-30 Thien-Thi Nguyen <ttn@gnu.org>
2
3 * TUTORIAL: Add title line.
4 * TUTORIAL.bg, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de,
5 * TUTORIAL.es, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja,
6 * TUTORIAL.ko, TUTORIAL.nl, TUTORIAL.pl, TUTORIAL.pt_BR,
7 * TUTORIAL.ro, TUTORIAL.ru, TUTORIAL.sk, TUTORIAL.sl
8 * TUTORIAL.sv, TUTORIAL.th, TUTORIAL.zh: Likewise.
9
102005-03-29 Reiner Steib <Reiner.Steib@gmx.de>
11
12 * gnus-refcard.tex, gnus-logo.eps: New files.
13
12005-03-23 David Ponce <david@dponce.com> 142005-03-23 David Ponce <david@dponce.com>
2 15
3 * NEWS: Mention recentf-keep. 16 * NEWS: Mention recentf-keep.
diff --git a/etc/NEWS b/etc/NEWS
index 8873ad8d7db..a64beed16af 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -182,6 +182,26 @@ types any more. Add -DUSE_LISP_UNION_TYPE if you want union types.
182 182
183* Changes in Emacs 22.1 183* Changes in Emacs 22.1
184 184
185** Improved Thai support. A new minor mode `thai-word-mode' (which is
186automatically activated if you select Thai as a language
187environment) changes key bindings of most word-oriented commands to
188versions which recognize Thai words. Affected commands are
189 M-f (forward-word)
190 M-b (backward-word)
191 M-d (kill-word)
192 M-DEL (backward-kill-word)
193 M-t (transpose-words)
194 M-q (fill-paragraph)
195
196** iso-acc.el is now obsolete. Use one of the latin input methods instead.
197
198---
199** Languange environment and various default coding systems are setup
200more correctly according to the current locale name. If the locale
201name doesn't specify a charset, the default is what glibc defines.
202This change may result in using the different coding systems as
203default in some locale (e.g. vi_VN).
204
185+++ 205+++
186** The commands copy-file, rename-file, make-symbolic-link and 206** The commands copy-file, rename-file, make-symbolic-link and
187add-name-to-file, when given a directory as the "new name" argument, 207add-name-to-file, when given a directory as the "new name" argument,
@@ -221,6 +241,7 @@ converts whitespace around point to N spaces.
221** Control characters and escape glyphs are now shown in the new 241** Control characters and escape glyphs are now shown in the new
222escape-glyph face. 242escape-glyph face.
223 243
244+++
224** Non-breaking space and hyphens are now prefixed with an escape 245** Non-breaking space and hyphens are now prefixed with an escape
225character, unless the new user variable `show-nonbreak-escape' is set 246character, unless the new user variable `show-nonbreak-escape' is set
226to nil. 247to nil.
@@ -297,6 +318,7 @@ you about it.
297+++ 318+++
298** line-move-ignore-invisible now defaults to t. 319** line-move-ignore-invisible now defaults to t.
299 320
321+++
300** In Outline mode, hide-body no longer hides lines at the top 322** In Outline mode, hide-body no longer hides lines at the top
301of the file that precede the first header line. 323of the file that precede the first header line.
302 324
@@ -313,6 +335,7 @@ suffix are from every line before processing all the lines.
313** `apply-macro-to-region-lines' now operates on all lines that begin 335** `apply-macro-to-region-lines' now operates on all lines that begin
314in the region, rather than on all complete lines in the region. 336in the region, rather than on all complete lines in the region.
315 337
338---
316** global-whitespace-mode is a new alias for whitespace-global-mode. 339** global-whitespace-mode is a new alias for whitespace-global-mode.
317 340
318+++ 341+++
@@ -320,7 +343,10 @@ in the region, rather than on all complete lines in the region.
320for matching the beginning and end of a symbol. A symbol is a 343for matching the beginning and end of a symbol. A symbol is a
321non-empty sequence of either word or symbol constituent characters, as 344non-empty sequence of either word or symbol constituent characters, as
322specified by the syntax table. 345specified by the syntax table.
346---
347*** rx.el has new corresponding `symbol-end' and `symbol-start' elements.
323 348
349+++
324** Passing resources on the command line now works on MS Windows. 350** Passing resources on the command line now works on MS Windows.
325You can use --xrm to pass resource settings to Emacs, overriding any 351You can use --xrm to pass resource settings to Emacs, overriding any
326existing values. For example: 352existing values. For example:
@@ -363,6 +389,7 @@ in the current input method to input a character at point.
363** Commands winner-redo and winner-undo, from winner.el, are now bound to 389** Commands winner-redo and winner-undo, from winner.el, are now bound to
364C-c <left> and C-c <right>, respectively. This is an incompatible change. 390C-c <left> and C-c <right>, respectively. This is an incompatible change.
365 391
392---
366** Help commands `describe-function' and `describe-key' now show function 393** Help commands `describe-function' and `describe-key' now show function
367arguments in lowercase italics on displays that support it. To change the 394arguments in lowercase italics on displays that support it. To change the
368default, customize face `help-argument-name' or redefine the function 395default, customize face `help-argument-name' or redefine the function
@@ -390,9 +417,11 @@ not the case, then `comint-kill-region' behaves just like
390`kill-region' if read-only are involved: it copies the text to the 417`kill-region' if read-only are involved: it copies the text to the
391kill-ring, but does not delete it. 418kill-ring, but does not delete it.
392 419
420+++
393** You can now use next-error (C-x `) and previous-error to advance to 421** You can now use next-error (C-x `) and previous-error to advance to
394the next/previous matching line found by M-x occur. 422the next/previous matching line found by M-x occur.
395 423
424+++
396** Telnet now prompts you for a port number with C-u M-x telnet. 425** Telnet now prompts you for a port number with C-u M-x telnet.
397 426
398+++ 427+++
@@ -441,6 +470,7 @@ decides whether the buffer should be reverted. Currently, this means
441that auto reverting works for Dired buffers (although this may not 470that auto reverting works for Dired buffers (although this may not
442work properly on all operating systems) and for the Buffer Menu. 471work properly on all operating systems) and for the Buffer Menu.
443 472
473+++
444** If the new user option `auto-revert-check-vc-info' is non-nil, Auto 474** If the new user option `auto-revert-check-vc-info' is non-nil, Auto
445Revert mode reliably updates version control info (such as the version 475Revert mode reliably updates version control info (such as the version
446control number in the mode line), in all version controlled buffers in 476control number in the mode line), in all version controlled buffers in
@@ -480,6 +510,7 @@ This option allows you to specify environment variables for inferior
480compilation processes without affecting the environment that all 510compilation processes without affecting the environment that all
481subprocesses inherit. 511subprocesses inherit.
482 512
513+++
483** Grep has been decoupled from compilation mode setup. 514** Grep has been decoupled from compilation mode setup.
484 515
485--- 516---
@@ -540,6 +571,7 @@ C-c C-f.
540** M-x compare-windows now can automatically skip non-matching text to 571** M-x compare-windows now can automatically skip non-matching text to
541resync points in both windows. 572resync points in both windows.
542 573
574---
543** New command `strokes-global-set-stroke-string'. 575** New command `strokes-global-set-stroke-string'.
544This is like `strokes-global-set-stroke', but it allows you to bind 576This is like `strokes-global-set-stroke', but it allows you to bind
545the stroke directly to a string to insert. This is convenient for 577the stroke directly to a string to insert. This is convenient for
@@ -547,10 +579,12 @@ using strokes as an input method.
547 579
548** Gnus package 580** Gnus package
549 581
582---
550*** Gnus now includes Sieve and PGG 583*** Gnus now includes Sieve and PGG
551Sieve is a library for managing Sieve scripts. PGG is a library to handle 584Sieve is a library for managing Sieve scripts. PGG is a library to handle
552PGP/MIME. 585PGP/MIME.
553 586
587---
554*** There are many news features, bug fixes and improvements. 588*** There are many news features, bug fixes and improvements.
555See the file GNUS-NEWS or the node "Oort Gnus" in the Gnus manual for details. 589See the file GNUS-NEWS or the node "Oort Gnus" in the Gnus manual for details.
556 590
@@ -570,6 +604,7 @@ buffer list.
570*** The desktop package can be customized to restore only some buffers immediately, 604*** The desktop package can be customized to restore only some buffers immediately,
571remaining buffers are restored lazily (when Emacs is idle). 605remaining buffers are restored lazily (when Emacs is idle).
572 606
607+++
573*** New commands: 608*** New commands:
574 - desktop-revert reverts to the last loaded desktop. 609 - desktop-revert reverts to the last loaded desktop.
575 - desktop-change-dir kills current desktop and loads a new. 610 - desktop-change-dir kills current desktop and loads a new.
@@ -578,6 +613,7 @@ remaining buffers are restored lazily (when Emacs is idle).
578 - desktop-lazy-complete runs the desktop load to completion. 613 - desktop-lazy-complete runs the desktop load to completion.
579 - desktop-lazy-abort aborts lazy loading of the desktop. 614 - desktop-lazy-abort aborts lazy loading of the desktop.
580 615
616---
581*** New customizable variables: 617*** New customizable variables:
582 - desktop-save. Determins whether the desktop should be saved when it is 618 - desktop-save. Determins whether the desktop should be saved when it is
583 killed. 619 killed.
@@ -595,6 +631,7 @@ remaining buffers are restored lazily (when Emacs is idle).
595+++ 631+++
596*** New command line option --no-desktop 632*** New command line option --no-desktop
597 633
634---
598*** New hooks: 635*** New hooks:
599 - desktop-after-read-hook run after a desktop is loaded. 636 - desktop-after-read-hook run after a desktop is loaded.
600 - desktop-no-desktop-file-hook run when no desktop file is found. 637 - desktop-no-desktop-file-hook run when no desktop file is found.
@@ -608,6 +645,7 @@ to get the old behavior. The new options `save-place-save-skipped'
608and `save-place-skip-check-regexp' allow further fine-tuning of this 645and `save-place-skip-check-regexp' allow further fine-tuning of this
609feature. 646feature.
610 647
648+++
611** You can have several Emacs servers on the same machine. 649** You can have several Emacs servers on the same machine.
612 650
613 % emacs --eval '(setq server-name "foo")' -f server-start & 651 % emacs --eval '(setq server-name "foo")' -f server-start &
@@ -646,18 +684,21 @@ in left fringe, the bottom angle bitmap in right fringe, and both
646arrow bitmaps in right fringe. To show just the angle bitmaps in the 684arrow bitmaps in right fringe. To show just the angle bitmaps in the
647left fringe, but no arrow bitmaps, use ((top . left) (bottom . left)). 685left fringe, but no arrow bitmaps, use ((top . left) (bottom . left)).
648 686
687+++
649** New command `display-local-help' displays any local help at point 688** New command `display-local-help' displays any local help at point
650in the echo area. It is bound to `C-h .'. It normally displays the 689in the echo area. It is bound to `C-h .'. It normally displays the
651same string that would be displayed on mouse-over using the 690same string that would be displayed on mouse-over using the
652`help-echo' property, but, in certain cases, it can display a more 691`help-echo' property, but, in certain cases, it can display a more
653keyboard oriented alternative. 692keyboard oriented alternative.
654 693
694+++
655** New user option `help-at-pt-display-when-idle' allows to 695** New user option `help-at-pt-display-when-idle' allows to
656automatically show the help provided by `display-local-help' on 696automatically show the help provided by `display-local-help' on
657point-over, after suitable idle time. The amount of idle time is 697point-over, after suitable idle time. The amount of idle time is
658determined by the user option `help-at-pt-timer-delay' and defaults 698determined by the user option `help-at-pt-timer-delay' and defaults
659to one second. This feature is turned off by default. 699to one second. This feature is turned off by default.
660 700
701---
661** New commands `scan-buf-next-region' and `scan-buf-previous-region' 702** New commands `scan-buf-next-region' and `scan-buf-previous-region'
662move to the start of the next (previous, respectively) region with 703move to the start of the next (previous, respectively) region with
663non-nil help-echo property and display any help found there in the 704non-nil help-echo property and display any help found there in the
@@ -681,7 +722,7 @@ On 32bit machines, it is now 256M (i.e. 268435455).
681now reads arguments for the function interactively if it is 722now reads arguments for the function interactively if it is
682an interactively callable function. 723an interactively callable function.
683 724
684 725---
685** sql changes. 726** sql changes.
686 727
687*** The variable `sql-product' controls the highlightng of different 728*** The variable `sql-product' controls the highlightng of different
@@ -753,6 +794,7 @@ defaults.
753appropriate sql-interactive-mode wrapper for the current setting of 794appropriate sql-interactive-mode wrapper for the current setting of
754`sql-product'. 795`sql-product'.
755 796
797---
756** M-x view-file and commands that use it now avoid interfering 798** M-x view-file and commands that use it now avoid interfering
757with special modes such as Tar mode. 799with special modes such as Tar mode.
758 800
@@ -764,6 +806,7 @@ When more than one word is specified, at least two of those words must
764be present for an item to match. Regular expression matching is still 806be present for an item to match. Regular expression matching is still
765available. 807available.
766 808
809+++
767*** The new option `apropos-sort-by-scores' causes the matching items 810*** The new option `apropos-sort-by-scores' causes the matching items
768to be sorted according to their score. The score for an item is a 811to be sorted according to their score. The score for an item is a
769number calculated to indicate how well the item matches the words or 812number calculated to indicate how well the item matches the words or
@@ -776,6 +819,7 @@ matching item.
776since there are situations where one or the other will shut down 819since there are situations where one or the other will shut down
777the operating system or your X server. 820the operating system or your X server.
778 821
822---
779** New minor mode, Visible mode, toggles invisibility in the current buffer. 823** New minor mode, Visible mode, toggles invisibility in the current buffer.
780When enabled, it makes all invisible text visible. When disabled, it 824When enabled, it makes all invisible text visible. When disabled, it
781restores the previous value of `buffer-invisibility-spec'. 825restores the previous value of `buffer-invisibility-spec'.
@@ -784,6 +828,7 @@ restores the previous value of `buffer-invisibility-spec'.
784** New command `kill-whole-line' kills an entire line at once. 828** New command `kill-whole-line' kills an entire line at once.
785By default, it is bound to C-S-<backspace>. 829By default, it is bound to C-S-<backspace>.
786 830
831---
787** New commands to operate on pairs of open and close characters: 832** New commands to operate on pairs of open and close characters:
788`insert-pair', `delete-pair', `raise-sexp'. 833`insert-pair', `delete-pair', `raise-sexp'.
789 834
@@ -820,6 +865,7 @@ into the kill ring. With a zero prefix arg, copies absolute file names.
820+++ 865+++
821** Dired-x: 866** Dired-x:
822 867
868+++
823*** Omitting files is now a minor mode, dired-omit-mode. The mode toggling 869*** Omitting files is now a minor mode, dired-omit-mode. The mode toggling
824command is bound to M-o. A new command dired-mark-omitted, bound to M-O, 870command is bound to M-o. A new command dired-mark-omitted, bound to M-O,
825marks omitted files. The variable dired-omit-files-p is obsoleted, use the 871marks omitted files. The variable dired-omit-files-p is obsoleted, use the
@@ -883,6 +929,7 @@ possible matches.
883the current Info node name into the kill ring. With a zero prefix 929the current Info node name into the kill ring. With a zero prefix
884arg, puts the node name inside the `info' function call. 930arg, puts the node name inside the `info' function call.
885 931
932---
886*** New face `info-xref-visited' distinguishes visited nodes from unvisited 933*** New face `info-xref-visited' distinguishes visited nodes from unvisited
887and a new option `Info-fontify-visited-nodes' to control this. 934and a new option `Info-fontify-visited-nodes' to control this.
888 935
@@ -894,6 +941,7 @@ references and following them calls `browse-url'.
894If you prefer the old behavior, you can set the new user option 941If you prefer the old behavior, you can set the new user option
895`Info-hide-note-references' to nil. 942`Info-hide-note-references' to nil.
896 943
944---
897*** Images in Info pages are supported. 945*** Images in Info pages are supported.
898Info pages show embedded images, in Emacs frames with image support. 946Info pages show embedded images, in Emacs frames with image support.
899Info documentation that includes images, processed with makeinfo 947Info documentation that includes images, processed with makeinfo
@@ -966,6 +1014,7 @@ Such individual settings are now preserved when windows are split
966horizontally or vertically, a saved window configuration is restored, 1014horizontally or vertically, a saved window configuration is restored,
967or when the frame is resized. 1015or when the frame is resized.
968 1016
1017+++
969** New functions frame-current-scroll-bars and window-current-scroll-bars. 1018** New functions frame-current-scroll-bars and window-current-scroll-bars.
970 1019
971These functions return the current locations of the vertical and 1020These functions return the current locations of the vertical and
@@ -979,6 +1028,7 @@ horizontal scroll bars in a frame or window.
979+++ 1028+++
980** Under X, mouse-wheel-mode is turned on by default. 1029** Under X, mouse-wheel-mode is turned on by default.
981 1030
1031+++
982** The X resource useXIM can be used to turn off use of XIM, which may 1032** The X resource useXIM can be used to turn off use of XIM, which may
983speed up Emacs with slow networking to the X server. 1033speed up Emacs with slow networking to the X server.
984 1034
@@ -988,6 +1038,7 @@ XIM by default, the X resource useXIM can be used to turn it on.
988+++ 1038+++
989** `undo-only' does an undo which does not redo any previous undo. 1039** `undo-only' does an undo which does not redo any previous undo.
990 1040
1041---
991** `uniquify-strip-common-suffix' tells uniquify to prefer 1042** `uniquify-strip-common-suffix' tells uniquify to prefer
992`file|dir1' and `file|dir2' to `file|dir1/subdir' and `file|dir2/subdir'. 1043`file|dir1' and `file|dir2' to `file|dir1/subdir' and `file|dir2/subdir'.
993 1044
@@ -1002,6 +1053,7 @@ Emacs prompts her for confirmation.
1002** GUD mode has its own tool bar for controlling execution of the inferior 1053** GUD mode has its own tool bar for controlling execution of the inferior
1003and other common debugger commands. 1054and other common debugger commands.
1004 1055
1056---
1005** recentf changes. 1057** recentf changes.
1006 1058
1007The recent file list is now automatically cleanup when recentf mode is 1059The recent file list is now automatically cleanup when recentf mode is
@@ -1034,6 +1086,7 @@ You can now put the init files .emacs and .emacs_SHELL under
1034--- 1086---
1035** partial-completion-mode now does partial completion on directory names. 1087** partial-completion-mode now does partial completion on directory names.
1036 1088
1089---
1037** skeleton.el now supports using - to mark the skeleton-point without 1090** skeleton.el now supports using - to mark the skeleton-point without
1038 interregion interaction. @ has reverted to only setting 1091 interregion interaction. @ has reverted to only setting
1039 skeleton-positions and no longer sets skeleton-point. Skeletons 1092 skeleton-positions and no longer sets skeleton-point. Skeletons
@@ -1041,6 +1094,7 @@ You can now put the init files .emacs and .emacs_SHELL under
1041 instead. The updated skeleton-insert docstring explains these new 1094 instead. The updated skeleton-insert docstring explains these new
1042 features along with other details of skeleton construction. 1095 features along with other details of skeleton construction.
1043 1096
1097---
1044** MH-E changes. 1098** MH-E changes.
1045 1099
1046Upgraded to MH-E version 7.82. There have been major changes since 1100Upgraded to MH-E version 7.82. There have been major changes since
@@ -1086,6 +1140,7 @@ file.)
1086** The new command `revert-buffer-with-coding-system' (C-x RET r) 1140** The new command `revert-buffer-with-coding-system' (C-x RET r)
1087revisits the current file using a coding system that you specify. 1141revisits the current file using a coding system that you specify.
1088 1142
1143+++
1089** The new command `recode-file-name' changes the encoding of the name 1144** The new command `recode-file-name' changes the encoding of the name
1090of a file. 1145of a file.
1091 1146
@@ -1208,6 +1263,7 @@ either Unicode (the mule-unicode charsets) or the iso-8859 charsets,
1208when possible. The latter are more space-efficient. This is 1263when possible. The latter are more space-efficient. This is
1209controlled by user option utf-fragment-on-decoding. 1264controlled by user option utf-fragment-on-decoding.
1210 1265
1266+++
1211** The new command `set-file-name-coding-system' (C-x RET F) sets 1267** The new command `set-file-name-coding-system' (C-x RET F) sets
1212coding system for encoding and decoding file names. A new menu item 1268coding system for encoding and decoding file names. A new menu item
1213(Options->Mule->Set Coding Systems->For File Name) invokes this 1269(Options->Mule->Set Coding Systems->For File Name) invokes this
@@ -1272,6 +1328,7 @@ when Emacs visits them.
1272default, all trivial operations involving whole lines are performed 1328default, all trivial operations involving whole lines are performed
1273automatically. The game uses faces for better visual feedback. 1329automatically. The game uses faces for better visual feedback.
1274 1330
1331---
1275** The new variable `x-select-request-type' controls how Emacs 1332** The new variable `x-select-request-type' controls how Emacs
1276requests X selection. The default value is nil, which means that 1333requests X selection. The default value is nil, which means that
1277Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING, 1334Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING,
@@ -1303,9 +1360,11 @@ by two new user options: `tex-start-options', which should hold
1303command-line options to feed to TeX, and `tex-start-commands' which should hold 1360command-line options to feed to TeX, and `tex-start-commands' which should hold
1304TeX commands to use at startup. 1361TeX commands to use at startup.
1305 1362
1363---
1306*** verbatim environments are now highlighted in courier by font-lock 1364*** verbatim environments are now highlighted in courier by font-lock
1307and super/sub-scripts are made into super/sub-scripts. 1365and super/sub-scripts are made into super/sub-scripts.
1308 1366
1367+++
1309*** New major mode doctex-mode for *.dtx files. 1368*** New major mode doctex-mode for *.dtx files.
1310 1369
1311+++ 1370+++
@@ -1316,6 +1375,7 @@ different Emacs window will select that window (minibuffer window can
1316be selected only when it is active). The default is nil, so that this 1375be selected only when it is active). The default is nil, so that this
1317feature is not enabled. 1376feature is not enabled.
1318 1377
1378+++
1319** On X, when the window manager requires that you click on a frame to 1379** On X, when the window manager requires that you click on a frame to
1320select it (give it focus), the selected window and cursor position 1380select it (give it focus), the selected window and cursor position
1321normally changes according to the mouse click position. If you set 1381normally changes according to the mouse click position. If you set
@@ -1337,10 +1397,12 @@ search multiple buffers. There is also a new command
1337buffers to search by their filename. Internally, Occur mode has been 1397buffers to search by their filename. Internally, Occur mode has been
1338rewritten, and now uses font-lock, among other changes. 1398rewritten, and now uses font-lock, among other changes.
1339 1399
1400+++
1340** The default values of paragraph-start and indent-line-function have 1401** The default values of paragraph-start and indent-line-function have
1341been changed to reflect those used in Text mode rather than those used 1402been changed to reflect those used in Text mode rather than those used
1342in Indented-Text mode. 1403in Indented-Text mode.
1343 1404
1405---
1344** New user option `query-replace-skip-read-only': when non-nil, 1406** New user option `query-replace-skip-read-only': when non-nil,
1345`query-replace' and related functions simply ignore 1407`query-replace' and related functions simply ignore
1346a match if part of it has a read-only property. 1408a match if part of it has a read-only property.
@@ -1371,6 +1433,7 @@ can optionally enable mouse highlighting only after you move the
1371mouse, so that highlighting disappears when you press a key. You can 1433mouse, so that highlighting disappears when you press a key. You can
1372also disable mouse highlighting. 1434also disable mouse highlighting.
1373 1435
1436+++
1374** You can now customize if selecting a region by dragging the mouse 1437** You can now customize if selecting a region by dragging the mouse
1375shall not copy the selected text to the kill-ring by setting the new 1438shall not copy the selected text to the kill-ring by setting the new
1376variable mouse-drag-copy-region to nil. 1439variable mouse-drag-copy-region to nil.
@@ -1790,6 +1853,7 @@ count backward from the end of the year.
1790prompts for a year and a week number, and moves to the first 1853prompts for a year and a week number, and moves to the first
1791day of that ISO week. 1854day of that ISO week.
1792 1855
1856---
1793** The new variable `calendar-minimum-window-height' affects the 1857** The new variable `calendar-minimum-window-height' affects the
1794window generated by the function `generate-calendar-window'. 1858window generated by the function `generate-calendar-window'.
1795 1859
@@ -1799,6 +1863,7 @@ optional arguments, in order to only report on the specified holiday
1799rather than all. This makes customization of variables such as 1863rather than all. This makes customization of variables such as
1800`christian-holidays' simpler. 1864`christian-holidays' simpler.
1801 1865
1866---
1802** The function `simple-diary-display' now by default sets a header line. 1867** The function `simple-diary-display' now by default sets a header line.
1803This can be controlled through the variables `diary-header-line-flag' 1868This can be controlled through the variables `diary-header-line-flag'
1804and `diary-header-line-format'. 1869and `diary-header-line-format'.
@@ -1819,6 +1884,7 @@ formats.
1819 1884
1820** VC Changes 1885** VC Changes
1821 1886
1887+++
1822*** The key C-x C-q no longer checks files in or out, it only changes 1888*** The key C-x C-q no longer checks files in or out, it only changes
1823the read-only state of the buffer (toggle-read-only). We made this 1889the read-only state of the buffer (toggle-read-only). We made this
1824change because we held a poll and found that many users were unhappy 1890change because we held a poll and found that many users were unhappy
@@ -2268,17 +2334,23 @@ from the file name or buffer contents.
2268--- 2334---
2269** Perl mode has a new variable `perl-indent-continued-arguments'. 2335** Perl mode has a new variable `perl-indent-continued-arguments'.
2270 2336
2337---
2338** Fortran mode does more font-locking by default. Use level 3
2339highlighting for the old default.
2340
2271+++ 2341+++
2272** Fortran mode has a new variable `fortran-directive-re'. 2342** Fortran mode has a new variable `fortran-directive-re'.
2273Adapt this to match the format of any compiler directives you use. 2343Adapt this to match the format of any compiler directives you use.
2274Lines that match are never indented, and are given distinctive font-locking. 2344Lines that match are never indented, and are given distinctive font-locking.
2275 2345
2276+++ 2346+++
2277** F90 mode has new navigation commands `f90-end-of-block', 2347** F90 mode and Fortran mode have new navigation commands
2278`f90-beginning-of-block', `f90-next-block', `f90-previous-block'. 2348`f90-end-of-block', `f90-beginning-of-block', `f90-next-block',
2349`f90-previous-block', `fortran-end-of-block',
2350`fortran-beginning-of-block'.
2279 2351
2280--- 2352---
2281** F90 mode now has support for hs-minor-mode (hideshow). 2353** F90 mode and Fortran mode have support for hs-minor-mode (hideshow).
2282It cannot deal with every code format, but ought to handle a sizeable 2354It cannot deal with every code format, but ought to handle a sizeable
2283majority. 2355majority.
2284 2356
@@ -2432,17 +2504,31 @@ anyone has committed to the repository since you last executed
2432"checkout", "update" or "commit". That means using cvs diff options 2504"checkout", "update" or "commit". That means using cvs diff options
2433-rBASE -rHEAD. 2505-rBASE -rHEAD.
2434 2506
2507---
2435** New variable `hs-set-up-overlay' allows customization of the overlay 2508** New variable `hs-set-up-overlay' allows customization of the overlay
2436used to effect hiding for hideshow minor mode. Integration with isearch 2509used to effect hiding for hideshow minor mode. Integration with isearch
2437handles the overlay property `display' specially, preserving it during 2510handles the overlay property `display' specially, preserving it during
2438temporary overlay showing in the course of an isearch operation. 2511temporary overlay showing in the course of an isearch operation.
2439 2512
2513+++
2440** New command `recode-region' decodes the region again by a specified 2514** New command `recode-region' decodes the region again by a specified
2441coding system. 2515coding system.
2442 2516
2443 2517
2444* New modes and packages in Emacs 22.1 2518* New modes and packages in Emacs 22.1
2445 2519
2520+++
2521** The new package longlines.el provides a minor mode for editing text
2522files composed of long lines, based on the `use-hard-newlines'
2523mechanism. The long lines are broken up by inserting soft newlines,
2524which are automatically removed when saving the file to disk or
2525copying into the kill ring, clipboard, etc. By default, Longlines
2526mode inserts soft newlines automatically during editing, a behavior
2527referred to as "soft word wrap" in other text editors. This is
2528similar to Refill mode, but more reliable. To turn the word wrap
2529feature off, set `longlines-auto-wrap' to nil.
2530
2531+++
2446** The new package conf-mode.el handles thousands of configuration files, with 2532** The new package conf-mode.el handles thousands of configuration files, with
2447varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value, 2533varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value,
2448var : value, var value or keyword var value) and sections ([section] or 2534var : value, var value or keyword var value) and sections ([section] or
@@ -2450,12 +2536,12 @@ section { }). Many files under /etc/, or with suffixes like .cf through
2450.config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are 2536.config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are
2451recognized. 2537recognized.
2452 2538
2453** The new package password.el provide a password cache and expiring mechanism. 2539+++
2454
2455** The new package dns-mode.el add syntax highlight of DNS master files. 2540** The new package dns-mode.el add syntax highlight of DNS master files.
2456The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used 2541The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used
2457to increment the SOA serial. 2542to increment the SOA serial.
2458 2543
2544+++
2459** The new package flymake.el does on-the-fly syntax checking of program 2545** The new package flymake.el does on-the-fly syntax checking of program
2460source files. See the Flymake's Info manual for more details. 2546source files. See the Flymake's Info manual for more details.
2461 2547
@@ -2463,12 +2549,15 @@ source files. See the Flymake's Info manual for more details.
2463of hierarchical data as an outline. For example, the tree-widget is 2549of hierarchical data as an outline. For example, the tree-widget is
2464well suited to display a hierarchy of directories and files. 2550well suited to display a hierarchy of directories and files.
2465 2551
2552+++
2466** The wdired.el package allows you to use normal editing commands on Dired 2553** The wdired.el package allows you to use normal editing commands on Dired
2467buffers to change filenames, permissions, etc... 2554buffers to change filenames, permissions, etc...
2468 2555
2556+++
2469** The thumbs.el package allows you to preview image files as thumbnails 2557** The thumbs.el package allows you to preview image files as thumbnails
2470and can be invoked from a Dired buffer. 2558and can be invoked from a Dired buffer.
2471 2559
2560+++
2472** The new python.el package is used to edit Python and Jython programs. 2561** The new python.el package is used to edit Python and Jython programs.
2473 2562
2474** The URL package (which had been part of W3) is now part of Emacs. 2563** The URL package (which had been part of W3) is now part of Emacs.
@@ -2477,6 +2566,7 @@ and can be invoked from a Dired buffer.
2477** The new global minor mode `size-indication-mode' (off by default) 2566** The new global minor mode `size-indication-mode' (off by default)
2478shows the size of accessible part of the buffer on the mode line. 2567shows the size of accessible part of the buffer on the mode line.
2479 2568
2569---
2480** GDB-Script-mode is used for files like .gdbinit. 2570** GDB-Script-mode is used for files like .gdbinit.
2481 2571
2482--- 2572---
@@ -2532,6 +2622,7 @@ versions of cua.el and cua-mode.el. To ensure proper operation, you
2532must remove older versions of cua.el or cua-mode.el as well as the 2622must remove older versions of cua.el or cua-mode.el as well as the
2533loading and customization of those packages from the .emacs file. 2623loading and customization of those packages from the .emacs file.
2534 2624
2625+++
2535** The new keypad setup package provides several common bindings for 2626** The new keypad setup package provides several common bindings for
2536the numeric keypad which is available on most keyboards. The numeric 2627the numeric keypad which is available on most keyboards. The numeric
2537keypad typically has the digits 0 to 9, a decimal point, keys marked 2628keypad typically has the digits 0 to 9, a decimal point, keys marked
@@ -2659,6 +2750,7 @@ There is also Global Reveal mode which affects all buffers.
2659** The new package ibuffer provides a powerful, completely 2750** The new package ibuffer provides a powerful, completely
2660customizable replacement for buff-menu.el. 2751customizable replacement for buff-menu.el.
2661 2752
2753+++
2662** The new package table.el implements editable, WYSIWYG, embedded 2754** The new package table.el implements editable, WYSIWYG, embedded
2663`text tables' in Emacs buffers. It simulates the effect of putting 2755`text tables' in Emacs buffers. It simulates the effect of putting
2664these tables in a special major mode. The package emulates WYSIWYG 2756these tables in a special major mode. The package emulates WYSIWYG
@@ -2681,16 +2773,20 @@ mode-lines in inverse-video.
2681--- 2773---
2682** cplus-md.el has been removed to avoid problems with Custom. 2774** cplus-md.el has been removed to avoid problems with Custom.
2683 2775
2776+++
2684** New package benchmark.el contains simple support for convenient 2777** New package benchmark.el contains simple support for convenient
2685timing measurements of code (including the garbage collection component). 2778timing measurements of code (including the garbage collection component).
2686 2779
2780---
2687** The new Lisp library fringe.el controls the appearance of fringes. 2781** The new Lisp library fringe.el controls the appearance of fringes.
2688 2782
2783---
2689** `cfengine-mode' is a major mode for editing GNU Cfengine 2784** `cfengine-mode' is a major mode for editing GNU Cfengine
2690configuration files. 2785configuration files.
2691 2786
2692* Incompatible Lisp Changes in Emacs 22.1 2787* Incompatible Lisp Changes in Emacs 22.1
2693 2788
2789+++
2694** The new interactive-specification `G' reads a file name 2790** The new interactive-specification `G' reads a file name
2695much like `F', but if the input is a directory name (even defaulted), 2791much like `F', but if the input is a directory name (even defaulted),
2696it returns just the directory name. 2792it returns just the directory name.
@@ -2709,6 +2805,17 @@ the command `undefined'. (In earlier Emacs versions, it used
2709* Lisp Changes in Emacs 22.1 2805* Lisp Changes in Emacs 22.1
2710 2806
2711+++ 2807+++
2808** The new function `filter-buffer-substring' extracts a buffer
2809substring, passes it through a set of filter functions, and returns
2810the filtered substring. It is used instead of `buffer-substring' or
2811`delete-and-extract-region' when copying text into a user-accessible
2812data structure, like the kill-ring, X clipboard, or a register. The
2813list of filter function is specified by the new variable
2814`buffer-substring-filters'. For example, Longlines mode uses
2815`buffer-substring-filters' to remove soft newlines from the copied
2816text.
2817
2818+++
2712** An element of buffer-undo-list can now have the form (apply FUNNAME 2819** An element of buffer-undo-list can now have the form (apply FUNNAME
2713. ARGS), where FUNNAME is a symbol other than t or nil. That stands 2820. ARGS), where FUNNAME is a symbol other than t or nil. That stands
2714for a high-level change that should be undone by evaluating (apply 2821for a high-level change that should be undone by evaluating (apply
@@ -2734,6 +2841,7 @@ save-some-buffers will always save that buffer without asking
2734** The function symbol-file tells you which file defined 2841** The function symbol-file tells you which file defined
2735a certain function or variable. 2842a certain function or variable.
2736 2843
2844+++
2737** Lisp code can now test if a given buffer position is inside a 2845** Lisp code can now test if a given buffer position is inside a
2738clickable link with the new function `mouse-on-link-p'. This is the 2846clickable link with the new function `mouse-on-link-p'. This is the
2739function used by the new `mouse-1-click-follows-link' functionality. 2847function used by the new `mouse-1-click-follows-link' functionality.
@@ -2814,6 +2922,7 @@ been declared obsolete.
2814the up-event that was discarded in case the last key sequence read for a 2922the up-event that was discarded in case the last key sequence read for a
2815previous 'k' or 'K' argument was a down-event; otherwise nil is used. 2923previous 'k' or 'K' argument was a down-event; otherwise nil is used.
2816 2924
2925+++
2817** Function `translate-region' accepts also a char-table as TABLE 2926** Function `translate-region' accepts also a char-table as TABLE
2818argument. 2927argument.
2819 2928
@@ -2830,6 +2939,7 @@ argument.
2830been renamed to `disabled-command-function'. The variable 2939been renamed to `disabled-command-function'. The variable
2831`disabled-command-hook' has been kept as an obsolete alias. 2940`disabled-command-hook' has been kept as an obsolete alias.
2832 2941
2942+++
2833** Function `compute-motion' now calculates the usable window 2943** Function `compute-motion' now calculates the usable window
2834width if the WIDTH argument is nil. If the TOPOS argument is nil, 2944width if the WIDTH argument is nil. If the TOPOS argument is nil,
2835the usable window height and width is used. 2945the usable window height and width is used.
@@ -2838,6 +2948,7 @@ the usable window height and width is used.
2838** `visited-file-modtime' and `calendar-time-from-absolute' now return 2948** `visited-file-modtime' and `calendar-time-from-absolute' now return
2839a list of two integers, instead of a cons. 2949a list of two integers, instead of a cons.
2840 2950
2951+++
2841** If a command sets transient-mark-mode to `only', that 2952** If a command sets transient-mark-mode to `only', that
2842enables Transient Mark mode for the following command only. 2953enables Transient Mark mode for the following command only.
2843During that following command, the value of transient-mark-mode 2954During that following command, the value of transient-mark-mode
@@ -3099,6 +3210,7 @@ then this function returns the regexp constructed from the variables
3099`format' are now documented. Some flags that were accepted but not 3210`format' are now documented. Some flags that were accepted but not
3100implemented (such as "*") are no longer accepted. 3211implemented (such as "*") are no longer accepted.
3101 3212
3213+++
3102** New function `macroexpand-all' expands all macros in a form. 3214** New function `macroexpand-all' expands all macros in a form.
3103It is similar to the Common-Lisp function of the same name. 3215It is similar to the Common-Lisp function of the same name.
3104One difference is that it guarantees to return the original argument 3216One difference is that it guarantees to return the original argument
@@ -3125,6 +3237,7 @@ sure saved files have the current year in any copyright headers.
3125string. The old behavior is available if you call 3237string. The old behavior is available if you call
3126`insert-for-yank-1' instead. 3238`insert-for-yank-1' instead.
3127 3239
3240+++
3128** New function `get-char-property-and-overlay' accepts the same 3241** New function `get-char-property-and-overlay' accepts the same
3129arguments as `get-char-property' and returns a cons whose car is the 3242arguments as `get-char-property' and returns a cons whose car is the
3130return value of `get-char-property' called with those arguments and 3243return value of `get-char-property' called with those arguments and
@@ -3224,6 +3337,7 @@ contents are detected automatically. However, certain implicit
3224changes to mode lines, header lines, or display properties may require 3337changes to mode lines, header lines, or display properties may require
3225forcing an explicit window update. 3338forcing an explicit window update.
3226 3339
3340---
3227** New function `redirect-debugging-output' can be used to redirect 3341** New function `redirect-debugging-output' can be used to redirect
3228debugging output on the stderr file handle to a file. 3342debugging output on the stderr file handle to a file.
3229 3343
@@ -3667,7 +3781,7 @@ variable is used by read-file-name-internal to filter the completion list.
3667** The new variable `read-file-name-function' can be used by lisp code 3781** The new variable `read-file-name-function' can be used by lisp code
3668to override the internal read-file-name function. 3782to override the internal read-file-name function.
3669 3783
3670 3784+++
3671** The new variable `read-file-name-completion-ignore-case' specifies 3785** The new variable `read-file-name-completion-ignore-case' specifies
3672whether completion ignores case when reading a file name with the 3786whether completion ignores case when reading a file name with the
3673`read-file-name' function. 3787`read-file-name' function.
@@ -3919,6 +4033,7 @@ A new predicate `supports' has also been added to the `defface' face
3919specification language, which can be used to do this test for faces 4033specification language, which can be used to do this test for faces
3920defined with defface. 4034defined with defface.
3921 4035
4036---
3922** The function face-differs-from-default-p now truly checks whether the 4037** The function face-differs-from-default-p now truly checks whether the
3923given face displays differently from the default face or not (previously 4038given face displays differently from the default face or not (previously
3924it did only a very cursory check). 4039it did only a very cursory check).
@@ -3932,6 +4047,7 @@ inheritance is used when determining the value of a face attribute.
3932** New functions face-attribute-relative-p and merge-face-attribute 4047** New functions face-attribute-relative-p and merge-face-attribute
3933help with handling relative face attributes. 4048help with handling relative face attributes.
3934 4049
4050+++
3935** The priority of faces in an :inherit attribute face-list is reversed. 4051** The priority of faces in an :inherit attribute face-list is reversed.
3936If a face contains an :inherit attribute with a list of faces, earlier 4052If a face contains an :inherit attribute with a list of faces, earlier
3937faces in the list override later faces in the list; in previous releases 4053faces in the list override later faces in the list; in previous releases
@@ -4422,6 +4538,7 @@ formerly used for that purpose is now an alias for locale-coding-system.
4422display a prompt but don't use the minibuffer, now display the prompt 4538display a prompt but don't use the minibuffer, now display the prompt
4423using the text properties (esp. the face) of the prompt string. 4539using the text properties (esp. the face) of the prompt string.
4424 4540
4541---
4425** New function x-send-client-message sends a client message when 4542** New function x-send-client-message sends a client message when
4426running under X. 4543running under X.
4427 4544
@@ -4431,6 +4548,7 @@ all overlays in the buffer by just calling (remove-overlay).
4431 4548
4432** New packages: 4549** New packages:
4433 4550
4551+++
4434*** The new package gdb-ui.el provides an enhanced graphical interface to 4552*** The new package gdb-ui.el provides an enhanced graphical interface to
4435GDB. You can interact with GDB through the GUD buffer in the usual way, but 4553GDB. You can interact with GDB through the GUD buffer in the usual way, but
4436there are also further buffers which control the execution and describe the 4554there are also further buffers which control the execution and describe the
@@ -4447,9 +4565,11 @@ current syntactic context (as returned by parse-partial-sexp).
4447binary data structures, such as network packets, to and from Lisp 4565binary data structures, such as network packets, to and from Lisp
4448data structures. 4566data structures.
4449 4567
4568---
4450*** The TCL package tcl-mode.el was replaced by tcl.el. 4569*** The TCL package tcl-mode.el was replaced by tcl.el.
4451This was actually done in Emacs-21.1, and was not documented. 4570This was actually done in Emacs-21.1, and was not documented.
4452 4571
4572+++
4453*** The new package button.el implements simple and fast `clickable buttons' 4573*** The new package button.el implements simple and fast `clickable buttons'
4454in emacs buffers. `buttons' are much lighter-weight than the `widgets' 4574in emacs buffers. `buttons' are much lighter-weight than the `widgets'
4455implemented by widget.el, and can be used by lisp code that doesn't 4575implemented by widget.el, and can be used by lisp code that doesn't
diff --git a/etc/TUTORIAL b/etc/TUTORIAL
index b5632ae707b..dd3b25bce3b 100644
--- a/etc/TUTORIAL
+++ b/etc/TUTORIAL
@@ -1,3 +1,4 @@
1Emacs Tutorial
1You are looking at the Emacs tutorial. See end for copying conditions. 2You are looking at the Emacs tutorial. See end for copying conditions.
2Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation. 3Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation.
3 4
diff --git a/etc/TUTORIAL.bg b/etc/TUTORIAL.bg
index 8bd4b2a19ad..ba32e814b91 100644
--- a/etc/TUTORIAL.bg
+++ b/etc/TUTORIAL.bg
@@ -1,3 +1,4 @@
1âúâåäåíèåòî íà Åìàêñ
1Âèå ãëåäàòå âúâåäåíèåòî íà Åìàêñ. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà. 2Âèå ãëåäàòå âúâåäåíèåòî íà Åìàêñ. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà.
2Copyright (c) 1985, 1996, 1998, 2001, 2002, 2003 Free Software Foundation. 3Copyright (c) 1985, 1996, 1998, 2001, 2002, 2003 Free Software Foundation.
3 4
diff --git a/etc/TUTORIAL.cn b/etc/TUTORIAL.cn
index cb3e93d956a..e286d4f19c8 100644
--- a/etc/TUTORIAL.cn
+++ b/etc/TUTORIAL.cn
@@ -1,3 +1,4 @@
1Emacs ¿ìËÙÖ¸ÄÏ
1ÄúÕýÔÚÔĶÁ Emacs ¿ìËÙÖ¸ÄÏ£¨ Emacs tutorial £©¡£Çë¼ûҳβÓйظ´ÖÆÌõ¼þ¡£ 2ÄúÕýÔÚÔĶÁ Emacs ¿ìËÙÖ¸ÄÏ£¨ Emacs tutorial £©¡£Çë¼ûҳβÓйظ´ÖÆÌõ¼þ¡£
2Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. 3Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
3 4
diff --git a/etc/TUTORIAL.cs b/etc/TUTORIAL.cs
index 525e481d3db..bac3a3a228e 100644
--- a/etc/TUTORIAL.cs
+++ b/etc/TUTORIAL.cs
@@ -1,3 +1,4 @@
1tutoriál k Emacsu
1Copyright (c) 1985 Free Software Foundation, Inc; podmínky viz na konci. 2Copyright (c) 1985 Free Software Foundation, Inc; podmínky viz na konci.
2Do èe¹tiny pøelo¾il Milan Zamazal <pdm@zamazal.org>. 3Do èe¹tiny pøelo¾il Milan Zamazal <pdm@zamazal.org>.
3 4
diff --git a/etc/TUTORIAL.de b/etc/TUTORIAL.de
index a007fef752b..3f03d983651 100644
--- a/etc/TUTORIAL.de
+++ b/etc/TUTORIAL.de
@@ -1,3 +1,4 @@
1Einführung in Emacs
1Einführung in Emacs. (c) 2002, 2003 Free Software Foundation, Inc. 2Einführung in Emacs. (c) 2002, 2003 Free Software Foundation, Inc.
2 3
3Emacs-Befehle beinhalten im allgemeinen die CONTROL-Taste (manchmal 4Emacs-Befehle beinhalten im allgemeinen die CONTROL-Taste (manchmal
diff --git a/etc/TUTORIAL.es b/etc/TUTORIAL.es
index e4850649c7d..939ad3c2a23 100644
--- a/etc/TUTORIAL.es
+++ b/etc/TUTORIAL.es
@@ -1,3 +1,4 @@
1tutorial de Emacs
1Usted esta viendo el tutorial de Emacs. Vea al final las condiciones 2Usted esta viendo el tutorial de Emacs. Vea al final las condiciones
2de copiado. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software 3de copiado. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software
3Foundation. 4Foundation.
diff --git a/etc/TUTORIAL.fr b/etc/TUTORIAL.fr
index 38853c608b9..99bf4c00ff2 100644
--- a/etc/TUTORIAL.fr
+++ b/etc/TUTORIAL.fr
@@ -1,3 +1,4 @@
1Didacticiel d'Emacs
1Didacticiel d'Emacs. Voir la fin de ce document pour les conditions. 2Didacticiel d'Emacs. Voir la fin de ce document pour les conditions.
2Copyright (c) 1985, 2001, 2002 Free Software Foundation, Inc. 3Copyright (c) 1985, 2001, 2002 Free Software Foundation, Inc.
3 4
diff --git a/etc/TUTORIAL.it b/etc/TUTORIAL.it
index 02a91045d0e..6611675b583 100644
--- a/etc/TUTORIAL.it
+++ b/etc/TUTORIAL.it
@@ -1,3 +1,4 @@
1Esercitazione di Emacs
1Esercitazione di Emacs. Copyright (c) 2003 Free Software Foundation, Inc. 2Esercitazione di Emacs. Copyright (c) 2003 Free Software Foundation, Inc.
2Condizioni d'uso alla fine del file. 3Condizioni d'uso alla fine del file.
3 4
diff --git a/etc/TUTORIAL.ja b/etc/TUTORIAL.ja
index ad25a0a31cc..48d807f6ce0 100644
--- a/etc/TUTORIAL.ja
+++ b/etc/TUTORIAL.ja
@@ -1,3 +1,4 @@
1Emacs $BF~Lg%,%$%I$G$9(B
1$B$"$J$?$,8=:_8+$F$$$k$N$O(B Emacs $BF~Lg%,%$%I$G$9!#%U%!%$%k:G8e$r;2>H$N$3$H!#(B 2$B$"$J$?$,8=:_8+$F$$$k$N$O(B Emacs $BF~Lg%,%$%I$G$9!#%U%!%$%k:G8e$r;2>H$N$3$H!#(B
2Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. 3Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
3 4
diff --git a/etc/TUTORIAL.ko b/etc/TUTORIAL.ko
index 72782dc330a..5df936a998f 100644
--- a/etc/TUTORIAL.ko
+++ b/etc/TUTORIAL.ko
@@ -1,3 +1,4 @@
1$(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B
1$(C@z@[1G(B (c) 1985, 2001 Free Software Foundation, Inc; $(C3!?!4B(B $(C:9;g(B $(CA60G@L(B 2$(C@z@[1G(B (c) 1985, 2001 Free Software Foundation, Inc; $(C3!?!4B(B $(C:9;g(B $(CA60G@L(B
2$(C@V=@4O4Y(B. $(CAv1](B $(C@P0m(B $(C@V4B(B $(C@L(B $(C1[@:(B $(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B. 3$(C@V=@4O4Y(B. $(CAv1](B $(C@P0m(B $(C@V4B(B $(C@L(B $(C1[@:(B $(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B.
3 4
diff --git a/etc/TUTORIAL.nl b/etc/TUTORIAL.nl
index b4849dd73a1..905021095db 100644
--- a/etc/TUTORIAL.nl
+++ b/etc/TUTORIAL.nl
@@ -1,3 +1,4 @@
1Emacs-inleiding
1Je leest nu de Emacs-inleiding. De kopieervoorwaarden staan onderaan. 2Je leest nu de Emacs-inleiding. De kopieervoorwaarden staan onderaan.
2Copyright (c) 1985, 1996, 1997, 2003, 2004, 2005 Free Software Foundation 3Copyright (c) 1985, 1996, 1997, 2003, 2004, 2005 Free Software Foundation
3 4
diff --git a/etc/TUTORIAL.pl b/etc/TUTORIAL.pl
index 501df8f6521..5b5b4d4eb8c 100644
--- a/etc/TUTORIAL.pl
+++ b/etc/TUTORIAL.pl
@@ -1,3 +1,4 @@
1krótki samouczek Emacsa
1Czytasz w³a¶nie krótki samouczek Emacsa. Copyright (c) 1985, 2001 2Czytasz w³a¶nie krótki samouczek Emacsa. Copyright (c) 1985, 2001
2Free Software Foundation, Inc. Szczegó³y na koñcu pliku. 3Free Software Foundation, Inc. Szczegó³y na koñcu pliku.
3 4
diff --git a/etc/TUTORIAL.pt_BR b/etc/TUTORIAL.pt_BR
index 58101c28edb..6492c1ce3dd 100644
--- a/etc/TUTORIAL.pt_BR
+++ b/etc/TUTORIAL.pt_BR
@@ -1,3 +1,4 @@
1Tutorial do Emacs
1Copyright (c) 2004 Free Software Foundation, Inc; Veja no fim as 2Copyright (c) 2004 Free Software Foundation, Inc; Veja no fim as
2condições. 3condições.
3 4
diff --git a/etc/TUTORIAL.ro b/etc/TUTORIAL.ro
index 670c39bc454..d4dde10f237 100644
--- a/etc/TUTORIAL.ro
+++ b/etc/TUTORIAL.ro
@@ -1,3 +1,4 @@
1tutorialului de Emacs
1Copyright (c) 1998 Free Software Foundation -*-coding: latin-2;-*- 2Copyright (c) 1998 Free Software Foundation -*-coding: latin-2;-*-
2Traducere din englezã de Tudor Hulubei <tudor@gnu.org>. 3Traducere din englezã de Tudor Hulubei <tudor@gnu.org>.
3Mulþumiri Aidei Hulubei <aida@chang.pub.ro> pentru corecturi ºi sugestii. 4Mulþumiri Aidei Hulubei <aida@chang.pub.ro> pentru corecturi ºi sugestii.
diff --git a/etc/TUTORIAL.ru b/etc/TUTORIAL.ru
index 84f4b4c6c82..10b96e56076 100644
--- a/etc/TUTORIAL.ru
+++ b/etc/TUTORIAL.ru
@@ -1,3 +1,4 @@
1ÕÞÅÂÎÉË Emacs
1÷Ù ÞÉÔÁÅÔÅ ÕÞÅÂÎÉË Emacs. õÓÌÏ×ÉÑ ËÏÐÉÒÏ×ÁÎÉÑ × ËÏÎÃÅ ÆÁÊÌÁ. 2÷Ù ÞÉÔÁÅÔÅ ÕÞÅÂÎÉË Emacs. õÓÌÏ×ÉÑ ËÏÐÉÒÏ×ÁÎÉÑ × ËÏÎÃÅ ÆÁÊÌÁ.
2Copyright (c) 1985, 1996, 2004 Free Software Foundation, Inc. 3Copyright (c) 1985, 1996, 2004 Free Software Foundation, Inc.
3 4
diff --git a/etc/TUTORIAL.sk b/etc/TUTORIAL.sk
index f294088aba9..58812197287 100644
--- a/etc/TUTORIAL.sk
+++ b/etc/TUTORIAL.sk
@@ -1,3 +1,4 @@
1tútorial k Emacsu
1Copyright (c) 1985 Free Software Foundation, Inc; podmienky pozri na konci. 2Copyright (c) 1985 Free Software Foundation, Inc; podmienky pozri na konci.
2Do èe¹tiny prelo¾il Milan Zamazal <pdm@zamazal.org>, do slovenèiny Miroslav 3Do èe¹tiny prelo¾il Milan Zamazal <pdm@zamazal.org>, do slovenèiny Miroslav
3Va¹ko <zemiak@zoznam.sk>. 4Va¹ko <zemiak@zoznam.sk>.
diff --git a/etc/TUTORIAL.sl b/etc/TUTORIAL.sl
index 263019643db..f1e64ec748d 100644
--- a/etc/TUTORIAL.sl
+++ b/etc/TUTORIAL.sl
@@ -1,3 +1,4 @@
1Prvo berilo za Emacs
1Prvo berilo za Emacs. Pogoji uporabe in raz¹irjanja so navedeni na koncu. 2Prvo berilo za Emacs. Pogoji uporabe in raz¹irjanja so navedeni na koncu.
2Copyright (c) 1985, 1996, 1997, 2001, 2002 Free Software Foundation, Inc. 3Copyright (c) 1985, 1996, 1997, 2001, 2002 Free Software Foundation, Inc.
3 4
diff --git a/etc/TUTORIAL.sv b/etc/TUTORIAL.sv
index 65d1548c378..2f9bbe7ceab 100644
--- a/etc/TUTORIAL.sv
+++ b/etc/TUTORIAL.sv
@@ -1,3 +1,4 @@
1användarhandledningen till Emacs
1Detta är den Svenska användarhandledningen till Emacs. I slutet finns 2Detta är den Svenska användarhandledningen till Emacs. I slutet finns
2kopieringsvillkoren. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free 3kopieringsvillkoren. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free
3Software Foundation, Inc. 4Software Foundation, Inc.
diff --git a/etc/TUTORIAL.th b/etc/TUTORIAL.th
index f3708c9d60f..85280907c60 100644
--- a/etc/TUTORIAL.th
+++ b/etc/TUTORIAL.th
@@ -1,3 +1,4 @@
10,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B
1,TJ'G90ET1"0JT1708Tl1(B ,T>(B.,TH(B. 2528 ,Tb4B:0CT10IQ17?0CU1+M?05l1aG0Cl1?RG09l1`40*Q19(B (Free Software 2,TJ'G90ET1"0JT1708Tl1(B ,T>(B.,TH(B. 2528 ,Tb4B:0CT10IQ17?0CU1+M?05l1aG0Cl1?RG09l1`40*Q19(B (Free Software
2Foundation, Inc); ,T!0CX13R0HV1!IR`0'Wh1M9d"5M907i1RB:7(B. 3Foundation, Inc); ,T!0CX13R0HV1!IR`0'Wh1M9d"5M907i1RB:7(B.
30,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B (Emacs tutorial) ,TM0BYh1c9"3P09Ui1(B. 40,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B (Emacs tutorial) ,TM0BYh1c9"3P09Ui1(B.
diff --git a/etc/TUTORIAL.zh b/etc/TUTORIAL.zh
index a1383dc26bb..f8d1d208252 100644
--- a/etc/TUTORIAL.zh
+++ b/etc/TUTORIAL.zh
@@ -1,3 +1,4 @@
1Emacs §Ö³t«ü«n¡]
1±z¥¿¦b¾\Ū Emacs §Ö³t«ü«n¡] Emacs tutorial ¡^¡C½Ð¨£­¶§À¦³Ãö½Æ»s±ø¥ó¡C 2±z¥¿¦b¾\Ū Emacs §Ö³t«ü«n¡] Emacs tutorial ¡^¡C½Ð¨£­¶§À¦³Ãö½Æ»s±ø¥ó¡C
2Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. 3Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
3 4
diff --git a/etc/gnus-logo.eps b/etc/gnus-logo.eps
new file mode 100644
index 00000000000..95408ba9af6
--- /dev/null
+++ b/etc/gnus-logo.eps
@@ -0,0 +1,1055 @@
1%!PS-Adobe-2.0 EPSF-2.0
2%%Title: gnuslogo1.ps
3%%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley
4%%BoundingBox: 0 0 493 505
5%%Pages: 1
6%%DocumentFonts:
7%%EndComments
8%%EndProlog
9
10%%Page: 1 1
11
12% remember original state
13/origstate save def
14
15% build a temporary dictionary
1620 dict begin
17
18% define string to hold a scanline's worth of data
19/pix 62 string def
20
21% lower left corner
220 0 translate
23
24% size of image (on paper, in 1/72inch coords)
25493.0 505.0 scale
26
27% dimensions of data
28493 505 1
29
30% mapping matrix
31[493 0 0 -505 0 505]
32
33{currentfile pix readhexstring pop}
34image
35ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
36ffffffffffffffffffffffffffffffffffffffffff01fffffff8
37ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
38fffffffffffffffffffffffffffffffffffffffff8003ffffff8
39ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
40fffffffffffffffffffffffffffffffffffffffff0000ffffff8
41ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
42ffffffffffffffffffffffffffffffffffffffff8000007ffff8
43ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
44ffffffffffffffffffffffffffffffffffffffff0000003ffff8
45ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
46fffffffffffffffffffffffffffffffffffffffe0000000ffff8
47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
48fffffffffffffffffffffffffffffffffffffff000000003fff8
49ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
50fffffffffffffffffffffffffffffffffffffff000000000fff8
51ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
52ffffffffffffffffffffffffffffffffffffffc0000000007ff8
53ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
54ffffffffffffffffffffffffffffffffffffff80000000003ff8
55ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
56ffffffffffffffffffffffffffffffffffffff00000000001ff8
57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
58fffffffffffffffffffffffffffffffffffffe00000000000ff8
59ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
60fffffffffffffffffffffffffffffffffffffc00000000000ff8
61ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
62fffffffffffffffffffffffffffffffffffff8000000000007f8
63ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
64fffffffffffffffffffffffffffffffffffff0000000000003f8
65ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
66fffffffffffffffffffffffffffffffffffff0000000000003f8
67fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff
68ffffffffffffffffffffffffffffffffffffe0000000000001f8
69fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff
70ffffffffffffffffffffffffffffffffffffc0000000000000f8
71ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff
72ffffffffffffffffffffffffffffffffffffc0000000000000f8
73ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff
74ffffffffffffffffffffffffffffffffffff8000000000000078
75fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff
76ffffffffffffffffffffffffffffffffffff0000000000000038
77fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff
78fffffffffffffffffffffffffffffffffffe0000000000000038
79fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff
80fffffffffffffffffffffffffffffffffffe0000000000000038
81fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff
82fffffffffffffffffffffffffffffffffffc0000000000000018
83ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff
84fffffffffffffffffffffffffffffffffffc0000000000000018
85ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff
86fffffffffffffffffffffffffffffffffff80000000000000018
87ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff
88fffffffffffffffffffffffffffffffffff80000000000000008
89ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff
90fffffffffffffffffffffffffffffffffff00000000000000008
91fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff
92fffffffffffffffffffffffffffffffffff00000000000000008
93fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff
94ffffffffffffffffffffffffffffffffffe00000000000000008
95fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff
96ffffffffffffffffffffffffffffffffffe00000000000000008
97fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff
98ffffffffffffffffffffffffffffffffffc00000000000000000
99ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff
100ffffffffffffffffffffffffffffffffffc00000000000000000
101ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff
102ffffffffffffffffffffffffffffffffff800000000000000000
103ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff
104ffffffffffffffffffffffffffffffffff800000000000000000
105ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff
106ffffffffffffffffffffffffffffffffff000040000000000000
107fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff
108ffffffffffffffffffffffffffffffffff0007ffc00000000000
109fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff
110fffffffffffffffffffffffffffffffffe001ffffc0000000000
111fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff
112fffffffffffffffffffffffffffffffffc003ffffe0000000000
113fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff
114fffffffffffffffffffffffffffffffffc007fffffc000000000
115fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff
116fffffffffffffffffffffffffffffffff800fffffff000000000
117ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff
118fffffffffffffffffffffffffffffffff801fffffff800000000
119ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff
120fffffffffffffffffffffffffffffffff003ffffffff00000000
121ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff
122fffffffffffffffffffffffffffffffff007ffffffff00000000
123ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff
124ffffffffffffffffffffffffffffffffe00fffffffff80000000
125fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff
126ffffffffffffffffffffffffffffffffe01fffffffffc0000008
127fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff
128ffffffffffffffffffffffffffffffffc03fffffffffc0000008
129fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff
130ffffffffffffffffffffffffffffffffc07ffffffffff0000000
131fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff
132ffffffffffffffffffffffffffffffff807ffffffffff0000000
133fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff
134ffffffffffffffffffffffffffffffff80fffffffffff0000008
135fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff
136ffffffffffffffffffffffffffffffff81fffffffffff8000008
137fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff
138ffffffffffffffffffffffffffffffff01fffffffffff8000008
139ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff
140ffffffffffffffffffffffffffffffff03fffffffffffc000008
141ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff
142fffffffffffffffffffffffffffffffe03fffffffffffc000008
143ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff
144fffffffffffffffffffffffffffffffe07fffffffffffe000008
145ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff
146fffffffffffffffffffffffffffffffe07fffffffffffe000008
147ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff
148fffffffffffffffffffffffffffffffe0ffffffffffffe000008
149ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff
150fffffffffffffffffffffffffffffffc0ffffffffffffe000008
151ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff
152fffffffffffffffffffffffffffffffc1fffffffffffff000008
153ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff
154fffffffffffffffffffffffffffffffc3fffffffffffff000008
155ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff
156fffffffffffffffffffffffffffffff87fffffffffffff000008
157ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff
158fffffffffffffffffffffffffffffff87fffffffffffff000008
159ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff
160fffffffffffffffffffffffffffffff87fffffffffffff000008
161ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff
162fffffffffffffffffffffffffffffff8ffffffffffffff000008
163ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff
164fffffffffffffffffffffffffffffffcffffffffffffff000008
165fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff
166ffffffffffffffffffffffffffffe7fdffffffffffffff000008
167fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff
168ffffffffffffffffffffffffffffe7fdffffffffffffff000008
169fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff
170ffffffffffffffffffffffffffffc7ffffffffffffffff000008
171fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff
172fffffffffeffffffffffffffffff87ffffffffffffffff000008
173f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff
174fffffffffcffffffffffffffffff87ffffffffffffffff000008
175f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff
176fffffffff8ffffffffffffffffff07ffffffffffffffff000008
177f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff
178fffffffff8fffffffffffffffffe0fffffffffffffffff000008
179f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff
180fffffffff0fffffffffffffffffe0fffffffffffffffff000018
181e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff
182fffffffff0fffffffffffffffffc0fffffffffffffffff000018
183e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff
184ffffffffe0fffffffffffffffffc1fffffffffffffffff000018
185c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff
186ffffffffe0fffffffffffffffff81fffffffffffffffff000018
187c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff
188ffffffffc0fffffffffffffffff83fffffffffffffffff000018
189800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff
190ffffffff01fffffffffffffffff03fffffffffffffffff000038
191800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff
192ffffffff01fffffffffffffffff03fffffffffffffffff800038
19300000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff
194fffffffe03ffffffffffffffffe07fffffffffffffffff800038
19500000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff
196fffffffc03ffffffffffffffffe07fffffffffffffffff800038
19700000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff
198fffffff803ffffffffffffffffc07fffffffffffffffff800038
19900000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff
200fffffff007ffffffffffffffffc0ffffffffffffffffff800038
2010000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff
202fffffff007ffffffffffffffff80ffffffffffffffffff800078
2030000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff
204ffffffc00fffffffffffffffff81ffffffffffffffffff800078
2058000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff
206ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8
2078000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff
208ffffff801fffffffffffffffff03ffffffffffffffffff8000f8
209c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff
210fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8
211e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff
212fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8
213f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff
214fffff0003ffffffffffffffff80fffffffffffffffffff8000f8
215f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff
216ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8
217f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f
218ffff00007fffffffffffffffe01fffffffffffffffffff0001f8
219fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007
220fffc00007fffffffffffffffc01fffffffffffffffffff0001f8
221fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000
222ffe000007ffffbffffffffff801fffffffffffffffffff0001f8
223fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000
22400000000fffff3ffffffffff003fffffffffffffffffff0001f8
225fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000
22600000001fffff1fffffffffe003fffffffffffffffffff0003f8
227ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000
22800000001ffffe1fffffffffc007fffffffffffffffffff0003f8
229ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000
23000000003ffffe0fffffffff0007fffffffffffffffffff0003f8
231ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000
23200000003ffffc0ffffffffe0007fffffffffffffffffff0003f8
233ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000
23400000007ffffc07fffffff8000ffffffffffffffffffff0003f8
235fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000
23600000007ffff803fffffff0000fffffffffffffffffffe0007f8
237fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000
23800000007ffff801ffffffc0001fffffffffffffffffffe0007f8
239fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000
2400000000fffff000ffffff80003fffffffffffffffffffe0007f8
241fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000
2420000000fffff0007ffffe00003fffffffffffffffffffe0007f8
243ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000
2440000001ffffe0001ffff800007fffffffffffffffffffe000ff8
245ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000
2460000001ffffe0000fffc000007fffffffffffffffffffe000ff8
247ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000
2480000003ffffe0000000000000ffffffffffffffffffffe000ff8
249fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000
2500000003ffffc0000000000000ffffffffffffffffffffe000ff8
251fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000
2520000007ffff80000000000001ffffffffffffffffffffe001ff8
253fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000
2540000007ffff80000000000001ffffffffffffffffffffe001ff8
255fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000
256000000fffff80000000000003ffffffffffffffffffffc001ff8
257fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000
258000003fffff00000000000007ffffffffffffffffffffc001ff8
259fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000
260000007ffffe00000000000007ffffffffffffffffffffe003ff8
261fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000
262000007ffffe0000000000000fffffffffffffffffffffc003ff8
263ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000
26400001fffffc0000000000001fffffffffffffffffffffc003ff8
265ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000
26600001fffffc0000000000003fffffffffffffffffffffc003ff8
267ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000
26800003fffff80000000000003fffffffffffffffffffffc007ff8
269ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000
27000007fffff80000000000007fffffffffffffffffffffc007ff8
271ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000
2720000ffffff0000000000000ffffffffffffffffffffffc007ff8
273fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000
2740001ffffff0000000000001ffffffffffffffffffffffc007ff8
275fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000
2760003fffffe0000000000001ffffffffffffffffffffff800fff8
277fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000
2780007fffffe0000000000003ffffffffffffffffffffff800fff8
279fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000
280001ffffffc0000000000007ffffffffffffffffffffff800fff8
281fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000
282003ffffffc000000000000fffffffffffffffffffffff800fff8
283ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000
28400fffffff8000000000003fffffffffffffffffffffff001fff8
285ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000
28603fffffff8000000000003fffffffffffffffffffffff001fff8
287ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000
28807fffffff0000000000007fffffffffffffffffffffff001fff8
289ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000
2903ffffffff000000000000ffffffffffffffffffffffff003fff8
291ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f
292fffffffff000000000003ffffffffffffffffffffffff003fff8
293ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff
294fffffffff800000000007ffffffffffffffffffffffff003fff8
295fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff
296fffffffff80000000000ffffffffffffffffffffffffe003fff8
297fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff
298fffffffffc0000000003ffffffffffffffffffffffffe007fff8
299fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff
300fffffffffe0000000007ffffffffffffffffffffffffe007fff8
301fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff
302fffffffffe000000000fffffffffffffffffffffffffe00ffff8
303fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
304ffffffffff000000001fffffffffffffffffffffffffe00ffff8
305ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff
306ffffffffff800000007fffffffffffffffffffffffffc00ffff8
307ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff
308ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8
309ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff
310ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8
311ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff
312fffffffffff800001fffffffffffffffffffffffffffc01ffff8
313ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff
314fffffffffffe00007fffffffffffffffffffffffffffc01ffff8
315ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff
316ffffffffffff8003ffffffffffffffffffffffffffff801ffff8
317ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff
318ffffffffffffffffffffffffffffffffffffffffffff803ffff8
319fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff
320ffffffffffffffffffffffffffffffffffffffffffff803ffff8
321fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff
322ffffffffffffffffffffffffffffffffffffffffffff803ffff8
323fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff
324ffffffffffffffffffffffffffffffffffffffffffff007ffff8
325fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff
326ffffffffffffffffffffffffffffffffffffffffffff007ffff8
327fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff
328ffffffffffffffffffffffffffffffffffffffffffff007ffff8
329fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff
330fffffffffffffffffffffffffffffffffffffffffffe00fffff8
331ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff
332fffffffffffffffffffffffffffffffffffffffffffe00fffff8
333ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff
334fffffffffffffffffffffffffffffffffffffffffffe00fffff8
335ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff
336fffffffffffffffffffffffffffffffffffffffffffe00fffff8
337ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff
338fffffffffffffffffffffffffffffffffffffffffffe01fffff8
339ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff
340fffffffffffffffffffffffffffffffffffffffffffc01fffff8
341ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff
342fffffffffffffffffffffffffffffffffffffffffffc01fffff8
343ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff
344fffffffffffffffffffffffffffffffffffffffffffc01fffff8
345fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff
346fffffffffffffffffffffffffffffffffffffffffffc03fffff8
347fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff
348fffffffffffffffffffffffffffffffffffffffffff803fffff8
349fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff
350fffffffffffffffffffffffffffffffffffffffffff803fffff8
351fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff
352fffffffffffffffffffffffffffffffffffffffffff007fffff8
353fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff
354fffffffffffffffffffffffffffffffffffffffffff007fffff8
355fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff
356fffffffffffffffffffffffffffffffffffffffffff007fffff8
357ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff
358ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
359ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff
360ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
361ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff
362ffffffffffffffffffffffffffffffffffffffffffe00ffffff8
363ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff
364ffffffffffffffffffffffffffffffffffffffffffe01ffffff8
365ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff
366ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
367ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff
368ffffffffffffffffffffffffffffffffffffffffffc01ffffff8
369ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff
370ffffffffffffffffffffffffffffffffffffffffffc03ffffff8
371fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff
372ffffffffffffffffffffffffffffffffffffffffff803ffffff8
373fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff
374ffffffffffffffffffffffffffffffffffffffffff803ffffff8
375fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff
376ffffffffffffffffffffffffffffffffffffffffff807ffffff8
377fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff
378ffffffffffffffffffffffffffffffffffffffffff807ffffff8
379fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff
380ffffffffffffffffffffffffffffffffffffffffff007ffffff8
381fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff
382ffffffffffffffffffffffffffffffffffffffffff00fffffff8
383fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff
384ffffffffffffffffffffffffffffffffffffffffff00fffffff8
385ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff
386fffffffffffffffffffffffffffffffffffffffffe01fffffff8
387ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff
388fffffffffffffffffffffffffffffffffffffffffe01fffffff8
389ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff
390fffffffffffffffffffffffffffffffffffffffffe01fffffff8
391ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff
392fffffffffffffffffffffffffffffffffffffffffe03fffffff8
393ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff
394fffffffffffffffffffffffffffffffffffffffffe03fffffff8
395ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff
396fffffffffffffffffffffffffffffffffffffffffc07fffffff8
397ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff
398fffffffffffffffffffffffffffffffffffffffffc07fffffff8
399fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff
400fffffffffffffffffffffffffffffffffffffffff807fffffff8
401fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff
402fffffffffffffffffffffffffffffffffffffffff807fffffff8
403fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff
404fffffffffffffffffffffffffffffffffffffffff80ffffffff8
405fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff
406fffffffffffffffffffffffffffffffffffffffff80ffffffff8
407fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff
408fffffffffffffffffffffffffffffffffffffffff01ffffffff8
409fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff
410fffffffffffffffffffffffffffffffffffffffff01ffffffff8
411fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff
412fffffffffffffffffffffffffffffffffffffffff01ffffffff8
413fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff
414ffffffffffffffffffffffffffffffffffffffffe01ffffffff8
415fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff
416ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
417ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff
418ffffffffffffffffffffffffffffffffffffffffe03ffffffff8
419ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff
420ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
421ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff
422ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
423ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff
424ffffffffffffffffffffffffffffffffffffffffc07ffffffff8
425ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff
426ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
427ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff
428ffffffffffffffffffffffffffffffffffffffffc0fffffffff8
429ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff
430ffffffffffffffffffffffffffffffffffffffff80fffffffff8
431ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff
432ffffffffffffffffffffffffffffffffffffffff81fffffffff8
433ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff
434ffffffffffffffffffffffffffffffffffffffff81fffffffff8
435ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff
436ffffffffffffffffffffffffffffffffffffffff01fffffffff8
437ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff
438ffffffffffffffffffffffffffffffffffffffff03fffffffff8
439ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff
440fffffffffffffffffffffffffffffffffffffffe03fffffffff8
441fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff
442fffffffffffffffffffffffffffffffffffffffe03fffffffff8
443fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff
444fffffffffffffffffffffffffffffffffffffffe03fffffffff8
445fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff
446fffffffffffffffffffffffffffffffffffffffe07fffffffff8
447fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
448fffffffffffffffffffffffffffffffffffffffc07fffffffff8
449fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff
450fffffffffffffffffffffffffffffffffffffffc07fffffffff8
451fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff
452fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
453fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff
454fffffffffffffffffffffffffffffffffffffffc0ffffffffff8
455fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff
456fffffffffffffffffffffffffffffffffffffff80ffffffffff8
457fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff
458fffffffffffffffffffffffffffffffffffffff80ffffffffff8
459fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff
460fffffffffffffffffffffffffffffffffffffff00ffffffffff8
461fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
462fffffffffffffffffffffffffffffffffffffff01ffffffffff8
463fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff
464fffffffffffffffffffffffffffffffffffffff01ffffffffff8
465fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff
466ffffffffffffffffffffffffffffffffffffffe01ffffffffff8
467ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff
468ffffffffffffffffffffffffffffffffffffffe03ffffffffff8
469ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff
470fffffffffffffffffffdffffffffffffffffffe03ffffffffff8
471ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff
472fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8
473ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff
474fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
475fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff
476fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
477fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff
478fffffffffffffffffff1ffffffffffffffffff807ffffffffff8
479fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff
480ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8
481ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff
482ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8
483fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
484ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
485fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
486ffffffffffffffffff83ffffffffffffffffff00fffffffffff8
487fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
488ffffffffffffffffff03ffffffffffffffffff00fffffffffff8
489fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff
490ffffffffffffffffff03ffffffffffffffffff01fffffffffff8
491fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
492ffffffffffffffffff07ffffffffffffffffff01fffffffffff8
493fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
494fffffffffffffffffe07fffffffffffffffffe01fffffffffff8
495fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff
496fffffffffffffffffc07fffffffffffffffffe03fffffffffff8
497fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
498fffffffffffffffffc07fffffffffffffffffc03fffffffffff8
499fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff
500fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
501fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
502fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
503fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff
504fffffffffffffffff80ffffffffffffffffffc03fffffffffff8
505fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
506fffffffffffffffff03ffffffffffffffffff807fffffffffff8
507fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff
508ffffffffffffffffe01ffffffffffffffffff807fffffffffff8
509fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
510ffffffffffffffffe03ffffffffffffffffff807fffffffffff8
511fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff
512ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
513fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
514ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8
515fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff
516ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
517fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff
518ffffffffffffffff80fffffffffffffffffff00ffffffffffff8
519ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
520ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8
521ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff
522fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
523ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
524fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8
525ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff
526fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8
527ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff
528fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8
529ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff
530fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8
531ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff
532fffffffffffffff807ffffffffffffffffffc03ffffffffffff8
533ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
534fffffffffffffff807ffffffffffffffffff803ffffffffffff8
535ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
536fffffffffffffff00fffffffffffffffffff803ffffffffffff8
537ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
538fffffffffffffff00fffffffffffffffffff807ffffffffffff8
539ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
540ffffffffffffffe01fffffffffffffffffff807ffffffffffff8
541ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
542ffffffffffffffe03fffffffffffffffffff807ffffffffffff8
543ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
544ffffffffffffffc03fffffffffffffffffff807ffffffffffff8
545ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
546ffffffffffffff807fffffffffffffffffff00fffffffffffff8
547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
548ffffffffffffff807fffffffffffffffffff00fffffffffffff8
549ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
550ffffffffffffff00ffffffffffffffffffff00fffffffffffff8
551ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
552ffffffffffffff00fffffffffffffffffffe00fffffffffffff8
553ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
554fffffffffffffe01fffffffffffffffffffe01fffffffffffff8
555ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
556fffffffffffffe03fffffffffffffffffffe01fffffffffffff8
557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
558fffffffffffffc03fffffffffffffffffffc01fffffffffffff8
559ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
560fffffffffffffc07fffffffffffffffffffc01fffffffffffff8
561ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
562fffffffffffff807fffffffffffffffffffc03fffffffffffff8
563ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
564fffffffffffff00ffffffffffffffffffffc03fffffffffffff8
565ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
566fffffffffffff00ffffffffffffffffffff803fffffffffffff8
567ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
568ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
569ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
570ffffffffffffe01ffffffffffffffffffff803fffffffffffff8
571ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
572ffffffffffffc03ffffffffffffffffffff807fffffffffffff8
573ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
574ffffffffffffc03ffffffffffffffffffff007fffffffffffff8
575ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
576ffffffffffff807ffffffffffffffffffff007fffffffffffff8
577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
578ffffffffffff807ffffffffffffffffffff007fffffffffffff8
579ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
580ffffffffffff00fffffffffffffffffffff007fffffffffffff8
581ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
582fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8
583ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
584fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8
585ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff
586fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8
587ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
588fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8
589ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff
590fffffffffff803ffffffffffffffffffffc00ffffffffffffff8
591fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff
592fffffffffff807ffffffffffffffffffffc00ffffffffffffff8
593fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff
594fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
595fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff
596fffffffffff00fffffffffffffffffffffc01ffffffffffffff8
597fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff
598ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
599fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
600ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8
601fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
602ffffffffff801fffffffffffffffffffff801ffffffffffffff8
603fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff
604ffffffffff803fffffffffffffffffffff801ffffffffffffff8
605ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff
606ffffffffff003fffffffffffffffffffff803ffffffffffffff8
607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff
608fffffffffe007fffffffffffffffffffff803ffffffffffffff8
609ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff
610fffffffffc007fffffffffffffffffffff003ffffffffffffff8
611ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff
612fffffffffc00ffffffffffffffffffffff003ffffffffffffff8
613ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
614fffffffff800ffffffffffffffffffffff003ffffffffffffff8
615ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff
616fffffffff801ffffffffffffffffffffff003ffffffffffffff8
617ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff
618fffffffff803ffffffffffffffffffffff007ffffffffffffff8
619fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff
620fffffffff003fffffffffffffffffffffe007ffffffffffffff8
621fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff
622ffffffffe007fffffffffffffffffffffe007ffffffffffffff8
623fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff
624ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
625fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff
626ffffffffc007fffffffffffffffffffffe007ffffffffffffff8
627fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
628ffffffff800ffffffffffffffffffffffe00fffffffffffffff8
629fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff
630ffffffff000ffffffffffffffffffffffe00fffffffffffffff8
631ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff
632fffffffe001ffffffffffffffffffffffe00fffffffffffffff8
633ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
634fffffffc003ffffffffffffffffffffffe00fffffffffffffff8
635ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff
6369ffffffc003ffffffffffffffffffffffe00fffffffffffffff8
637ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff
6380ffffff8003ffffffffffffffffffffffc01fffffffffffffff8
639ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
64007fffff0007ffffffffffffffffffffffc01fffffffffffffff8
641ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe
64207ffffe000fffffffffffffffffffffffc01fffffffffffffff8
643fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8
64403ffffc000fffffffffffffffffffffffc01fffffffffffffff8
645fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0
64603ffff8001fffffffffffffffffffffff801fffffffffffffff8
647fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0
64801ffff0003fffffffffffffffffffffff803fffffffffffffff8
649fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
65000fffe0003fffffffffffffffffffffff803fffffffffffffff8
651fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0
65200fffe0003fffffffffffffffffffffff803fffffffffffffff8
653fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0
654003ffc0007fffffffffffffffffffffff003fffffffffffffff8
655ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80
656001fe0001ffffffffffffffffffffffff003fffffffffffffff8
657ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00
658000fc0001ffffffffffffffffffffffff007fffffffffffffff8
659ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00
660000000001ffffffffffffffffffffffff007fffffffffffffff8
661ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00
662000000003ffffffffffffffffffffffff007fffffffffffffff8
663ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00
664000000003ffffffffffffffffffffffff007fffffffffffffff8
665ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800
666000000007fffffffffffffffffffffffe007fffffffffffffff8
667fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800
668000000007fffffffffffffffffffffffe007fffffffffffffff8
669fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000
67000000001ffffffffffffffffffffffffe007fffffffffffffff8
671fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000
67200000001ffffffffffffffffffffffffe007fffffffffffffff8
673fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000
67400000001ffffffffffffffffffffffffe007fffffffffffffff8
675fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000
67600000003ffffffffffffffffffffffffc00ffffffffffffffff8
677fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000
67800000003ffffffffffffffffffffffffc00ffffffffffffffff8
679ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000
68000000007ffffffffffffffffffffffffc00ffffffffffffffff8
681ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000
6820000000fffffffffffffffffffffffffc01ffffffffffffffff8
683ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000
6840000001fffffffffffffffffffffffffc01ffffffffffffffff8
685ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000
6860000001fffffffffffffffffffffffffc01ffffffffffffffff8
687ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000
6880000003fffffffffffffffffffffffffc01ffffffffffffffff8
689fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000
6900000007fffffffffffffffffffffffff801ffffffffffffffff8
691fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000
6920000007fffffffffffffffffffffffff801ffffffffffffffff8
693fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000
694000000ffffffffffffffffffffffffff801ffffffffffffffff8
695fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000
696000001ffffffffffffffffffffffffff801ffffffffffffffff8
697fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
698000001ffffffffffffffffffffffffff801ffffffffffffffff8
699fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000
700000003ffffffffffffffffffffffffff801ffffffffffffffff8
701ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000
702000003ffffffffffffffffffffffffff801ffffffffffffffff8
703ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000
704000007ffffffffffffffffffffffffff803ffffffffffffffff8
705ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000
70600000fffffffffffffffffffffffffff003ffffffffffffffff8
707ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000
70800000fffffffffffffffffffffffffff803ffffffffffffffff8
709ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000
71000001fffffffffffffffffffffffffff803ffffffffffffffff8
711ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200
71200003fffffffffffffffffffffffffff007ffffffffffffffff8
713fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700
71400007fffffffffffffffffffffffffff00fffffffffffffffff8
715fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80
7160000ffffffffffffffffffffffffffff00fffffffffffffffff8
717fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80
7180001ffffffffffffffffffffffffffff00fffffffffffffffff8
719fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0
7200001ffffffffffffffffffffffffffff00fffffffffffffffff8
721fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0
7220003ffffffffffffffffffffffffffff01fffffffffffffffff8
723ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0
7240007ffffffffffffffffffffffffffff01fffffffffffffffff8
725ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0
7260007ffffffffffffffffffffffffffff01fffffffffffffffff8
727ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8
728001fffffffffffffffffffffffffffff07fffffffffffffffff8
729ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc
730007fffffffffffffffffffffffffffff07fffffffffffffffff8
731ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe
73200ffffffffffffffffffffffffffffff07fffffffffffffffff8
733ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff
734dfffffffffffffffffffffffffffffff0ffffffffffffffffff8
735fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff
736fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
737fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff
738fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
739fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff
740fffffffffffffffffffffffffffffffe1ffffffffffffffffff8
741fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff
742fffffffffffffffffffffffffffffffe3ffffffffffffffffff8
743fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff
744ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
745ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff
746ffffffffffffffffffffffffffffffff3ffffffffffffffffff8
747ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff
748fffffffffffffffffffffffffffffffffffffffffffffffffff8
749ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff
750fffffffffffffffffffffffffffffffffffffffffffffffffff8
751ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff
752fffffffffffffffffffffffffffffffffffffffffffffffffff8
753ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff
754fffffffffffffffffffffffffffffffffffffffffffffffffff8
755fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff
756fffffffffffffffffffffffffffffffffffffffffffffffffff8
757fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff
758fffffffffffffffffffffffffffffffffffffffffffffffffff8
759fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff
760fffffffffffffffffffffffffffffffffffffffffffffffffff8
761fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff
762fffffffffffffffffffffffffffffffffffffffffffffffffff8
763fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
764fffffffffffffffffffffffffffffffffffffffffffffffffff8
765fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff
766fffffffffffffffffffffffffffffffffffffffffffffffffff8
767ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff
768fffffffffffffffffffffffffffffffffffffffffffffffffff8
769ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff
770fffffffffffffffffffffffffffffffffffffffffffffffffff8
771ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff
772fffffffffffffffffffffffffffffffffffffffffffffffffff8
773ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff
774fffffffffffffffffffffffffffffffffffffffffffffffffff8
775ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff
776fffffffffffffffffffffffffffffffffffffffffffffffffff8
777fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff
778fffffffffffffffffffffffffffffffffffffffffffffffffff8
779fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff
780fffffffffffffffffffffffffffffffffffffffffffffffffff8
781fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff
782fffffffffffffffffffffffffffffffffffffffffffffffffff8
783fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff
784fffffffffffffffffffffffffffffffffffffffffffffffffff8
785fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff
786fffffffffffffffffffffffffffffffffffffffffffffffffff8
787ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff
788fffffffffffffffffffffffffffffffffffffffffffffffffff8
789ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff
790fffffffffffffffffffffffffffffffffffffffffffffffffff8
791ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff
792fffffffffffffffffffffffffffffffffffffffffffffffffff8
793ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff
794fffffffffffffffffffffffffffffffffffffffffffffffffff8
795ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff
796fffffffffffffffffffffffffffffffffffffffffffffffffff8
797ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff
798fffffffffffffffffffffffffffffffffffffffffffffffffff8
799ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff
800fffffffffffffffffffffffffffffffffffffffffffffffffff8
801fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff
802fffffffffffffffffffffffffffffffffffffffffffffffffff8
803fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff
804fffffffffffffffffffffffffffffffffffffffffffffffffff8
805fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff
806fffffffffffffffffffffffffffffffffffffffffffffffffff8
807fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff
808fffffffffffffffffffffffffffffffffffffffffffffffffff8
809ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff
810fffffffffffffffffffffffffffffffffffffffffffffffffff8
811ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff
812fffffffffffffffffffffffffffffffffffffffffffffffffff8
813ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff
814fffffffffffffffffffffffffffffffffffffffffffffffffff8
815ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff
816fffffffffffffffffffffffffffffffffffffffffffffffffff8
817ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
818fffffffffffffffffffffffffffffffffffffffffffffffffff8
819ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff
820fffffffffffffffffffffffffffffffffffffffffffffffffff8
821fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff
822fffffffffffffffffffffffffffffffffffffffffffffffffff8
823fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff
824fffffffffffffffffffffffffffffffffffffffffffffffffff8
825fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
826fffffffffffffffffffffffffffffffffffffffffffffffffff8
827fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff
828fffffffffffffffffffffffffffffffffffffffffffffffffff8
829ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff
830fffffffffffffffffffffffffffffffffffffffffffffffffff8
831ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
832fffffffffffffffffffffffffffffffffffffffffffffffffff8
833ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff
834fffffffffffffffffffffffffffffffffffffffffffffffffff8
835ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff
836fffffffffffffffffffffffffffffffffffffffffffffffffff8
837ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff
838fffffffffffffffffffffffffffffffffffffffffffffffffff8
839ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff
840fffffffffffffffffffffffffffffffffffffffffffffffffff8
841fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff
842fffffffffffffffffffffffffffffffffffffffffffffffffff8
843fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff
844fffffffffffffffffffffffffffffffffffffffffffffffffff8
845fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff
846fffffffffffffffffffffffffffffffffffffffffffffffffff8
847fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff
848fffffffffffffffffffffffffffffffffffffffffffffffffff8
849fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff
850fffffffffffffffffffffffffffffffffffffffffffffffffff8
851fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff
852fffffffffffffffffffffffffffffffffffffffffffffffffff8
853fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff
854fffffffffffffffffffffffffffffffffffffffffffffffffff8
855ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff
856fffffffffffffffffffffffffffffffffffffffffffffffffff8
857ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff
858fffffffffffffffffffffffffffffffffffffffffffffffffff8
859ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
860fffffffffffffffffffffffffffffffffffffffffffffffffff8
861ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff
862fffffffffffffffffffffffffffffffffffffffffffffffffff8
863fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff
864fffffffffffffffffffffffffffffffffffffffffffffffffff8
865fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff
866fffffffffffffffffffffffffffffffffffffffffffffffffff8
867fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff
868fffffffffffffffffffffffffffffffffffffffffffffffffff8
869fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff
870fffffffffffffffffffffffffffffffffffffffffffffffffff8
871fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff
872fffffffffffffffffffffffffffffffffffffffffffffffffff8
873ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff
874fffffffffffffffffffffffffffffffffffffffffffffffffff8
875ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff
876fffffffffffffffffffffffffffffffffffffffffffffffffff8
877ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff
878fffffffffffffffffffffffffffffffffffffffffffffffffff8
879ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
880fffffffffffffffffffffffffffffffffffffffffffffffffff8
881ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff
882fffffffffffffffffffffffffffffffffffffffffffffffffff8
883ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff
884fffffffffffffffffffffffffffffffffffffffffffffffffff8
885fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff
886fffffffffffffffffffffffffffffffffffffffffffffffffff8
887fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff
888fffffffffffffffffffffffffffffffffffffffffffffffffff8
889fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff
890fffffffffffffffffffffffffffffffffffffffffffffffffff8
891fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff
892fffffffffffffffffffffffffffffffffffffffffffffffffff8
893fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff
894fffffffffffffffffffffffffffffffffffffffffffffffffff8
895ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff
896fffffffffffffffffffffffffffffffffffffffffffffffffff8
897ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff
898fffffffffffffffffffffffffffffffffffffffffffffffffff8
899ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff
900fffffffffffffffffffffffffffffffffffffffffffffffffff8
901ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff
902fffffffffffffffffffffffffffffffffffffffffffffffffff8
903ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff
904fffffffffffffffffffffffffffffffffffffffffffffffffff8
905ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff
906fffffffffffffffffffffffffffffffffffffffffffffffffff8
907fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff
908fffffffffffffffffffffffffffffffffffffffffffffffffff8
909fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff
910fffffffffffffffffffffffffffffffffffffffffffffffffff8
911fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff
912fffffffffffffffffffffffffffffffffffffffffffffffffff8
913fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff
914fffffffffffffffffffffffffffffffffffffffffffffffffff8
915fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff
916fffffffffffffffffffffffffffffffffffffffffffffffffff8
917fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff
918fffffffffffffffffffffffffffffffffffffffffffffffffff8
919fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff
920fffffffffffffffffffffffffffffffffffffffffffffffffff8
921ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff
922fffffffffffffffffffffffffffffffffffffffffffffffffff8
923ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff
924fffffffffffffffffffffffffffffffffffffffffffffffffff8
925ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff
926fffffffffffffffffffffffffffffffffffffffffffffffffff8
927ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff
928fffffffffffffffffffffffffffffffffffffffffffffffffff8
929ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff
930fffffffffffffffffffffffffffffffffffffffffffffffffff8
931fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
932fffffffffffffffffffffffffffffffffffffffffffffffffff8
933fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff
934fffffffffffffffffffffffffffffffffffffffffffffffffff8
935fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff
936fffffffffffffffffffffffffffffffffffffffffffffffffff8
937fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff
938fffffffffffffffffffffffffffffffffffffffffffffffffff8
939fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
940fffffffffffffffffffffffffffffffffffffffffffffffffff8
941fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff
942fffffffffffffffffffffffffffffffffffffffffffffffffff8
943ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff
944fffffffffffffffffffffffffffffffffffffffffffffffffff8
945ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
946fffffffffffffffffffffffffffffffffffffffffffffffffff8
947ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff
948fffffffffffffffffffffffffffffffffffffffffffffffffff8
949ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff
950fffffffffffffffffffffffffffffffffffffffffffffffffff8
951ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff
952fffffffffffffffffffffffffffffffffffffffffffffffffff8
953ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff
954fffffffffffffffffffffffffffffffffffffffffffffffffff8
955ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff
956fffffffffffffffffffffffffffffffffffffffffffffffffff8
957ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
958fffffffffffffffffffffffffffffffffffffffffffffffffff8
959ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff
960fffffffffffffffffffffffffffffffffffffffffffffffffff8
961fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff
962fffffffffffffffffffffffffffffffffffffffffffffffffff8
963fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff
964fffffffffffffffffffffffffffffffffffffffffffffffffff8
965fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
966fffffffffffffffffffffffffffffffffffffffffffffffffff8
967fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff
968fffffffffffffffffffffffffffffffffffffffffffffffffff8
969fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff
970fffffffffffffffffffffffffffffffffffffffffffffffffff8
971fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
972fffffffffffffffffffffffffffffffffffffffffffffffffff8
973fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff
974fffffffffffffffffffffffffffffffffffffffffffffffffff8
975fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff
976fffffffffffffffffffffffffffffffffffffffffffffffffff8
977ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff
978fffffffffffffffffffffffffffffffffffffffffffffffffff8
979ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff
980fffffffffffffffffffffffffffffffffffffffffffffffffff8
981ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff
982fffffffffffffffffffffffffffffffffffffffffffffffffff8
983ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff
984fffffffffffffffffffffffffffffffffffffffffffffffffff8
985ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff
986fffffffffffffffffffffffffffffffffffffffffffffffffff8
987ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff
988fffffffffffffffffffffffffffffffffffffffffffffffffff8
989ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff
990fffffffffffffffffffffffffffffffffffffffffffffffffff8
991ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
992fffffffffffffffffffffffffffffffffffffffffffffffffff8
993ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff
994fffffffffffffffffffffffffffffffffffffffffffffffffff8
995ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff
996fffffffffffffffffffffffffffffffffffffffffffffffffff8
997ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff
998fffffffffffffffffffffffffffffffffffffffffffffffffff8
999fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff
1000fffffffffffffffffffffffffffffffffffffffffffffffffff8
1001fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff
1002fffffffffffffffffffffffffffffffffffffffffffffffffff8
1003fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
1004fffffffffffffffffffffffffffffffffffffffffffffffffff8
1005fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff
1006fffffffffffffffffffffffffffffffffffffffffffffffffff8
1007fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
1008fffffffffffffffffffffffffffffffffffffffffffffffffff8
1009fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff
1010fffffffffffffffffffffffffffffffffffffffffffffffffff8
1011fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff
1012fffffffffffffffffffffffffffffffffffffffffffffffffff8
1013fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff
1014fffffffffffffffffffffffffffffffffffffffffffffffffff8
1015fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff
1016fffffffffffffffffffffffffffffffffffffffffffffffffff8
1017ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff
1018fffffffffffffffffffffffffffffffffffffffffffffffffff8
1019ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
1020fffffffffffffffffffffffffffffffffffffffffffffffffff8
1021ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff
1022fffffffffffffffffffffffffffffffffffffffffffffffffff8
1023ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff
1024fffffffffffffffffffffffffffffffffffffffffffffffffff8
1025ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
1026fffffffffffffffffffffffffffffffffffffffffffffffffff8
1027ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff
1028fffffffffffffffffffffffffffffffffffffffffffffffffff8
1029ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff
1030fffffffffffffffffffffffffffffffffffffffffffffffffff8
1031ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff
1032fffffffffffffffffffffffffffffffffffffffffffffffffff8
1033ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff
1034fffffffffffffffffffffffffffffffffffffffffffffffffff8
1035ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
1036fffffffffffffffffffffffffffffffffffffffffffffffffff8
1037ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff
1038fffffffffffffffffffffffffffffffffffffffffffffffffff8
1039ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
1040fffffffffffffffffffffffffffffffffffffffffffffffffff8
1041ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff
1042fffffffffffffffffffffffffffffffffffffffffffffffffff8
1043ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff
1044fffffffffffffffffffffffffffffffffffffffffffffffffff8
1045
1046
1047showpage
1048
1049% stop using temporary dictionary
1050end
1051
1052% restore original state
1053origstate restore
1054
1055%%Trailer
diff --git a/etc/gnus-refcard.tex b/etc/gnus-refcard.tex
new file mode 100644
index 00000000000..343de2d6f6f
--- /dev/null
+++ b/etc/gnus-refcard.tex
@@ -0,0 +1,1427 @@
1\documentclass{article}
2
3% Previously we had five input LaTeX files (booklet.tex bk-lt.tex bk-a4.tex
4% refcard.tex gnusref.tex) and two logo files (gnuslogo-refcard.eps and
5% gnuslogo-booklet.eps).
6%
7% From this LaTeX file (gnus-refcard.tex) plus a single logo (gnus-logo.eps),
8% we can generate the refcard and the booklet version. Appropriate Makefile
9% rules were added. This simplifies to distribute the refcard with Emacs.
10%
11% (Reiner Steib, March 2005)
12
13\usepackage{ifthen}
14\ifthenelse{\isundefined{\booklettrue}}{
15 \typeout{Creating reference card...}
16}{
17 \typeout{Creating reference booklet...}}
18
19\usepackage{supertabular}
20
21\newlength{\logowidth} \setlength{\logowidth} {6.861in}
22\newlength{\logoheight} \setlength{\logoheight}{7.013in}
23
24\usepackage{graphicx}
25
26\usepackage{geometry}
27
28\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
29 % Reference Card
30
31 \def\Guide{Card}\def\guide{card}
32 \def\logoscale{0.25}
33
34 % Page setup for the refcard:
35
36 % \setlength{\textwidth}{7.26in} \setlength{\textheight}{10in}
37 % \setlength{\topmargin}{-1.0in}
38 % % the same settings work for A4, although there is a bit of space at the
39 % % top and bottom of the page.
40 % \setlength{\oddsidemargin}{-0.5in} \setlength{\evensidemargin}{-0.5in}
41
42 \ifthenelse{\isundefined{\letterpapertrue}}{
43 \geometry{a4paper,hmargin=10mm,tmargin=10mm,bmargin=35mm}
44 }{
45 \geometry{hmargin=20mm,tmargin=10mm,bmargin=12mm}
46 }
47
48}{ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
49 % Reference Booklet
50
51 \def\Guide{Booklet}\def\guide{booklet}
52 \def\logoscale{0.5}% FIXME: too large for 2up printing? --rsteib
53
54 % FIXME: Use geometry package. --rsteib
55% \ifthenelse{\isundefined{\letterpapertrue}}{
56% \textwidth 4.9in \textheight 7.35in \topmargin -1.0in
57% }{
58% \textwidth 4.5in \textheight 7.5in \topmargin -1.0in
59% }
60% \oddsidemargin -0.5in \evensidemargin -0.5in
61 \ifthenelse{\isundefined{\letterpapertrue}}{
62 \geometry{a5paper,hmargin=10mm,tmargin=10mm,bmargin=4mm}
63 }{
64 % FIXME: Use geometry package. --rsteib
65 \geometry{a5paper,hmargin=20mm,tmargin=10mm,bmargin=4mm}
66 }
67
68 \def\sec{\section}
69 \def\subsec{\subsection}
70 \def\subsubsec{\subsubsection}
71 \def\blankpage{\vspace*{\fill}\par
72 %\centerline{(This page intentionally left blank.)}
73 \par\vspace*{\fill}\pagebreak}
74}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
75
76% \input{gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % %
77%% include file for the Gnus refcard and booklet
78
79\def\progver{5.10}\def\refver{5.10-2} % program and refcard versions
80\def\date{Mar, 2005}
81\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$}
82
83%%
84\newlength{\keycolwidth}
85\newenvironment{keys}[1]% #1 is the widest key
86{\nopagebreak%\noindent%
87 \settowidth{\keycolwidth}{#1}%
88 \addtolength{\keycolwidth}{\tabcolsep}%
89 \addtolength{\keycolwidth}{-\columnwidth}%
90 \begin{supertabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}%
91 {\end{supertabular}\\}
92
93%% uncomment the first definition if you do not want pagebreaks in maps
94%%\newcommand{\esamepage}{\samepage}
95\newcommand{\esamepage}{}
96
97\newcommand*{\B}[1]{{\bf#1})} % bold l)etter
98
99\newcommand{\Title}{%
100 \begin{center}
101 {\bf\LARGE Gnus \progver\ Reference \Guide\\}
102 %{\normalsize \Guide\ version \refver}
103 \end{center}
104 }
105
106% \newcommand*{\LogoOLD}[1]{\centerline{%
107% \makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight
108% {\vfill\epsfig{figure=gnuslogo-#1}}\vspace{-\baselineskip}}}}
109
110\newcommand*{\Logo}[1]{\centerline{%
111 \includegraphics[width=\logoscale\logowidth]{gnus-logo}}}
112
113\newcommand{\Copyright}{%
114 \begin{center}
115 Copyright \copyright\ 1995 Free Software Foundation, Inc.\\*
116 Copyright \copyright\ 1995 Vladimir Alexiev
117 $<$vladimir@cs.ualberta.ca$>$.\\*
118 Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\*
119 Copyright \copyright\ 2001, 2002, 2003, 2005 \author.\\*
120 Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne
121 Ingebrigtsen.\\*
122 and the Emacs Help Bindings feature (C-h b).\\*
123 Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\*
124 \end{center}
125
126 Permission is granted to make and distribute copies of this reference
127 \guide{} provided the copyright notice and this permission are preserved on
128 all copies. Please send corrections, additions and suggestions to the
129 current maintainer's email address. \Guide{} last edited on \date.
130 }
131
132\newcommand{\Notes}{%
133 \subsection*{Notes}
134 {\esamepage
135 Gnus is complex. Currently it has some 876 interactive (user-callable)
136 functions. Of these 618 are in the two major modes (Group and
137 Summary/Article). Many of these functions have more than one binding, some
138 have 3 or even 4 bindings. The total number of keybindings is 677. So in
139 order to save 40\% space, every function is listed only once on this
140 \guide, under the ``more logical'' binding. Alternative bindings are given
141 in parentheses in the beginning of the description.
142
143 Many Gnus commands are affected by the numeric prefix. Normally you enter a
144 prefix by holding the Meta key and typing a number, but in most Gnus modes
145 you don't need to use Meta since the digits are not self-inserting. The
146 prefixed behavior of commands is given in [brackets]. Often the prefix is
147 used to specify:
148
149 \quad [distance] How many objects to move the point over.
150
151 \quad [scope] How many objects to operate on (including the current one).
152
153 \quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it
154 determines how many objects to operate on. Else if there are some objects
155 marked with the process mark \#, these are operated on. Else only the
156 current object is affected.
157
158 \quad [level] A group subscribedness level. Only groups with a lower or
159 equal level will be affected by the operation. If no prefix is given,
160 `gnus-group-default-list-level' is used. If
161 `gnus-group-use-permanent-levels', then a prefix to the `g' and `l'
162 commands will also set the default level.
163
164 \quad [score] An article score. If no prefix is given,
165 `gnus-summary-default-score' is used. \\*[\baselineskip]
166 % some keys
167 Gnus startup-commands:\\*
168 \begin{keys}{M-x gnus-unplugged}
169 M-x gnus & start Gnus. \\
170 M-x gnus-no-server & start Gnus without connecting to server
171 (i.e. to read mail). \\
172 \end{keys}
173 Additionally, there are the two commands \texttt{gnus-plugged} and
174 \texttt{gnus-unplugged}, which are only used if you want to download
175 news and/or read previously downloaded news offline (see C-c C-i g Gnus
176 Unplugged RET). Note: \texttt{gnus-no-server} ignores the stuff in
177 \texttt{gnus-agent-directory}, and thus does not allow you to use Gnus
178 Unplugged.
179 %
180 \begin{keys}{C-c C-i}
181 C-c C-i & Go to the Gnus online {\bf info}.\\
182 C-c C-b & Send a Gnus {\bf bug} report.\\
183 \end{keys}
184 }}
185
186\newcommand{\GroupLevels}{%
187 The table below assumes that you use the default Gnus levels.
188 Fill your user-specific levels in the blank cells.\\[1\baselineskip]
189 \begin{tabular}{|c|l|l|}
190 \hline
191 Level & Groups & Status \\
192 \hline
193 1 & draft/mail groups & \\
194 2 & mail groups & \\
195 3 & & subscribed \\
196 4 & & \\
197 5 & default list level & \\
198 \hline
199 6 & & unsubscribed \\
200 7 & & \\
201 \hline
202 8 & & zombies \\
203 \hline
204 9 & & killed \\
205 \hline
206 \end{tabular}}
207
208\newcommand{\MarkCharacters}{%
209 {\esamepage If a command directly sets a mark, it is shown in parentheses.\\*
210 \newlength{\markcolwidth}
211 \settowidth{\markcolwidth}{` '}% widest character
212 \addtolength{\markcolwidth}{4\tabcolsep}
213 \addtolength{\markcolwidth}{-\columnwidth}
214 \newlength{\markdblcolwidth}
215 \setlength{\markdblcolwidth}{\columnwidth}
216 \addtolength{\markdblcolwidth}{-2\tabcolsep}
217 \begin{tabular}{|c|p{-\markcolwidth}|}
218 \hline
219 \multicolumn{2}{|p{\markdblcolwidth}|}{{\bf ``Read'' Marks.}
220 All these marks appear in the first column of the summary line, and so
221 are mutually exclusive.}\\
222 \hline
223 ` ' & (M-u, M SPC, M c) Not read.\\
224 ! & (!, M !, M t) Ticked (interesting).\\
225 ? & (?, M ?) Dormant (only followups are interesting).\\
226 E & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\
227 G & (C, B DEL) Canceled article (or deleted in mailgroups).\\
228 \$ & (M-d, M s x, S x). Marked as spam.\\
229 \hline\hline
230 \multicolumn{2}{|p{\markdblcolwidth}|}
231 {The marks below mean that the article
232 is read (killed, uninteresting), and have more or less the same effect.
233 Some commands however explicitly differentiate between them (e.g.\ M
234 M-C-r, adaptive scoring).}\\
235 \hline
236 r & (d, M d, M r) Deleted (marked as {\bf read}).\\
237 C & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\
238 F & SOUPed article. See the manual.\\
239 O & {\bf Old} (read in a previous session).\\
240 K & (k, M k; C-k, M K) {\bf Killed}.\\
241 M & Article marked as read by duplicate suppression.\\
242 Q & Article is part of a sparse thread (see ``Threading''
243 in the manual).\\
244 R & {\bf Read} (viewed in actuality).\\
245 X & Killed by a kill file.\\
246 Y & Killed due to low score.\\
247 \hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline
248 \multicolumn{2}{|p{\markdblcolwidth}|}
249 {{\bf Marks not affecting visibility}}\\
250 \hline
251 \# & (\#, M \#, M P p) Processable (will be affected by the next operation).
252 [2]\\
253 A & {\bf Answered} (followed-up or replied). [2]\\
254 F & Forwarded. [2]\\
255 $\ast$ & Cached. [2]\\
256 S & Saved. [2]\\
257 N & Recently arrived. [2]\\
258 . & Unseen. [2]\\
259 + & Over default score. [3]\\
260 $-$ & Under default score. [3]\\
261 $=$ & Has children (thread underneath it). Add `\%e' to
262 `gnus-summary-line-format'. [3]\\
263 \hline
264 \end{tabular}
265 }}
266
267\newcommand{\GroupModeGeneral}{%
268 \begin{keys}{C-c M-C-x}
269 RET & (=) Enter this group. [Prefix: how many (read) articles to fetch.
270 Positive: newest articles, negative: oldest ones; non-numerical:
271 view all articles, not just unread]\\
272 M-RET & Enter group quickly.\\
273 M-SPC & Same as RET but does not expunge and hide dormants.\\
274 M-C-RET & Enter group without any processing, changes will not be permanent.\\
275 SPC & Select this group and display the first (unread) article. [Same
276 prefix as above.]\\
277 ? & Give a very short help message.\\
278 $<$ & Go to the beginning of the Group buffer.\\
279 $>$ & Go to the end of the Group buffer.\\
280 , & Jump to the lowest-level group with unread articles.\\
281 . & Jump to the first group with unread articles.\\
282 \^{} & Enter the Server buffer mode.\\
283 a & Post an {\bf article} to a group
284 [Prefix: use group under point to find posting-style].\\
285 b & Find {\bf bogus} groups and delete them.\\
286 c & Mark all unticked articles in this group as read ({\bf catch-up}).
287 [p/p]\\
288 g & Check the server for new articles ({\bf get}). [level]\\
289 M-g & Check the server for new articles in this group ({\bf get}). [p/p]\\
290 j & {\bf Jump} to a group.\\
291 m & {\bf Mail} a message to someone
292 [Prefix: use group under point to find posting-style].\\
293 n & Go to the {\bf next} group with unread articles. [distance]\\
294 M-n & Go to the {\bf next} group on the same or lower level.
295 [distance]\\
296 p & (DEL) Go to the {\bf previous} group with unread articles.
297 [distance]\\
298 M-p & Go to the {\bf previous} group on the same or lower level. [distance]\\
299 q & {\bf Quit} Gnus.\\
300 r & Re-read the init file ({\bf reset}).\\
301 s & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if
302 `gnus-save-newsrc-file').\\
303 z & Suspend (kill all buffers of) Gnus.\\
304 B & {\bf Browse} a foreign server.\\
305 C & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\
306 F & {\bf Find} new groups and process them.\\
307 N & Go to the {\bf next} group. [distance]\\
308 P & Go to the {\bf previous} group. [distance]\\
309 Q & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\
310 R & {\bf Restart} Gnus.\\
311 Z & Clear the dribble buffer.\\
312 M-c & Clear data from group (marks and list of read articles). \\
313 C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level
314 (depending on `gnus-group-sort-function').\\
315 C-c C-x & Run all expirable articles in this group through the {\bf expiry}
316 process.\\
317 C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\
318 C-c M-g & Activate all {\bf groups}.\\
319 C-c C-i & Gnus online-manual ({\bf info}).\\
320 C-x C-t & {\bf Transpose} two groups.\\
321 H f & Fetch this group's {\bf FAQ} (using ange-ftp).\\
322 H c & Display this group's {\bf charter}. [Prefix: query for group]\\
323 H C & Display this group's {\bf control message} (using
324 ange-ftp). [Prefix: query for group]\\
325 H v & (V) Display the Gnus {\bf version} number.\\
326 H d & (C-c C-d) Show the {\bf description} of this group
327 [Prefix: re-read from server].\\
328 M-d & {\bf Describe} all groups. [Prefix: re-read from server]\\
329 D g & Regenerate a Sieve script from group parameters.\\
330 D u & Regenerate Sieve script and {\bf upload} to server.\\
331 \end{keys}
332 }
333
334\newcommand{\ListGroups}{%
335 {\esamepage
336 \begin{keys}{A M}
337 A d & (C-c C-M-a) List all groups whose names or {\bf descriptions} match a regexp.\\
338 A k & (C-c C-l) List all {\bf killed} groups.
339 [Prefix: look at active-file from server]\\
340 A l & List all groups on a specific level.
341 [Prefix: also list groups with no unread articles]\\
342 A a & (C-c C-a) List all groups whose names match a regexp
343 ({\bf apropos}).\\
344 A A & List the server's active-file.\\
345 A M & List groups that {\bf match} a regexp.\\
346 A m & List groups that {\bf match} a regexp and have unread articles.
347 [level]\\
348 A s & (l) List all {\bf subscribed} groups with unread articles.
349 [level; 5 and lower is the default]\\
350 A u & (L) List all groups (including read and {\bf unsubscribed}).
351 [level; 7 and lower is the default]\\
352 A z & List all {\bf zombie} groups.\\
353 A c & List all groups with cached articles. [level]\\
354 A ? & List all groups with dormant articles. [level]\\
355 \end{keys}
356 }
357
358 \newcommand{\CreateEditGroups}{%
359 {\esamepage
360 The select methods are indicated in parentheses.\\*
361 \begin{keys}{G DEL}
362 G a & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\
363 G c & {\bf Customize} this group's parameters.\\
364 G d & Make a {\bf directory} group (every file must be a posting and files
365 must have numeric names). (nndir)\\
366 G D & Enter a {\bf directory} as a (temporary) group.
367 (nneething without recording articles read)\\
368 G e & (M-e) {\bf Edit} this group's select method.\\
369 G E & {\bf Edit} this group's info (select method, articles read, etc).\\
370 G f & Make a group based on a {\bf file}. (nndoc)\\
371 G h & Make the Gnus {\bf help} (documentation) group. (nndoc)\\
372 G k & Make a {\bf kiboze} group. (nnkiboze)\\
373 G m & {\bf Make} a new group.\\
374 G p & Edit this group's {\bf parameters}.\\
375 G r & Rename this group (does not work with read-only groups!).\\
376 G u & Create one of the groups mentioned in gnus-{\bf useful}-groups.\\
377 G v & Add this group to a {\bf virtual} group. [p/p]\\
378 G V & Make a new empty {\bf virtual} group. (nnvirtual)\\
379 G w & Create ephemeral group based on web-search. [Prefix: make solid group
380 instead]\\
381 G R & Make an {\bf RSS} group.\\
382 G DEL & {\bf Delete} group [Prefix: delete all articles as well].\\
383 G x & Expunge all deleted articles in an nnimap mailbox.\\
384 G l & Edit ACL (Access Control {\bf List}) for an nnimap mailbox.\\
385 \end{keys}
386 You can also create mail-groups and read your mail with Gnus (very useful
387 if you are subscribed to mailing lists), using one of the methods
388 nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info
389 (C-c C-i g Reading Mail RET).
390 }}
391
392 % TODO:
393 \newcommand{\SoupCommands}{%
394 \begin{keys}{G s w}
395 G s b & gnus-group-brew-soup: not documented.\\
396 G s p & gnus-soup-pack-packet: not documented.\\
397 G s r & nnsoup-pack-replies: not documented.\\
398 G s s & gnus-soup-send-replies: not documented.\\
399 G s w & gnus-soup-save-areas: not documented.\\
400 \end{keys}}
401
402 \newcommand{\MarkGroups}{%
403 \begin{keys}{M m}
404 M m & (\#) Set the process {\bf mark} on this group. [scope]\\
405 M r & Mark all groups matching regular expression.\\
406 M u & (M-\#) Remove the process mark from this group ({\bf unmark}).
407 [scope]\\
408 M U & Remove the process mark from all groups (\textbf{umark all}).\\
409 M w & Mark all groups in the current region. [prefix: unmark]\\
410 M b & Mark all groups in the {\bf buffer}. [prefix: unmark]\\
411 \end{keys}}
412
413 \newcommand{\GroupTopicsGeneral}{%
414 {\esamepage
415 Topics are ``categories'' for groups. Press t in the group-buffer to
416 toggle gnus-topic-mode (C-c C-i g Group Topics RET).\\*
417 \begin{keys}{C-c C-x}
418 T n & Prompt for topic {\bf name} and create it.\\
419 T m & {\bf Move} the current group to some other topic [p/p].\\
420 T j & {\bf Jump} to a topic.\\
421 T c & {\bf Copy} the current group to some other topic [p/p].\\
422 T D & Remove (not delete) the current group [p/p].\\
423 T M & {\bf Move} all groups matching a regexp to a topic.\\
424 T C & {\bf Copy} all groups matching a regexp to a topic.\\
425 T H & Toggle {\bf hiding} of empty topics.\\
426 T r & {\bf Rename} a topic.\\
427 T DEL & Delete an empty topic.\\
428 T \# & Mark all groups in the current topic with the process-mark.\\
429 T M-\# & Remove the process-mark from all groups in the current topic.\\
430 T TAB & (TAB) Indent current topic [Prefix: unindent].\\
431 M-TAB & Unindent the current topic.\\
432 RET & (SPC) Either unfold topic or enter group [level].\\
433 T s & {\bf Show} the current topic. [Prefix: show permanently]\\
434 T h & {\bf Hide} the current topic. [Prefix: hide permanently]\\
435 C-c C-x & Expire all articles in current group or topic.\\
436 C-k & {\bf Kill} a group or topic.\\
437 C-y & {\bf Yank} a group or topic.\\
438 A T & List active-file using {\bf topics}.\\
439 G p & Edit topic-{\bf parameters}.\\
440 T M-n & Go to {\bf next} topic. [distance]\\
441 T M-p & Go to {\bf previous} topic. [distance]\\
442 \end{keys}
443 }
444 }
445
446 \newcommand{\TopicSorting}{%
447 {\esamepage
448 \begin{keys}{T S m}
449 T S a & Sort {\bf alphabetically}.\\
450 T S u & Sort by number of {\bf unread} articles.\\
451 T S l & Sort by group {\bf level}.\\
452 T S v & Sort by group score ({\bf value}).\\
453 T S r & Sort by group {\bf rank}.\\
454 T S m & Sort by {\bf method}.\\
455 T S e & Sort by {\bf server} name.\\
456 T S s & Sort according to `gnus-group-sort-function'.\\
457 \end{keys}
458 With a prefix these commands will sort in reverse order.
459 }
460 }
461
462 \newcommand{\SubscribeKillYankGroups}{%
463 {\esamepage
464 \begin{keys}{S C-k}
465 S k & (C-k) {\bf Kill} this group.\\
466 S l & Set the {\bf level} of this group. [p/p]\\
467 S s & (U) Prompt for a group and toggle its {\bf subscription}.\\
468 S t & (u) {\bf Toggle} subscription to this group. [p/p]\\
469 S w & (C-w) Kill all groups in the region.\\
470 S y & (C-y) {\bf Yank} the last killed group.\\
471 S z & Kill all {\bf zombie} groups.\\
472 S C-k & Kill all groups on a certain level.\\
473 \end{keys}
474 }
475 }
476
477 \newcommand{\SummaryModeGeneral}{%
478 {\esamepage
479 \begin{keys}{M-RET}
480 SPC & (A SPC, A n) Select an article, scroll it one page, move to the
481 next one.\\
482 DEL & (A DEL, A p, b) Scroll this article one page back. [distance]\\
483 RET & (A RET) Scroll this article one line forward. [distance]\\
484 M-RET & (A M-RET) Scroll this article one line backward. [distance]\\
485 = & Expand the Summary window (fullsize).
486 [Prefix: shrink to display article window]\\
487 %
488 \& & Execute a command on all articles whose header matches a regexp.
489 [Prefix: move backwards]\\
490 M-\& & Execute a command on all articles having the process mark.\\
491 %
492 M-n & (G M-n) Go to the {\bf next} summary line of an unread article.
493 [distance]\\
494 M-p & (G M-p) Go to the {\bf previous} summary line of an unread article.
495 [distance]\\
496 M-s & {\bf Search} through all subsequent articles for a regexp.\\
497 M-r & Search through all previous articles for a regexp.\\
498 %
499 A P & {\bf Postscript}-print current buffer.\\
500 %
501 M-k & Edit this group's {\bf kill} file.\\
502 M-K & Edit the general {\bf kill} file.\\
503 %
504 C-t & Toggle {\bf truncation} of summary lines.\\
505 Y g & Regenerate the summary-buffer.\\
506 Y c & Insert all cached articles into the summary-buffer.\\
507 %
508 M-C-e & {\bf Edit} the group-parameters.\\
509 M-C-a & Customize the group-parameters.\\
510 %
511 % article handling
512 %
513 A $<$ & ($<$, A b) Scroll to the beginning of this article.\\
514 A $>$ & ($>$, A e) Scroll to the end of this article.\\
515 A s & (s) Perform an i{\bf search} in the article buffer.\\
516 %
517 A D & (C-d) Un{\bf digestify} this article into a separate group.
518 [Prefix: force digest]\\
519 M-C-d & Like C-d, but open several documents in nndoc-groups, wrapped
520 in an nnvirtual group [p/p]\\
521 %
522 A g & (g) (Re)fetch this article ({\bf get}). [Prefix: get raw version]\\
523 A r & (\^{}, A \^{}) Fetch the parent(s) of this article.
524 [Prefix: if positive fetch \textit{n} ancestors;
525 negative: fetch only the \textit{n}th ancestor]\\
526 A t & {\bf Translate} this article.\\
527 A R & Fetch all articles mentioned in the {\bf References}-header.\\
528 A T & Fetch full \textbf{thread} in which the current article appears.\\
529 M-\^{} & Fetch the article with a given Message-ID.\\
530 S y & {\bf Yank} the current article into an existing message-buffer.
531 [p/p]\\
532 A M & Setup group parameters for {\bf mailing} lists from
533 headers. [Prefix: replace old settings]\\
534 \end{keys}
535 }
536 }
537
538 \newcommand{\MIMESummary}{%
539 {\esamepage
540 For the commands operating on one MIME part (a subset of gnus-article-*), a
541 prefix selects which part to operate on. If the point is placed over a
542 MIME button in the article buffer, use the corresponding bindings for the
543 article buffer instead.
544
545 \begin{keys}{W M w}
546 K v & (b, W M b) {\bf View} the MIME-part.\\
547 K o & {\bf Save} the MIME part.\\
548 K c & {\bf Copy} the MIME part.\\
549 K e & View the MIME part {\bf externally}.\\
550 K i & View the MIME part {\bf internally}.\\
551 K $\mid$ & Pipe the MIME part to an external command.\\
552 K b & Make all the MIME parts have buttons in front of them.\\
553 K m & Try to repair {\bf multipart-headers}.\\
554 K C & View the MIME part using a different {\bf charset}.\\
555 X m & Save all parts matching a MIME type to a directory. [p/p]\\
556 M-t & Toggle the buttonized display of the article buffer.\\
557 W M w & Decode RFC2047-encoded words in the article headers.\\
558 W M c & Decode encoded article bodies. [Prefix: prompt for charset]\\
559 W M v & View all MIME parts in the current article.\\
560 \end{keys}
561 }
562 }
563
564 \newcommand{\SortSummary}{%
565 {\esamepage
566 \begin{keys}{C-c C-s C-a}
567 C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\
568 % C-c C-s C-t & Sort the summary-buffer by {\bf recipient}.\\ % No Gnus
569 C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\
570 C-c C-s C-i & Sort the summary-buffer by article score.\\
571 C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\
572 C-c C-s C-c & Sort the summary-buffer by length.\\
573 C-c C-s C-n & Sort the summary-buffer by article {\bf number}.\\
574 C-c C-s C-s & Sort the summary-buffer by {\bf subject}.\\
575 C-c C-s C-r & Sort the summary-buffer {\bf randomly}.\\
576 C-c C-s C-o & Sort the summary-buffer using the default method.\\
577 \end{keys}
578 With a prefix these functions sort in reverse order.
579 }
580 }
581
582 \newcommand{\MailGroups}{% formerly \Bsubmap
583 {\esamepage
584 These commands (except `B c') are only valid in a mail group.\\*
585 \begin{keys}{B M-C-e}
586 B DEL & (B backspace, B delete) {\bf Delete} the mail article from disk (!).
587 [p/p]\\
588 B B & Crosspost this article to another group.\\
589 B c & {\bf Copy} this article from any group to a mail group. [p/p]\\
590 B e & {\bf Expire} all expirable articles in this group. [p/p]\\
591 B i & {\bf Import} a random file into this group.\\
592 B I & Create an empty article in this group.\\
593 B m & {\bf Move} the article from one mail group to another. [p/p]\\
594 B p & Query whether the article was {\bf posted} as well.\\
595 B q & {\bf Query} where the article will end up after fancy splitting\\
596 B r & {\bf Respool} this mail article. [p/p]\\
597 B t & {\bf Trace} the fancy splitting patterns applied to this article.\\
598 B w & (e) Edit this article.\\
599 B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this group
600 (!). [p/p]\\
601 K E & {\bf Encrypt} article body. [p/p]\\
602 \end{keys}
603 }
604 }
605
606 \newcommand{\DraftGroup}{% formerly \Dsubmap
607 {\esamepage
608 The ``drafts''-group contains messages that have been saved but not sent
609 and rejected articles. \\*
610 \begin{keys}{B DEL}
611 D e & \textbf{edit} message.\\
612 D s & \textbf{Send} message. [p/p]\\
613 D S & \textbf{Send} all messages.\\
614 D t & \textbf{Toggle} sending (mark as unsendable).\\
615 B DEL & \textbf{Delete} message (like in mailgroup).\\
616 \end{keys}
617 }
618 }
619
620 \newcommand{\SelectArticles}{% formerly \Gsubmap
621 {\esamepage
622 These commands select the target article. They do not understand the prefix.\\*
623 \begin{keys}{G C-n}
624 h & Enter article-buffer.\\
625 G b & (,) Go to the {\bf best} article (the one with highest score).\\
626 G f & (.) Go to the {\bf first} unread article.\\
627 G n & (n) Go to the {\bf next} unread article.\\
628 G p & (p) Go to the {\bf previous} unread article.\\
629 %
630 G N & (N) Go to {\bf the} next article.\\
631 G P & (P) Go to the {\bf previous} article.\\
632 %
633 G C-n & (M-C-n) Go to the {\bf next} article with the same subject.\\
634 G C-p & (M-C-p) Go to the {\bf previous} article with the same subject.\\
635 %
636 G l & (l) Go to the previously read article ({\bf last-read-article}).\\
637 G o & Pop an article off the summary history and go to it.\\
638 %
639 G g & Search an article via subject.\\
640 G j & (j) Search an article via Message-Id or subject.\\
641 \end{keys}
642 }
643 }
644
645 \newcommand{\ArticleModeGeneral}{%
646 {\esamepage
647 The normal navigation keys work in Article mode. Some additional keys are:\\
648 \begin{keys}{C-c RET}
649 C-c \^{} & Get the article with the Message-ID near point.\\
650 C-c RET & Send reply to address near point.\\
651 h & Go to the \textbf{header}-line of the article in the
652 summary-buffer.\\
653 s & Go to \textbf{summary}-buffer.\\
654 RET & (middle mouse button) Activate the button at point to follow
655 an URL or Message-ID.\\
656 TAB & Move the point to the next button.\\
657 M-TAB & Move point to previous button.\\
658 \end{keys}
659 }
660 }
661
662 \newcommand{\WashArticle}{% formerly \Wsubmap
663 {\esamepage
664 \begin{keys}{W W H}
665 W 6 & Translate a base64 article.\\
666 W a & Strip certain {\bf headers} from body.\\
667 W b & Make Message-IDs and URLs in the article mouse-clickable
668 {\bf buttons}.\\
669 W c & Translate CRLF-pairs to LF and then the remaining CR's to LF's.\\
670 W d & Treat {\bf dumbquotes}.\\
671 W e & Treat {\bf emphasized} text.\\
672 W h & Treat {\bf HTML}.\\
673 W l & (w) Remove page breaks ({\bf\^{}L}) from the article.\\
674 W m & {\bf Morse} decode article.\\
675 W o & Treat {\bf overstrike} or underline (\^{}H\_) in the article.\\
676 W p & Verify X-{\bf PGP}-Sig header.\\
677 W q & Treat {\bf quoted}-printable in the article.\\
678 W r & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\
679 W s & Verify (and decrypt) a {\bf signed} message.\\
680 W t & (t) {\bf Toggle} display of all headers.\\
681 W u & {\bf Unsplit} broken URLs.\\
682 W v & (v) Toggle permanent {\bf verbose} displaying of all headers.\\
683 W w & Do word {\bf wrap} in the article.\\
684 W B & Add clickable {\bf buttons} to the article headers.\\
685 W C & {\bf Capitalize} first word in each sentence.\\
686 W Q & Fill long lines.\\
687 W Z & Translate a HZ-encoded article.\\
688 %
689 W G u & {\bf Unfold} folded header lines.\\
690 W G f & {\bf Fold} all header lines.\\
691 W G n & Unfold {\bf Newsgroups:} and Follow-Up-To:.\\
692 %
693 W Y c & Repair broken {\bf citations}.\\
694 W Y a & Repair broken {\bf attribution} lines.\\
695 W Y u & {\bf Unwrap} broken citation lines.\\
696 W Y f & Do a {\bf full} deuglification (W Y c, W Y a, W Y u).\\
697 \end{keys}
698 }
699 }
700
701 \newcommand{\BlankAndWhitespace}{%
702 {\esamepage
703 \begin{keys}{W E w}
704 W E l & Strip blank {\bf lines} from the beginning of the article.\\
705 W E m & Replace blank lines with empty lines and remove {\bf multiple}
706 blank lines.\\
707 W E t & Remove {\bf trailing} blank lines.\\
708 W E a & Strip blank lines at the beginning and the end
709 (W E l, W E m and W E t).\\
710 W E A & Strip {\bf all} blank lines.\\
711 W E s & Strip leading blank lines from the article body.\\
712 W E e & Strip trailing blank lines from the article body.\\
713 W E w & Remove leading {\bf whitespace} from all headers.\\
714 \end{keys}
715 }
716 }
717
718 \newcommand{\Picons}{%
719 {\esamepage
720 \begin{keys}{W D D}
721 W D s & (W g) Display {\bf smilies}.\\
722 W D x & (W f) Look for and display any X-{\bf Face} headers.\\
723 W D d & Display any Face headers.\\
724 W D n & Toggle picons in {\bf Newsgroups} and Followup-To.\\
725 W D m & Toggle picons in {\bf mail} headers (To and Cc).\\
726 W D f & Toggle picons in {\bf From}.\\
727 W D D & Remove all images from the article buffer.\\
728 \end{keys}
729 }
730 }
731
732 \newcommand{\TimeAndDate}{%
733 {\esamepage
734 \begin{keys}{W T u}
735 W T u & (W T z) Display the article timestamp in GMT ({\bf UT, ZULU}).\\
736 W T i & Display the article timestamp in {\bf ISO} 8601.\\
737 W T l & Display the article timestamp in the {\bf local} timezone.\\
738 W T s & Display according to `gnus-article-time-format'.\\
739 W T e & Display the time {\bf elapsed} since it was sent.\\
740 W T o & Display the {\bf original} timestamp.\\
741 W T p & Display the date in format that's {\bf
742 pronounceable} in English.\\
743 \end{keys}
744 }
745 }
746
747 \newcommand{\HideHighlightArticle}{%
748 {\esamepage
749 \begin{keys}{W W C-c}
750 W W a & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\
751 W W h & Hide article {\bf headers}.\\
752 W W b & Hide {\bf boring} headers.\\
753 W W s & Hide {\bf signature}.\\
754 W W l & Hide {\bf list} identifiers in subject-header.\\
755 W W P & Hide {\bf PEM} (privacy enhanced messages).\\
756 W W B & Hide banner specified by group parameter.\\
757 W W c & Hide {\bf citation}.\\
758 W W C-c & Hide {\bf citation} using a more intelligent algorithm.\\
759 W W C & Hide cited text in articles that aren't roots.\\
760 W H a & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\
761 W H c & Highlight article {\bf citations}.\\
762 W H h & Highlight article {\bf headers}.\\
763 W H s & Highlight article {\bf signature}.\\
764 \end{keys}
765 For all hiding-commands: A positive prefix always hides, and a negative
766 prefix will show what was previously hidden.
767 }}
768
769 \newcommand{\MIMEArticleMode}{%
770 {\esamepage
771 \begin{keys}{RET}
772 RET & (BUTTON-2) Toggle display of the MIME object.\\
773 v & Prompt for a method and then view object using this method.\\
774 o & Prompt for a filename and save the MIME object.\\
775 C-o & Prompt for a filename to save the MIME object to and remove it.\\
776 d & {\bf Delete} the MIME object.\\
777 c & {\bf Copy} the MIME object to a new buffer and display this buffer.\\
778 i & Display the MIME object in this buffer.\\
779 C & Copy the MIME object to a new buffer and display this buffer using {\bf Charset} \\
780 E & View internally. \\
781 e & View {\bf externally}. \\
782 t & View the MIME object as a different {\bf type}.\\
783 p & {\bf Print} the MIME object.\\
784 $\mid$ & Pipe the MIME object to a process.\\
785 . & Take action on the MIME object.\\
786 \end{keys}
787 }
788 }
789
790 %% end of article mode for reading ..........................................
791
792 \newcommand{\MarkArticlesGeneral}{% formerly \Msubmap
793 {\esamepage
794 \begin{keys}{M M-C-r}
795 d & (M d, M r) Mark this article as read and move to the next one.
796 [scope]\\
797 D & Mark this article as read and move to the previous one. [scope]\\
798 ! & (u, M !, M t) Tick this article (mark it as interesting) and move
799 to the next one. [scope]\\
800 U & Tick this article and move to the previous one. [scope]\\
801 M ? & (?) Mark this article as dormant (only followups are
802 interesting). [scope]\\
803 M D & Show all {\bf dormant} articles (normally they are hidden unless they
804 have any followups).\\
805 M M-D & Hide all {\bf dormant} articles.\\
806 C-w & Mark all articles between point and mark as read.\\
807 M-u & (M SPC, M c) Clear all marks from this article and move to the next
808 one. [scope]\\
809 M-U & Clear all marks from this article and move to the previous one.
810 [scope]\\
811 %
812 M e & (E, M x) Mark this article as {\bf expirable}. [scope]\\
813 %
814 M k & (k) {\bf Kill} all articles with the same subject then select the
815 next unread one.\\
816 M K & (C-k) {\bf Kill} all articles with the same subject as this one.\\
817 %
818 M C & {\bf Catch-up} the articles that are not ticked and not dormant.\\
819 M C-c & {\bf Catch-up} all articles in this group.\\
820 M H & {\bf Catch-up} (mark read) this group to point (to-{\bf here}).\\
821 %
822 M b & Set a {\bf bookmark} in this article.\\
823 M B & Remove the {\bf bookmark} from this article.\\
824 %
825 M M-r & (x) Expunge all {\bf read} articles from this group.\\
826 M M-C-r & Expunge all articles having a given mark.\\
827 M S & (C-c M-C-s) {\bf Show} all expunged articles.\\
828 M M C-h & Displays some more keys doing ticking slightly differently.\\
829 \end{keys}
830 The variable `gnus-summary-goto-unread' controls what happens after a mark
831 has been set (C-x C-i g Setting Marks RET)
832 }}
833
834 \newcommand{\MarkByScore}{%
835 \begin{keys}{M V m}
836 M V c & {\bf Clear} all marks from all high-scored articles. [score]\\
837 M V k & {\bf Kill} all low-scored articles. [score]\\
838 M V m & Mark all high-scored articles with a given {\bf mark}. [score]\\
839 M V u & Mark all high-scored articles as interesting (tick them). [score]\\
840 \end{keys}
841 }
842 }
843
844\newcommand{\ProcessMark}{%
845 {\esamepage
846 These commands set and remove the process mark (\#). You only need to use
847 it if the set of articles you want to operate on is non-contiguous. Else
848 use a numeric prefix.\\*
849 \begin{keys}{M P R}
850 M P p & (\#, M \#) Mark this article.\\
851 M P u & (M-\#, M M-\#) \textbf{unmark} this article.\\
852 M P b & Mark all articles in {\bf buffer}.\\
853 M P r & Mark all articles in the {\bf region}.\\
854 M P g & Unmark all articles in the region.\\
855 M P R & Mark all articles matching a {\bf regexp}.\\
856 M P G & Unmark all articles matching a regexp.\\
857 M P t & Mark all articles in this (sub){\bf thread}.\\
858 M P T & Unmark all articles in this (sub){\bf thread}.\\
859 M P s & Mark all articles in the current {\bf series}.\\
860 M P S & Mark all {\bf series} that already contain a marked article.\\
861 M P a & Mark {\bf all} articles (in series order).\\
862 M P U & \textbf{unmark} all articles.\\
863 M P i & {\bf Invert} the list of process-marked articles.\\
864 M P k & Push the current process-mark set onto stack and unmark
865 all articles.\\
866 M P y & Pop process-mark set from stack and restore it.\\
867 M P w & Push process-mark set on the stack.\\
868 M P v & Mark all articles with score over the default score. [Prefix: score]\\
869 \end{keys}
870 }
871 }
872
873\newcommand{\Limiting}{%
874 {\esamepage
875 \begin{keys}{/M}
876 // & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\
877 /a & Limit the summary-buffer to articles matching {\bf author}.\\
878 /x & Limit depending on ``extra'' headers.\\
879 /u & (x) Limit to {\bf unread} articles.
880 [Prefix: also exclude ticked and dormant articles]\\
881 /. & Limit to unseen articles.\\
882 /m & Limit to articles marked with specified {\bf mark}.\\
883 /t & Ask for a number and exclude articles younger than that many days.
884 [Prefix: exclude older articles]\\
885 /n & Limit to current article. [p/p]\\
886 /w & Pop the previous limit off the stack and restore it.
887 [Prefix: pop all limits]\\
888 /v & Limit to score. [score]\\
889 /E & (M S) Include all expunged articles in the limit.\\
890 /D & Include all dormant articles in the limit.\\
891 /* & Limit to cached articles.\\
892 Y C & Include all cached articles in the limit.\\
893 /d & Exclude all dormant articles from the limit.\\
894 /M & Exclude all marked articles.\\
895 /T & Include all articles from the current thread in the limit.\\
896 /c & Exclude all dormant articles that have no children from the limit.\\
897 /C & Mark all excluded unread articles as read.
898 [Prefix: also mark ticked and dormant articles]\\
899 /o & Insert all {\bf old} articles. [Prefix: how many]\\
900 /N & Insert all {\bf new} articles.\\
901 /p & Limit to articles {\bf predicated} in the `display' group parameter.\\
902 % /r & Limit to {\bf replied} articles. [Prefix: unreplied]\\ % No Gnus
903 \end{keys}
904 }
905 }
906
907\newcommand{\OutputArticles}{% formerly \Osubmap
908 {\esamepage
909 \begin{keys}{O m}
910 O o & (o, C-o) Save this article using the default article saver. [p/p]\\
911 O b & Save this article's {\bf body} in plain file format [p/p]\\
912 O f & Save this article in plain {\bf file} format. [p/p]\\
913 O F & like O f, but overwrite file's contents. [p/p]\\
914 O h & Save this article in {\bf mh} folder format. [p/p]\\
915 O m & Save this article in {\bf mail} format. [p/p]\\
916 O r & Save this article in {\bf rmail} format. [p/p]\\
917 O v & Save this article in {\bf vm} format. [p/p]\\
918 O p & ($\mid$) {\bf Pipe} this article to a shell command. [p/p]\\
919 O P & \textbf{Print} this article using Muttprint. [p/p]\\
920 \end{keys}
921 }
922 }
923
924\newcommand{\PostReplyetc}{% formerly \Ssubmap
925 {\esamepage
926 These commands put you in a separate news or mail buffer. See the section
927 about composing messages for more information.\\*
928 %After
929 %editing the article, send it by pressing C-c C-c. If you are in a
930 %foreign group and want to post the article using the foreign server, give
931 %a prefix to C-c C-c.\\*
932 \begin{keys}{S O m}
933 S p & (a) {\bf Post} an article to this group.\\
934 S f & (f) Post a {\bf followup} to this article.\\
935 S F & (F) Post a {\bf followup} and include the original. [p/p]\\
936 S o p & Forward this article as a {\bf post} to a newsgroup.\\
937 S M-c & Send a complaint about excessive crossposting to the author of this
938 article. [p/p]\\
939 %
940 S m & (m) Send a {\bf mail} to some other person.\\
941 S r & (r) Mail a {\bf reply} to the author of this article.\\
942 S R & (R) Mail a {\bf reply} and include the original. [p/p]\\
943 S B r & Like S r but ignore the Reply-To: header.\\
944 S B R & Like S R but ignore the Reply-To: header.\\
945 S w & Mail a {\bf wide} reply to this article.\\
946 S W & Mail a {\bf wide} reply to this article and include
947 the original.\\
948 S v & Mail a {\bf very} wide reply to this article.\\
949 S V & Mail a {\bf very} wide reply to this article and include the original.\\
950 S o m & (C-c C-f) Forward this article by {\bf mail} to a person.\\
951 S D b & Resend {\bf bounced} mail.\\
952 S D r & {\bf Resend} mail to a different person.\\
953 S D e & {\bf Edit} and resend.\\
954 %
955 S n & Post a followup via {\bf news} even if you got the message
956 through mail.\\
957 S N & Post a followup via {\bf news} and include the original mail.
958 [p/p]\\
959 %
960 S c & (C) {\bf Cancel} this article (only works if it is
961 your own). [p/p]\\
962 S s & {\bf Supersede} this article with a new one (only for own
963 articles).\\
964 %
965 S O m & Digest these series and forward by {\bf mail}. [p/p]\\
966 S O p & Digest these series and forward as a {\bf post} to a newsgroup.
967 [p/p]\\
968 %
969 S u & {\bf Uuencode} a file and post it as a series.\\
970 \end{keys}
971 If you want to cancel or supersede an article you just posted (before it
972 has appeared on the server), go to the *post-news* buffer, change
973 `Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c.
974 }}
975
976\newcommand{\Threading}{% formerly \Tsubmap
977 {\esamepage
978 \begin{keys}{T M-\#}
979 T \# & Mark this thread with the process mark.\\
980 T M-\# & Remove process-marks from this thread.\\
981 %
982 T t & Re-{\bf thread} the current article's thread.\\
983 T \^{} & Make the current article child of the marked (or previous) article.\\
984 % movement
985 T n & (M-C-f, M-down) Go to the {\bf next} thread. [distance]\\
986 T p & (M-C-b, M-up) Go to the {\bf previous} thread. [distance]\\
987 T d & {\bf Descend} this thread. [distance]\\
988 T u & Ascend this thread ({\bf up}-thread). [distance]\\
989 T o & Go to the top of this thread.\\
990 %
991 T s & {\bf Show} the thread hidden under this article.\\
992 T h & {\bf Hide} this (sub)thread.\\
993 %
994 T i & {\bf Increase} the score of this thread.\\
995 T l & (M-C-l) {\bf Lower} the score of this thread.\\
996 %
997 T k & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix:
998 tick it, positive prefix: unmark it.]\\
999 %
1000 T H & {\bf Hide} all threads.\\
1001 T S & {\bf Show} all hidden threads.\\
1002 T T & (M-C-t) {\bf Toggle} threading.\\
1003 \end{keys}
1004 }
1005 }
1006
1007\newcommand{\Scoring}{% formerly \Vsubmap
1008 {\esamepage
1009 Read about Adaptive Scoring in the online info.\\*
1010 \begin{keys}{\bf A p m l}
1011 V a & {\bf Add} a new score entry, specifying all elements.\\
1012 V c & Specify a new score file as {\bf current}.\\
1013 V e & {\bf Edit} the current score alist.\\
1014 V f & Edit a score {\bf file} and make it the current one.\\
1015 V m & {\bf Mark} all articles below a given score as read.\\
1016 V s & Set the {\bf score} of this article.\\
1017 V t & Display all score rules applied to this article ({\bf track}).\\
1018 W w & List {\bf words} used in scoring.\\
1019 V x & {\bf Expunge} all low-scored articles. [score]\\
1020 V C & {\bf Customize} the current score file through a user-friendly
1021 interface.\\
1022 V F & {\bf Flush} the cache of score files.\\
1023 V R & {\bf Re-score} the summary buffer.\\
1024 V S & Display the {\bf score} of this article.\\
1025 \bf A p m l& Make a scoring entry based on this article.\\
1026 \end{keys}
1027 The four letters stand for:\\*
1028 \quad \B{A}ction: I)ncrease, L)ower;\\*
1029 \quad \B{p}art: a)uthor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines,
1030 message-i)d, t)references (parent), f)ollowup, b)ody, h)ead (all headers);\\*
1031 \quad \B{m}atch type:\\*
1032 \qquad string: s)ubstring, e)xact, r)egexp, f)uzzy,\\*
1033 \qquad date: b)efore, a)t, n)this,\\*
1034 \qquad number: $<$, =, $>$;\\*
1035 \quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate.
1036
1037 If you type the second letter in uppercase, the remaining two are assumed
1038 to be s)ubstring and t)emporary.
1039 If you type the third letter in uppercase, the last one is assumed to be
1040 t)emporary.
1041
1042 \quad Extra keys for manual editing of a score file:\\*
1043 \begin{keys}{C-c C-c}
1044 C-c C-c & Finish editing the score file.\\
1045 C-c C-d & Insert the current {\bf date} as number of days.\\
1046 \end{keys}
1047 }
1048 }
1049
1050\newcommand{\ExtractSeries}{% formerly \Xsubmap
1051 {\esamepage
1052 Gnus recognizes if the current article is part of a series (multipart
1053 posting whose parts are identified by numbers in their subjects, e.g.{}
1054 1/10\dots10/10) and processes the series accordingly. You can mark and
1055 process more than one series at a time. If the posting contains any
1056 archives, they are expanded and gathered in a new group.\\*
1057 \begin{keys}{X p}
1058 X b & Un-{\bf binhex} these series. [p/p]\\
1059 X o & Simply {\bf output} these series (no decoding). [p/p]\\
1060 X p & Unpack these {\bf postscript} series. [p/p]\\
1061 X s & Un-{\bf shar} these series. [p/p]\\
1062 X u & {\bf Uudecode} these series. [p/p]\\
1063 \end{keys}
1064
1065 Each one of these commands has four variants:\\*
1066 \begin{keys}{X v \bf Z}
1067 X \bf z & Decode these series. [p/p]\\
1068 X \bf Z & Decode and save these series. [p/p]\\
1069 X v \bf z & Decode and view these series. [p/p]\\
1070 X v \bf Z & Decode, save and view these series. [p/p]\\
1071 \end{keys}
1072 where {\bf z} or {\bf Z} identifies the decoding method (b, o, p, s, u).
1073
1074 An alternative binding for the most-often used of these commands is\\*
1075 \begin{keys}{C-c C-v C-v}
1076 C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\
1077 \end{keys}
1078 }}
1079
1080\newcommand{\ExitSummary}{% formerly \Zsubmap
1081 {\esamepage
1082 \begin{keys}{Z G}
1083 Z Z & (q, Z Q) Exit this group.\\
1084 Z E & (Q) {\bf Exit} without updating the group information.\\
1085 %
1086 Z c & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\
1087 Z C & Mark all articles as read ({\bf catch-up}) and exit.\\
1088 %
1089 Z n & Mark all articles as read and go to the {\bf next} group.\\
1090 Z N & Exit and go to {\bf the} next group.\\
1091 Z P & Exit and go to the {\bf previous} group.\\
1092 %
1093 Z G & (M-g) Check for new articles in this group ({\bf get}).\\
1094 Z R & (C-x C-s) Exit this group, and then enter it again ({\bf reenter}).
1095 [Prefix: select all articles, read and unread.]\\
1096 Z s & Update and save the dribble buffer. [Prefix: save .newsrc* as well]\\
1097 \end{keys}
1098 }
1099 }
1100
1101\newcommand{\MsgCompositionGeneral}{%
1102 Press C-c ? in the composition-buffer to get this information.\\*
1103 {\esamepage
1104 \begin{keys}{C-c C-m}
1105 % sending
1106 C-c C-c & Send message and exit. [Prefix: send via foreign server]\\
1107 C-c C-s & Send message. [Prefix: send via foreign server]\\
1108 C-c C-d & Don't send message (save as \textbf{draft}).\\
1109 C-c C-k & \textbf{Kill} message-buffer.\\
1110 C-c C-m & {\bf Mail} reply to the address near point.
1111 [Prefix: include the original]\\
1112 % modify headers/body
1113 C-c C-o & Sort headers.\\
1114 C-c C-e & \textbf{Elide} region.\\
1115 C-c C-v & Kill everything outside region.\\
1116 C-c C-r & Do a \textbf{Rot-13} on the body.\\
1117 C-c C-w & Insert signature (from `message-signature-file').\\
1118 C-c C-z & Kill everything up to signature.\\
1119 C-c C-y & \textbf{Yank} original message.\\
1120 C-c C-q & Fill the yanked message.\\
1121 C-c M-C-y & \textbf{Yank} a buffer and quote it.\\
1122 M-RET & Insert four newlines and format quoted text. [Prefix:
1123 justify as well]\\
1124 C-c M-r & \textbf{Rename} message buffer. [Prefix: ask for new name]\\
1125 \end{keys}
1126 }
1127 }
1128
1129\newcommand{\MsgCompositionMovementArticle}{%
1130 The following functions create the header-field if necessary.\\*
1131 {\esamepage
1132 \begin{keys}{C-c C-f C-u}
1133 C-c TAB & Move to \textbf{signature}.\\
1134 C-c C-b & Move to \textbf{body}.\\
1135 C-c C-f C-t & (C-c C-t) Move to \textbf{To:}.\\
1136 C-c C-f C-c & Move to \textbf{Cc:}.\\
1137 C-c C-f C-b & Move to \textbf{Bcc:}.\\
1138 C-c C-f C-w & Move to \textbf{Fcc:}.\\
1139 C-c C-f C-s & Move to \textbf{Subject:}.\\
1140 C-c C-f C-r & Move to \textbf{Reply-To:}.\\
1141 C-c C-f C-f & Move to \textbf{Followup-To:}.\\
1142 C-c C-f C-n & (C-c C-n) Move to \textbf{Newsgroups:}.\\
1143 C-c C-f C-u & Move to \textbf{Summary:}.\\
1144 C-c C-f C-k & Move to \textbf{Keywords:}.\\
1145 C-c C-f C-d & Move to \textbf{Distribution:}.\\
1146 C-c C-f C-m & Move to \textbf{Mail-Followup-To:}.\\
1147 C-c C-f C-o & Move to \textbf{From:}.\\
1148 C-c C-f C-a & Insert a reasonable \textbf{Mail-Followup-To:} for
1149 an unsubscribed list. [Prefix: include addresses in \textbf{Cc:}]\\
1150 C-c C-f TAB & (C-c C-u) Move to \textbf{Importance:}.\\
1151 C-c M-n & Insert \textbf{Disposition-Notification-To:}
1152 (request receipt).\\
1153 \end{keys}
1154 }
1155 }
1156
1157\newcommand{\MsgCompositionMML}{%
1158 {\esamepage
1159 \begin{keys}{C-c C-m P}
1160 C-c C-m f & (C-c C-a) Attach \textbf{file}.\\
1161 C-c C-m b & Attach contents of \textbf{buffer}.\\
1162 C-c C-m e & Attach \textbf{external} file (ftp..).\\
1163 C-c C-m P & Create MIME-\textbf{preview} (new
1164 buffer). [Prefix: show raw MIME preview]\\
1165 C-c C-m v & \textbf{Validate} article.\\
1166 C-c C-m p & Insert \textbf{part}.\\
1167 C-c C-m m & Insert \textbf{multi}-part.\\
1168 C-c C-m q & \textbf{Quote} region.\\
1169 C-c C-m c s & Encrypt message using \textbf{S/MIME}.\\
1170 C-c C-m c o & Encrypt message using PGP.\\
1171 C-c C-m c p & Encrypt message using \textbf{PGP/MIME}.\\
1172 C-c C-m s s & Sign message using \textbf{S/MIME}.\\
1173 C-c C-m s o & Sign message using PGP.\\
1174 C-c C-m s p & Sign message using \textbf{PGP/MIME}.\\
1175 C-c C-m C-n & Remove security related MML tags from message.\\
1176 % TODO: narrow headers (C-c C-m n) ?
1177 \end{keys}
1178 }
1179 }
1180
1181%% TODO:
1182\newcommand{\ServerMode}{%
1183 {\esamepage
1184 To enter this mode, press \^{} while in Group mode.\\*
1185 \begin{keys}{SPC}
1186 SPC & (RET) Browse this server.\\
1187 a & {\bf Add} a new server.\\
1188 c & {\bf Copy} this server.\\
1189 e & {\bf Edit} a server.\\
1190 k & {\bf Kill} this server. [scope]\\
1191 l & {\bf List} all servers.\\
1192 q & Return to the group buffer ({\bf quit}).\\
1193 s & Request that the server scan its sources for new articles.\\
1194 g & Request that the server regenerate its data.\\
1195 y & {\bf Yank} the previously killed server.\\
1196 O & Try to {\bf open} a connection to this server.\\
1197 C & {\bf Close} connection to this server.\\
1198 D & Mark this server as unreachable ({\bf deny}).\\
1199 M-o & {\bf Open} the connection to all servers.\\
1200 M-c & {\bf Close} the connection to all servers.\\
1201 R & Make all denied servers into closed servers.\\
1202 L & Set server status to offline.\\
1203 \end{keys}
1204 }
1205 }
1206
1207\newcommand{\BrowseServer}{%
1208 {\esamepage
1209 To enter this mode, press `B' while in Group mode.\\*
1210 \begin{keys}{RET}
1211 RET & Enter the current group.\\
1212 SPC & Enter the current group and display the first article.\\
1213 ? & Give a very short help message.\\
1214 n & Go to the {\bf next} group. [distance]\\
1215 p & Go to the {\bf previous} group. [distance]\\
1216 q & (l) {\bf Quit} browse mode.\\
1217 u & Subscribe to the current group. [scope]\\
1218 \end{keys}
1219 }
1220 }
1221
1222\newcommand{\GroupUnplugged}{%
1223 {\esamepage
1224 \begin{keys}{J S}
1225 J j & Toggle plugged-state.\\
1226 J s & Fetch articles from all groups for offline-reading.\\
1227 J u & Fetch all eligible articles from this group.\\
1228 J S & \textbf{Send} all sendable messages in the drafts group.\\
1229 %
1230 J c & Enter \textbf{category} buffer.\\
1231 J a & \textbf{Add} this group to an Agent category [p/p].\\
1232 J r & \textbf{Remove} this group from its Agent category [p/p].\\
1233 J Y & Synchronize flags changed while unplugged with remote server.\\
1234 \end{keys}
1235 }
1236 }
1237
1238\newcommand{\SummaryUnplugged}{%
1239 {\esamepage
1240 \begin{keys}{J M-\#}
1241 J \# & \textbf{Mark} the article for downloading.\\
1242 J M-\# & \textbf{Unmark} the article for downloading.\\
1243 @ & \textbf{Toggle} whether to download the article.\\
1244 J c & Mark all undownloaded articles as read (\textbf{catch-up}).\\
1245 J u & Download all downloadable articles from group.\\
1246 \end{keys}
1247 }
1248 }
1249
1250\newcommand{\ServerUnplugged}{%
1251 {\esamepage
1252 \begin{keys}{J a}
1253 J a & \textbf{Add} the current server to the list of servers covered
1254 by the agent.\\
1255 J r & \textbf{Remove} the current server from the list of servers covered
1256 by the agent.\\
1257 \end{keys}
1258 }
1259 }
1260
1261% end {gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % %
1262
1263
1264% o some things might not be updated: scoring and server modes, maybe more
1265% o Gnus Unplugged category-buffer commands need to be written
1266
1267\begin{document}
1268
1269\def\progver{5.10}\def\refver{5.10-1} % program and refcard versions
1270\def\date{Jan 10th, 2004}
1271\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$}
1272
1273\ifthenelse{\isundefined{\booklettrue}}{ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1274 \raggedbottom\raggedright
1275 \twocolumn
1276 % use \tiny to shrink it to 4 pages (needs a high-resolution printer though)
1277 % \tiny
1278 \scriptsize
1279 \pagestyle{plain}
1280 \Title
1281 \par
1282 \Logo{refcard}
1283}{
1284 \setcounter{page}{0}
1285 \thispagestyle{empty}
1286 \vspace*{\fill}
1287 \Title
1288 \vspace{0.4in}
1289 \Logo{booklet}
1290 \vspace*{\fill}
1291 \pagebreak
1292}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1293
1294% TODO: how does this work ?
1295%\tableofcontents
1296
1297\Notes
1298%
1299
1300\section*{Group-Mode}
1301\GroupModeGeneral
1302 \subsection*{Group Subscribedness-Levels}
1303 \GroupLevels
1304 \subsection*{List Groups}
1305 \ListGroups
1306 \subsection*{Create/Edit Foreign Groups}
1307 \CreateEditGroups
1308 \subsection*{Unsubscribe, Kill and Yank Groups}
1309 \SubscribeKillYankGroups
1310 \subsection*{Mark Groups}
1311 \MarkGroups
1312 \subsection*{Group-Unplugged}
1313 \GroupUnplugged
1314% topics in group-mode
1315 \subsection*{Group Topics}
1316 \GroupTopicsGeneral
1317 \subsubsection*{Topic Sorting}
1318 \TopicSorting
1319
1320% \ifthenelse{\isundefined{\booklettrue}}{}{\pagebreak}
1321
1322% summary-mode
1323\section*{Summary Mode}
1324\SummaryModeGeneral
1325 \subsection*{Select Articles}
1326 \SelectArticles
1327%
1328 \subsection*{Threading}
1329 \Threading
1330%
1331 \subsection*{Limiting}
1332 \Limiting
1333 \subsection*{Sort the Summary-Buffer}
1334 \SortSummary
1335 \subsection*{Score (Value) Commands}
1336 \Scoring
1337
1338\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1339 \subsection*{Output Articles}
1340 \OutputArticles
1341 \subsection*{Extract Series (Uudecode etc)}
1342 \ExtractSeries
1343}{}%ifcard% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1344
1345 \subsection*{MIME operations from the Summary-Buffer}
1346 \MIMESummary
1347
1348\ifthenelse{\isundefined{\booklettrue}}{}{% ifbooklet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1349 \subsection*{Extract Series (Uudecode etc)}
1350 \ExtractSeries
1351 \subsection*{Output Articles}
1352 \OutputArticles
1353}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1354
1355%
1356 \subsection*{Post, Followup, Reply, Forward, Cancel}
1357 \PostReplyetc
1358
1359\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% newpage ifcard
1360
1361 \subsection*{Message Composition}
1362
1363 \MsgCompositionGeneral
1364 \subsubsection*{Jumping in message-buffer}
1365 \MsgCompositionMovementArticle
1366 \subsubsection*{Attachments/MML}
1367 \MsgCompositionMML
1368% marking articles
1369 \subsection*{Mark Articles}
1370 \MarkArticlesGeneral
1371 \subsubsection*{Mark Based on Score}
1372 \MarkByScore
1373 \subsubsection*{The Process Mark}
1374 \ProcessMark
1375 \subsubsection*{Mark Indication-Characters}
1376 \MarkCharacters
1377%
1378\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}%
1379
1380 \subsection*{Summary-Unplugged}
1381 \SummaryUnplugged
1382 \subsection*{Mail-Group Commands}
1383 \MailGroups
1384 \subsection*{Draft-Group Commands}
1385 \DraftGroup
1386% exiting
1387 \subsection*{Exit the Summary-Buffer}
1388 \ExitSummary
1389%
1390%
1391\section*{Article Mode (reading)}
1392\ArticleModeGeneral
1393 \subsection*{Wash the Article-Buffer}
1394 \WashArticle
1395 \subsubsection*{Blank Lines and Whitespace}
1396 \BlankAndWhitespace
1397 \subsubsection*{Picons, X-faces, Smileys}
1398 \Picons
1399 \subsubsection*{Time and Date}
1400 \TimeAndDate
1401 \subsection*{Hide/Highlight Parts of the Article}
1402 \HideHighlightArticle
1403 \subsection*{MIME operations from the Article-Buffer (reading)}
1404 \MIMEArticleMode
1405%
1406%
1407\section*{Server Mode}
1408\ServerMode
1409 \subsection*{Unplugged-Server}
1410 \ServerUnplugged
1411%
1412%
1413\section*{Browse Server Mode}
1414\BrowseServer
1415
1416%\pagebreak
1417\vspace*{\fill}
1418\Copyright
1419
1420\end{document}
1421
1422%%% Local Variables:
1423%%% mode: latex
1424%%% TeX-master: t
1425%%% End:
1426
1427% arch-tag: be438b0e-6832-4afb-8c56-5f84743e5cd1
diff --git a/leim/ChangeLog b/leim/ChangeLog
index 988575249e0..b88f4c9254a 100644
--- a/leim/ChangeLog
+++ b/leim/ChangeLog
@@ -1,7 +1,12 @@
12005-03-18 handa <handa@m17n.org> 12005-03-26 Kenichi Handa <handa@m17n.org>
2
3 * quail/latin-ltx.el ("TeX"): Enable quail-completion by typing
4 TAB.
5
62005-03-18 Kenichi Handa <handa@m17n.org>
2 7
3 * quail/thai.el (quail-thai-update-translation): Delete it. 8 * quail/thai.el (quail-thai-update-translation): Delete it.
4 (thai-generate-quail-map): Generate is simple map. 9 (thai-generate-quail-map): Generate a simpler map.
5 ("thai-kesmanee"): Don't use quail-thai-update-translation. 10 ("thai-kesmanee"): Don't use quail-thai-update-translation.
6 (thai-generate-quail-map): Likewise. 11 (thai-generate-quail-map): Likewise.
7 12
diff --git a/leim/quail/latin-ltx.el b/leim/quail/latin-ltx.el
index e670316b212..4b75135e79b 100644
--- a/leim/quail/latin-ltx.el
+++ b/leim/quail/latin-ltx.el
@@ -39,7 +39,8 @@ system, including many technical ones. Examples:
39 \\'a -> á \\`{a} -> à 39 \\'a -> á \\`{a} -> à
40 \\pi -> π \\int -> ∫ ^1 -> ¹" 40 \\pi -> π \\int -> ∫ ^1 -> ¹"
41 41
42 nil t t nil nil nil nil nil nil nil t) 42 '(("\t" . quail-completion))
43 t t nil nil nil nil nil nil nil t)
43 44
44(quail-define-rules 45(quail-define-rules
45 ("!`" ?¡) 46 ("!`" ?¡)
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 6ca04808b67..91e775869e6 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,12 +1,524 @@
12005-03-31 Kenichi Handa <handa@etlken2>
2
3 * textmodes/fill.el (fill-text-properties-at): New function.
4 (fill-newline): Use fill-text-properties-at instead of
5 text-properties-at.
6
72005-03-31 Karl Berry <karl@freefriends.org>
8
9 * textmodes/tex-mode.el (tex-compile): shell-quote-argument,
10 not comint-quote-filename.
11
122005-03-31 Olive Lin <olive.lin@versateladsl.be> (tiny change)
13
14 * textmodes/tex-mode.el (tex-start-tex) shell-quote-argument,
15 not comint-quote-filename.
16
172005-03-31 Thien-Thi Nguyen <ttn@gnu.org>
18
19 * help-fns.el (help-with-tutorial): Revert last change.
20
212005-03-31 Kim F. Storm <storm@cua.dk>
22
23 * emulation/cua-base.el (cua-scroll-down): Add CUA property.
24
252005-03-30 Paul Eggert <eggert@cs.ucla.edu>
26
27 * calendar/cal-china.el: Update reference to "Calendrical
28 Calculations" book; there's a new edition.
29 * calendar/cal-coptic.el: Likewise.
30 * calendar/cal-french.el: Likewise.
31 * calendar/cal-hebrew.el: Likewise.
32 * calendar/cal-islam.el: Likewise.
33 * calendar/cal-iso.el: Likewise.
34 * calendar/cal-julian.el: Likewise.
35 * calendar/cal-mayan.el: Likewise.
36 * calendar/cal-persia.el: Likewise.
37 * calendar/calendar.el: Likewise.
38 * calendar/holidays.el: Likewise.
39 * calendar/lunar.el: Likewise.
40 * calendar/solar.el: Likewise.
41
42 * calendar/calendar.el (calendar-day-abbrev-array): Remove trailing
43 white space from doc string.
44
452005-03-30 Jay Belanger <belanger@truman.edu>
46
47 * calc/calc-help.el (calc-full-help): Remove email address.
48
492005-03-30 Thien-Thi Nguyen <ttn@gnu.org>
50
51 * help-fns.el (help-with-tutorial): Delete title line.
52
532005-03-30 Glenn Morris <gmorris@ast.cam.ac.uk>
54
55 * calendar/cal-x.el (calendar-one-frame-setup)
56 (calendar-only-one-frame-setup, calendar-two-frame-setup): Use t
57 rather than 'symbol for set-window-dedicated-p.
58
59 * calendar/appt.el (appt-buffer-name): Make it a constant.
60 (appt-add): Doc fix.
61
62 * filesets.el (filesets-menu-path, filesets-menu-before)
63 (filesets-menu-in-menu): Doc fix. Now valid in GNU Emacs.
64 (filesets-menu-cache-file): Use directory ~/.emacs.d.
65 (filesets-add-submenu): Delete and use add-submenu instead.
66
672005-03-30 Carsten Dominik <dominik@science.uva.nl>
68
69 * org.el (org-agenda-phases-of-moon, org-agenda-sunrise-sunset)
70 (org-agenda-convert-date, org-agenda-goto-calendar): New commands.
71 (org-diary-default-entry): New function.
72 (org-get-entries-from-diary): Better parsing of diary entries
73 (org-agenda-check-no-diary): New function.
74 ("diary-lib"): Advice to function `add-to-diary-list', to allow
75 linking to diary entries.
76 (org-agenda-execute-calendar-command): New function
77 (org-agenda): Improved visible section in window. And
78 use `org-fit-agenda-window'.
79 (org-fit-agenda-window): New option.
80 (org-move-subtree-down): Better handling of empty lines
81 at end of subtree.
82 (org-cycle): Numeric prefix is interpreted now as show-subtree N
83 levels up.
84 (org-fontify-done-headline): New option.
85 (org-headline-done-face): New face.
86 (org-set-font-lock-defaults): Use `org-headline-done-face'.
87 (org-table-copy-down): renamed from
88 `org-table-copy-from-above'. When current field is non-empty, it
89 is copied to next row.
90 (org-table-copy-from-above): Fixed bug which made it
91 impossible to copy fields containing only a single non-white
92 character.
93
942005-03-30 Kim F. Storm <storm@cua.dk>
95
96 * kmacro.el (kmacro-end-macro): Isearch may store this command
97 into the macro -- so ignore it when executing keyboard macro.
98
992005-03-30 Nick Roberts <nickrob@snap.net.nz>
100
101 * tooltip.el (tooltip-gud-display): Use gud-overlay-arrow-position.
102
1032005-03-29 Kenichi Handa <handa@m17n.org>
104
105 * language/thai.el ("Thai"): Set setup-function and exit-function
106 for Thai language environment.
107
108 * language/thai-util.el: Require thai-word.
109 (thai-word-mode-map): New variable.
110 (thai-word-mode): New minor mode.
111 (setup-thai-language-environment-internal): New function.
112 (exit-thai-language-environment-internal): New function.
113
114 * language/thai-word.el (thai-word-table): Declare it by defvar,
115 use dolist to initialize it.
116 (thai-kill-word, thai-backward-kill-word, thai-transpose-words)
117 (thai-fill-find-break-point): New functions.
118
1192005-03-29 Richard M. Stallman <rms@gnu.org>
120
121 * simple.el (idle-update-delay): Move definition up.
122 (set-mark): Doc fix.
123
1242005-03-29 Chong Yidong <cyd@stupidchicken.com>
125
126 * longlines.el: New file.
127
128 * simple.el (buffer-substring-filters): New variable.
129 (filter-buffer-substring): New function.
130 (kill-region, copy-region-as-kill): Use it.
131
132 * register.el (copy-to-register, append-to-register)
133 (prepend-to-register): Use filter-buffer-substring.
134
1352005-03-30 Nick Roberts <nickrob@snap.net.nz>
136
137 * progmodes/gud.el (gdb): (Re)-initialise gud-filter-pending-text.
138 (gud-filter-pending-text): Move in front of gdb.
139 (gud-overlay-arrow-position): New variable.
140 (gud-sentinel, gud-display-line): Use it in place of
141 overlay-arrow-position.
142
1432005-03-29 Glenn Morris <gmorris@ast.cam.ac.uk>
144
145 * progmodes/fortran.el (fortran-if-indent): Doc fix.
146 (fortran-font-lock-keywords-2): Add "where", "elsewhere".
147 (fortran-font-lock-keywords-4): New variable.
148 (fortran-blocks-re, fortran-end-block-re)
149 (fortran-start-block-re): New constants, for hideshow.
150 (hs-special-modes-alist): Add a Fortran entry.
151 (fortran-mode-map): Bind fortran-end-of-block,
152 fortran-beginning-of-block to \M-\C-n, \M-\C-p.
153 (fortran-mode): Doc fix. Add fortran-font-lock-keywords-4.
154 (fortran-looking-at-if-then, fortran-end-of-block)
155 (fortran-beginning-of-block): New functions, for hideshow.
156
157 * progmodes/f90.el (f90-end-block-re, f90-start-block-re): Doc
158 fix. Tweak regexp.
159 (f90-beginning-of-block): Push mark first.
160
1612005-03-29 Jay Belanger <belanger@truman.edu>
162
163 * calc/calc.el: Update copyright date.
164 (calc-version): Increase to 2.1.
165 (calc-version-date): Remove.
166
167 * calc/calc-help.el: Update copyright date.
168 (calc-full-help): Remove reference to calc-version-date.
169 Update copyright date.
170
1712005-03-29 Stefan Monnier <monnier@iro.umontreal.ca>
172
173 * vc.el (vc-do-command): Use a pipe for async processes, so password
174 prompts don't show up at places where the user can't reply.
175
1762005-03-29 Olive Lin <olive.lin@versateladsl.be> (tiny change)
177
178 * textmodes/tex-mode.el (tex-send-command): shell-quote-argument
179 on the file name we pass to the inferior shell.
180
1812005-03-29 Stephan Stahl <stahl@eos.franken.de> (tiny change)
182
183 * progmodes/which-func.el (which-function): Be robust in the face of an
184 imenu--make-index-alist failure.
185
1862005-03-29 Stefan Monnier <monnier@iro.umontreal.ca>
187
188 * reveal.el (reveal-mode-map): Don't override C-a and C-e.
189
190 * progmodes/python.el (python-preoutput-filter): Fix last change.
191
1922005-03-29 Lute Kamstra <lute@gnu.org>
193
194 * emacs-lisp/debug.el (debug-on-entry): Handle autoloaded
195 functions and compiled macros.
196 (debug-convert-byte-code): Handle macros too.
197 (debug-on-entry-1): Don't signal an error when trying to clear a
198 function that is not set to debug on entry.
199
2002005-03-29 Jay Belanger <belanger@truman.edu>
201
202 * calc/calc-lang.el: Add functions to math-function-table
203 properties of tex and math.
204
2052005-03-29 Kenichi Handa <handa@m17n.org>
206
207 * ps-mule.el (ps-mule-plot-string): Translate characters by
208 ps-print-translation-table.
209 (ps-mule-begin-job): Call find-charset-region/string with
210 ps-print-translation-table.
211 (ps-mule-printable-p): Return t if CHARSET is ascii or latin-iso8859-1.
212
213 * ps-print.el (ps-print-translation-table): New variable.
214 (ps-plot-region): Translate characters by ps-print-translation-table.
215
2162005-03-29 Juri Linkov <juri@jurta.org>
217
218 * simple.el (next-error-highlight-timer): New variable.
219
220 * progmodes/compile.el (compilation-goto-locus):
221 Use `next-error-highlight-timer' instead of `sit-for'.
222
2232005-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
224
225 * mail/supercite.el (sc-mail-field): Use assoc-string.
226 (sc-get-address): Simplify regexps.
227
228 * files.el (minibuffer-with-setup-hook): New macro.
229 (find-file-read-args): Use it to avoid let-binding
230 minibuffer-with-setup-hook (which breaks turning on/off
231 file-name-shadow-mode while in the prompt).
232
233 * complete.el (PC-read-include-file-name-internal): Use test-completion.
234
2352005-03-28 Luc Teirlinck <teirllm@auburn.edu>
236
237 * font-lock.el: Bind `font-lock-fontify-block' to M-o M-o.
238
2392005-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
240
241 * window.el (window-buffer-height): Use count-screen-lines.
242
243 * progmodes/python.el (python-preoutput-leftover): New var.
244 (python-preoutput-filter): Use it.
245 (python-send-receive): Loop until all the result has been received.
246
2472005-03-28 Juri Linkov <juri@jurta.org>
248
249 * dired.el (dired-mode-map): Add ellipsis to "Compare directories".
250
251 * menu-bar.el (menu-bar-file-menu): Remove ellipsis from
252 "Recover Crashed Session".
253 (menu-bar-search-menu): Add ellipsis to "Search tagged files".
254 (menu-bar-replace-menu): Add ellipsis to "Replace in tagged files".
255 (menu-bar-goto-menu): Add ellipsis to "Set Tags File Name".
256 (menu-bar-goto-menu): Add ellipsis to "Tags Apropos".
257 (menu-bar-options-menu): Add ellipsis to "Set Font/Fontset".
258 (menu-bar-manuals-menu): Add ellipsis to "Find Command in Manual".
259 (menu-bar-manuals-menu): Add ellipsis to "Find Key in Manual".
260 (menu-bar-help-menu): Remove ellipsis from "Find Emacs Packages".
261
262 * ediff-hook.el (menu-bar-ediff-misc-menu, ediff-misc-menu):
263 Remove ellipsis from "Ediff Manual", "Customize Ediff", "List
264 Ediff Sessions", "Toggle use of separate control buffer frame",
265 "Use separate frame for Ediff control buffer".
266
267 * bookmark.el (menu-bar-bookmark-map): Add ellipsis to "Jump to
268 Bookmark", "Set Bookmark", "Insert Contents", "Insert Location",
269 "Rename Bookmark", "Delete Bookmark".
270
271 * info.el (Info-mode-menu): Remove ellipsis from "Index".
272 Add ellipsis to "Lookup a String", "Lookup a string in all indices".
273 Add `:active Info-index-alternatives' to "Next Matching Item".
274
275 * wdired.el (wdired-change-to-wdired-mode):
276 Mention `wdired-abort-changes' key in the initial message.
277
278 * international/mule.el (auto-coding-alist): Associate non-ascii
279 image filename extensions with `no-conversion'.
280
2812005-03-27 Stefan Monnier <monnier@iro.umontreal.ca>
282
283 * international/iso-acc.el:
284 * obsolete/iso-acc.el: Move iso-acc to the obsolete subdir.
285
2862005-03-26 Luc Teirlinck <teirllm@auburn.edu>
287
288 * textmodes/sgml-mode.el (html-mode): Doc update.
289
290 * autorevert.el (auto-revert-check-vc-info): Minor doc fix.
291
2922005-03-26 Dan Nicolaescu <dann@ics.uci.edu>
293
294 * term.el (term-move-columns): Fix face after extending a line.
295 (term-insert-spaces): Likewise.
296 (term-reset-terminal): Fix off by one error.
297
2982005-03-26 Eli Zaretskii <eliz@gnu.org>
299
300 * international/mule.el (auto-coding-alist): Add .xpi files.
301
302 * files.el (auto-mode-alist): Add .xpi files.
303
3042005-03-26 Jure Cuhalev <gandalf@owca.info> (tiny change)
305
306 * textmodes/ispell.el (ispell-dictionary-alist-6): Add slovenian.
307
3082005-03-26 Eli Zaretskii <eliz@gnu.org>
309
310 * term/bobcat.el: Don't use keyswap.el, since it is now obsolete.
311
3122005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk>
313
314 * calendar/cal-menu.el (top level): Delete local C-down-mouse-3
315 binding. Suggested by Stephan Stahl <stahl@eos.franken.de>.
316
317 * calendar/cal-move.el (calendar-beginning-of-year): Move the
318 cursor to Jan 1 when needed.
319 (calendar-end-of-year): Fix -/+ typo.
320 Reported by Chong Yidong <cyd@stupidchicken.com>.
321
3222005-03-26 Stefan Monnier <monnier@iro.umontreal.ca>
323
324 * progmodes/flymake.el (flymake-mode): Add autoload cookie.
325
326 * emacs-lisp/debug.el (debugger-record-expression): Add a missing
327 format to `message'. Inspired by Deepak Goel <deego@gnufans.org>.
328
3292005-03-25 Richard M. Stallman <rms@gnu.org>
330
331 * filesets.el (filesets-init): Add autoload.
332
333 * mail/mailalias.el (mail-directory): Doc fix.
334
3352005-03-25 Frederik Fouvry <fouvry@CoLi.Uni-SB.DE>
336
337 * mail/mailalias.el (mail-directory-process): Do nothing if
338 mail-directory-process is an atom.
339 (mail-get-names): Ignore mail-directory-names if it is an atom.
340 (mail-directory-process defvar): Doc fix.
341 (mail-names): Doc fix.
342
3432005-03-25 Johan Bockg,Ae(Brd <bojohan+mail@dd.chalmers.se> (tiny change)
344
345 * textmodes/flyspell.el (mail-mode-flyspell-verify): Fix regexp syntax.
346
3472005-03-26 Kenichi Handa <handa@m17n.org>
348
349 * international/mule-util.el (detect-coding-with-priority):
350 Call update-coding-systems-internal before detect-coding-region.
351
3522005-03-26 Nick Roberts <nickrob@snap.net.nz>
353
354 * progmodes/gdb-ui.el (gdb-breakpoints-mode-map)
355 (gdb-frames-mode-map): Add follow-link property.
356
3572005-03-25 Jay Belanger <belanger@truman.edu>
358
359 * calc/calcalg2.el (calc-solve-for): Use "Variable(s)" to prompt
360 for variables.
361
3622005-03-25 Juri Linkov <juri@jurta.org>
363
364 * image-mode.el: Optimize image filename extension regexps in
365 autoload cookies. Associate .x[bp]m with `image-mode-maybe'
366 in `auto-mode-alist'.
367 (image-mode): Add `image-toggle-display-text' to local hook
368 `change-major-mode-hook'. Display the image as an image by
369 default. Set `cursor-type' and `truncate-lines' if the image
370 is already displayed. Take into account the current mode (image
371 or text) in message.
372 (image-minor-mode): New minor mode.
373 (image-mode-maybe, image-toggle-display-text): New functions.
374 (image-toggle-display): Use called-interactively-p.
375 Let-bind `inhibit-read-only' to t.
376
377 * image-mode.el (image-minor-mode): Set `cursor-type' and
378 `truncate-lines' if the image is already displayed. Add turning
379 image-minor-mode off to `change-major-mode-hook'. Add message.
380 Call `image-toggle-display-text' after turning image-minor-mode off.
381
3822005-03-25 Stefan Monnier <monnier@iro.umontreal.ca>
383
384 * international/mule-cmds.el (set-locale-environment): For Mac OS X's
385 Terminal.app, use utf-8.
386 (set-display-table-and-terminal-coding-system): Add coding-system arg.
387 (set-locale-environment): Use it.
388
389 * term/xterm.el: Undo last change, better done in mule-cmds.el.
390
391 * emacs-lisp/rx.el (rx-constituents): Add symbol-start and symbol-end.
392
393 * progmodes/python.el (python-close-block-statement-p)
394 (python-outdent-p, python-current-defun): Use symbol-end.
395
3962005-03-25 Karl Chen <quarl@cs.berkeley.edu> (tiny change)
397
398 * files.el (save-some-buffers): Doc fix.
399
4002005-03-25 Werner Lemberg <wl@gnu.org>
401
402 * complete.el, thumbs.el: Replace `legal' with `valid'.
403 * calendar/calendar.el: Replace `legal' with `valid'.
404 * emacs-lisp/advice.el: Replace `legal' with `valid'.
405 * mail/supercite.el: Replace `legal' with `valid'.
406 * progmodes/cperl-mode.el, progmodes/idlw-shell.el,
407 progmodes/idlwave.el, progmodes/vhdl-mode.el: Replace `legal' with
408 `valid'.
409 * textmodes/reftex-vars.el, textmodes/reftex.el: Replace `legal'
410 with `valid'.
411
4122005-03-25 Werner Lemberg <wl@gnu.org>
413
414 * calc/calc-forms.el, calc/calc-sel: Replace `illegal' with `invalid'.
415 * midnight.el, vc-cvs.el: Replace `illegal' with `invalid'.
416 * emacs-lisp/cl-macs.el: Replace `illegal' with `invalid'.
417 * emulation/vip.el: Replace `illegal' with `invalid'.
418 * eshell/esh-io.el, eshell/esh-var.el: Replace `illegal' with `invalid'.
419 * mail/supercite.el: Replace `illegal' with `invalid'.
420 * progmodes/ebnf-abn.el, progmodes/ebnf-bnf.el,
421 progmodes/ebnf-ebx.el, progmodes/ebnf-dtd.el, progmodes/ebnf-iso.el,
422 progmodes/ebnf-yac.el, progmodes/ebnf2ps.el, progmodes/idlwave.el,
423 progmodes/sh-script.el, progmodes/xscheme.el: Replace `illegal' with
424 `invalid'.
425 * textmodes/refbib.el, textmodes/refer.el, textmodes/reftex-cite.el,
426 textmodes/reftex-index.el, textmodes/reftex-parse.el,
427 textmodes/reftex-ref.el, textmodes/reftex-vars.el,
428 textmodes/reftex.el, textmodes/org.el: Replace `illegal' with `invalid'.
429
4302005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
431
432 * progmodes/flymake.el (flymake-get-file-name-mode-and-masks)
433 (flymake-find-buildfile, flymake-find-possible-master-files)
434 (flymake-check-include, flymake-parse-line): Replace loops over the
435 length of lists, by loops over lists, to remove silly O(n,A2(B) behavior.
436
437 * progmodes/flymake.el (flymake-ensure-ends-with-slash): Remove.
438 Substitute file-name-as-directory in the rest of the file.
439 (flymake-get-common-file-prefix): Rewrite, using compare-strings.
440 (flymake-replace-region): Remove unused arg `buffer'.
441 (flymake-check-patch-master-file-buffer): Update calls to it.
442 (flymake-add-err-info): Remove unused var `count'.
443 (flymake-mode): Use define-minor-mode.
444
445 * progmodes/flymake.el: Use with-current-buffer.
446 (flymake-float-time, flymake-get-temp-dir, flymake-line-end-position)
447 flymake-replace-regexp-in-string, flymake-line-beginning-position)
448 (flymake-popup-menu, flymake-current-row, flymake-selected-frame):
449 Avoid testing for `xemacs'.
450 (flymake-nop): Move.
451 (flymake-region-has-flymake-overlays): Return the computed value.
452 (flymake-reformat-err-line-patterns-from-compile-el): Use dolist.
453 Remove unused var `endline'.
454 (flymake-get-line-count): Remove unused function.
455 (flymake-display-err-menu-for-current-line): Unused var move-mouse-pos.
456
457 * emulation/vi.el:
458 * generic.el:
459 * hilit-chg.el (global-highlight-changes):
460 * hi-lock.el (hi-lock-mode):
461 * follow.el: find-file-hooks -> find-file-hook.
462
463 * comint.el (comint-insert-input): Obey mouse-yank-at-point.
464
4652005-03-24 Juri Linkov <juri@jurta.org>
466
467 * dired.el (dired-mode-map): Add menu item "Compare directories"
468 for dired-compare-directories.
469
470 * dired-aux.el (dired-compare-directories): Add autoload cookie.
471 Doc fix. Replace `read-file-name' with `read-directory-name'.
472
4732005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
474
475 * term/xterm.el: If running in Terminal.app set coding-system to utf-8.
476
4772005-03-24 Jay Belanger <belanger@truman.edu>
478
479 * calc/calc-embed.el (calc-embedded-mode-change): Save all
480 relevant mode settings in calc-embedded-original-modes when modes
481 are permanently changed.
482
4832005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
484
485 * autoinsert.el: find-file-hooks -> find-file-hook.
486
4872005-03-24 Lute Kamstra <lute@gnu.org>
488
489 * generic.el (generic-font-lock-defaults): Make it obsolete.
490 (generic-font-lock-keywords): New variable to replace
491 generic-font-lock-defaults.
492 (generic-mode-set-font-lock): Delete it.
493 (generic-mode-internal): Don't call generic-mode-set-font-lock.
494 (generic-bracket-support): Add docstring.
495
496 * generic-x.el: Rename generic-font-lock-defaults to
497 generic-font-lock-keywords throughout.
498 (mailagent-rules-setup-function): Delete it.
499 (mailagent-rules-generic-mode): Use anonymous function instead.
500 (show-tabs-generic-mode-font-lock-defaults-1)
501 (show-tabs-generic-mode-font-lock-defaults-2): Make them constants.
502 Quote faces.
503 (show-tabs-tab-face, show-tabs-space-face): Specify background,
504 not foreground.
505
506 * emacs-lisp/lisp-mode.el (lisp-imenu-generic-expression):
507 Recognize define-generic-mode.
508
5092005-03-23 Stefan Monnier <monnier@iro.umontreal.ca>
510
511 * icomplete.el (icomplete-simple-completing-p): Don't turn on icomplete
512 if there's no completion table.
513
12005-03-23 Miles Bader <miles@gnu.org> 5142005-03-23 Miles Bader <miles@gnu.org>
2 515
3 * progmodes/gdb-ui.el (breakpoint-enabled, breakpoint-disabled): 516 * progmodes/gdb-ui.el (breakpoint-enabled, breakpoint-disabled):
4 Remove tty-specific variants, as they're no longer needed. 517 Remove tty-specific variants, as they're no longer needed.
5 518
62005-03-23 Lute Kamstra <lute@gnu.org> 5192005-03-23 Lute Kamstra <lute@gnu.org>
7 520
8 * generic-x.el: Code cleanup: make arguments constant whenever 521 * generic-x.el: Code cleanup: make args constant whenever possible.
9 possible.
10 (installshield-statement-keyword-list) 522 (installshield-statement-keyword-list)
11 (installshield-system-functions-list) 523 (installshield-system-functions-list)
12 (installshield-system-variables-list, installshield-types-list) 524 (installshield-system-variables-list, installshield-types-list)
@@ -14,8 +526,8 @@
14 526
15 * generic.el (generic-make-keywords-list): Add autoload cookie. 527 * generic.el (generic-make-keywords-list): Add autoload cookie.
16 528
17 * calendar/time-date.el: Add comment on time value formats. Don't 529 * calendar/time-date.el: Add comment on time value formats.
18 require parse-time. 530 Don't require parse-time.
19 (with-decoded-time-value): New macro. 531 (with-decoded-time-value): New macro.
20 (encode-time-value): New function. 532 (encode-time-value): New function.
21 (time-to-seconds, time-less-p, time-subtract, time-add): Use them. 533 (time-to-seconds, time-less-p, time-subtract, time-add): Use them.
@@ -34,8 +546,8 @@
34 (recentf-include-p): More robust. 546 (recentf-include-p): More robust.
35 (recentf-keep-p): New function. 547 (recentf-keep-p): New function.
36 (recentf-remove-if-non-kept): Rename from 548 (recentf-remove-if-non-kept): Rename from
37 `recentf-remove-if-non-readable'. Use `recentf-keep-p'. All 549 `recentf-remove-if-non-readable'. Use `recentf-keep-p'.
38 callers updated. 550 All callers updated.
39 (recentf-menu-items-for-commands): Fix help string. 551 (recentf-menu-items-for-commands): Fix help string.
40 (recentf-track-closed-file): Update. Doc fix. 552 (recentf-track-closed-file): Update. Doc fix.
41 (recentf-cleanup): Update. Count removed files. Doc fix. 553 (recentf-cleanup): Update. Count removed files. Doc fix.
@@ -124,8 +636,7 @@
124 636
1252005-03-21 Lute Kamstra <lute@gnu.org> 6372005-03-21 Lute Kamstra <lute@gnu.org>
126 638
127 * generic.el: Fix commentary section. Don't require cl for 639 * generic.el: Fix commentary section. Don't require cl for compilation.
128 compilation.
129 (generic-mode-list): Add autoload cookie. 640 (generic-mode-list): Add autoload cookie.
130 (generic-use-find-file-hook, generic-lines-to-scan) 641 (generic-use-find-file-hook, generic-lines-to-scan)
131 (generic-find-file-regexp, generic-ignore-files-regexp) 642 (generic-find-file-regexp, generic-ignore-files-regexp)
@@ -175,20 +686,27 @@
175 686
176 * tramp-smb.el (all): Remove debug construct for 687 * tramp-smb.el (all): Remove debug construct for
177 `with-parsed-tramp-file-name'. 688 `with-parsed-tramp-file-name'.
178 (tramp-smb-prompt): Prompt can contain spaces inside directory 689 (tramp-smb-prompt): Prompt can contain spaces inside directory names.
179 names.
180 (tramp-smb-handle-delete-directory, tramp-smb-handle-delete-file): 690 (tramp-smb-handle-delete-directory, tramp-smb-handle-delete-file):
181 No error message if DIRECTORY or FILENAME doesn't exist. 691 No error message if DIRECTORY or FILENAME doesn't exist.
182 (tramp-smb-open-connection): Check existence of 692 (tramp-smb-open-connection): Check existence of
183 `tramp-smb-program'. 693 `tramp-smb-program'.
184 694
6952005-03-20 Stefan Monnier <monnier@iro.umontreal.ca>
696
697 * progmodes/perl-mode.el (perl-font-lock-syntactic-face-function):
698 Properly handle the case where the `m' or `s' command's argument is not
699 yet terminated.
700 (perl-indent-new-calculate): New function.
701 (perl-indent-line): Use it.
702
1852005-03-20 Miles Bader <miles@gnu.org> 7032005-03-20 Miles Bader <miles@gnu.org>
186 704
187 * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Use breakpoint faces 705 * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Use breakpoint faces
188 in text-mode too. Change to new face names. 706 in text-mode too. Change to new face names.
189 (breakpoint-enabled): Renamed from `breakpoint-enabled-bitmap-face'. 707 (breakpoint-enabled): Rename from `breakpoint-enabled-bitmap-face'.
190 Add `:weight bold' attribute. 708 Add `:weight bold' attribute.
191 (breakpoint-disabled): Renamed from `breakpoint-disabled-bitmap-face'. 709 (breakpoint-disabled): Rename from `breakpoint-disabled-bitmap-face'.
192 710
1932005-03-19 Juri Linkov <juri@jurta.org> 7112005-03-19 Juri Linkov <juri@jurta.org>
194 712
@@ -205,8 +723,7 @@
205 723
2062005-03-19 Yoichi NAKAYAMA <yoichi@geiin.org> (tiny changes) 7242005-03-19 Yoichi NAKAYAMA <yoichi@geiin.org> (tiny changes)
207 725
208 * finder.el (finder-current-item): Throw an error on an empty 726 * finder.el (finder-current-item): Throw an error on an empty line.
209 line.
210 727
211 * man.el (Man-follow-manual-reference): If current-word returns 728 * man.el (Man-follow-manual-reference): If current-word returns
212 nil, use "". 729 nil, use "".
@@ -245,8 +762,8 @@
245 762
2462005-03-19 Vinicius Jose Latorre <viniciusjl@ig.com.br> 7632005-03-19 Vinicius Jose Latorre <viniciusjl@ig.com.br>
247 764
248 * ps-print.el (ps-generate-string-list, ps-generate-header-line): Use 765 * ps-print.el (ps-generate-string-list, ps-generate-header-line):
249 functionp instead of symbolp and fboundp. Reported by Drkm 766 Use functionp instead of symbolp and fboundp. Reported by Drkm
250 <darkman_spam@yahoo.fr>. 767 <darkman_spam@yahoo.fr>.
251 (ps-print-version): New version 6.6.6. 768 (ps-print-version): New version 6.6.6.
252 769
diff --git a/lisp/autoinsert.el b/lisp/autoinsert.el
index ea3df8efa68..27f5555bb04 100644
--- a/lisp/autoinsert.el
+++ b/lisp/autoinsert.el
@@ -1,6 +1,7 @@
1;;; autoinsert.el --- automatic mode-dependent insertion of text into new files 1;;; autoinsert.el --- automatic mode-dependent insertion of text into new files
2 2
3;; Copyright (C) 1985, 86, 87, 94, 95, 98, 2000, 03 Free Software Foundation, Inc. 3;; Copyright (C) 1985, 1986, 1987, 1994, 1995, 1998, 2000, 2003, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Author: Charlie Martin <crm@cs.duke.edu> 6;; Author: Charlie Martin <crm@cs.duke.edu>
6;; Adapted-By: Daniel Pfeiffer <occitan@esperanto.org> 7;; Adapted-By: Daniel Pfeiffer <occitan@esperanto.org>
@@ -33,7 +34,7 @@
33;; auto-mode-alist. 34;; auto-mode-alist.
34;; 35;;
35;; To use: 36;; To use:
36;; (add-hook 'find-file-hooks 'auto-insert) 37;; (add-hook 'find-file-hook 'auto-insert)
37;; setq auto-insert-directory to an appropriate slash-terminated value 38;; setq auto-insert-directory to an appropriate slash-terminated value
38;; 39;;
39;; You can also customize the variable `auto-insert-mode' to load the 40;; You can also customize the variable `auto-insert-mode' to load the
@@ -67,7 +68,7 @@ Insertion is possible when something appropriate is found in
67`auto-insert-alist'. When the insertion is marked as unmodified, you can 68`auto-insert-alist'. When the insertion is marked as unmodified, you can
68save it with \\[write-file] RET. 69save it with \\[write-file] RET.
69This variable is used when the function `auto-insert' is called, e.g. 70This variable is used when the function `auto-insert' is called, e.g.
70when you do (add-hook 'find-file-hooks 'auto-insert). 71when you do (add-hook 'find-file-hook 'auto-insert).
71With \\[auto-insert], this is always treated as if it were t." 72With \\[auto-insert], this is always treated as if it were t."
72 :type '(choice (const :tag "Insert if possible" t) 73 :type '(choice (const :tag "Insert if possible" t)
73 (const :tag "Do nothing" nil) 74 (const :tag "Do nothing" nil)
@@ -326,10 +327,10 @@ When Auto-insert mode is enabled, when new files are created you can
326insert a template for the file depending on the mode of the buffer." 327insert a template for the file depending on the mode of the buffer."
327 :global t :group 'auto-insert 328 :global t :group 'auto-insert
328 (if auto-insert-mode 329 (if auto-insert-mode
329 (add-hook 'find-file-hooks 'auto-insert) 330 (add-hook 'find-file-hook 'auto-insert)
330 (remove-hook 'find-file-hooks 'auto-insert))) 331 (remove-hook 'find-file-hook 'auto-insert)))
331 332
332(provide 'autoinsert) 333(provide 'autoinsert)
333 334
334;;; arch-tag: 5b6630ac-c735-43cf-b097-b78c622af909 335;; arch-tag: 5b6630ac-c735-43cf-b097-b78c622af909
335;;; autoinsert.el ends here 336;;; autoinsert.el ends here
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index d4a3d10d167..361a11a67ea 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -246,7 +246,7 @@ This currently works by automatically updating the version
246control info every `auto-revert-interval' seconds. Nevertheless, 246control info every `auto-revert-interval' seconds. Nevertheless,
247it should not cause excessive CPU usage on a reasonably fast 247it should not cause excessive CPU usage on a reasonably fast
248machine, if it does not apply to too many version controlled 248machine, if it does not apply to too many version controlled
249buffers. CPU usage depends on the version control system" 249buffers. CPU usage depends on the version control system."
250 :group 'auto-revert 250 :group 'auto-revert
251 :type 'boolean 251 :type 'boolean
252 :version "22.1") 252 :version "22.1")
diff --git a/lisp/bookmark.el b/lisp/bookmark.el
index 949434baffb..869896b087a 100644
--- a/lisp/bookmark.el
+++ b/lisp/bookmark.el
@@ -2111,12 +2111,12 @@ strings returned are not."
2111 (define-key map [write] '("Save Bookmarks As..." . bookmark-write)) 2111 (define-key map [write] '("Save Bookmarks As..." . bookmark-write))
2112 (define-key map [save] '("Save Bookmarks" . bookmark-save)) 2112 (define-key map [save] '("Save Bookmarks" . bookmark-save))
2113 (define-key map [edit] '("Edit Bookmark List" . bookmark-bmenu-list)) 2113 (define-key map [edit] '("Edit Bookmark List" . bookmark-bmenu-list))
2114 (define-key map [delete] '("Delete Bookmark" . bookmark-delete)) 2114 (define-key map [delete] '("Delete Bookmark..." . bookmark-delete))
2115 (define-key map [rename] '("Rename Bookmark" . bookmark-rename)) 2115 (define-key map [rename] '("Rename Bookmark..." . bookmark-rename))
2116 (define-key map [locate] '("Insert Location" . bookmark-locate)) 2116 (define-key map [locate] '("Insert Location..." . bookmark-locate))
2117 (define-key map [insert] '("Insert Contents" . bookmark-insert)) 2117 (define-key map [insert] '("Insert Contents..." . bookmark-insert))
2118 (define-key map [set] '("Set Bookmark" . bookmark-set)) 2118 (define-key map [set] '("Set Bookmark..." . bookmark-set))
2119 (define-key map [jump] '("Jump to Bookmark" . bookmark-jump)) 2119 (define-key map [jump] '("Jump to Bookmark..." . bookmark-jump))
2120 map)) 2120 map))
2121 2121
2122;;;###autoload 2122;;;###autoload
diff --git a/lisp/calc/calc-embed.el b/lisp/calc/calc-embed.el
index 8a48b78e37e..2d2f66b1ebf 100644
--- a/lisp/calc/calc-embed.el
+++ b/lisp/calc/calc-embed.el
@@ -1257,26 +1257,8 @@ The command \\[yank] can retrieve it from there."
1257 calc-embedded-close-mode)))) 1257 calc-embedded-close-mode))))
1258 (setq vars (cdr vars) 1258 (setq vars (cdr vars)
1259 values (cdr values)))))) 1259 values (cdr values))))))
1260 (when (and vars calc-embedded-original-modes (eq calc-mode-save-mode 'save)) 1260 (when (and vars (eq calc-mode-save-mode 'save))
1261 (cond ((equal vars '(the-language)) 1261 (calc-embedded-save-original-modes))))
1262 (setcar calc-embedded-original-modes
1263 (cons calc-language calc-language-option)))
1264 ((equal vars '(the-display-just))
1265 (let* ((modes (cdr calc-embedded-original-modes))
1266 (just (assq 'calc-display-just modes))
1267 (origin (assq 'calc-display-origin modes)))
1268 (if just
1269 (setcdr just calc-display-just))
1270 (if origin
1271 (setcdr origin calc-display-origin))))
1272 (t
1273 (let ((modes (cdr calc-embedded-original-modes)))
1274 (while vars
1275 (let* ((var (car vars))
1276 (cell (assq var modes)))
1277 (if cell
1278 (setcdr cell (symbol-value var))))
1279 (setq vars (cdr vars)))))))))
1280 1262
1281(defun calc-embedded-var-change (var &optional buf) 1263(defun calc-embedded-var-change (var &optional buf)
1282 (if (symbolp var) 1264 (if (symbolp var)
diff --git a/lisp/calc/calc-forms.el b/lisp/calc/calc-forms.el
index d4ddada6a0c..4870891231a 100644
--- a/lisp/calc/calc-forms.el
+++ b/lisp/calc/calc-forms.el
@@ -1,6 +1,7 @@
1;;; calc-forms.el --- data format conversion functions for Calc 1;;; calc-forms.el --- data format conversion functions for Calc
2 2
3;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2004, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Author: David Gillespie <daveg@synaptics.com> 6;; Author: David Gillespie <daveg@synaptics.com>
6;; Maintainer: Jay Belanger <belanger@truman.edu> 7;; Maintainer: Jay Belanger <belanger@truman.edu>
@@ -1434,7 +1435,7 @@ and ends on the last Sunday of October at 2 a.m."
1434(defun calcFunc-badd (a b) 1435(defun calcFunc-badd (a b)
1435 (if (eq (car-safe b) 'date) 1436 (if (eq (car-safe b) 'date)
1436 (if (eq (car-safe a) 'date) 1437 (if (eq (car-safe a) 'date)
1437 (math-reject-arg nil "*Illegal combination in date arithmetic") 1438 (math-reject-arg nil "*Invalid combination in date arithmetic")
1438 (calcFunc-badd b a)) 1439 (calcFunc-badd b a))
1439 (if (eq (car-safe a) 'date) 1440 (if (eq (car-safe a) 'date)
1440 (if (Math-realp b) 1441 (if (Math-realp b)
@@ -1452,7 +1453,7 @@ and ends on the last Sunday of October at 2 a.m."
1452 (if hours 1453 (if hours
1453 (setq b (math-div b (cdr hours)))) 1454 (setq b (math-div b (cdr hours))))
1454 (calcFunc-badd a b)) 1455 (calcFunc-badd a b))
1455 (math-reject-arg nil "*Illegal combination in date arithmetic"))) 1456 (math-reject-arg nil "*Invalid combination in date arithmetic")))
1456 (math-reject-arg a 'datep)))) 1457 (math-reject-arg a 'datep))))
1457 1458
1458(defun calcFunc-holiday (a) 1459(defun calcFunc-holiday (a)
diff --git a/lisp/calc/calc-help.el b/lisp/calc/calc-help.el
index dc7f0b17c1d..46b8cec2ac6 100644
--- a/lisp/calc/calc-help.el
+++ b/lisp/calc/calc-help.el
@@ -1,6 +1,6 @@
1;;; calc-help.el --- help display functions for Calc, 1;;; calc-help.el --- help display functions for Calc,
2 2
3;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2004 3;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2004, 2005
4;; Free Software Foundation, Inc. 4;; Free Software Foundation, Inc.
5 5
6;; Author: David Gillespie <daveg@synaptics.com> 6;; Author: David Gillespie <daveg@synaptics.com>
@@ -409,10 +409,10 @@ C-w Describe how there is no warranty for Calc."
409(defun calc-full-help () 409(defun calc-full-help ()
410 (interactive) 410 (interactive)
411 (with-output-to-temp-buffer "*Help*" 411 (with-output-to-temp-buffer "*Help*"
412 (princ (format "GNU Emacs Calculator version %s of %s.\n" 412 (princ (format "GNU Emacs Calculator version %s.\n"
413 calc-version calc-version-date)) 413 calc-version))
414 (princ " By Dave Gillespie, daveg@synaptics.com.\n") 414 (princ " By Dave Gillespie.\n")
415 (princ " Copyright (C) 1990, 1993 Free Software Foundation, Inc.\n\n") 415 (princ " Copyright (C) 2005 Free Software Foundation, Inc.\n\n")
416 (princ "Type `h s' for a more detailed summary.\n") 416 (princ "Type `h s' for a more detailed summary.\n")
417 (princ "Or type `h i' to read the full Calc manual on-line.\n\n") 417 (princ "Or type `h i' to read the full Calc manual on-line.\n\n")
418 (princ "Basic keys:\n") 418 (princ "Basic keys:\n")
diff --git a/lisp/calc/calc-lang.el b/lisp/calc/calc-lang.el
index 2e5737349bc..9510507e276 100644
--- a/lisp/calc/calc-lang.el
+++ b/lisp/calc/calc-lang.el
@@ -388,6 +388,9 @@
388 ( \\arg . calcFunc-arg ) 388 ( \\arg . calcFunc-arg )
389 ( \\cos . calcFunc-cos ) 389 ( \\cos . calcFunc-cos )
390 ( \\cosh . calcFunc-cosh ) 390 ( \\cosh . calcFunc-cosh )
391 ( \\cot . calcFunc-cot )
392 ( \\coth . calcFunc-coth )
393 ( \\csc . calcFunc-csc )
391 ( \\det . calcFunc-det ) 394 ( \\det . calcFunc-det )
392 ( \\exp . calcFunc-exp ) 395 ( \\exp . calcFunc-exp )
393 ( \\gcd . calcFunc-gcd ) 396 ( \\gcd . calcFunc-gcd )
@@ -395,10 +398,11 @@
395 ( \\log . calcFunc-log10 ) 398 ( \\log . calcFunc-log10 )
396 ( \\max . calcFunc-max ) 399 ( \\max . calcFunc-max )
397 ( \\min . calcFunc-min ) 400 ( \\min . calcFunc-min )
398 ( \\tan . calcFunc-tan ) 401 ( \\sec . calcFunc-sec )
399 ( \\sin . calcFunc-sin ) 402 ( \\sin . calcFunc-sin )
400 ( \\sinh . calcFunc-sinh ) 403 ( \\sinh . calcFunc-sinh )
401 ( \\sqrt . calcFunc-sqrt ) 404 ( \\sqrt . calcFunc-sqrt )
405 ( \\tan . calcFunc-tan )
402 ( \\tanh . calcFunc-tanh ) 406 ( \\tanh . calcFunc-tanh )
403 ( \\phi . calcFunc-totient ) 407 ( \\phi . calcFunc-totient )
404 ( \\mu . calcFunc-moebius ))) 408 ( \\mu . calcFunc-moebius )))
@@ -686,6 +690,10 @@
686 ( Conjugate . calcFunc-conj ) 690 ( Conjugate . calcFunc-conj )
687 ( Cos . calcFunc-cos ) 691 ( Cos . calcFunc-cos )
688 ( Cosh . calcFunc-cosh ) 692 ( Cosh . calcFunc-cosh )
693 ( Cot . calcFunc-cot )
694 ( Coth . calcFunc-coth )
695 ( Csc . calcFunc-csc )
696 ( Csch . calcFunc-csch )
689 ( D . calcFunc-deriv ) 697 ( D . calcFunc-deriv )
690 ( Dt . calcFunc-tderiv ) 698 ( Dt . calcFunc-tderiv )
691 ( Det . calcFunc-det ) 699 ( Det . calcFunc-det )
@@ -708,6 +716,8 @@
708 ( Random . calcFunc-random ) 716 ( Random . calcFunc-random )
709 ( Round . calcFunc-round ) 717 ( Round . calcFunc-round )
710 ( Re . calcFunc-re ) 718 ( Re . calcFunc-re )
719 ( Sec . calcFunc-sec )
720 ( Sech . calcFunc-sech )
711 ( Sign . calcFunc-sign ) 721 ( Sign . calcFunc-sign )
712 ( Sin . calcFunc-sin ) 722 ( Sin . calcFunc-sin )
713 ( Sinh . calcFunc-sinh ) 723 ( Sinh . calcFunc-sinh )
diff --git a/lisp/calc/calc-sel.el b/lisp/calc/calc-sel.el
index 4ae0df5d3ba..04cb2bee2bd 100644
--- a/lisp/calc/calc-sel.el
+++ b/lisp/calc/calc-sel.el
@@ -1,6 +1,7 @@
1;;; calc-sel.el --- data selection functions for Calc 1;;; calc-sel.el --- data selection functions for Calc
2 2
3;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc. 3;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Author: David Gillespie <daveg@synaptics.com> 6;; Author: David Gillespie <daveg@synaptics.com>
6;; Maintainer: Jay Belanger <belanger@truman.edu> 7;; Maintainer: Jay Belanger <belanger@truman.edu>
@@ -490,7 +491,7 @@
490 (mapcar 'calc-replace-sub-formula-rec (cdr expr)))))) 491 (mapcar 'calc-replace-sub-formula-rec (cdr expr))))))
491 492
492(defun calc-sel-error () 493(defun calc-sel-error ()
493 (error "Illegal operation on sub-formulas")) 494 (error "Invalid operation on sub-formulas"))
494 495
495(defun calc-replace-selections (n vals m) 496(defun calc-replace-selections (n vals m)
496 (if (calc-top-selected n m) 497 (if (calc-top-selected n m)
diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el
index 24336ad9333..639b6f31a68 100644
--- a/lisp/calc/calc.el
+++ b/lisp/calc/calc.el
@@ -1,6 +1,7 @@
1;;; calc.el --- the GNU Emacs calculator 1;;; calc.el --- the GNU Emacs calculator
2 2
3;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Author: David Gillespie <daveg@synaptics.com> 6;; Author: David Gillespie <daveg@synaptics.com>
6;; Maintainer: Jay Belanger <belanger@truman.edu> 7;; Maintainer: Jay Belanger <belanger@truman.edu>
@@ -656,8 +657,7 @@ If nil, selections displayed but ignored.")
656(put 'math-underflow 'error-conditions '(error math-underflow calc-error)) 657(put 'math-underflow 'error-conditions '(error math-underflow calc-error))
657(put 'math-underflow 'error-message "Floating-point underflow occurred") 658(put 'math-underflow 'error-message "Floating-point underflow occurred")
658 659
659(defconst calc-version "2.02g") 660(defconst calc-version "2.1")
660(defconst calc-version-date "Mon Nov 19 2001")
661(defvar calc-trail-pointer nil) ; "Current" entry in trail buffer. 661(defvar calc-trail-pointer nil) ; "Current" entry in trail buffer.
662(defvar calc-trail-overlay nil) ; Value of overlay-arrow-string. 662(defvar calc-trail-overlay nil) ; Value of overlay-arrow-string.
663(defvar calc-undo-list nil) ; List of previous operations for undo. 663(defvar calc-undo-list nil) ; List of previous operations for undo.
diff --git a/lisp/calc/calcalg2.el b/lisp/calc/calcalg2.el
index a422ed33e45..d2459919fda 100644
--- a/lisp/calc/calcalg2.el
+++ b/lisp/calc/calcalg2.el
@@ -149,7 +149,7 @@
149 (and step (list step))))))) 149 (and step (list step)))))))
150 150
151(defun calc-solve-for (var) 151(defun calc-solve-for (var)
152 (interactive "sVariable to solve for: ") 152 (interactive "sVariable(s) to solve for: ")
153 (calc-slow-wrapper 153 (calc-slow-wrapper
154 (let ((func (if (calc-is-inverse) 154 (let ((func (if (calc-is-inverse)
155 (if (calc-is-hyperbolic) 'calcFunc-ffinv 'calcFunc-finv) 155 (if (calc-is-hyperbolic) 'calcFunc-ffinv 'calcFunc-finv)
diff --git a/lisp/calendar/appt.el b/lisp/calendar/appt.el
index e11129414d3..8ace0be910b 100644
--- a/lisp/calendar/appt.el
+++ b/lisp/calendar/appt.el
@@ -1,9 +1,9 @@
1;;; appt.el --- appointment notification functions 1;;; appt.el --- appointment notification functions
2 2
3;; Copyright (C) 1989, 1990, 1994, 1998, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1989, 1990, 1994, 1998, 2004 Free Software Foundation, Inc.
4 4
5;; Author: Neil Mager <neilm@juliet.ll.mit.edu> 5;; Author: Neil Mager <neilm@juliet.ll.mit.edu>
6;; Maintainer: FSF 6;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
7;; Keywords: calendar 7;; Keywords: calendar
8 8
9;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
@@ -181,7 +181,7 @@ Only relevant if reminders are being displayed in a window."
181 181
182;;; Internal variables below this point. 182;;; Internal variables below this point.
183 183
184(defvar appt-buffer-name " *appt-buf*" 184(defconst appt-buffer-name " *appt-buf*"
185 "Name of the appointments buffer.") 185 "Name of the appointments buffer.")
186 186
187(defvar appt-time-msg-list nil 187(defvar appt-time-msg-list nil
@@ -486,9 +486,8 @@ Usually just deletes the appointment buffer."
486 486
487;;;###autoload 487;;;###autoload
488(defun appt-add (new-appt-time new-appt-msg) 488(defun appt-add (new-appt-time new-appt-msg)
489 "Add an appointment for the day at NEW-APPT-TIME and issue message NEW-APPT-MSG. 489 "Add an appointment for today at NEW-APPT-TIME with message NEW-APPT-MSG.
490The time should be in either 24 hour format or am/pm format." 490The time should be in either 24 hour format or am/pm format."
491
492 (interactive "sTime (hh:mm[am/pm]): \nsMessage: ") 491 (interactive "sTime (hh:mm[am/pm]): \nsMessage: ")
493 (unless (string-match "[0-9]?[0-9][:.][0-9][0-9]\\(am\\|pm\\)?" 492 (unless (string-match "[0-9]?[0-9][:.][0-9][0-9]\\(am\\|pm\\)?"
494 new-appt-time) 493 new-appt-time)
diff --git a/lisp/calendar/cal-china.el b/lisp/calendar/cal-china.el
index 6e506b93f7d..303193e3d73 100644
--- a/lisp/calendar/cal-china.el
+++ b/lisp/calendar/cal-china.el
@@ -38,8 +38,8 @@
38;; The date of Chinese New Year is correct from 1644-2051. 38;; The date of Chinese New Year is correct from 1644-2051.
39 39
40;; Technical details of all the calendrical calculations can be found in 40;; Technical details of all the calendrical calculations can be found in
41;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 41;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
42;; Cambridge University Press (1997). 42;; and Nachum Dershowitz, Cambridge University Press (2001).
43 43
44;; Comments, corrections, and improvements should be sent to 44;; Comments, corrections, and improvements should be sent to
45;; Edward M. Reingold Department of Computer Science 45;; Edward M. Reingold Department of Computer Science
diff --git a/lisp/calendar/cal-coptic.el b/lisp/calendar/cal-coptic.el
index df1201a23c4..2aa111f2109 100644
--- a/lisp/calendar/cal-coptic.el
+++ b/lisp/calendar/cal-coptic.el
@@ -29,8 +29,8 @@
29;; diary.el that deal with the Coptic and Ethiopic calendars. 29;; diary.el that deal with the Coptic and Ethiopic calendars.
30 30
31;; Technical details of all the calendrical calculations can be found in 31;; Technical details of all the calendrical calculations can be found in
32;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 32;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
33;; Cambridge University Press (1997). 33;; and Nachum Dershowitz, Cambridge University Press (2001).
34 34
35;; Comments, corrections, and improvements should be sent to 35;; Comments, corrections, and improvements should be sent to
36;; Edward M. Reingold Department of Computer Science 36;; Edward M. Reingold Department of Computer Science
diff --git a/lisp/calendar/cal-french.el b/lisp/calendar/cal-french.el
index d988b008f53..c42e415eb25 100644
--- a/lisp/calendar/cal-french.el
+++ b/lisp/calendar/cal-french.el
@@ -29,8 +29,8 @@
29;; diary.el that deal with the French Revolutionary calendar. 29;; diary.el that deal with the French Revolutionary calendar.
30 30
31;; Technical details of the French Revolutionary calendar can be found in 31;; Technical details of the French Revolutionary calendar can be found in
32;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 32;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
33;; Cambridge University Press (1997), and in 33;; and Nachum Dershowitz, Cambridge University Press (2001), and in
34;; ``Calendrical Calculations, Part II: Three Historical Calendars'' by 34;; ``Calendrical Calculations, Part II: Three Historical Calendars'' by
35;; E. M. Reingold, N. Dershowitz, and S. M. Clamen, Software--Practice and 35;; E. M. Reingold, N. Dershowitz, and S. M. Clamen, Software--Practice and
36;; Experience, Volume 23, Number 4 (April, 1993), pages 383-404. 36;; Experience, Volume 23, Number 4 (April, 1993), pages 383-404.
diff --git a/lisp/calendar/cal-hebrew.el b/lisp/calendar/cal-hebrew.el
index 776868159be..f66b4966e57 100644
--- a/lisp/calendar/cal-hebrew.el
+++ b/lisp/calendar/cal-hebrew.el
@@ -30,8 +30,8 @@
30;; diary.el that deal with the Hebrew calendar. 30;; diary.el that deal with the Hebrew calendar.
31 31
32;; Technical details of all the calendrical calculations can be found in 32;; Technical details of all the calendrical calculations can be found in
33;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 33;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
34;; Cambridge University Press (1997). 34;; and Nachum Dershowitz, Cambridge University Press (2001).
35 35
36;; Comments, corrections, and improvements should be sent to 36;; Comments, corrections, and improvements should be sent to
37;; Edward M. Reingold Department of Computer Science 37;; Edward M. Reingold Department of Computer Science
diff --git a/lisp/calendar/cal-islam.el b/lisp/calendar/cal-islam.el
index 8dcf5c29b1f..1ac6f0677b1 100644
--- a/lisp/calendar/cal-islam.el
+++ b/lisp/calendar/cal-islam.el
@@ -29,8 +29,8 @@
29;; diary.el that deal with the Islamic calendar. 29;; diary.el that deal with the Islamic calendar.
30 30
31;; Technical details of all the calendrical calculations can be found in 31;; Technical details of all the calendrical calculations can be found in
32;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 32;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
33;; Cambridge University Press (1997). 33;; and Nachum Dershowitz, Cambridge University Press (2001).
34 34
35;; Comments, corrections, and improvements should be sent to 35;; Comments, corrections, and improvements should be sent to
36;; Edward M. Reingold Department of Computer Science 36;; Edward M. Reingold Department of Computer Science
diff --git a/lisp/calendar/cal-iso.el b/lisp/calendar/cal-iso.el
index 058bdf071d7..8a40442e4fe 100644
--- a/lisp/calendar/cal-iso.el
+++ b/lisp/calendar/cal-iso.el
@@ -30,8 +30,8 @@
30;; diary.el that deal with the ISO calendar. 30;; diary.el that deal with the ISO calendar.
31 31
32;; Technical details of all the calendrical calculations can be found in 32;; Technical details of all the calendrical calculations can be found in
33;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 33;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
34;; Cambridge University Press (1997). 34;; and Nachum Dershowitz, Cambridge University Press (2001).
35 35
36;; Comments, corrections, and improvements should be sent to 36;; Comments, corrections, and improvements should be sent to
37;; Edward M. Reingold Department of Computer Science 37;; Edward M. Reingold Department of Computer Science
diff --git a/lisp/calendar/cal-julian.el b/lisp/calendar/cal-julian.el
index 67fb8515b24..2b7278f8ea6 100644
--- a/lisp/calendar/cal-julian.el
+++ b/lisp/calendar/cal-julian.el
@@ -29,8 +29,8 @@
29;; diary.el that deal with the Julian calendar. 29;; diary.el that deal with the Julian calendar.
30 30
31;; Technical details of all the calendrical calculations can be found in 31;; Technical details of all the calendrical calculations can be found in
32;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 32;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
33;; Cambridge University Press (1997). 33;; and Nachum Dershowitz, Cambridge University Press (2001).
34 34
35;; Comments, corrections, and improvements should be sent to 35;; Comments, corrections, and improvements should be sent to
36;; Edward M. Reingold Department of Computer Science 36;; Edward M. Reingold Department of Computer Science
diff --git a/lisp/calendar/cal-mayan.el b/lisp/calendar/cal-mayan.el
index c2c3e027c4b..92bbb5df23e 100644
--- a/lisp/calendar/cal-mayan.el
+++ b/lisp/calendar/cal-mayan.el
@@ -44,8 +44,8 @@
44;; Comments, improvements, and bug reports should be sent to Reingold. 44;; Comments, improvements, and bug reports should be sent to Reingold.
45 45
46;; Technical details of the Mayan calendrical calculations can be found in 46;; Technical details of the Mayan calendrical calculations can be found in
47;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 47;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
48;; Cambridge University Press (1997), and in 48;; and Nachum Dershowitz, Cambridge University Press (2001), and in
49;; ``Calendrical Calculations, Part II: Three Historical Calendars'' 49;; ``Calendrical Calculations, Part II: Three Historical Calendars''
50;; by E. M. Reingold, N. Dershowitz, and S. M. Clamen, 50;; by E. M. Reingold, N. Dershowitz, and S. M. Clamen,
51;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993), 51;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993),
diff --git a/lisp/calendar/cal-menu.el b/lisp/calendar/cal-menu.el
index ceb4c56f7fd..408de3826d4 100644
--- a/lisp/calendar/cal-menu.el
+++ b/lisp/calendar/cal-menu.el
@@ -1,6 +1,6 @@
1;;; cal-menu.el --- calendar functions for menu bar and popup menu support 1;;; cal-menu.el --- calendar functions for menu bar and popup menu support
2 2
3;; Copyright (C) 1994, 1995, 2001, 2003, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1994, 1995, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Edward M. Reingold <reingold@cs.uiuc.edu> 5;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
6;; Lara Rios <lrios@coewl.cen.uiuc.edu> 6;; Lara Rios <lrios@coewl.cen.uiuc.edu>
@@ -52,7 +52,6 @@
52 52
53(defvar calendar-mouse-3-map (make-sparse-keymap "Calendar")) 53(defvar calendar-mouse-3-map (make-sparse-keymap "Calendar"))
54(define-key calendar-mode-map [down-mouse-3] calendar-mouse-3-map) 54(define-key calendar-mode-map [down-mouse-3] calendar-mouse-3-map)
55(define-key calendar-mode-map [C-down-mouse-3] calendar-mouse-3-map)
56 55
57(define-key calendar-mode-map [menu-bar moon] 56(define-key calendar-mode-map [menu-bar moon]
58 (cons "Moon" (make-sparse-keymap "Moon"))) 57 (cons "Moon" (make-sparse-keymap "Moon")))
diff --git a/lisp/calendar/cal-move.el b/lisp/calendar/cal-move.el
index 045c11ba1d7..e89ee2a26e2 100644
--- a/lisp/calendar/cal-move.el
+++ b/lisp/calendar/cal-move.el
@@ -1,8 +1,9 @@
1;;; cal-move.el --- calendar functions for movement in the calendar 1;;; cal-move.el --- calendar functions for movement in the calendar
2 2
3;; Copyright (C) 1995 Free Software Foundation, Inc. 3;; Copyright (C) 1995, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Edward M. Reingold <reingold@cs.uiuc.edu> 5;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
6;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
6;; Keywords: calendar 7;; Keywords: calendar
7;; Human-Keywords: calendar 8;; Human-Keywords: calendar
8 9
@@ -269,7 +270,8 @@ Moves forward if ARG is negative."
269 (if (and (= arg 1) 270 (if (and (= arg 1)
270 (calendar-date-is-visible-p jan-first)) 271 (calendar-date-is-visible-p jan-first))
271 (calendar-cursor-to-visible-date jan-first) 272 (calendar-cursor-to-visible-date jan-first)
272 (calendar-other-month 1 (- year (1- arg)))))) 273 (calendar-other-month 1 (- year (1- arg)))
274 (calendar-cursor-to-visible-date (list 1 1 displayed-year)))))
273 (run-hooks 'calendar-move-hook)) 275 (run-hooks 'calendar-move-hook))
274 276
275(defun calendar-end-of-year (arg) 277(defun calendar-end-of-year (arg)
@@ -287,7 +289,7 @@ Moves forward if ARG is negative."
287 (if (and (= arg 1) 289 (if (and (= arg 1)
288 (calendar-date-is-visible-p dec-31)) 290 (calendar-date-is-visible-p dec-31))
289 (calendar-cursor-to-visible-date dec-31) 291 (calendar-cursor-to-visible-date dec-31)
290 (calendar-other-month 12 (- year (1- arg))) 292 (calendar-other-month 12 (+ year (1- arg)))
291 (calendar-cursor-to-visible-date (list 12 31 displayed-year))))) 293 (calendar-cursor-to-visible-date (list 12 31 displayed-year)))))
292 (run-hooks 'calendar-move-hook)) 294 (run-hooks 'calendar-move-hook))
293 295
diff --git a/lisp/calendar/cal-persia.el b/lisp/calendar/cal-persia.el
index ff09c14b47d..dcbbcbd637e 100644
--- a/lisp/calendar/cal-persia.el
+++ b/lisp/calendar/cal-persia.el
@@ -29,8 +29,8 @@
29;; diary.el that deal with the Persian calendar. 29;; diary.el that deal with the Persian calendar.
30 30
31;; Technical details of all the calendrical calculations can be found in 31;; Technical details of all the calendrical calculations can be found in
32;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 32;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
33;; Cambridge University Press (1997). 33;; and Nachum Dershowitz, Cambridge University Press (2001).
34 34
35;; Comments, corrections, and improvements should be sent to 35;; Comments, corrections, and improvements should be sent to
36;; Edward M. Reingold Department of Computer Science 36;; Edward M. Reingold Department of Computer Science
diff --git a/lisp/calendar/cal-x.el b/lisp/calendar/cal-x.el
index 97fbb72af61..03b485a438a 100644
--- a/lisp/calendar/cal-x.el
+++ b/lisp/calendar/cal-x.el
@@ -1,9 +1,10 @@
1;;; cal-x.el --- calendar windows in dedicated frames in X 1;;; cal-x.el --- calendar windows in dedicated frames in X
2 2
3;; Copyright (C) 1994, 1995 Free Software Foundation, Inc. 3;; Copyright (C) 1994, 1995, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Michael Kifer <kifer@cs.sunysb.edu> 5;; Author: Michael Kifer <kifer@cs.sunysb.edu>
6;; Edward M. Reingold <reingold@cs.uiuc.edu> 6;; Edward M. Reingold <reingold@cs.uiuc.edu>
7;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
7;; Keywords: calendar 8;; Keywords: calendar
8;; Human-Keywords: calendar, dedicated frames, X Window System 9;; Human-Keywords: calendar, dedicated frames, X Window System
9 10
@@ -88,7 +89,7 @@ This function requires a display capable of multiple frames, else
88 (frame-parameters calendar-frame)))) 89 (frame-parameters calendar-frame))))
89 (iconify-or-deiconify-frame)) 90 (iconify-or-deiconify-frame))
90 (calendar-basic-setup arg) 91 (calendar-basic-setup arg)
91 (set-window-dedicated-p (selected-window) 'calendar) 92 (set-window-dedicated-p (selected-window) t)
92 (set-window-dedicated-p 93 (set-window-dedicated-p
93 (display-buffer 94 (display-buffer
94 (if (not (memq 'fancy-diary-display diary-display-hook)) 95 (if (not (memq 'fancy-diary-display diary-display-hook))
@@ -96,7 +97,7 @@ This function requires a display capable of multiple frames, else
96 (if (not (bufferp (get-buffer fancy-diary-buffer))) 97 (if (not (bufferp (get-buffer fancy-diary-buffer)))
97 (make-fancy-diary-buffer)) 98 (make-fancy-diary-buffer))
98 fancy-diary-buffer)) 99 fancy-diary-buffer))
99 'diary)))))) 100 t))))))
100 101
101(defun calendar-only-one-frame-setup (&optional arg) 102(defun calendar-only-one-frame-setup (&optional arg)
102 "Start calendar and display it in a dedicated frame. 103 "Start calendar and display it in a dedicated frame.
@@ -117,7 +118,7 @@ This function requires a display capable of multiple frames, else
117 (frame-parameters calendar-frame)))) 118 (frame-parameters calendar-frame))))
118 (iconify-or-deiconify-frame)) 119 (iconify-or-deiconify-frame))
119 (calendar-basic-setup arg) 120 (calendar-basic-setup arg)
120 (set-window-dedicated-p (selected-window) 'calendar)))))) 121 (set-window-dedicated-p (selected-window) t))))))
121 122
122(defun calendar-two-frame-setup (&optional arg) 123(defun calendar-two-frame-setup (&optional arg)
123 "Start calendar and diary in separate, dedicated frames. 124 "Start calendar and diary in separate, dedicated frames.
@@ -139,7 +140,7 @@ This function requires a display capable of multiple frames, else
139 (frame-parameters calendar-frame)))) 140 (frame-parameters calendar-frame))))
140 (iconify-or-deiconify-frame)) 141 (iconify-or-deiconify-frame))
141 (display-buffer calendar-buffer) 142 (display-buffer calendar-buffer)
142 (set-window-dedicated-p (selected-window) 'calendar) 143 (set-window-dedicated-p (selected-window) t)
143 (setq diary-frame (make-frame diary-frame-parameters)) 144 (setq diary-frame (make-frame diary-frame-parameters))
144 (run-hooks 'calendar-after-frame-setup-hooks) 145 (run-hooks 'calendar-after-frame-setup-hooks)
145 (select-frame diary-frame) 146 (select-frame diary-frame)
@@ -154,7 +155,7 @@ This function requires a display capable of multiple frames, else
154 (if (not (bufferp (get-buffer fancy-diary-buffer))) 155 (if (not (bufferp (get-buffer fancy-diary-buffer)))
155 (make-fancy-diary-buffer)) 156 (make-fancy-diary-buffer))
156 fancy-diary-buffer)) 157 fancy-diary-buffer))
157 'diary))))) 158 t)))))
158 159
159;; Formerly (get-file-buffer diary-file) was added to the list here, 160;; Formerly (get-file-buffer diary-file) was added to the list here,
160;; but that isn't clean, and the value could even be nil. 161;; but that isn't clean, and the value could even be nil.
diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el
index baa18d769c2..5fc23a15cc9 100644
--- a/lisp/calendar/calendar.el
+++ b/lisp/calendar/calendar.el
@@ -75,13 +75,13 @@
75;; solar.el Sunrise/sunset, equinoxes/solstices 75;; solar.el Sunrise/sunset, equinoxes/solstices
76 76
77;; Technical details of all the calendrical calculations can be found in 77;; Technical details of all the calendrical calculations can be found in
78;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 78;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
79;; Cambridge University Press (1997). 79;; and Nachum Dershowitz, Cambridge University Press (2001).
80 80
81;; An earlier version of the technical details appeared in 81;; An earlier version of the technical details appeared in
82;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 82;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
83;; Software--Practice and Experience, Volume 20, Number 9 (September, 1990), 83;; Software--Practice and Experience, Volume 20, Number 9 (September, 1990),
84;; pages 899-928. ``Calendrical Calculations, Part II: Three Historical 84;; pages 899-928, and in ``Calendrical Calculations, Part II: Three Historical
85;; Calendars'' by E. M. Reingold, N. Dershowitz, and S. M. Clamen, 85;; Calendars'' by E. M. Reingold, N. Dershowitz, and S. M. Clamen,
86;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993), 86;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993),
87;; pages 383-404. 87;; pages 383-404.
@@ -2763,7 +2763,7 @@ in `calendar-day-name-array'. These abbreviations may be used
2763instead of the full names in the diary file. Do not include a 2763instead of the full names in the diary file. Do not include a
2764trailing `.' in the strings specified in this variable, though 2764trailing `.' in the strings specified in this variable, though
2765you may use such in the diary file. If any element of this array 2765you may use such in the diary file. If any element of this array
2766is nil, then the abbreviation will be constructed as the first 2766is nil, then the abbreviation will be constructed as the first
2767`calendar-abbrev-length' characters of the corresponding full name.") 2767`calendar-abbrev-length' characters of the corresponding full name.")
2768 2768
2769(defvar calendar-month-name-array 2769(defvar calendar-month-name-array
@@ -2884,20 +2884,20 @@ interpreted as BC; -1 being 1 BC, and so on."
2884 (redraw-calendar)) 2884 (redraw-calendar))
2885 2885
2886(defun calendar-date-is-visible-p (date) 2886(defun calendar-date-is-visible-p (date)
2887 "Return t if DATE is legal and is visible in the calendar window." 2887 "Return t if DATE is valid and is visible in the calendar window."
2888 (let ((gap (calendar-interval 2888 (let ((gap (calendar-interval
2889 displayed-month displayed-year 2889 displayed-month displayed-year
2890 (extract-calendar-month date) (extract-calendar-year date)))) 2890 (extract-calendar-month date) (extract-calendar-year date))))
2891 (and (calendar-date-is-legal-p date) (> 2 gap) (< -2 gap)))) 2891 (and (calendar-date-is-legal-p date) (> 2 gap) (< -2 gap))))
2892 2892
2893(defun calendar-date-is-legal-p (date) 2893(defun calendar-date-is-legal-p (date)
2894 "Return t if DATE is a legal date." 2894 "Return t if DATE is a valid date."
2895 (let ((month (extract-calendar-month date)) 2895 (let ((month (extract-calendar-month date))
2896 (day (extract-calendar-day date)) 2896 (day (extract-calendar-day date))
2897 (year (extract-calendar-year date))) 2897 (year (extract-calendar-year date)))
2898 (and (<= 1 month) (<= month 12) 2898 (and (<= 1 month) (<= month 12)
2899 (<= 1 day) (<= day (calendar-last-day-of-month month year)) 2899 (<= 1 day) (<= day (calendar-last-day-of-month month year))
2900 ;; BC dates left as non-legal, to suppress errors from 2900 ;; BC dates left as non-valid, to suppress errors from
2901 ;; complex holiday algorithms not suitable for years BC. 2901 ;; complex holiday algorithms not suitable for years BC.
2902 ;; Note there are side effects on calendar navigation. 2902 ;; Note there are side effects on calendar navigation.
2903 (<= 1 year)))) 2903 (<= 1 year))))
diff --git a/lisp/calendar/holidays.el b/lisp/calendar/holidays.el
index 4493bd02a9c..6596657d454 100644
--- a/lisp/calendar/holidays.el
+++ b/lisp/calendar/holidays.el
@@ -30,8 +30,8 @@
30;; in calendar.el. 30;; in calendar.el.
31 31
32;; Technical details of all the calendrical calculations can be found in 32;; Technical details of all the calendrical calculations can be found in
33;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 33;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
34;; Cambridge University Press (1997). 34;; and Nachum Dershowitz, Cambridge University Press (2001).
35 35
36;; An earlier version of the technical details appeared in 36;; An earlier version of the technical details appeared in
37;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 37;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
diff --git a/lisp/calendar/lunar.el b/lisp/calendar/lunar.el
index 7efed3ff275..057419969fc 100644
--- a/lisp/calendar/lunar.el
+++ b/lisp/calendar/lunar.el
@@ -38,8 +38,8 @@
38;; person rewrite the code for the lunar calculations in this file! 38;; person rewrite the code for the lunar calculations in this file!
39 39
40;; Technical details of all the calendrical calculations can be found in 40;; Technical details of all the calendrical calculations can be found in
41;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 41;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
42;; Cambridge University Press (1997). 42;; and Nachum Dershowitz, Cambridge University Press (2001).
43 43
44;; Comments, corrections, and improvements should be sent to 44;; Comments, corrections, and improvements should be sent to
45;; Edward M. Reingold Department of Computer Science 45;; Edward M. Reingold Department of Computer Science
diff --git a/lisp/calendar/solar.el b/lisp/calendar/solar.el
index 8a514fa6415..57a6c6a40a8 100644
--- a/lisp/calendar/solar.el
+++ b/lisp/calendar/solar.el
@@ -48,8 +48,8 @@
48;; 1951--2050. For other years the times will be within +/- 1 minute. 48;; 1951--2050. For other years the times will be within +/- 1 minute.
49 49
50;; Technical details of all the calendrical calculations can be found in 50;; Technical details of all the calendrical calculations can be found in
51;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, 51;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
52;; Cambridge University Press (1997). 52;; and Nachum Dershowitz, Cambridge University Press (2001).
53 53
54;; Comments, corrections, and improvements should be sent to 54;; Comments, corrections, and improvements should be sent to
55;; Edward M. Reingold Department of Computer Science 55;; Edward M. Reingold Department of Computer Science
diff --git a/lisp/comint.el b/lisp/comint.el
index ccd02db39cf..feb0bb83de3 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -1,7 +1,7 @@
1;;; comint.el --- general command interpreter in a window stuff 1;;; comint.el --- general command interpreter in a window stuff
2 2
3;; Copyright (C) 1988, 1990, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 3;; Copyright (C) 1988, 1990, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4;; 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. 4;; 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
5 5
6;; Author: Olin Shivers <shivers@cs.cmu.edu> 6;; Author: Olin Shivers <shivers@cs.cmu.edu>
7;; Simon Marshall <simon@gnu.org> 7;; Simon Marshall <simon@gnu.org>
@@ -791,14 +791,16 @@ buffer. The hook `comint-exec-hook' is run after each exec."
791 ;; This doesn't use "e" because it is supposed to work 791 ;; This doesn't use "e" because it is supposed to work
792 ;; for events without parameters. 792 ;; for events without parameters.
793 (interactive (list last-input-event)) 793 (interactive (list last-input-event))
794 (if event (mouse-set-point event))
795 (let ((pos (point))) 794 (let ((pos (point)))
796 (if (not (eq (get-char-property pos 'field) 'input)) 795 (if event (mouse-set-point event))
796 (if (not (eq (get-char-property (point) 'field) 'input))
797 ;; No input at POS, fall back to the global definition. 797 ;; No input at POS, fall back to the global definition.
798 (let* ((keys (this-command-keys)) 798 (let* ((keys (this-command-keys))
799 (last-key (and (vectorp keys) (aref keys (1- (length keys))))) 799 (last-key (and (vectorp keys) (aref keys (1- (length keys)))))
800 (fun (and last-key (lookup-key global-map (vector last-key))))) 800 (fun (and last-key (lookup-key global-map (vector last-key)))))
801 (goto-char pos)
801 (and fun (call-interactively fun))) 802 (and fun (call-interactively fun)))
803 (setq pos (point))
802 ;; There's previous input at POS, insert it at the end of the buffer. 804 ;; There's previous input at POS, insert it at the end of the buffer.
803 (goto-char (point-max)) 805 (goto-char (point-max))
804 ;; First delete any old unsent input at the end 806 ;; First delete any old unsent input at the end
diff --git a/lisp/complete.el b/lisp/complete.el
index d3c5de459d5..60bddd01f17 100644
--- a/lisp/complete.el
+++ b/lisp/complete.el
@@ -1,6 +1,6 @@
1;;; complete.el --- partial completion mechanism plus other goodies 1;;; complete.el --- partial completion mechanism plus other goodies
2 2
3;; Copyright (C) 1990, 1991, 1992, 1993, 1999, 2000, 2003 3;; Copyright (C) 1990, 1991, 1992, 1993, 1999, 2000, 2003, 2005
4;; Free Software Foundation, Inc. 4;; Free Software Foundation, Inc.
5 5
6;; Author: Dave Gillespie <daveg@synaptics.com> 6;; Author: Dave Gillespie <daveg@synaptics.com>
@@ -118,7 +118,7 @@ Some arcane rules:
118If `]' is in this string, it must come first. 118If `]' is in this string, it must come first.
119If `^' is in this string, it must not come first. 119If `^' is in this string, it must not come first.
120If `-' is in this string, it must come first or right after `]'. 120If `-' is in this string, it must come first or right after `]'.
121In other words, if S is this string, then `[S]' must be a legal Emacs regular 121In other words, if S is this string, then `[S]' must be a valid Emacs regular
122expression (not containing character ranges like `a-z')." 122expression (not containing character ranges like `a-z')."
123 :type 'string 123 :type 'string
124 :group 'partial-completion) 124 :group 'partial-completion)
@@ -937,12 +937,11 @@ absolute rather than relative to some directory on the SEARCH-PATH."
937 ((not completion-table) nil) 937 ((not completion-table) nil)
938 ((eq action nil) (try-completion str2 completion-table nil)) 938 ((eq action nil) (try-completion str2 completion-table nil))
939 ((eq action t) (all-completions str2 completion-table nil)) 939 ((eq action t) (all-completions str2 completion-table nil))
940 ((eq action 'lambda) 940 ((eq action 'lambda) (test-completion str2 completion-table nil))))
941 (eq (try-completion str2 completion-table nil) t))))
942 (funcall PC-old-read-file-name-internal string dir action))) 941 (funcall PC-old-read-file-name-internal string dir action)))
943 942
944 943
945(provide 'complete) 944(provide 'complete)
946 945
947;;; arch-tag: fc7e2768-ff44-4e22-b579-4d825b968458 946;; arch-tag: fc7e2768-ff44-4e22-b579-4d825b968458
948;;; complete.el ends here 947;;; complete.el ends here
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el
index 2e210d084ba..9a1449823ca 100644
--- a/lisp/dired-aux.el
+++ b/lisp/dired-aux.el
@@ -91,13 +91,14 @@ With prefix arg, prompt for argument SWITCHES which is options for `diff'."
91 nil)) 91 nil))
92 (diff-backup (dired-get-filename) switches)) 92 (diff-backup (dired-get-filename) switches))
93 93
94;;;###autoload
94(defun dired-compare-directories (dir2 predicate) 95(defun dired-compare-directories (dir2 predicate)
95 "Mark files with different file attributes in two dired buffers. 96 "Mark files with different file attributes in two dired buffers.
96Compare file attributes of files in the current directory 97Compare file attributes of files in the current directory
97with file attributes in directory DIR2 using PREDICATE on pairs of files 98with file attributes in directory DIR2 using PREDICATE on pairs of files
98with the same name. Mark files for which PREDICATE returns non-nil. 99with the same name. Mark files for which PREDICATE returns non-nil.
99Mark files with different names if PREDICATE is nil (or interactively 100Mark files with different names if PREDICATE is nil (or interactively
100when the user enters empty input at the predicate prompt). 101with empty input at the predicate prompt).
101 102
102PREDICATE is a Lisp expression that can refer to the following variables: 103PREDICATE is a Lisp expression that can refer to the following variables:
103 104
@@ -117,9 +118,10 @@ Examples of PREDICATE:
117 (not (and (= (nth 2 fa1) (nth 2 fa2)) - mark files with different UID 118 (not (and (= (nth 2 fa1) (nth 2 fa2)) - mark files with different UID
118 (= (nth 3 fa1) (nth 3 fa2)))) and GID." 119 (= (nth 3 fa1) (nth 3 fa2)))) and GID."
119 (interactive 120 (interactive
120 (list (read-file-name (format "Compare %s with: " 121 (list (read-directory-name (format "Compare %s with: "
121 (dired-current-directory)) 122 (dired-current-directory))
122 (dired-dwim-target-directory)) 123 (dired-dwim-target-directory)
124 (dired-dwim-target-directory))
123 (read-from-minibuffer "Mark if (lisp expr or RET): " nil nil t nil "nil"))) 125 (read-from-minibuffer "Mark if (lisp expr or RET): " nil nil t nil "nil")))
124 (let* ((dir1 (dired-current-directory)) 126 (let* ((dir1 (dired-current-directory))
125 (file-alist1 (dired-files-attributes dir1)) 127 (file-alist1 (dired-files-attributes dir1))
diff --git a/lisp/dired.el b/lisp/dired.el
index f9eb97f549e..8ee19486a7e 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -1251,6 +1251,9 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
1251 (define-key map [menu-bar immediate dashes] 1251 (define-key map [menu-bar immediate dashes]
1252 '("--")) 1252 '("--"))
1253 1253
1254 (define-key map [menu-bar immediate compare-directories]
1255 '(menu-item "Compare directories..." dired-compare-directories
1256 :help "Mark files with different attributes in two dired buffers"))
1254 (define-key map [menu-bar immediate backup-diff] 1257 (define-key map [menu-bar immediate backup-diff]
1255 '(menu-item "Compare with Backup" dired-backup-diff 1258 '(menu-item "Compare with Backup" dired-backup-diff
1256 :help "Diff file at cursor with its latest backup")) 1259 :help "Diff file at cursor with its latest backup"))
diff --git a/lisp/ediff-hook.el b/lisp/ediff-hook.el
index 7ea6f24d7bb..5394923aa36 100644
--- a/lisp/ediff-hook.el
+++ b/lisp/ediff-hook.el
@@ -131,10 +131,10 @@
131 )) 131 ))
132 (defvar ediff-misc-menu 132 (defvar ediff-misc-menu
133 '("Ediff Miscellanea" 133 '("Ediff Miscellanea"
134 ["Ediff Manual..." ediff-documentation t] 134 ["Ediff Manual" ediff-documentation t]
135 ["Customize Ediff..." ediff-customize t] 135 ["Customize Ediff" ediff-customize t]
136 ["List Ediff Sessions..." ediff-show-registry t] 136 ["List Ediff Sessions" ediff-show-registry t]
137 ["Use separate frame for Ediff control buffer..." 137 ["Use separate frame for Ediff control buffer"
138 ediff-toggle-multiframe 138 ediff-toggle-multiframe
139 :style toggle 139 :style toggle
140 :selected (if (and (featurep 'ediff-util) 140 :selected (if (and (featurep 'ediff-util)
@@ -242,14 +242,14 @@
242 242
243 ;; define ediff miscellanea 243 ;; define ediff miscellanea
244 (define-key menu-bar-ediff-misc-menu [emultiframe] 244 (define-key menu-bar-ediff-misc-menu [emultiframe]
245 '("Toggle use of separate control buffer frame..." 245 '("Toggle use of separate control buffer frame"
246 . ediff-toggle-multiframe)) 246 . ediff-toggle-multiframe))
247 (define-key menu-bar-ediff-misc-menu [eregistry] 247 (define-key menu-bar-ediff-misc-menu [eregistry]
248 '("List Ediff Sessions..." . ediff-show-registry)) 248 '("List Ediff Sessions" . ediff-show-registry))
249 (define-key menu-bar-ediff-misc-menu [ediff-cust] 249 (define-key menu-bar-ediff-misc-menu [ediff-cust]
250 '("Customize Ediff..." . ediff-customize)) 250 '("Customize Ediff" . ediff-customize))
251 (define-key menu-bar-ediff-misc-menu [ediff-doc] 251 (define-key menu-bar-ediff-misc-menu [ediff-doc]
252 '("Ediff Manual..." . ediff-documentation)) 252 '("Ediff Manual" . ediff-documentation))
253 ) 253 )
254 254
255 ) ; emacs case 255 ) ; emacs case
diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el
index cfaac96bbb1..171b68e457c 100644
--- a/lisp/emacs-lisp/advice.el
+++ b/lisp/emacs-lisp/advice.el
@@ -1,6 +1,6 @@
1;;; advice.el --- an overloading mechanism for Emacs Lisp functions 1;;; advice.el --- an overloading mechanism for Emacs Lisp functions
2 2
3;; Copyright (C) 1993,1994,2000,01,2004 Free Software Foundation, Inc. 3;; Copyright (C) 1993,1994,2000,01,2004,2005 Free Software Foundation, Inc.
4 4
5;; Author: Hans Chalupsky <hans@cs.buffalo.edu> 5;; Author: Hans Chalupsky <hans@cs.buffalo.edu>
6;; Maintainer: FSF 6;; Maintainer: FSF
@@ -2173,7 +2173,7 @@ Redefining advices affect the construction of an advised definition."
2173;; ============================================ 2173;; ============================================
2174;; The advice-info of an advised function contains its `origname' which is 2174;; The advice-info of an advised function contains its `origname' which is
2175;; a symbol that is fbound to the original definition available at the first 2175;; a symbol that is fbound to the original definition available at the first
2176;; proper activation of the function after a legal re/definition. If the 2176;; proper activation of the function after a valid re/definition. If the
2177;; original was defined via fcell indirection then `origname' will be defined 2177;; original was defined via fcell indirection then `origname' will be defined
2178;; just so. Hence, to get hold of the actual original definition of a function 2178;; just so. Hence, to get hold of the actual original definition of a function
2179;; we need to use `ad-real-orig-definition'. 2179;; we need to use `ad-real-orig-definition'.
@@ -2238,7 +2238,7 @@ which PREDICATE returns non-nil)."
2238 ad-advice-classes)) 2238 ad-advice-classes))
2239 2239
2240(defun ad-read-advice-class (function &optional prompt default) 2240(defun ad-read-advice-class (function &optional prompt default)
2241 "Read a legal advice class with completion from the minibuffer. 2241 "Read a valid advice class with completion from the minibuffer.
2242An optional PROMPT will be used to prompt for the class. DEFAULT will 2242An optional PROMPT will be used to prompt for the class. DEFAULT will
2243be returned on empty input (defaults to the first non-empty advice 2243be returned on empty input (defaults to the first non-empty advice
2244class of FUNCTION)." 2244class of FUNCTION)."
@@ -2312,7 +2312,7 @@ be used to prompt for the function."
2312(defun ad-find-some-advice (function class name) 2312(defun ad-find-some-advice (function class name)
2313 "Find the first of FUNCTION's advices in CLASS matching NAME. 2313 "Find the first of FUNCTION's advices in CLASS matching NAME.
2314NAME can be a symbol or a regular expression matching part of an advice name. 2314NAME can be a symbol or a regular expression matching part of an advice name.
2315If CLASS is `any' all legal advice classes will be checked." 2315If CLASS is `any' all valid advice classes will be checked."
2316 (if (ad-is-advised function) 2316 (if (ad-is-advised function)
2317 (let (found-advice) 2317 (let (found-advice)
2318 (ad-dolist (advice-class ad-advice-classes) 2318 (ad-dolist (advice-class ad-advice-classes)
@@ -2332,7 +2332,7 @@ If CLASS is `any' all legal advice classes will be checked."
2332 "Set enable FLAG of FUNCTION's advices in CLASS matching NAME. 2332 "Set enable FLAG of FUNCTION's advices in CLASS matching NAME.
2333If NAME is a string rather than a symbol then it's interpreted as a regular 2333If NAME is a string rather than a symbol then it's interpreted as a regular
2334expression and all advices whose name contain a match for it will be 2334expression and all advices whose name contain a match for it will be
2335affected. If CLASS is `any' advices in all legal advice classes will be 2335affected. If CLASS is `any' advices in all valid advice classes will be
2336considered. The number of changed advices will be returned (or nil if 2336considered. The number of changed advices will be returned (or nil if
2337FUNCTION was not advised)." 2337FUNCTION was not advised)."
2338 (if (ad-is-advised function) 2338 (if (ad-is-advised function)
@@ -2369,7 +2369,7 @@ FUNCTION was not advised)."
2369 2369
2370(defun ad-enable-regexp-internal (regexp class flag) 2370(defun ad-enable-regexp-internal (regexp class flag)
2371 "Set enable FLAGs of all CLASS advices whose name contains a REGEXP match. 2371 "Set enable FLAGs of all CLASS advices whose name contains a REGEXP match.
2372If CLASS is `any' all legal advice classes are considered. The number of 2372If CLASS is `any' all valid advice classes are considered. The number of
2373affected advices will be returned." 2373affected advices will be returned."
2374 (let ((matched-advices 0)) 2374 (let ((matched-advices 0))
2375 (ad-do-advised-functions (advised-function) 2375 (ad-do-advised-functions (advised-function)
@@ -3755,7 +3755,7 @@ deactivation, which might run hooks and get into other trouble."
3755 (error nil)))) 3755 (error nil))))
3756 3756
3757 3757
3758;; Completion alist of legal `defadvice' flags 3758;; Completion alist of valid `defadvice' flags
3759(defvar ad-defadvice-flags 3759(defvar ad-defadvice-flags
3760 '(("protect") ("disable") ("activate") 3760 '(("protect") ("disable") ("activate")
3761 ("compile") ("preactivate") ("freeze"))) 3761 ("compile") ("preactivate") ("freeze")))
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index cbab83184e1..305f0dd9587 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -1,6 +1,6 @@
1;;; cl-macs.el --- Common Lisp macros -*-byte-compile-dynamic: t;-*- 1;;; cl-macs.el --- Common Lisp macros -*-byte-compile-dynamic: t;-*-
2 2
3;; Copyright (C) 1993, 2003, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1993, 2003, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Dave Gillespie <daveg@synaptics.com> 5;; Author: Dave Gillespie <daveg@synaptics.com>
6;; Version: 2.02 6;; Version: 2.02
@@ -2219,7 +2219,7 @@ copier, a `NAME-p' predicate, and setf-able `NAME-SLOT' accessors.
2219 (if type 2219 (if type
2220 (progn 2220 (progn
2221 (or (memq type '(vector list)) 2221 (or (memq type '(vector list))
2222 (error "Illegal :type specifier: %s" type)) 2222 (error "Invalid :type specifier: %s" type))
2223 (if named (setq tag name))) 2223 (if named (setq tag name)))
2224 (setq type 'vector named 'true))) 2224 (setq type 'vector named 'true)))
2225 (or named (setq descs (delq (assq 'cl-tag-slot descs) descs))) 2225 (or named (setq descs (delq (assq 'cl-tag-slot descs) descs)))
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index e97e9012fc1..2149cba8720 100644
--- a/lisp/emacs-lisp/debug.el
+++ b/lisp/emacs-lisp/debug.el
@@ -584,10 +584,9 @@ Applies to the frame whose line point is on in the backtrace."
584 (terpri)) 584 (terpri))
585 585
586 (with-current-buffer (get-buffer debugger-record-buffer) 586 (with-current-buffer (get-buffer debugger-record-buffer)
587 (save-excursion 587 (message "%s"
588 (forward-line -1) 588 (buffer-substring (line-beginning-position 0)
589 (message 589 (line-end-position 0)))))
590 (buffer-substring (point) (progn (end-of-line) (point)))))))
591 590
592(put 'debugger-mode 'mode-class 'special) 591(put 'debugger-mode 'mode-class 'special)
593 592
@@ -633,24 +632,31 @@ which must be written in Lisp, not predefined.
633Use \\[cancel-debug-on-entry] to cancel the effect of this command. 632Use \\[cancel-debug-on-entry] to cancel the effect of this command.
634Redefining FUNCTION also cancels it." 633Redefining FUNCTION also cancels it."
635 (interactive "aDebug on entry (to function): ") 634 (interactive "aDebug on entry (to function): ")
636 ;; Handle a function that has been aliased to some other function. 635 (when (and (subrp (symbol-function function))
637 (if (and (subrp (symbol-function function)) 636 (eq (cdr (subr-arity (symbol-function function))) 'unevalled))
638 (eq (cdr (subr-arity (symbol-function function))) 'unevalled)) 637 (error "Function %s is a special form" function))
639 (error "Function %s is a special form" function)) 638 (if (or (symbolp (symbol-function function))
640 (if (or (symbolp (symbol-function function))
641 (subrp (symbol-function function))) 639 (subrp (symbol-function function)))
642 ;; Create a wrapper in which we can then add the necessary debug call. 640 ;; The function is built-in or aliased to another function.
641 ;; Create a wrapper in which we can add the debug call.
643 (fset function `(lambda (&rest debug-on-entry-args) 642 (fset function `(lambda (&rest debug-on-entry-args)
644 ,(interactive-form (symbol-function function)) 643 ,(interactive-form (symbol-function function))
645 (apply ',(symbol-function function) 644 (apply ',(symbol-function function)
646 debug-on-entry-args)))) 645 debug-on-entry-args)))
647 (or (consp (symbol-function function)) 646 (when (eq (car-safe (symbol-function function)) 'autoload)
648 (debug-convert-byte-code function)) 647 ;; The function is autoloaded. Load its real definition.
649 (or (consp (symbol-function function)) 648 (load (cadr (symbol-function function)) nil noninteractive nil t))
650 (error "Definition of %s is not a list" function)) 649 (when (or (not (consp (symbol-function function)))
650 (and (eq (car (symbol-function function)) 'macro)
651 (not (consp (cdr (symbol-function function))))))
652 ;; The function is byte-compiled. Create a wrapper in which
653 ;; we can add the debug call.
654 (debug-convert-byte-code function)))
655 (unless (consp (symbol-function function))
656 (error "Definition of %s is not a list" function))
651 (fset function (debug-on-entry-1 function t)) 657 (fset function (debug-on-entry-1 function t))
652 (or (memq function debug-function-list) 658 (unless (memq function debug-function-list)
653 (push function debug-function-list)) 659 (push function debug-function-list))
654 function) 660 function)
655 661
656;;;###autoload 662;;;###autoload
@@ -665,45 +671,52 @@ If argument is nil or an empty string, cancel for all functions."
665 (if name (intern name))))) 671 (if name (intern name)))))
666 (if (and function (not (string= function ""))) 672 (if (and function (not (string= function "")))
667 (progn 673 (progn
668 (let ((f (debug-on-entry-1 function nil))) 674 (let ((defn (debug-on-entry-1 function nil)))
669 (condition-case nil 675 (condition-case nil
670 (if (and (equal (nth 1 f) '(&rest debug-on-entry-args)) 676 (when (and (equal (nth 1 defn) '(&rest debug-on-entry-args))
671 (eq (car (nth 3 f)) 'apply)) 677 (eq (car (nth 3 defn)) 'apply))
672 ;; `f' is a wrapper introduced in debug-on-entry. 678 ;; `defn' is a wrapper introduced in debug-on-entry.
673 ;; Get rid of it since we don't need it any more. 679 ;; Get rid of it since we don't need it any more.
674 (setq f (nth 1 (nth 1 (nth 3 f))))) 680 (setq defn (nth 1 (nth 1 (nth 3 defn)))))
675 (error nil)) 681 (error nil))
676 (fset function f)) 682 (fset function defn))
677 (setq debug-function-list (delq function debug-function-list)) 683 (setq debug-function-list (delq function debug-function-list))
678 function) 684 function)
679 (message "Cancelling debug-on-entry for all functions") 685 (message "Cancelling debug-on-entry for all functions")
680 (mapcar 'cancel-debug-on-entry debug-function-list))) 686 (mapcar 'cancel-debug-on-entry debug-function-list)))
681 687
682(defun debug-convert-byte-code (function) 688(defun debug-convert-byte-code (function)
683 (let ((defn (symbol-function function))) 689 (let* ((defn (symbol-function function))
684 (if (not (consp defn)) 690 (macro (eq (car-safe defn) 'macro)))
685 ;; Assume a compiled code object. 691 (when macro (setq defn (cdr defn)))
686 (let* ((contents (append defn nil)) 692 (unless (consp defn)
687 (body 693 ;; Assume a compiled code object.
688 (list (list 'byte-code (nth 1 contents) 694 (let* ((contents (append defn nil))
689 (nth 2 contents) (nth 3 contents))))) 695 (body
690 (if (nthcdr 5 contents) 696 (list (list 'byte-code (nth 1 contents)
691 (setq body (cons (list 'interactive (nth 5 contents)) body))) 697 (nth 2 contents) (nth 3 contents)))))
692 (if (nth 4 contents) 698 (if (nthcdr 5 contents)
693 ;; Use `documentation' here, to get the actual string, 699 (setq body (cons (list 'interactive (nth 5 contents)) body)))
694 ;; in case the compiled function has a reference 700 (if (nth 4 contents)
695 ;; to the .elc file. 701 ;; Use `documentation' here, to get the actual string,
696 (setq body (cons (documentation function) body))) 702 ;; in case the compiled function has a reference
697 (fset function (cons 'lambda (cons (car contents) body))))))) 703 ;; to the .elc file.
704 (setq body (cons (documentation function) body)))
705 (setq defn (cons 'lambda (cons (car contents) body))))
706 (when macro (setq defn (cons 'macro defn)))
707 (fset function defn))))
698 708
699(defun debug-on-entry-1 (function flag) 709(defun debug-on-entry-1 (function flag)
700 (let* ((defn (symbol-function function)) 710 (let* ((defn (symbol-function function))
701 (tail defn)) 711 (tail defn))
702 (if (subrp tail) 712 (when (eq (car-safe tail) 'macro)
703 (error "%s is a built-in function" function) 713 (setq tail (cdr tail)))
704 (if (eq (car tail) 'macro) (setq tail (cdr tail))) 714 (if (not (eq (car-safe tail) 'lambda))
705 (if (eq (car tail) 'lambda) (setq tail (cdr tail)) 715 ;; Only signal an error when we try to set debug-on-entry.
706 (error "%s not user-defined Lisp function" function)) 716 ;; When we try to clear debug-on-entry, we are now done.
717 (when flag
718 (error "%s is not a user-defined Lisp function" function))
719 (setq tail (cdr tail))
707 ;; Skip the docstring. 720 ;; Skip the docstring.
708 (when (and (stringp (cadr tail)) (cddr tail)) 721 (when (and (stringp (cadr tail)) (cddr tail))
709 (setq tail (cdr tail))) 722 (setq tail (cdr tail)))
@@ -714,8 +727,8 @@ If argument is nil or an empty string, cancel for all functions."
714 ;; Add/remove debug statement as needed. 727 ;; Add/remove debug statement as needed.
715 (if flag 728 (if flag
716 (setcdr tail (cons '(implement-debug-on-entry) (cdr tail))) 729 (setcdr tail (cons '(implement-debug-on-entry) (cdr tail)))
717 (setcdr tail (cddr tail)))) 730 (setcdr tail (cddr tail)))))
718 defn))) 731 defn))
719 732
720(defun debugger-list-functions () 733(defun debugger-list-functions ()
721 "Display a list of all the functions now set to debug on entry." 734 "Display a list of all the functions now set to debug on entry."
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index 2e829080c9c..8f4245cb9a1 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -91,6 +91,7 @@
91 '("defun" "defun*" "defsubst" "defmacro" 91 '("defun" "defun*" "defsubst" "defmacro"
92 "defadvice" "define-skeleton" 92 "defadvice" "define-skeleton"
93 "define-minor-mode" "define-derived-mode" 93 "define-minor-mode" "define-derived-mode"
94 "define-generic-mode"
94 "define-compiler-macro" "define-modify-macro" 95 "define-compiler-macro" "define-modify-macro"
95 "defsetf" "define-setf-expander" 96 "defsetf" "define-setf-expander"
96 "define-method-combination" 97 "define-method-combination"
diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el
index d4a10104eea..49196f17ef0 100644
--- a/lisp/emacs-lisp/rx.el
+++ b/lisp/emacs-lisp/rx.el
@@ -1,6 +1,6 @@
1;;; rx.el --- sexp notation for regular expressions 1;;; rx.el --- sexp notation for regular expressions
2 2
3;; Copyright (C) 2001, 03, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Gerd Moellmann <gerd@gnu.org> 5;; Author: Gerd Moellmann <gerd@gnu.org>
6;; Maintainer: FSF 6;; Maintainer: FSF
@@ -169,6 +169,8 @@
169 (eow . word-end) ; SRE 169 (eow . word-end) ; SRE
170 (word-boundary . "\\b") 170 (word-boundary . "\\b")
171 (not-word-boundary . "\\B") ; sregex 171 (not-word-boundary . "\\B") ; sregex
172 (symbol-start . "\\_<")
173 (symbol-end . "\\_>")
172 (syntax . (rx-syntax 1 1)) 174 (syntax . (rx-syntax 1 1))
173 (not-syntax . (rx-not-syntax 1 1)) ; sregex 175 (not-syntax . (rx-not-syntax 1 1)) ; sregex
174 (category . (rx-category 1 1 rx-check-category)) 176 (category . (rx-category 1 1 rx-check-category))
@@ -969,5 +971,5 @@ enclosed in `(and ...)'.
969 971
970(provide 'rx) 972(provide 'rx)
971 973
972;;; arch-tag: 12d01a63-0008-42bb-ab8c-1c7d63be370b 974;; arch-tag: 12d01a63-0008-42bb-ab8c-1c7d63be370b
973;;; rx.el ends here 975;;; rx.el ends here
diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el
index d72dc91ad2b..7b2ba5c6fb2 100644
--- a/lisp/emulation/cua-base.el
+++ b/lisp/emulation/cua-base.el
@@ -1016,7 +1016,7 @@ If ARG is the atom `-', scroll upward by nearly full screen."
1016 (scroll-down arg) 1016 (scroll-down arg)
1017 (beginning-of-buffer (goto-char (point-min))))))) 1017 (beginning-of-buffer (goto-char (point-min)))))))
1018 1018
1019(put 'cua-scroll-up 'CUA 'move) 1019(put 'cua-scroll-down 'CUA 'move)
1020 1020
1021;;; Cursor indications 1021;;; Cursor indications
1022 1022
diff --git a/lisp/emulation/vi.el b/lisp/emulation/vi.el
index 4e17644e66a..70a52617431 100644
--- a/lisp/emulation/vi.el
+++ b/lisp/emulation/vi.el
@@ -1,7 +1,7 @@
1;;; vi.el --- major mode for emulating "vi" editor under GNU Emacs 1;;; vi.el --- major mode for emulating "vi" editor under GNU Emacs
2 2
3; This file is in the public domain because the authors distributed it 3;; This file is in the public domain because the authors distributed it
4; without a copyright notice before the US signed the Bern Convention. 4;; without a copyright notice before the US signed the Bern Convention.
5 5
6;; This file is part of GNU Emacs. 6;; This file is part of GNU Emacs.
7 7
@@ -11,32 +11,32 @@
11 11
12;;; Commentary: 12;;; Commentary:
13 13
14; Originally written by : seismo!wucs!nz@rsch.wisc.edu (Neal Ziring) 14;; Originally written by : seismo!wucs!nz@rsch.wisc.edu (Neal Ziring)
15; Extensively redesigned and rewritten by wu@crys.wisc.edu (Felix S.T. Wu) 15;; Extensively redesigned and rewritten by wu@crys.wisc.edu (Felix S.T. Wu)
16; Last revision: 01/07/87 Wed (for GNU Emacs 18.33) 16;; Last revision: 01/07/87 Wed (for GNU Emacs 18.33)
17 17
18; INSTALLATION PROCEDURE: 18;; INSTALLATION PROCEDURE:
19; 1) Add a global key binding for command "vi-mode" (I use ESC ESC instead of 19;; 1) Add a global key binding for command "vi-mode" (I use ESC ESC instead of
20; the single ESC used in real "vi", so I can access other ESC prefixed emacs 20;; the single ESC used in real "vi", so I can access other ESC prefixed emacs
21; commands while I'm in "vi"), say, by putting the following line in your 21;; commands while I'm in "vi"), say, by putting the following line in your
22; ".emacs" file: 22;; ".emacs" file:
23; (define-key global-map "\e\e" 'vi-mode) ;quick switch into vi-mode 23;; (define-key global-map "\e\e" 'vi-mode) ;quick switch into vi-mode
24; 2) If you wish you can define "find-file-hooks" to enter "vi" automatically 24;; 2) If you wish you can define "find-file-hook" to enter "vi" automatically
25; after a file is loaded into the buffer. For example, I defined it as: 25;; after a file is loaded into the buffer. For example, I defined it as:
26; (setq find-file-hooks (list 26;; (setq find-file-hook (list
27; (function (lambda () 27;; (function (lambda ()
28; (if (not (or (eq major-mode 'Info-mode) 28;; (if (not (or (eq major-mode 'Info-mode)
29; (eq major-mode 'vi-mode))) 29;; (eq major-mode 'vi-mode)))
30; (vi-mode)))))) 30;; (vi-mode))))))
31; 3) In your .emacs file you can define the command "vi-mode" to be "autoload" 31;; 3) In your .emacs file you can define the command "vi-mode" to be "autoload"
32; or you can execute the "load" command to load "vi" directly. 32;; or you can execute the "load" command to load "vi" directly.
33; 4) Read the comments for command "vi-mode" before you start using it. 33;; 4) Read the comments for command "vi-mode" before you start using it.
34; 34
35; COULD DO 35;; COULD DO
36; 1). A general 'define-operator' function to replace current hack 36;; 1). A general 'define-operator' function to replace current hack
37; 2). In operator handling, should allow other point moving Emacs commands 37;; 2). In operator handling, should allow other point moving Emacs commands
38; (such as ESC <, ESC >) to be used as arguments. 38;; (such as ESC <, ESC >) to be used as arguments.
39; 39
40;;; Code: 40;;; Code:
41 41
42(defvar vi-mode-old-major-mode) 42(defvar vi-mode-old-major-mode)
@@ -1487,5 +1487,5 @@ With ARG, inserts that many newlines."
1487 1487
1488(provide 'vi) 1488(provide 'vi)
1489 1489
1490;;; arch-tag: ac9bdac3-8acb-4ddd-bdae-c6dd873153b3 1490;; arch-tag: ac9bdac3-8acb-4ddd-bdae-c6dd873153b3
1491;;; vi.el ends here 1491;;; vi.el ends here
diff --git a/lisp/emulation/vip.el b/lisp/emulation/vip.el
index cbb0aa55aa8..af878085ba8 100644
--- a/lisp/emulation/vip.el
+++ b/lisp/emulation/vip.el
@@ -1,6 +1,6 @@
1;;; vip.el --- a VI Package for GNU Emacs 1;;; vip.el --- a VI Package for GNU Emacs
2 2
3;; Copyright (C) 1986, 1987, 1988, 1992, 1993, 1998 3;; Copyright (C) 1986, 1987, 1988, 1992, 1993, 1998, 2005
4;; Free Software Foundation, Inc. 4;; Free Software Foundation, Inc.
5 5
6;; Author: Masahiko Sato <ms@sail.stanford.edu> 6;; Author: Masahiko Sato <ms@sail.stanford.edu>
@@ -2253,7 +2253,7 @@ a token has type \(command, address, end-mark\) and value."
2253 (setq ex-token-type "end-mark") 2253 (setq ex-token-type "end-mark")
2254 (setq ex-token "goto")) 2254 (setq ex-token "goto"))
2255 (t 2255 (t
2256 (error "illegal token"))))) 2256 (error "invalid token")))))
2257 2257
2258(defun vip-ex (&optional string) 2258(defun vip-ex (&optional string)
2259 "ex commands within VIP." 2259 "ex commands within VIP."
@@ -2478,7 +2478,7 @@ a token has type \(command, address, end-mark\) and value."
2478 (setq ex-flag t) 2478 (setq ex-flag t)
2479 (forward-char 1))) 2479 (forward-char 1)))
2480 (if (not (looking-at "[\n|]")) 2480 (if (not (looking-at "[\n|]"))
2481 (error "Illegal extra characters")))) 2481 (error "Invalid extra characters"))))
2482 2482
2483(defun vip-get-ex-count () 2483(defun vip-get-ex-count ()
2484 (setq ex-variant nil 2484 (setq ex-variant nil
@@ -2503,7 +2503,7 @@ a token has type \(command, address, end-mark\) and value."
2503 (setq ex-flag t) 2503 (setq ex-flag t)
2504 (forward-char 1))) 2504 (forward-char 1)))
2505 (if (not (looking-at "[\n|]")) 2505 (if (not (looking-at "[\n|]"))
2506 (error "Illegal extra characters")))) 2506 (error "Invalid extra characters"))))
2507 2507
2508(defun vip-get-ex-file () 2508(defun vip-get-ex-file ()
2509 "get a file name and set ex-variant, ex-append and ex-offset if found" 2509 "get a file name and set ex-variant, ex-append and ex-offset if found"
diff --git a/lisp/eshell/esh-io.el b/lisp/eshell/esh-io.el
index d832fa9cd03..6944770dbc9 100644
--- a/lisp/eshell/esh-io.el
+++ b/lisp/eshell/esh-io.el
@@ -1,6 +1,6 @@
1;;; esh-io.el --- I/O management 1;;; esh-io.el --- I/O management
2 2
3;; Copyright (C) 1999, 2000 Free Software Foundation 3;; Copyright (C) 1999, 2000, 2005 Free Software Foundation
4 4
5;; Author: John Wiegley <johnw@gnu.org> 5;; Author: John Wiegley <johnw@gnu.org>
6 6
@@ -377,7 +377,7 @@ it defaults to `insert'."
377 target) 377 target)
378 378
379 (t 379 (t
380 (error "Illegal redirection target: %s" 380 (error "Invalid redirection target: %s"
381 (eshell-stringify target))))) 381 (eshell-stringify target)))))
382 382
383(eval-when-compile 383(eval-when-compile
diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el
index fabcf367088..9ff9c1898a2 100644
--- a/lisp/eshell/esh-var.el
+++ b/lisp/eshell/esh-var.el
@@ -1,6 +1,6 @@
1;;; esh-var.el --- handling of variables 1;;; esh-var.el --- handling of variables
2 2
3;; Copyright (C) 1999, 2000 Free Software Foundation 3;; Copyright (C) 1999, 2000, 2005 Free Software Foundation
4 4
5;; Author: John Wiegley <johnw@gnu.org> 5;; Author: John Wiegley <johnw@gnu.org>
6 6
@@ -568,7 +568,7 @@ For example, to retrieve the second element of a user's record in
568 (split-string value separator))))) 568 (split-string value separator)))))
569 (cond 569 (cond
570 ((< (length refs) 0) 570 ((< (length refs) 0)
571 (error "Illegal array variable index: %s" 571 (error "Invalid array variable index: %s"
572 (eshell-stringify refs))) 572 (eshell-stringify refs)))
573 ((= (length refs) 1) 573 ((= (length refs) 1)
574 (setq value (eshell-index-value value (car refs)))) 574 (setq value (eshell-index-value value (car refs))))
diff --git a/lisp/files.el b/lisp/files.el
index 1921c959bf9..15d6f794e16 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -928,20 +928,31 @@ documentation for additional customization information."
928(defvar find-file-default nil 928(defvar find-file-default nil
929 "Used within `find-file-read-args'.") 929 "Used within `find-file-read-args'.")
930 930
931(defmacro minibuffer-with-setup-hook (fun &rest body)
932 "Add FUN to `minibuffer-setup-hook' while executing BODY.
933BODY should use the minibuffer at most once.
934Recursive uses of the minibuffer will not be affected."
935 (declare (indent 1) (debug t))
936 (let ((hook (make-symbol "setup-hook")))
937 `(let ((,hook
938 (lambda ()
939 ;; Clear out this hook so it does not interfere
940 ;; with any recursive minibuffer usage.
941 (remove-hook 'minibuffer-setup-hook ,hook)
942 (,fun))))
943 (unwind-protect
944 (progn
945 (add-hook 'minibuffer-setup-hook ,hook)
946 ,@body)
947 (remove-hook 'minibuffer-setup-hook ,hook)))))
948
931(defun find-file-read-args (prompt mustmatch) 949(defun find-file-read-args (prompt mustmatch)
932 (list (let ((find-file-default 950 (list (let ((find-file-default
933 (and buffer-file-name 951 (and buffer-file-name
934 (abbreviate-file-name buffer-file-name))) 952 (abbreviate-file-name buffer-file-name))))
935 (munge-default-fun 953 (minibuffer-with-setup-hook
936 (lambda () 954 (lambda () (setq minibuffer-default find-file-default))
937 (setq minibuffer-default find-file-default) 955 (read-file-name prompt nil default-directory mustmatch)))
938 ;; Clear out this hook so it does not interfere
939 ;; with any recursive minibuffer usage.
940 (pop minibuffer-setup-hook)))
941 (minibuffer-setup-hook
942 minibuffer-setup-hook))
943 (add-hook 'minibuffer-setup-hook munge-default-fun)
944 (read-file-name prompt nil default-directory mustmatch))
945 t)) 956 t))
946 957
947(defun find-file (filename &optional wildcards) 958(defun find-file (filename &optional wildcards)
@@ -1777,8 +1788,8 @@ in that case, this function acts as if `enable-local-variables' were t."
1777 ("\\.tar\\'" . tar-mode) 1788 ("\\.tar\\'" . tar-mode)
1778 ;; The list of archive file extensions should be in sync with 1789 ;; The list of archive file extensions should be in sync with
1779 ;; `auto-coding-alist' with `no-conversion' coding system. 1790 ;; `auto-coding-alist' with `no-conversion' coding system.
1780 ("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\)\\'" . archive-mode) 1791 ("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\|xpi\\)\\'" . archive-mode)
1781 ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\)\\'" . archive-mode) 1792 ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . archive-mode)
1782 ("\\.sx[dmicw]\\'" . archive-mode) ; OpenOffice.org 1793 ("\\.sx[dmicw]\\'" . archive-mode) ; OpenOffice.org
1783 ;; Mailer puts message to be edited in 1794 ;; Mailer puts message to be edited in
1784 ;; /tmp/Re.... or Message 1795 ;; /tmp/Re.... or Message
@@ -3422,7 +3433,7 @@ This requires the external program `diff' to be in your `exec-path'."
3422 "Save some modified file-visiting buffers. Asks user about each one. 3433 "Save some modified file-visiting buffers. Asks user about each one.
3423You can answer `y' to save, `n' not to save, `C-r' to look at the 3434You can answer `y' to save, `n' not to save, `C-r' to look at the
3424buffer in question with `view-buffer' before deciding or `d' to 3435buffer in question with `view-buffer' before deciding or `d' to
3425view the differences using `diff-buffer-to-file'. 3436view the differences using `diff-buffer-with-file'.
3426 3437
3427Optional argument (the prefix) non-nil means save all with no questions. 3438Optional argument (the prefix) non-nil means save all with no questions.
3428Optional second argument PRED determines which buffers are considered: 3439Optional second argument PRED determines which buffers are considered:
diff --git a/lisp/filesets.el b/lisp/filesets.el
index dee662ee87d..13ddfa5a84d 100644
--- a/lisp/filesets.el
+++ b/lisp/filesets.el
@@ -1,6 +1,6 @@
1;;; filesets.el --- handle group of files 1;;; filesets.el --- handle group of files
2 2
3;; Copyright (C) 2002 Free Software Foundation, Inc. 3;; Copyright (C) 2002, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Thomas Link <t.link@gmx.at> 5;; Author: Thomas Link <t.link@gmx.at>
6;; Maintainer: FSF 6;; Maintainer: FSF
@@ -304,31 +304,26 @@ key is supported."
304 :type 'sexp 304 :type 'sexp
305 :group 'filesets) 305 :group 'filesets)
306 306
307(if filesets-running-xemacs 307(defcustom filesets-menu-path nil
308 (progn 308 "*The menu under which the filesets menu should be inserted.
309 (defcustom filesets-menu-path nil 309See `add-submenu' for documentation."
310 "*The menu under which the filesets menu should be inserted. 310 :set (function filesets-set-default)
311XEmacs specific; see `add-submenu' for documentation." 311 :type 'sexp
312 :set (function filesets-set-default) 312 :group 'filesets)
313 :type 'sexp 313
314 :group 'filesets) 314(defcustom filesets-menu-before "File"
315 315 "*The name of a menu before which this menu should be added.
316 (defcustom filesets-menu-before "File" 316See `add-submenu' for documentation."
317 "*The name of a menu before which this menu should be added. 317 :set (function filesets-set-default)
318XEmacs specific; see `add-submenu' for documentation." 318 :type 'sexp
319 :set (function filesets-set-default) 319 :group 'filesets)
320 :type 'sexp 320
321 :group 'filesets) 321(defcustom filesets-menu-in-menu nil
322 322 "*Use that instead of `current-menubar' as the menu to change.
323 (defcustom filesets-menu-in-menu nil 323See `add-submenu' for documentation."
324 "*Use that instead of `current-menubar' as the menu to change. 324 :set (function filesets-set-default)
325XEmacs specific; see `add-submenu' for documentation." 325 :type 'sexp
326 :set (function filesets-set-default) 326 :group 'filesets)
327 :type 'sexp
328 :group 'filesets))
329 (defvar filesets-menu-path nil)
330 (defvar filesets-menu-before nil)
331 (defvar filesets-menu-in-menu nil))
332 327
333(defcustom filesets-menu-shortcuts-flag t 328(defcustom filesets-menu-shortcuts-flag t
334 "*Non-nil means to prepend menus with hopefully unique shortcuts." 329 "*Non-nil means to prepend menus with hopefully unique shortcuts."
@@ -351,7 +346,7 @@ XEmacs specific; see `add-submenu' for documentation."
351(defcustom filesets-menu-cache-file 346(defcustom filesets-menu-cache-file
352 (if filesets-running-xemacs 347 (if filesets-running-xemacs
353 "~/.xemacs/filesets-cache.el" 348 "~/.xemacs/filesets-cache.el"
354 "~/.filesets-cache.el") 349 "~/.emacs.d/filesets-cache.el")
355 "*File to be used for saving the filesets menu between sessions. 350 "*File to be used for saving the filesets menu between sessions.
356Set this to \"\", to disable caching of menus. 351Set this to \"\", to disable caching of menus.
357Don't forget to check out `filesets-menu-ensure-use-cached'." 352Don't forget to check out `filesets-menu-ensure-use-cached'."
@@ -1070,9 +1065,7 @@ defined in `filesets-ingroup-patterns'."
1070;;; Emacs compatibility 1065;;; Emacs compatibility
1071(eval-and-compile 1066(eval-and-compile
1072 (if filesets-running-xemacs 1067 (if filesets-running-xemacs
1073 (progn 1068 (fset 'filesets-error 'error)
1074 (fset 'filesets-error 'error)
1075 (fset 'filesets-add-submenu 'add-submenu))
1076 1069
1077 (require 'easymenu) 1070 (require 'easymenu)
1078 1071
@@ -1080,12 +1073,6 @@ defined in `filesets-ingroup-patterns'."
1080 "`error' wrapper." 1073 "`error' wrapper."
1081 (error (mapconcat 'identity args " "))) 1074 (error (mapconcat 'identity args " ")))
1082 1075
1083 ;; This should work for 21.1 Emacs
1084 (defun filesets-add-submenu (menu-path submenu &optional
1085 before in-menu)
1086 "`easy-menu-define' wrapper."
1087 (easy-menu-define
1088 filesets-submenu global-map "Filesets menu" submenu))
1089 )) 1076 ))
1090 1077
1091(defun filesets-filter-dir-names (lst &optional negative) 1078(defun filesets-filter-dir-names (lst &optional negative)
@@ -2339,7 +2326,7 @@ bottom up, set `filesets-submenus' to nil, first.)"
2339 (filesets-menu-cache-file-save-maybe))) 2326 (filesets-menu-cache-file-save-maybe)))
2340 (let ((cb (current-buffer))) 2327 (let ((cb (current-buffer)))
2341 (when (not (member cb filesets-updated-buffers)) 2328 (when (not (member cb filesets-updated-buffers))
2342 (filesets-add-submenu 2329 (add-submenu
2343 filesets-menu-path 2330 filesets-menu-path
2344 `(,filesets-menu-name 2331 `(,filesets-menu-name
2345 ("# Filesets" 2332 ("# Filesets"
@@ -2496,6 +2483,7 @@ We apologize for the inconvenience."))
2496(defun filesets-exit () 2483(defun filesets-exit ()
2497 (filesets-menu-cache-file-save-maybe)) 2484 (filesets-menu-cache-file-save-maybe))
2498 2485
2486;;;###autoload
2499(defun filesets-init () 2487(defun filesets-init ()
2500 "Filesets initialization. 2488 "Filesets initialization.
2501Set up hooks, load the cache file -- if existing -- and build the menu." 2489Set up hooks, load the cache file -- if existing -- and build the menu."
diff --git a/lisp/follow.el b/lisp/follow.el
index 06857fc49e9..a01b0e77eb2 100644
--- a/lisp/follow.el
+++ b/lisp/follow.el
@@ -1,6 +1,7 @@
1;;; follow.el --- synchronize windows showing the same buffer 1;;; follow.el --- synchronize windows showing the same buffer
2 2
3;; Copyright (C) 1995, 1996, 1997, 1999, 2001 Free Software Foundation, Inc. 3;; Copyright (C) 1995, 1996, 1997, 1999, 2001, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Author: Anders Lindgren <andersl@andersl.com> 6;; Author: Anders Lindgren <andersl@andersl.com>
6;; Maintainer: Anders Lindgren <andersl@andersl.com> 7;; Maintainer: Anders Lindgren <andersl@andersl.com>
@@ -708,7 +709,7 @@ Keys specific to Follow mode:
708;; This will start follow-mode whenever a new file is loaded, if 709;; This will start follow-mode whenever a new file is loaded, if
709;; the variable `follow-auto' is non-nil. 710;; the variable `follow-auto' is non-nil.
710 711
711(add-hook 'find-file-hooks 'follow-find-file-hook t) 712(add-hook 'find-file-hook 'follow-find-file-hook t)
712 713
713(defun follow-find-file-hook () 714(defun follow-find-file-hook ()
714 "Find-file hook for Follow Mode. See the variable `follow-auto'." 715 "Find-file hook for Follow Mode. See the variable `follow-auto'."
@@ -2347,5 +2348,5 @@ This prevents `mouse-drag-region' from messing things up."
2347;; | save it". -- Douglas Adams, "Last Chance to See" | 2348;; | save it". -- Douglas Adams, "Last Chance to See" |
2348;; \------------------------------------------------------------------------/ 2349;; \------------------------------------------------------------------------/
2349 2350
2350;;; arch-tag: 7b16bb1a-808c-4991-a8cc-66d3822936d0 2351;; arch-tag: 7b16bb1a-808c-4991-a8cc-66d3822936d0
2351;;; follow.el ends here 2352;;; follow.el ends here
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index b688b5d61df..e030acbc6ed 100644
--- a/lisp/font-lock.el
+++ b/lisp/font-lock.el
@@ -1097,7 +1097,7 @@ delimit the region to fontify."
1097 ((error quit) (message "Fontifying block...%s" error-data))))))) 1097 ((error quit) (message "Fontifying block...%s" error-data)))))))
1098 1098
1099(if (boundp 'facemenu-keymap) 1099(if (boundp 'facemenu-keymap)
1100 (define-key facemenu-keymap "\M-g" 'font-lock-fontify-block)) 1100 (define-key facemenu-keymap "\M-o" 'font-lock-fontify-block))
1101 1101
1102;;; End of Fontification functions. 1102;;; End of Fontification functions.
1103 1103
diff --git a/lisp/generic-x.el b/lisp/generic-x.el
index 7b038fd89ab..d39edbb7ef6 100644
--- a/lisp/generic-x.el
+++ b/lisp/generic-x.el
@@ -324,7 +324,7 @@ generic-x to enable the specified modes."
324 (generic-make-keywords-list 324 (generic-make-keywords-list
325 '("for" 325 '("for"
326 "if") 326 "if")
327 'font-lock-keyword-face "^[@ \t]*") 327 font-lock-keyword-face "^[@ \t]*")
328 ;; These keywords can be anywhere on a line 328 ;; These keywords can be anywhere on a line
329 ;; In `generic-bat-mode-setup-function' we make the keywords 329 ;; In `generic-bat-mode-setup-function' we make the keywords
330 ;; case-insensitive 330 ;; case-insensitive
@@ -334,7 +334,7 @@ generic-x to enable the specified modes."
334 "errorlevel" 334 "errorlevel"
335 "goto" 335 "goto"
336 "not") 336 "not")
337 'font-lock-keyword-face) 337 font-lock-keyword-face)
338 ;; These are built-in commands. Only frequently-used ones are listed. 338 ;; These are built-in commands. Only frequently-used ones are listed.
339 (generic-make-keywords-list 339 (generic-make-keywords-list
340 '("CALL" "call" "Call" 340 '("CALL" "call" "Call"
@@ -352,7 +352,7 @@ generic-x to enable the specified modes."
352 "SET" "set" "Set" 352 "SET" "set" "Set"
353 "START" "start" "Start" 353 "START" "start" "Start"
354 "SHIFT" "shift" "Shift") 354 "SHIFT" "shift" "Shift")
355 'font-lock-builtin-face "[ \t|\n]") 355 font-lock-builtin-face "[ \t|\n]")
356 '("^[ \t]*\\(:\\sw+\\)" 1 font-lock-function-name-face t) 356 '("^[ \t]*\\(:\\sw+\\)" 1 font-lock-function-name-face t)
357 '("\\(%\\sw+%\\)" 1 font-lock-variable-name-face t) 357 '("\\(%\\sw+%\\)" 1 font-lock-variable-name-face t)
358 '("\\(%[0-9]\\)" 1 font-lock-variable-name-face t) 358 '("\\(%[0-9]\\)" 1 font-lock-variable-name-face t)
@@ -410,11 +410,11 @@ generic-x to enable the specified modes."
410;; Make underscores count as words 410;; Make underscores count as words
411(unless bat-generic-mode-syntax-table 411(unless bat-generic-mode-syntax-table
412 (setq bat-generic-mode-syntax-table (make-syntax-table)) 412 (setq bat-generic-mode-syntax-table (make-syntax-table))
413 (modify-syntax-entry ?_ "w" bat-generic-mode-syntax-table)) 413 (modify-syntax-entry ?_ "w" bat-generic-mode-syntax-table))
414 414
415;; bat-generic-mode doesn't use the comment functionality of generic-mode 415;; bat-generic-mode doesn't use the comment functionality of
416;; because it has a three-letter comment-string, so we do it 416;; define-generic-mode because it has a three-letter comment-string,
417;; here manually instead 417;; so we do it here manually instead
418(defun generic-bat-mode-setup-function () 418(defun generic-bat-mode-setup-function ()
419 (make-local-variable 'parse-sexp-ignore-comments) 419 (make-local-variable 'parse-sexp-ignore-comments)
420 (make-local-variable 'comment-start) 420 (make-local-variable 'comment-start)
@@ -427,7 +427,7 @@ generic-x to enable the specified modes."
427 comment-start-skip "[Rr][Ee][Mm] *") 427 comment-start-skip "[Rr][Ee][Mm] *")
428 (set-syntax-table bat-generic-mode-syntax-table) 428 (set-syntax-table bat-generic-mode-syntax-table)
429 ;; Make keywords case-insensitive 429 ;; Make keywords case-insensitive
430 (setq font-lock-defaults '(generic-font-lock-defaults nil t)) 430 (setq font-lock-defaults '(generic-font-lock-keywords nil t))
431 (use-local-map bat-generic-mode-keymap))) 431 (use-local-map bat-generic-mode-keymap)))
432 432
433;;; Mailagent 433;;; Mailagent
@@ -441,13 +441,12 @@ generic-x to enable the specified modes."
441 '(("^\\(\\sw+\\)\\s-*=" 1 font-lock-variable-name-face) 441 '(("^\\(\\sw+\\)\\s-*=" 1 font-lock-variable-name-face)
442 ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 font-lock-constant-face)) 442 ("\\s-/\\([^/]+\\)/[i, \t\n]" 1 font-lock-constant-face))
443 '("\\.rules\\'") 443 '("\\.rules\\'")
444 '(mailagent-rules-setup-function) 444 (list
445 "Mode for Mailagent rules files.") 445 (function
446 446 (lambda ()
447(defun mailagent-rules-setup-function () 447 (setq imenu-generic-expression
448 (make-local-variable 'imenu-generic-expression) 448 '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1))))))
449 (setq imenu-generic-expression 449 "Mode for Mailagent rules files."))
450 '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1)))))
451 450
452;; Solaris/Sys V prototype files 451;; Solaris/Sys V prototype files
453(when (memq 'prototype-generic-mode generic-extras-enable-list) 452(when (memq 'prototype-generic-mode generic-extras-enable-list)
@@ -752,13 +751,13 @@ generic-x to enable the specified modes."
752 "FILETYPE" 751 "FILETYPE"
753 "FILEVERSION" 752 "FILEVERSION"
754 "PRODUCTVERSION") 753 "PRODUCTVERSION")
755 'font-lock-type-face) 754 font-lock-type-face)
756 (generic-make-keywords-list 755 (generic-make-keywords-list
757 '("BEGIN" 756 '("BEGIN"
758 "BLOCK" 757 "BLOCK"
759 "END" 758 "END"
760 "VALUE") 759 "VALUE")
761 'font-lock-function-name-face) 760 font-lock-function-name-face)
762 '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face) 761 '("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face)
763 '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face) 762 '("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 font-lock-function-name-face)
764 '("^#[ \t]*\\(elif\\|if\\)\\>" 763 '("^#[ \t]*\\(elif\\|if\\)\\>"
@@ -1375,19 +1374,19 @@ generic-x to enable the specified modes."
1375 ;; system variables 1374 ;; system variables
1376 (generic-make-keywords-list 1375 (generic-make-keywords-list
1377 installshield-system-variables-list 1376 installshield-system-variables-list
1378 'font-lock-variable-name-face "[^_]" "[^_]") 1377 font-lock-variable-name-face "[^_]" "[^_]")
1379 ;; system functions 1378 ;; system functions
1380 (generic-make-keywords-list 1379 (generic-make-keywords-list
1381 installshield-system-functions-list 1380 installshield-system-functions-list
1382 'font-lock-function-name-face "[^_]" "[^_]") 1381 font-lock-function-name-face "[^_]" "[^_]")
1383 ;; type keywords 1382 ;; type keywords
1384 (generic-make-keywords-list 1383 (generic-make-keywords-list
1385 installshield-types-list 1384 installshield-types-list
1386 'font-lock-type-face "[^_]" "[^_]") 1385 font-lock-type-face "[^_]" "[^_]")
1387 ;; function argument constants 1386 ;; function argument constants
1388 (generic-make-keywords-list 1387 (generic-make-keywords-list
1389 installshield-funarg-constants-list 1388 installshield-funarg-constants-list
1390 'font-lock-variable-name-face "[^_]" "[^_]"))) ; is this face the best choice? 1389 font-lock-variable-name-face "[^_]" "[^_]"))) ; is this face the best choice?
1391 '("\\.[rR][uU][lL]$") 1390 '("\\.[rR][uU][lL]$")
1392 '(generic-rul-mode-setup-function) 1391 '(generic-rul-mode-setup-function)
1393 "Generic mode for InstallShield RUL files.") 1392 "Generic mode for InstallShield RUL files.")
@@ -1429,9 +1428,11 @@ generic-x to enable the specified modes."
1429 "source" 1428 "source"
1430 "unset") 1429 "unset")
1431 '(("^\\s-*\\(alias\\|group\\)\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$" 1430 '(("^\\s-*\\(alias\\|group\\)\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$"
1432 (2 font-lock-constant-face) (3 font-lock-variable-name-face)) 1431 (2 font-lock-constant-face)
1432 (3 font-lock-variable-name-face))
1433 ("^\\s-*\\(unset\\|set\\|ignore\\)\\s-+\\([-A-Za-z0-9_]+\\)=?\\([^\n\r#]*\\)\\(#.*\\)?$" 1433 ("^\\s-*\\(unset\\|set\\|ignore\\)\\s-+\\([-A-Za-z0-9_]+\\)=?\\([^\n\r#]*\\)\\(#.*\\)?$"
1434 (2 font-lock-constant-face) (3 font-lock-variable-name-face)) 1434 (2 font-lock-constant-face)
1435 (3 font-lock-variable-name-face))
1435 ("^\\s-*\\(source\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$" 1436 ("^\\s-*\\(source\\)\\s-+\\([^\n\r#]*\\)\\(#.*\\)?$"
1436 (2 font-lock-variable-name-face))) 1437 (2 font-lock-variable-name-face)))
1437 '("\\.mailrc\\'") 1438 '("\\.mailrc\\'")
@@ -1569,32 +1570,34 @@ generic-x to enable the specified modes."
1569 '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1)))))))) 1570 '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1))))))))
1570 1571
1571;; From Jacques Duthen <jacques.duthen@sncf.fr> 1572;; From Jacques Duthen <jacques.duthen@sncf.fr>
1572(defvar show-tabs-generic-mode-font-lock-defaults-1 1573(eval-when-compile
1574
1575(defconst show-tabs-generic-mode-font-lock-defaults-1
1573 '(;; trailing spaces must come before... 1576 '(;; trailing spaces must come before...
1574 ("[ \t]+$" . show-tabs-space-face) 1577 ("[ \t]+$" . 'show-tabs-space-face)
1575 ;; ...embedded tabs 1578 ;; ...embedded tabs
1576 ("[^\n\t]\\(\t+\\)" (1 show-tabs-tab-face)))) 1579 ("[^\n\t]\\(\t+\\)" (1 'show-tabs-tab-face))))
1577 1580
1578(defvar show-tabs-generic-mode-font-lock-defaults-2 1581(defconst show-tabs-generic-mode-font-lock-defaults-2
1579 '(;; trailing spaces must come before... 1582 '(;; trailing spaces must come before...
1580 ("[ \t]+$" . show-tabs-space-face) 1583 ("[ \t]+$" . 'show-tabs-space-face)
1581 ;; ...tabs 1584 ;; ...tabs
1582 ("\t+" . show-tabs-tab-face))) 1585 ("\t+" . 'show-tabs-tab-face))))
1583 1586
1584(defface show-tabs-tab-face 1587(defface show-tabs-tab-face
1585 '((((class grayscale) (background light)) (:foreground "LightGray" :weight bold)) 1588 '((((class grayscale) (background light)) (:background "DimGray" :weight bold))
1586 (((class grayscale) (background dark)) (:foreground "DimGray" :weight bold)) 1589 (((class grayscale) (background dark)) (:background "LightGray" :weight bold))
1587 (((class color) (background light)) (:foreground "red")) 1590 (((class color) (background light)) (:background "red"))
1588 (((class color) (background dark)) (:foreground "red")) 1591 (((class color) (background dark)) (:background "red"))
1589 (t (:weight bold))) 1592 (t (:weight bold)))
1590 "Font Lock mode face used to highlight TABs." 1593 "Font Lock mode face used to highlight TABs."
1591 :group 'show-tabs) 1594 :group 'show-tabs)
1592 1595
1593(defface show-tabs-space-face 1596(defface show-tabs-space-face
1594 '((((class grayscale) (background light)) (:foreground "LightGray" :weight bold)) 1597 '((((class grayscale) (background light)) (:background "DimGray" :weight bold))
1595 (((class grayscale) (background dark)) (:foreground "DimGray" :weight bold)) 1598 (((class grayscale) (background dark)) (:background "LightGray" :weight bold))
1596 (((class color) (background light)) (:foreground "yellow")) 1599 (((class color) (background light)) (:background "yellow"))
1597 (((class color) (background dark)) (:foreground "yellow")) 1600 (((class color) (background dark)) (:background "yellow"))
1598 (t (:weight bold))) 1601 (t (:weight bold)))
1599 "Font Lock mode face used to highlight spaces." 1602 "Font Lock mode face used to highlight spaces."
1600 :group 'show-tabs) 1603 :group 'show-tabs)
@@ -1602,7 +1605,7 @@ generic-x to enable the specified modes."
1602(define-generic-mode show-tabs-generic-mode 1605(define-generic-mode show-tabs-generic-mode
1603 nil ;; no comment char 1606 nil ;; no comment char
1604 nil ;; no keywords 1607 nil ;; no keywords
1605 show-tabs-generic-mode-font-lock-defaults-1 1608 (eval-when-compile show-tabs-generic-mode-font-lock-defaults-1)
1606 nil ;; no auto-mode-alist 1609 nil ;; no auto-mode-alist
1607 ;; '(show-tabs-generic-mode-hook-fun) 1610 ;; '(show-tabs-generic-mode-hook-fun)
1608 nil 1611 nil
@@ -1701,7 +1704,7 @@ generic-x to enable the specified modes."
1701 ;; Make keywords case-insensitive 1704 ;; Make keywords case-insensitive
1702 (function 1705 (function
1703 (lambda() 1706 (lambda()
1704 (setq font-lock-defaults '(generic-font-lock-defaults nil t))))) 1707 (setq font-lock-defaults '(generic-font-lock-keywords nil t)))))
1705 "Generic mode for SPICE circuit netlist files.") 1708 "Generic mode for SPICE circuit netlist files.")
1706 1709
1707(define-generic-mode ibis-generic-mode 1710(define-generic-mode ibis-generic-mode
@@ -1745,7 +1748,7 @@ generic-x to enable the specified modes."
1745 ;; Make keywords case-insensitive 1748 ;; Make keywords case-insensitive
1746 (function 1749 (function
1747 (lambda() 1750 (lambda()
1748 (setq font-lock-defaults '(generic-font-lock-defaults nil t))))) 1751 (setq font-lock-defaults '(generic-font-lock-keywords nil t)))))
1749 "Generic mode for ASTAP circuit netlist files.") 1752 "Generic mode for ASTAP circuit netlist files.")
1750 1753
1751(define-generic-mode etc-modules-conf-generic-mode 1754(define-generic-mode etc-modules-conf-generic-mode
diff --git a/lisp/generic.el b/lisp/generic.el
index 35f4e52bcee..014419edf34 100644
--- a/lisp/generic.el
+++ b/lisp/generic.el
@@ -125,9 +125,11 @@
125;; Internal Variables 125;; Internal Variables
126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
127 127
128(defvar generic-font-lock-defaults nil 128(defvar generic-font-lock-keywords nil
129 "Global defaults for font-lock in a generic mode.") 129 "Keywords for `font-lock-defaults' in a generic mode.")
130(make-variable-buffer-local 'generic-font-lock-defaults) 130(make-variable-buffer-local 'generic-font-lock-keywords)
131(defvaralias 'generic-font-lock-defaults 'generic-font-lock-keywords)
132(make-obsolete-variable 'generic-font-lock-defaults 'generic-font-lock-keywords "22.1")
131 133
132;;;###autoload 134;;;###autoload
133(defvar generic-mode-list nil 135(defvar generic-mode-list nil
@@ -253,13 +255,15 @@ See the file generic-x.el for some examples of `define-generic-mode'."
253 255
254 (generic-mode-set-comments comments) 256 (generic-mode-set-comments comments)
255 257
256 ;; Font-lock functionality 258 ;; Font-lock functionality.
257 ;; Font-lock-defaults are always set even if there are no keywords 259 ;; Font-lock-defaults is always set even if there are no keywords
258 ;; or font-lock expressions, so comments can be highlighted. 260 ;; or font-lock expressions, so comments can be highlighted.
259 (setq generic-font-lock-defaults nil) 261 (setq generic-font-lock-keywords
260 (generic-mode-set-font-lock keywords font-lock-list) 262 (append
261 (make-local-variable 'font-lock-defaults) 263 (when keywords
262 (setq font-lock-defaults (list 'generic-font-lock-defaults nil)) 264 (list (generic-make-keywords-list keywords font-lock-keyword-face)))
265 font-lock-list))
266 (setq font-lock-defaults '(generic-font-lock-keywords nil))
263 267
264 ;; Call a list of functions 268 ;; Call a list of functions
265 (mapcar 'funcall funs) 269 (mapcar 'funcall funs)
@@ -348,16 +352,8 @@ Some generic modes are defined in `generic-x.el'."
348 st)) 352 st))
349 (set-syntax-table st))) 353 (set-syntax-table st)))
350 354
351(defun generic-mode-set-font-lock (keywords font-lock-expressions)
352 "Set up font-lock functionality for generic mode."
353 (setq generic-font-lock-defaults
354 (append
355 (when keywords
356 (list (generic-make-keywords-list keywords font-lock-keyword-face)))
357 font-lock-expressions)))
358
359;; Support for [KEYWORD] constructs found in INF, INI and Samba files
360(defun generic-bracket-support () 355(defun generic-bracket-support ()
356 "Imenu support for [KEYWORD] constructs found in INF, INI and Samba files."
361 (setq imenu-generic-expression 357 (setq imenu-generic-expression
362 '((nil "^\\[\\(.*\\)\\]" 1)) 358 '((nil "^\\[\\(.*\\)\\]" 1))
363 imenu-case-fold-search t)) 359 imenu-case-fold-search t))
@@ -405,7 +401,7 @@ INI file. This hook is NOT installed by default."
405 (ini-generic-mode))))) 401 (ini-generic-mode)))))
406 402
407(and generic-use-find-file-hook 403(and generic-use-find-file-hook
408 (add-hook 'find-file-hooks 'generic-mode-find-file-hook)) 404 (add-hook 'find-file-hook 'generic-mode-find-file-hook))
409 405
410;;;###autoload 406;;;###autoload
411(defun generic-make-keywords-list (keywords-list face &optional prefix suffix) 407(defun generic-make-keywords-list (keywords-list face &optional prefix suffix)
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index d581274b803..fe2fcab6643 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,98 @@
12005-03-25 Katsumi Yamaoka <yamaoka@jpl.org>
2
3 * message.el (message-resend): Bind rfc2047-encode-encoded-words.
4
5 * mm-util.el (mm-replace-in-string): New function.
6 (mm-xemacs-find-mime-charset-1): Ignore errors while loading
7 latin-unity, which cannot be used with XEmacs 21.1.
8
9 * rfc2047.el (rfc2047-encode-function-alist): Rename from
10 rfc2047-encoding-function-alist in order to avoid conflicting with
11 the old version.
12 (rfc2047-encode-message-header): Remove useless goto-char.
13 (rfc2047-encodable-p): Don't move point.
14 (rfc2047-syntax-table): Treat `(' and `)' as is.
15 (rfc2047-encode-region): Concatenate words containing non-ASCII
16 characters in structured fields; don't encode space-delimited
17 ASCII words even in unstructured fields; don't break words at
18 char-category boundaries; encode encoded words in structured
19 fields; treat text within parentheses as special; show the
20 original text when error has occurred; move point to the end of
21 the region after encoding, suggested by IRIE Tetsuya
22 <irie@t.email.ne.jp>; treat backslash-quoted characters as
23 non-special; check carefully whether to encode special characters;
24 fix some kind of misconfigured headers; signal a real error if
25 debug-on-quit or debug-on-error is non-nil; don't infloop,
26 suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>; assume
27 the close parenthesis may be included in the encoded word; encode
28 bogus delimiters.
29 (rfc2047-encode-string): Use mm-with-multibyte-buffer.
30 (rfc2047-encode-max-chars): New variable.
31 (rfc2047-encode-1): New function.
32 (rfc2047-encode): Use it; encode text so that it occupies the
33 maximum width within 76-column; work correctly on Q encoding for
34 iso-2022-* charsets; fold the line before encoding; don't append a
35 space if the encoded word includes close parenthesis.
36 (rfc2047-fold-region): Use existing whitespace for LWSP; make it
37 sure not to break a line just after the header name.
38 (rfc2047-b-encode-region): Remove.
39 (rfc2047-b-encode-string): New function.
40 (rfc2047-q-encode-region): Remove.
41 (rfc2047-q-encode-string): New function.
42 (rfc2047-encode-parameter): New function.
43 (rfc2047-encoded-word-regexp): Don't use shy group.
44 (rfc2047-decode-region): Follow rfc2047-encoded-word-regexp change.
45 (rfc2047-parse-and-decode): Ditto.
46 (rfc2047-decode): Treat the ascii coding-system as raw-text by
47 default.
48
492005-03-25 Lars Magne Ingebrigtsen <larsi@gnus.org>
50
51 * rfc2047.el (rfc2047-encode-encoded-words): New variable.
52 (rfc2047-field-value): Strip props.
53 (rfc2047-encode-message-header): Disabled header folding -- not
54 all headers can be folded, and this should be done by the message
55 composition mode. Probably. I think.
56 (rfc2047-encodable-p): Say that =? needs encoding.
57 (rfc2047-encode-region): Encode =? strings.
58
592005-03-25 Jesper Harder <harder@ifa.au.dk>
60
61 * rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231
62 language tags; remove unnecessary '+'. Reported by Stefan Wiens
63 <s.wi@gmx.net>.
64 (rfc2047-decode-string): Don't cons a string unnecessarily.
65 (rfc2047-parse-and-decode, rfc2047-decode): Use a character for
66 the encoding to avoid consing a string.
67 (rfc2047-decode): Use mm-subst-char-in-string instead of
68 mm-replace-chars-in-string.
69
702005-03-25 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
71
72 * rfc2047.el (rfc2047-encode): Use uppercase letters to specify
73 encodings of MIME-encoded words, in order to improve
74 interoperability with several broken MUAs.
75
762005-03-21 Reiner Steib <Reiner.Steib@gmx.de>
77
78 * gnus-srvr.el (gnus-browse-select-group): Add NUMBER argument and
79 pass it to `gnus-browse-read-group'.
80 (gnus-browse-read-group): Add NUMBER argument and pass it to
81 `gnus-group-read-ephemeral-group'.
82
83 * gnus-group.el (gnus-group-read-ephemeral-group): Add NUMBER
84 argument and pass it to `gnus-group-read-group'.
85
862005-03-19 Aidan Kehoe <kehoea@parhasard.net>
87
88 * mm-util.el (mm-xemacs-find-mime-charset): Only call
89 mm-xemacs-find-mime-charset-1 if we have the mule feature
90 available at runtime.
91
922005-03-25 Werner Lemberg <wl@gnu.org>
93
94 * nnmaildir.el: Replace `illegal' with `invalid'.
95
12005-03-22 Stefan Monnier <monnier@iro.umontreal.ca> 962005-03-22 Stefan Monnier <monnier@iro.umontreal.ca>
2 97
3 * gnus-start.el (gnus-display-time-event-handler): 98 * gnus-start.el (gnus-display-time-event-handler):
@@ -614,7 +709,7 @@
614 unless plugged. Disable the agent so that an open failure causes 709 unless plugged. Disable the agent so that an open failure causes
615 an error. 710 an error.
616 711
6172004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Reiner Steib <Reiner.Steib@gmx.de> 7122004-10-18 Reiner Steib <Reiner.Steib@gmx.de>
618 713
619 * gnus-agent.el (gnus-agent-fetched-hook): Add :version. 714 * gnus-agent.el (gnus-agent-fetched-hook): Add :version.
620 (gnus-agent-go-online): Change :version. 715 (gnus-agent-go-online): Change :version.
@@ -656,21 +751,21 @@
656 (gnus-convert-mark-converter-prompt) 751 (gnus-convert-mark-converter-prompt)
657 (gnus-convert-converter-needs-prompt): Fix use of property list. 752 (gnus-convert-converter-needs-prompt): Fix use of property list.
658 753
6592004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org> 7542004-10-18 Katsumi Yamaoka <yamaoka@jpl.org>
660 755
661 * gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote. 756 * gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote.
662 757
6632004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org> 7582004-10-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
664 759
665 * gnus-start.el (gnus-get-unread-articles-in-group): Don't do 760 * gnus-start.el (gnus-get-unread-articles-in-group): Don't do
666 stuff for non-living groups. 761 stuff for non-living groups.
667 762
6682004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org> 7632004-10-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
669 764
670 * gnus-agent.el (gnus-agent-synchronize-flags): Default to nil. 765 * gnus-agent.el (gnus-agent-synchronize-flags): Default to nil.
671 (gnus-agent-regenerate-group): Using nil messages aren't valid. 766 (gnus-agent-regenerate-group): Using nil messages aren't valid.
672 767
6732004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org> 7682004-10-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
674 769
675 * gnus-agent.el (gnus-agent-read-agentview): 770 * gnus-agent.el (gnus-agent-read-agentview):
676 Inline gnus-uncompress-range. 771 Inline gnus-uncompress-range.
@@ -687,7 +782,7 @@
687 message-send-mail-function. The change makes the agent real-time 782 message-send-mail-function. The change makes the agent real-time
688 responsive to user changes to message-send-mail-function. 783 responsive to user changes to message-send-mail-function.
689 784
6902004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Reiner Steib <Reiner.Steib@gmx.de> 7852004-10-18 Reiner Steib <Reiner.Steib@gmx.de>
691 786
692 * gnus-start.el (gnus-get-unread-articles): Fix last commit. 787 * gnus-start.el (gnus-get-unread-articles): Fix last commit.
693 788
@@ -728,12 +823,12 @@
728 823
729 * gnus-util.el (gnus-rename-file): New function. 824 * gnus-util.el (gnus-rename-file): New function.
730 825
7312004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org> 8262004-10-18 Katsumi Yamaoka <yamaoka@jpl.org>
732 827
733 * gnus-agent.el (gnus-agent-regenerate-group): Activate the group 828 * gnus-agent.el (gnus-agent-regenerate-group): Activate the group
734 when the group's active is not available. 829 when the group's active is not available.
735 830
7362004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org> 8312004-10-18 Katsumi Yamaoka <yamaoka@jpl.org>
737 832
738 * gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to 833 * gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to
739 error. 834 error.
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index 767bdacb78e..6d38626998c 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -1984,7 +1984,8 @@ confirmation is required."
1984(defun gnus-group-read-ephemeral-group (group method &optional activate 1984(defun gnus-group-read-ephemeral-group (group method &optional activate
1985 quit-config request-only 1985 quit-config request-only
1986 select-articles 1986 select-articles
1987 parameters) 1987 parameters
1988 number)
1988 "Read GROUP from METHOD as an ephemeral group. 1989 "Read GROUP from METHOD as an ephemeral group.
1989If ACTIVATE, request the group first. 1990If ACTIVATE, request the group first.
1990If QUIT-CONFIG, use that window configuration when exiting from the 1991If QUIT-CONFIG, use that window configuration when exiting from the
@@ -1992,6 +1993,7 @@ ephemeral group.
1992If REQUEST-ONLY, don't actually read the group; just request it. 1993If REQUEST-ONLY, don't actually read the group; just request it.
1993If SELECT-ARTICLES, only select those articles. 1994If SELECT-ARTICLES, only select those articles.
1994If PARAMETERS, use those as the group parameters. 1995If PARAMETERS, use those as the group parameters.
1996If NUMBER, fetch this number of articles.
1995 1997
1996Return the name of the group if selection was successful." 1998Return the name of the group if selection was successful."
1997 (interactive 1999 (interactive
@@ -2039,7 +2041,7 @@ Return the name of the group if selection was successful."
2039 (when (let ((gnus-large-newsgroup gnus-large-ephemeral-newsgroup) 2041 (when (let ((gnus-large-newsgroup gnus-large-ephemeral-newsgroup)
2040 (gnus-fetch-old-headers 2042 (gnus-fetch-old-headers
2041 gnus-fetch-old-ephemeral-headers)) 2043 gnus-fetch-old-ephemeral-headers))
2042 (gnus-group-read-group t t group select-articles)) 2044 (gnus-group-read-group (or number t) t group select-articles))
2043 group) 2045 group)
2044 ;;(error nil) 2046 ;;(error nil)
2045 (quit 2047 (quit
diff --git a/lisp/gnus/gnus-srvr.el b/lisp/gnus/gnus-srvr.el
index e8c7d354145..7b3c033fddb 100644
--- a/lisp/gnus/gnus-srvr.el
+++ b/lisp/gnus/gnus-srvr.el
@@ -851,23 +851,26 @@ buffer.
851 (setq buffer-read-only t) 851 (setq buffer-read-only t)
852 (gnus-run-hooks 'gnus-browse-mode-hook)) 852 (gnus-run-hooks 'gnus-browse-mode-hook))
853 853
854(defun gnus-browse-read-group (&optional no-article) 854(defun gnus-browse-read-group (&optional no-article number)
855 "Enter the group at the current line." 855 "Enter the group at the current line.
856 (interactive) 856If NUMBER, fetch this number of articles."
857 (interactive "P")
857 (let ((group (gnus-browse-group-name))) 858 (let ((group (gnus-browse-group-name)))
858 (if (or (not (gnus-get-info group)) 859 (if (or (not (gnus-get-info group))
859 (gnus-ephemeral-group-p group)) 860 (gnus-ephemeral-group-p group))
860 (unless (gnus-group-read-ephemeral-group 861 (unless (gnus-group-read-ephemeral-group
861 group gnus-browse-current-method nil 862 group gnus-browse-current-method nil
862 (cons (current-buffer) 'browse)) 863 (cons (current-buffer) 'browse)
864 nil nil nil number)
863 (error "Couldn't enter %s" group)) 865 (error "Couldn't enter %s" group))
864 (unless (gnus-group-read-group nil no-article group) 866 (unless (gnus-group-read-group nil no-article group)
865 (error "Couldn't enter %s" group))))) 867 (error "Couldn't enter %s" group)))))
866 868
867(defun gnus-browse-select-group () 869(defun gnus-browse-select-group (&optional number)
868 "Select the current group." 870 "Select the current group.
869 (interactive) 871If NUMBER, fetch this number of articles."
870 (gnus-browse-read-group 'no)) 872 (interactive "P")
873 (gnus-browse-read-group 'no number))
871 874
872(defun gnus-browse-next-group (n) 875(defun gnus-browse-next-group (n)
873 "Go to the next group." 876 "Go to the next group."
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 9171385fec0..072097b505b 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -6364,7 +6364,8 @@ Optional DIGEST will use digest to forward."
6364 (replace-match "X-From-Line: ")) 6364 (replace-match "X-From-Line: "))
6365 ;; Send it. 6365 ;; Send it.
6366 (let ((message-inhibit-body-encoding t) 6366 (let ((message-inhibit-body-encoding t)
6367 message-required-mail-headers) 6367 message-required-mail-headers
6368 rfc2047-encode-encoded-words)
6368 (message-send-mail)) 6369 (message-send-mail))
6369 (kill-buffer (current-buffer))) 6370 (kill-buffer (current-buffer)))
6370 (message "Resending message to %s...done" address))) 6371 (message "Resending message to %s...done" address)))
diff --git a/lisp/gnus/mm-util.el b/lisp/gnus/mm-util.el
index e874f23e6e6..2a689221f7e 100644
--- a/lisp/gnus/mm-util.el
+++ b/lisp/gnus/mm-util.el
@@ -86,6 +86,32 @@
86 (multibyte-char-to-unibyte . identity)))) 86 (multibyte-char-to-unibyte . identity))))
87 87
88(eval-and-compile 88(eval-and-compile
89 (cond
90 ((fboundp 'replace-in-string)
91 (defalias 'mm-replace-in-string 'replace-in-string))
92 ((fboundp 'replace-regexp-in-string)
93 (defun mm-replace-in-string (string regexp newtext &optional literal)
94 "Replace all matches for REGEXP with NEWTEXT in STRING.
95If LITERAL is non-nil, insert NEWTEXT literally. Return a new
96string containing the replacements.
97
98This is a compatibility function for different Emacsen."
99 (replace-regexp-in-string regexp newtext string nil literal)))
100 (t
101 (defun mm-replace-in-string (string regexp newtext &optional literal)
102 "Replace all matches for REGEXP with NEWTEXT in STRING.
103If LITERAL is non-nil, insert NEWTEXT literally. Return a new
104string containing the replacements.
105
106This is a compatibility function for different Emacsen."
107 (let ((start 0) tail)
108 (while (string-match regexp string start)
109 (setq tail (- (length string) (match-end 0)))
110 (setq string (replace-match newtext nil literal string))
111 (setq start (- (length string) tail))))
112 string))))
113
114(eval-and-compile
89 (defalias 'mm-char-or-char-int-p 115 (defalias 'mm-char-or-char-int-p
90 (cond 116 (cond
91 ((fboundp 'char-or-char-int-p) 'char-or-char-int-p) 117 ((fboundp 'char-or-char-int-p) 'char-or-char-int-p)
@@ -555,7 +581,7 @@ But this is very much a corner case, so don't worry about it."
555 581
556 ;; Load the Latin Unity library, if available. 582 ;; Load the Latin Unity library, if available.
557 (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity")) 583 (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity"))
558 (require 'latin-unity)) 584 (ignore-errors (require 'latin-unity)))
559 585
560 ;; Now, can we use it? 586 ;; Now, can we use it?
561 (if (featurep 'latin-unity) 587 (if (featurep 'latin-unity)
@@ -600,7 +626,7 @@ But this is very much a corner case, so don't worry about it."
600 626
601(defmacro mm-xemacs-find-mime-charset (begin end) 627(defmacro mm-xemacs-find-mime-charset (begin end)
602 (when (featurep 'xemacs) 628 (when (featurep 'xemacs)
603 `(mm-xemacs-find-mime-charset-1 ,begin ,end))) 629 `(and (featurep 'mule) (mm-xemacs-find-mime-charset-1 ,begin ,end))))
604 630
605(defun mm-find-mime-charset-region (b e &optional hack-charsets) 631(defun mm-find-mime-charset-region (b e &optional hack-charsets)
606 "Return the MIME charsets needed to encode the region between B and E. 632 "Return the MIME charsets needed to encode the region between B and E.
diff --git a/lisp/gnus/nnmaildir.el b/lisp/gnus/nnmaildir.el
index 618418907e8..be94a57b5c7 100644
--- a/lisp/gnus/nnmaildir.el
+++ b/lisp/gnus/nnmaildir.el
@@ -978,7 +978,7 @@ by nnmaildir-request-article.")
978 (throw 'return nil)) 978 (throw 'return nil))
979 (when (save-match-data (string-match "[\0/\t]" gname)) 979 (when (save-match-data (string-match "[\0/\t]" gname))
980 (setf (nnmaildir--srv-error nnmaildir--cur-server) 980 (setf (nnmaildir--srv-error nnmaildir--cur-server)
981 (concat "Illegal characters (null, tab, or /) in group name: " 981 (concat "Invalid characters (null, tab, or /) in group name: "
982 gname)) 982 gname))
983 (throw 'return nil)) 983 (throw 'return nil))
984 (setq groups (nnmaildir--srv-groups nnmaildir--cur-server)) 984 (setq groups (nnmaildir--srv-groups nnmaildir--cur-server))
@@ -1023,7 +1023,7 @@ by nnmaildir-request-article.")
1023 (throw 'return nil)) 1023 (throw 'return nil))
1024 (when (save-match-data (string-match "[\0/\t]" new-name)) 1024 (when (save-match-data (string-match "[\0/\t]" new-name))
1025 (setf (nnmaildir--srv-error nnmaildir--cur-server) 1025 (setf (nnmaildir--srv-error nnmaildir--cur-server)
1026 (concat "Illegal characters (null, tab, or /) in group name: " 1026 (concat "Invalid characters (null, tab, or /) in group name: "
1027 new-name)) 1027 new-name))
1028 (throw 'return nil)) 1028 (throw 'return nil))
1029 (if (string-equal gname new-name) (throw 'return t)) 1029 (if (string-equal gname new-name) (throw 'return t))
diff --git a/lisp/gnus/rfc2047.el b/lisp/gnus/rfc2047.el
index ab00edb9128..0099e6d1bb7 100644
--- a/lisp/gnus/rfc2047.el
+++ b/lisp/gnus/rfc2047.el
@@ -119,12 +119,15 @@ The values can be:
119Valid encodings are nil, `Q' and `B'. These indicate binary (no) encoding, 119Valid encodings are nil, `Q' and `B'. These indicate binary (no) encoding,
120quoted-printable and base64 respectively.") 120quoted-printable and base64 respectively.")
121 121
122(defvar rfc2047-encoding-function-alist 122(defvar rfc2047-encode-function-alist
123 '((Q . rfc2047-q-encode-region) 123 '((Q . rfc2047-q-encode-string)
124 (B . rfc2047-b-encode-region) 124 (B . rfc2047-b-encode-string)
125 (nil . ignore)) 125 (nil . identity))
126 "Alist of RFC2047 encodings to encoding functions.") 126 "Alist of RFC2047 encodings to encoding functions.")
127 127
128(defvar rfc2047-encode-encoded-words t
129 "Whether encoded words should be encoded again.")
130
128;;; 131;;;
129;;; Functions for encoding RFC2047 messages 132;;; Functions for encoding RFC2047 messages
130;;; 133;;;
@@ -166,7 +169,7 @@ This is either `base64' or `quoted-printable'."
166 (save-restriction 169 (save-restriction
167 (rfc2047-narrow-to-field) 170 (rfc2047-narrow-to-field)
168 (re-search-forward ":[ \t\n]*" nil t) 171 (re-search-forward ":[ \t\n]*" nil t)
169 (buffer-substring (point) (point-max))))) 172 (buffer-substring-no-properties (point) (point-max)))))
170 173
171(defvar rfc2047-encoding-type 'address-mime 174(defvar rfc2047-encoding-type 'address-mime
172 "The type of encoding done by `rfc2047-encode-region'. 175 "The type of encoding done by `rfc2047-encode-region'.
@@ -186,24 +189,25 @@ Should be called narrowed to the head of the message."
186 (rfc2047-narrow-to-field) 189 (rfc2047-narrow-to-field)
187 (if (not (rfc2047-encodable-p)) 190 (if (not (rfc2047-encodable-p))
188 (prog1 191 (prog1
189 (if (and (eq (mm-body-7-or-8) '8bit) 192 (if (and (eq (mm-body-7-or-8) '8bit)
190 (mm-multibyte-p) 193 (mm-multibyte-p)
191 (mm-coding-system-p 194 (mm-coding-system-p
192 (car message-posting-charset))) 195 (car message-posting-charset)))
193 ;; 8 bit must be decoded. 196 ;; 8 bit must be decoded.
194 (mm-encode-coding-region 197 (mm-encode-coding-region
195 (point-min) (point-max) 198 (point-min) (point-max)
196 (mm-charset-to-coding-system 199 (mm-charset-to-coding-system
197 (car message-posting-charset)))) 200 (car message-posting-charset))))
198 ;; No encoding necessary, but folding is nice 201 ;; No encoding necessary, but folding is nice
199 (rfc2047-fold-region 202 (when nil
200 (save-excursion 203 (rfc2047-fold-region
201 (goto-char (point-min)) 204 (save-excursion
202 (skip-chars-forward "^:") 205 (goto-char (point-min))
203 (when (looking-at ": ") 206 (skip-chars-forward "^:")
204 (forward-char 2)) 207 (when (looking-at ": ")
205 (point)) 208 (forward-char 2))
206 (point-max))) 209 (point))
210 (point-max))))
207 ;; We found something that may perhaps be encoded. 211 ;; We found something that may perhaps be encoded.
208 (setq method nil 212 (setq method nil
209 alist rfc2047-header-encoding-alist) 213 alist rfc2047-header-encoding-alist)
@@ -213,7 +217,6 @@ Should be called narrowed to the head of the message."
213 (eq (car elem) t)) 217 (eq (car elem) t))
214 (setq alist nil 218 (setq alist nil
215 method (cdr elem)))) 219 method (cdr elem))))
216 (goto-char (point-min))
217 (re-search-forward "^[^:]+: *" nil t) 220 (re-search-forward "^[^:]+: *" nil t)
218 (cond 221 (cond
219 ((eq method 'address-mime) 222 ((eq method 'address-mime)
@@ -267,8 +270,13 @@ The buffer may be narrowed."
267 (require 'message) ; for message-posting-charset 270 (require 'message) ; for message-posting-charset
268 (let ((charsets 271 (let ((charsets
269 (mm-find-mime-charset-region (point-min) (point-max)))) 272 (mm-find-mime-charset-region (point-min) (point-max))))
270 (and charsets 273 (goto-char (point-min))
271 (not (equal charsets (list (car message-posting-charset))))))) 274 (or (and rfc2047-encode-encoded-words
275 (prog1
276 (search-forward "=?" nil t)
277 (goto-char (point-min))))
278 (and charsets
279 (not (equal charsets (list (car message-posting-charset))))))))
272 280
273;; Use this syntax table when parsing into regions that may need 281;; Use this syntax table when parsing into regions that may need
274;; encoding. Double quotes are string delimiters, backslash is 282;; encoding. Double quotes are string delimiters, backslash is
@@ -292,8 +300,8 @@ The buffer may be narrowed."
292 table)))) 300 table))))
293 (modify-syntax-entry ?\\ "\\" table) 301 (modify-syntax-entry ?\\ "\\" table)
294 (modify-syntax-entry ?\" "\"" table) 302 (modify-syntax-entry ?\" "\"" table)
295 (modify-syntax-entry ?\( "." table) 303 (modify-syntax-entry ?\( "(" table)
296 (modify-syntax-entry ?\) "." table) 304 (modify-syntax-entry ?\) ")" table)
297 (modify-syntax-entry ?\< "." table) 305 (modify-syntax-entry ?\< "." table)
298 (modify-syntax-entry ?\> "." table) 306 (modify-syntax-entry ?\> "." table)
299 (modify-syntax-entry ?\[ "." table) 307 (modify-syntax-entry ?\[ "." table)
@@ -310,183 +318,341 @@ By default, the region is treated as containing RFC2822 addresses.
310Dynamically bind `rfc2047-encoding-type' to change that." 318Dynamically bind `rfc2047-encoding-type' to change that."
311 (save-restriction 319 (save-restriction
312 (narrow-to-region b e) 320 (narrow-to-region b e)
313 (if (eq 'mime rfc2047-encoding-type) 321 (let ((encodable-regexp (if rfc2047-encode-encoded-words
314 ;; Simple case. Treat as single word after any initial ASCII 322 "[^\000-\177]+\\|=\\?"
315 ;; part and before any tailing ASCII part. The leading ASCII 323 "[^\000-\177]+"))
316 ;; is relevant for instance in Subject headers with `Re:' for 324 start ; start of current token
317 ;; interoperability with non-MIME clients, and we might as 325 end begin csyntax
318 ;; well avoid the tail too. 326 ;; Whether there's an encoded word before the current token,
319 (progn 327 ;; either immediately or separated by space.
320 (goto-char (point-min)) 328 last-encoded
321 ;; Does it need encoding? 329 (orig-text (buffer-substring-no-properties b e)))
322 (skip-chars-forward "\000-\177") 330 (if (eq 'mime rfc2047-encoding-type)
323 (unless (eobp) 331 ;; Simple case. Continuous words in which all those contain
324 (skip-chars-backward "^ \n") ; beginning of space-delimited word 332 ;; non-ASCII characters are encoded collectively. Encoding
325 (rfc2047-encode (point) (progn 333 ;; ASCII words, including `Re:' used in Subject headers, is
326 (goto-char e) 334 ;; avoided for interoperability with non-MIME clients and
327 (skip-chars-backward "\000-\177") 335 ;; for making it easy to find keywords.
328 (skip-chars-forward "^ \n") 336 (progn
329 ;; end of space-delimited word 337 (goto-char (point-min))
330 (point))))) 338 (while (progn (skip-chars-forward " \t\n")
331 ;; `address-mime' case -- take care of quoted words, comments. 339 (not (eobp)))
332 (with-syntax-table rfc2047-syntax-table 340 (setq start (point))
333 (let ((start) ; start of current token 341 (while (and (looking-at "[ \t\n]*\\([^ \t\n]+\\)")
334 end ; end of current token 342 (progn
335 ;; Whether there's an encoded word before the current 343 (setq end (match-end 0))
336 ;; token, either immediately or separated by space. 344 (re-search-forward encodable-regexp end t)))
337 last-encoded) 345 (goto-char end))
346 (if (> (point) start)
347 (rfc2047-encode start (point))
348 (goto-char end))))
349 ;; `address-mime' case -- take care of quoted words, comments.
350 (with-syntax-table rfc2047-syntax-table
338 (goto-char (point-min)) 351 (goto-char (point-min))
339 (condition-case nil ; in case of unbalanced quotes 352 (condition-case err ; in case of unbalanced quotes
340 ;; Look for rfc2822-style: sequences of atoms, quoted 353 ;; Look for rfc2822-style: sequences of atoms, quoted
341 ;; strings, specials, whitespace. (Specials mustn't be 354 ;; strings, specials, whitespace. (Specials mustn't be
342 ;; encoded.) 355 ;; encoded.)
343 (while (not (eobp)) 356 (while (not (eobp))
344 (setq start (point))
345 ;; Skip whitespace. 357 ;; Skip whitespace.
346 (unless (= 0 (skip-chars-forward " \t\n")) 358 (skip-chars-forward " \t\n")
347 (setq start (point))) 359 (setq start (point))
348 (cond 360 (cond
349 ((not (char-after))) ; eob 361 ((not (char-after))) ; eob
350 ;; else token start 362 ;; else token start
351 ((eq ?\" (char-syntax (char-after))) 363 ((eq ?\" (setq csyntax (char-syntax (char-after))))
352 ;; Quoted word. 364 ;; Quoted word.
353 (forward-sexp) 365 (forward-sexp)
354 (setq end (point)) 366 (setq end (point))
355 ;; Does it need encoding? 367 ;; Does it need encoding?
356 (goto-char start) 368 (goto-char start)
357 (skip-chars-forward "\000-\177" end) 369 (if (re-search-forward encodable-regexp end 'move)
358 (if (= end (point)) 370 ;; It needs encoding. Strip the quotes first,
359 (setq last-encoded nil) 371 ;; since encoded words can't occur in quotes.
360 ;; It needs encoding. Strip the quotes first, 372 (progn
361 ;; since encoded words can't occur in quotes. 373 (goto-char end)
362 (goto-char end) 374 (delete-backward-char 1)
363 (delete-backward-char 1) 375 (goto-char start)
364 (goto-char start) 376 (delete-char 1)
365 (delete-char 1) 377 (when last-encoded
366 (when last-encoded 378 ;; There was a preceding quoted word. We need
367 ;; There was a preceding quoted word. We need 379 ;; to include any separating whitespace in this
368 ;; to include any separating whitespace in this 380 ;; word to avoid it getting lost.
369 ;; word to avoid it getting lost. 381 (skip-chars-backward " \t")
370 (skip-chars-backward " \t") 382 ;; A space is needed between the encoded words.
371 ;; A space is needed between the encoded words. 383 (insert ? )
372 (insert ? ) 384 (setq start (point)
373 (setq start (point) 385 end (1+ end)))
374 end (1+ end))) 386 ;; Adjust the end position for the deleted quotes.
375 ;; Adjust the end position for the deleted quotes. 387 (rfc2047-encode start (- end 2))
376 (rfc2047-encode start (- end 2)) 388 (setq last-encoded t)) ; record that it was encoded
377 (setq last-encoded t))) ; record that it was encoded 389 (setq last-encoded nil)))
378 ((eq ?. (char-syntax (char-after))) 390 ((eq ?. csyntax)
379 ;; Skip other delimiters, but record that they've 391 ;; Skip other delimiters, but record that they've
380 ;; potentially separated quoted words. 392 ;; potentially separated quoted words.
381 (forward-char) 393 (forward-char)
382 (setq last-encoded nil)) 394 (setq last-encoded nil))
395 ((eq ?\) csyntax)
396 (error "Unbalanced parentheses"))
397 ((eq ?\( csyntax)
398 ;; Look for the end of parentheses.
399 (forward-list)
400 ;; Encode text as an unstructured field.
401 (let ((rfc2047-encoding-type 'mime))
402 (rfc2047-encode-region (1+ start) (1- (point))))
403 (skip-chars-forward ")"))
383 (t ; normal token/whitespace sequence 404 (t ; normal token/whitespace sequence
384 ;; Find the end. 405 ;; Find the end.
385 (forward-word 1) 406 ;; Skip one ASCII word, or encode continuous words
386 (skip-chars-backward " \t") 407 ;; in which all those contain non-ASCII characters.
408 (setq end nil)
409 (while (not (or end (eobp)))
410 (when (looking-at "[\000-\177]+")
411 (setq begin (point)
412 end (match-end 0))
413 (when (progn
414 (while (and (or (re-search-forward
415 "[ \t\n]\\|\\Sw" end 'move)
416 (setq end nil))
417 (eq ?\\ (char-syntax (char-before))))
418 ;; Skip backslash-quoted characters.
419 (forward-char))
420 end)
421 (setq end (match-beginning 0))
422 (if rfc2047-encode-encoded-words
423 (progn
424 (goto-char begin)
425 (when (search-forward "=?" end 'move)
426 (goto-char (match-beginning 0))
427 (setq end nil)))
428 (goto-char end))))
429 ;; Where the value nil of `end' means there may be
430 ;; text to have to be encoded following the point.
431 ;; Otherwise, the point reached to the end of ASCII
432 ;; words separated by whitespace or a special char.
433 (unless end
434 (when (looking-at encodable-regexp)
435 (goto-char (setq begin (match-end 0)))
436 (while (and (looking-at "[ \t\n]+\\([^ \t\n]+\\)")
437 (setq end (match-end 0))
438 (progn
439 (while (re-search-forward
440 encodable-regexp end t))
441 (< begin (point)))
442 (goto-char begin)
443 (or (not (re-search-forward "\\Sw" end t))
444 (progn
445 (goto-char (match-beginning 0))
446 nil)))
447 (goto-char end))
448 (when (looking-at "[^ \t\n]+")
449 (setq end (match-end 0))
450 (if (re-search-forward "\\Sw+" end t)
451 ;; There are special characters better
452 ;; to be encoded so that MTAs may parse
453 ;; them safely.
454 (cond ((= end (point)))
455 ((looking-at (concat "\\sw*\\("
456 encodable-regexp
457 "\\)"))
458 (setq end nil))
459 (t
460 (goto-char (1- (match-end 0)))
461 (unless (= (point) (match-beginning 0))
462 ;; Separate encodable text and
463 ;; delimiter.
464 (insert " "))))
465 (goto-char end)
466 (skip-chars-forward " \t\n")
467 (if (and (looking-at "[^ \t\n]+")
468 (string-match encodable-regexp
469 (match-string 0)))
470 (setq end nil)
471 (goto-char end)))))))
472 (skip-chars-backward " \t\n")
387 (setq end (point)) 473 (setq end (point))
388 ;; Deal with encoding and leading space as for
389 ;; quoted words.
390 (goto-char start) 474 (goto-char start)
391 (skip-chars-forward "\000-\177" end) 475 (if (re-search-forward encodable-regexp end 'move)
392 (if (= end (point)) 476 (progn
393 (setq last-encoded nil) 477 (unless (memq (char-before start) '(nil ?\t ? ))
394 (when last-encoded 478 (if (progn
395 (goto-char start) 479 (goto-char start)
396 (skip-chars-backward " \t") 480 (skip-chars-backward "^ \t\n")
397 (insert ? ) 481 (and (looking-at "\\Sw+")
398 (setq start (point) 482 (= (match-end 0) start)))
399 end (1+ end))) 483 ;; Also encode bogus delimiters.
400 (rfc2047-encode start end) 484 (setq start (point))
401 (setq last-encoded t))))) 485 ;; Separate encodable text and delimiter.
486 (goto-char start)
487 (insert " ")
488 (setq start (1+ start)
489 end (1+ end))))
490 (rfc2047-encode start end)
491 (setq last-encoded t))
492 (setq last-encoded nil)))))
402 (error 493 (error
403 (error "Invalid data for rfc2047 encoding: %s" 494 (if (or debug-on-quit debug-on-error)
404 (buffer-substring b e))))))) 495 (signal (car err) (cdr err))
405 (rfc2047-fold-region b (point)))) 496 (error "Invalid data for rfc2047 encoding: %s"
497 (mm-replace-in-string orig-text "[ \t\n]+" " "))))))))
498 (rfc2047-fold-region b (point))
499 (goto-char (point-max))))
406 500
407(defun rfc2047-encode-string (string) 501(defun rfc2047-encode-string (string)
408 "Encode words in STRING. 502 "Encode words in STRING.
409By default, the string is treated as containing addresses (see 503By default, the string is treated as containing addresses (see
410`rfc2047-encoding-type')." 504`rfc2047-encoding-type')."
411 (with-temp-buffer 505 (mm-with-multibyte-buffer
412 (insert string) 506 (insert string)
413 (rfc2047-encode-region (point-min) (point-max)) 507 (rfc2047-encode-region (point-min) (point-max))
414 (buffer-string))) 508 (buffer-string)))
415 509
510(defvar rfc2047-encode-max-chars 76
511 "Maximum characters of each header line that contain encoded-words.
512If it is nil, encoded-words will not be folded. Too small value may
513cause an error. Don't change this for no particular reason.")
514
515(defun rfc2047-encode-1 (column string cs encoder start crest tail
516 &optional eword)
517 "Subroutine used by `rfc2047-encode'."
518 (cond ((string-equal string "")
519 (or eword ""))
520 ((not rfc2047-encode-max-chars)
521 (concat start
522 (funcall encoder (if cs
523 (mm-encode-coding-string string cs)
524 string))
525 "?="))
526 ((>= column rfc2047-encode-max-chars)
527 (when eword
528 (cond ((string-match "\n[ \t]+\\'" eword)
529 ;; Reomove a superfluous empty line.
530 (setq eword (substring eword 0 (match-beginning 0))))
531 ((string-match "(+\\'" eword)
532 ;; Break the line before the open parenthesis.
533 (setq crest (concat crest (match-string 0 eword))
534 eword (substring eword 0 (match-beginning 0))))))
535 (rfc2047-encode-1 (length crest) string cs encoder start " " tail
536 (concat eword "\n" crest)))
537 (t
538 (let ((index 0)
539 (limit (1- (length string)))
540 (prev "")
541 next len)
542 (while (and prev
543 (<= index limit))
544 (setq next (concat start
545 (funcall encoder
546 (if cs
547 (mm-encode-coding-string
548 (substring string 0 (1+ index))
549 cs)
550 (substring string 0 (1+ index))))
551 "?=")
552 len (+ column (length next)))
553 (if (> len rfc2047-encode-max-chars)
554 (setq next prev
555 prev nil)
556 (if (or (< index limit)
557 (<= (+ len (or (string-match "\n" tail)
558 (length tail)))
559 rfc2047-encode-max-chars))
560 (setq prev next
561 index (1+ index))
562 (if (string-match "\\`)+" tail)
563 ;; Break the line after the close parenthesis.
564 (setq tail (concat (substring tail 0 (match-end 0))
565 "\n "
566 (substring tail (match-end 0)))
567 prev next
568 index (1+ index))
569 (setq next prev
570 prev nil)))))
571 (if (> index limit)
572 (concat eword next tail)
573 (if (= 0 index)
574 (if (and eword
575 (string-match "(+\\'" eword))
576 (setq crest (concat crest (match-string 0 eword))
577 eword (substring eword 0 (match-beginning 0)))
578 (setq eword (concat eword next)))
579 (setq crest " "
580 eword (concat eword next)))
581 (when (string-match "\n[ \t]+\\'" eword)
582 ;; Reomove a superfluous empty line.
583 (setq eword (substring eword 0 (match-beginning 0))))
584 (rfc2047-encode-1 (length crest) (substring string index)
585 cs encoder start " " tail
586 (concat eword "\n" crest)))))))
587
416(defun rfc2047-encode (b e) 588(defun rfc2047-encode (b e)
417 "Encode the word(s) in the region B to E. 589 "Encode the word(s) in the region B to E.
418By default, the region is treated as containing addresses (see 590Point moves to the end of the region."
419`rfc2047-encoding-type')." 591 (let ((mime-charset (or (mm-find-mime-charset-region b e) (list 'us-ascii)))
420 (let* ((mime-charset (mm-find-mime-charset-region b e)) 592 cs encoding tail crest eword)
421 (cs (if (> (length mime-charset) 1) 593 (cond ((> (length mime-charset) 1)
422 ;; Fixme: Instead of this, try to break region into 594 (error "Can't rfc2047-encode `%s'"
423 ;; parts that can be encoded separately. 595 (buffer-substring-no-properties b e)))
424 (error "Can't rfc2047-encode `%s'" 596 ((= (length mime-charset) 1)
425 (buffer-substring b e)) 597 (setq mime-charset (car mime-charset)
426 (setq mime-charset (car mime-charset)) 598 cs (mm-charset-to-coding-system mime-charset))
427 (mm-charset-to-coding-system mime-charset))) 599 (unless (and (mm-multibyte-p)
428 ;; Fixme: Better, calculate the number of non-ASCII 600 (mm-coding-system-p cs))
429 ;; characters, at least for 8-bit charsets. 601 (setq cs nil))
430 (encoding (or (cdr (assq mime-charset 602 (save-restriction
603 (narrow-to-region b e)
604 (setq encoding
605 (or (cdr (assq mime-charset
431 rfc2047-charset-encoding-alist)) 606 rfc2047-charset-encoding-alist))
432 ;; For the charsets that don't have a preferred 607 ;; For the charsets that don't have a preferred
433 ;; encoding, choose the one that's shorter. 608 ;; encoding, choose the one that's shorter.
434 (save-restriction 609 (if (eq (rfc2047-qp-or-base64) 'base64)
435 (narrow-to-region b e) 610 'B
436 (if (eq (rfc2047-qp-or-base64) 'base64) 611 'Q)))
437 'B 612 (widen)
438 'Q)))) 613 (goto-char e)
439 (start (concat 614 (skip-chars-forward "^ \t\n")
440 "=?" (downcase (symbol-name mime-charset)) "?" 615 ;; `tail' may contain a close parenthesis.
441 (downcase (symbol-name encoding)) "?")) 616 (setq tail (buffer-substring-no-properties e (point)))
442 (factor (case mime-charset 617 (goto-char b)
443 ((iso-8859-5 iso-8859-7 iso-8859-8 koi8-r) 1) 618 (setq b (point-marker)
444 ((big5 gb2312 euc-kr) 2) 619 e (set-marker (make-marker) e))
445 (utf-8 4) 620 (rfc2047-fold-region (rfc2047-point-at-bol) b)
446 (t 8))) 621 (goto-char b)
447 (pre (- b (save-restriction 622 (skip-chars-backward "^ \t\n")
448 (widen) 623 (unless (= 0 (skip-chars-backward " \t"))
449 (rfc2047-point-at-bol)))) 624 ;; `crest' may contain whitespace and an open parenthesis.
450 ;; encoded-words must not be longer than 75 characters, 625 (setq crest (buffer-substring-no-properties (point) b)))
451 ;; including charset, encoding etc. This leaves us with 626 (setq eword (rfc2047-encode-1
452 ;; 75 - (length start) - 2 - 2 characters. The last 2 is for 627 (- b (rfc2047-point-at-bol))
453 ;; possible base64 padding. In the worst case (iso-2022-*) 628 (mm-replace-in-string
454 ;; each character expands to 8 bytes which is expanded by a 629 (buffer-substring-no-properties b e)
455 ;; factor of 4/3 by base64 encoding. 630 "\n\\([ \t]?\\)" "\\1")
456 (length (floor (- 75 (length start) 4) (* factor (/ 4.0 3.0)))) 631 cs
457 ;; Limit line length to 76 characters. 632 (or (cdr (assq encoding
458 (length1 (max 1 (floor (- 76 (length start) 4 pre) 633 rfc2047-encode-function-alist))
459 (* factor (/ 4.0 3.0))))) 634 'identity)
460 (first t)) 635 (concat "=?" (downcase (symbol-name mime-charset))
461 (if mime-charset 636 "?" (upcase (symbol-name encoding)) "?")
462 (save-restriction 637 (or crest " ")
463 (narrow-to-region b e) 638 tail))
464 (when (eq encoding 'B) 639 (delete-region (if (eq (aref eword 0) ?\n)
465 ;; break into lines before encoding 640 (if (bolp)
466 (goto-char (point-min)) 641 ;; The line was folded before encoding.
467 (while (not (eobp)) 642 (1- (point))
468 (if first 643 (point))
469 (progn 644 (goto-char b))
470 (goto-char (min (point-max) (+ length1 (point)))) 645 (+ e (length tail)))
471 (setq first nil)) 646 ;; `eword' contains `crest' and `tail'.
472 (goto-char (min (point-max) (+ length (point))))) 647 (insert eword)
473 (unless (eobp) 648 (set-marker b nil)
474 (insert ?\n))) 649 (set-marker e nil)
475 (setq first t)) 650 (unless (or (/= 0 (length tail))
476 (if (and (mm-multibyte-p) 651 (eobp)
477 (mm-coding-system-p cs)) 652 (looking-at "[ \t\n)]"))
478 (mm-encode-coding-region (point-min) (point-max) cs)) 653 (insert " "))))
479 (funcall (cdr (assq encoding rfc2047-encoding-function-alist)) 654 (t
480 (point-min) (point-max)) 655 (goto-char e)))))
481 (goto-char (point-min))
482 (while (not (eobp))
483 (unless first
484 (insert ? ))
485 (setq first nil)
486 (insert start)
487 (end-of-line)
488 (insert "?=")
489 (forward-line 1))))))
490 656
491(defun rfc2047-fold-field () 657(defun rfc2047-fold-field ()
492 "Fold the current header field." 658 "Fold the current header field."
@@ -512,6 +678,7 @@ By default, the region is treated as containing addresses (see
512 (goto-char (or break qword-break)) 678 (goto-char (or break qword-break))
513 (setq break nil 679 (setq break nil
514 qword-break nil) 680 qword-break nil)
681 (skip-chars-backward " \t")
515 (if (looking-at "[ \t]") 682 (if (looking-at "[ \t]")
516 (insert ?\n) 683 (insert ?\n)
517 (insert "\n ")) 684 (insert "\n "))
@@ -533,10 +700,8 @@ By default, the region is treated as containing addresses (see
533 (forward-char 1)) 700 (forward-char 1))
534 ((memq (char-after) '(? ?\t)) 701 ((memq (char-after) '(? ?\t))
535 (skip-chars-forward " \t") 702 (skip-chars-forward " \t")
536 (if first 703 (unless first ;; Don't break just after the header name.
537 ;; Don't break just after the header name. 704 (setq break (point))))
538 (setq first nil)
539 (setq break (1- (point)))))
540 ((not break) 705 ((not break)
541 (if (not (looking-at "=\\?[^=]")) 706 (if (not (looking-at "=\\?[^=]"))
542 (if (eq (char-after) ?=) 707 (if (eq (char-after) ?=)
@@ -547,15 +712,17 @@ By default, the region is treated as containing addresses (see
547 (setq qword-break (point))) 712 (setq qword-break (point)))
548 (skip-chars-forward "^ \t\n\r"))) 713 (skip-chars-forward "^ \t\n\r")))
549 (t 714 (t
550 (skip-chars-forward "^ \t\n\r")))) 715 (skip-chars-forward "^ \t\n\r")))
716 (setq first nil))
551 (when (and (or break qword-break) 717 (when (and (or break qword-break)
552 (> (- (point) bol) 76)) 718 (> (- (point) bol) 76))
553 (goto-char (or break qword-break)) 719 (goto-char (or break qword-break))
554 (setq break nil 720 (setq break nil
555 qword-break nil) 721 qword-break nil)
556 (if (looking-at "[ \t]") 722 (if (or (> 0 (skip-chars-backward " \t"))
557 (insert ?\n) 723 (looking-at "[ \t]"))
558 (insert "\n ")) 724 (insert ?\n)
725 (insert "\n "))
559 (setq bol (1- (point))) 726 (setq bol (1- (point)))
560 ;; Don't break before the first non-LWSP characters. 727 ;; Don't break before the first non-LWSP characters.
561 (skip-chars-forward " \t") 728 (skip-chars-forward " \t")
@@ -590,48 +757,48 @@ By default, the region is treated as containing addresses (see
590 (setq eol (rfc2047-point-at-eol)) 757 (setq eol (rfc2047-point-at-eol))
591 (forward-line 1))))) 758 (forward-line 1)))))
592 759
593(defun rfc2047-b-encode-region (b e) 760(defun rfc2047-b-encode-string (string)
594 "Base64-encode the header contained in region B to E." 761 "Base64-encode the header contained in STRING."
595 (save-restriction 762 (base64-encode-string string t))
596 (narrow-to-region (goto-char b) e) 763
597 (while (not (eobp)) 764(defun rfc2047-q-encode-string (string)
598 (base64-encode-region (point) (progn (end-of-line) (point)) t) 765 "Quoted-printable-encode the header in STRING."
599 (if (and (bolp) (eolp)) 766 (mm-with-unibyte-buffer
600 (delete-backward-char 1)) 767 (insert string)
601 (forward-line)))) 768 (quoted-printable-encode-region
602 769 (point-min) (point-max) nil
603(defun rfc2047-q-encode-region (b e) 770 ;; = (\075), _ (\137), ? (\077) are used in the encoded word.
604 "Quoted-printable-encode the header in region B to E." 771 ;; Avoid using 8bit characters.
605 (save-excursion 772 ;; This list excludes `especials' (see the RFC2047 syntax),
606 (save-restriction 773 ;; meaning that some characters in non-structured fields will
607 (narrow-to-region (goto-char b) e) 774 ;; get encoded when they con't need to be. The following is
608 (let ((bol (save-restriction 775 ;; what it used to be.
609 (widen) 776 ;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?"
610 (rfc2047-point-at-bol)))) 777 ;;; "\010\012\014\040-\074\076\100-\136\140-\177")
611 (quoted-printable-encode-region 778 "-\b\n\f !#-'*+0-9A-Z\\^`-~\d")
612 b e nil 779 (subst-char-in-region (point-min) (point-max) ? ?_)
613 ;; = (\075), _ (\137), ? (\077) are used in the encoded word. 780 (buffer-string)))
614 ;; Avoid using 8bit characters. 781
615 ;; This list excludes `especials' (see the RFC2047 syntax), 782(defun rfc2047-encode-parameter (param value)
616 ;; meaning that some characters in non-structured fields will 783 "Return and PARAM=VALUE string encoded in the RFC2047-like style.
617 ;; get encoded when they con't need to be. The following is 784This is a replacement for the `rfc2231-encode-string' function.
618 ;; what it used to be. 785
619;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?" 786When attaching files as MIME parts, we should use the RFC2231 encoding
620;;; "\010\012\014\040-\074\076\100-\136\140-\177") 787to specify the file names containing non-ASCII characters. However,
621 "-\b\n\f !#-'*+0-9A-Z\\^`-~\d") 788many mail softwares don't support it in practice and recipients won't
622 (subst-char-in-region (point-min) (point-max) ? ?_) 789be able to extract files with correct names. Instead, the RFC2047-like
623 ;; The size of QP encapsulation is about 20, so set limit to 790encoding is acceptable generally. This function provides the very
624 ;; 56=76-20. 791RFC2047-like encoding, resigning to such a regrettable trend. To use
625 (unless (< (- (point-max) (point-min)) 56) 792it, put the following line in your ~/.gnus.el file:
626 ;; Don't break if it could fit in one line. 793
627 ;; Let rfc2047-encode-region break it later. 794\(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter)
628 (goto-char (1+ (point-min))) 795"
629 (while (and (not (bobp)) (not (eobp))) 796 (let* ((rfc2047-encoding-type 'mime)
630 (goto-char (min (point-max) (+ 56 bol))) 797 (rfc2047-encode-max-chars nil)
631 (search-backward "=" (- (point) 2) t) 798 (string (rfc2047-encode-string value)))
632 (unless (or (bobp) (eobp)) 799 (if (string-match (concat "[" ietf-drums-tspecials "]") string)
633 (insert ?\n) 800 (format "%s=%S" param string)
634 (setq bol (point))))))))) 801 (concat param "=" string))))
635 802
636;;; 803;;;
637;;; Functions for decoding RFC2047 messages 804;;; Functions for decoding RFC2047 messages
@@ -639,8 +806,8 @@ By default, the region is treated as containing addresses (see
639 806
640(eval-and-compile 807(eval-and-compile
641 (defconst rfc2047-encoded-word-regexp 808 (defconst rfc2047-encoded-word-regexp
642 "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\ 809 "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(\\*[^?]+\\)?\
643\\?\\([!->@-~ +]*\\)\\?=")) 810\\?\\(B\\|Q\\)\\?\\([!->@-~ ]*\\)\\?="))
644 811
645(defvar rfc2047-quote-decoded-words-containing-tspecials nil 812(defvar rfc2047-quote-decoded-words-containing-tspecials nil
646 "If non-nil, quote decoded words containing special characters.") 813 "If non-nil, quote decoded words containing special characters.")
@@ -671,7 +838,7 @@ By default, the region is treated as containing addresses (see
671 "\\(\n?[ \t]\\)+" 838 "\\(\n?[ \t]\\)+"
672 "\\(" rfc2047-encoded-word-regexp "\\)")) 839 "\\(" rfc2047-encoded-word-regexp "\\)"))
673 nil t) 840 nil t)
674 (delete-region (goto-char (match-end 1)) (match-beginning 6))) 841 (delete-region (goto-char (match-end 1)) (match-beginning 7)))
675 ;; Decode the encoded words. 842 ;; Decode the encoded words.
676 (setq b (goto-char (point-min))) 843 (setq b (goto-char (point-min)))
677 (while (re-search-forward rfc2047-encoded-word-regexp nil t) 844 (while (re-search-forward rfc2047-encoded-word-regexp nil t)
@@ -774,7 +941,20 @@ By default, the region is treated as containing addresses (see
774 mail-parse-charset 941 mail-parse-charset
775 (not (eq mail-parse-charset 'us-ascii)) 942 (not (eq mail-parse-charset 'us-ascii))
776 (not (eq mail-parse-charset 'gnus-decoded))) 943 (not (eq mail-parse-charset 'gnus-decoded)))
777 (mm-decode-coding-string string mail-parse-charset) 944 ;; `decode-coding-string' in Emacs offers a third optional
945 ;; arg NOCOPY to avoid consing a new string if the decoding
946 ;; is "trivial". Unfortunately it currently doesn't
947 ;; consider anything else than a `nil' coding system
948 ;; trivial.
949 ;; `rfc2047-decode-string' is called multiple times for each
950 ;; article during summary buffer generation, and we really
951 ;; want to avoid unnecessary consing. So we bypass
952 ;; `decode-coding-string' if the string is purely ASCII.
953 (if (and (fboundp 'detect-coding-string)
954 ;; string is purely ASCII
955 (eq (detect-coding-string string t) 'undecided))
956 string
957 (mm-decode-coding-string string mail-parse-charset))
778 (mm-string-as-multibyte string))))) 958 (mm-string-as-multibyte string)))))
779 959
780(defun rfc2047-parse-and-decode (word) 960(defun rfc2047-parse-and-decode (word)
@@ -787,8 +967,8 @@ decodable."
787 (condition-case nil 967 (condition-case nil
788 (rfc2047-decode 968 (rfc2047-decode
789 (match-string 1 word) 969 (match-string 1 word)
790 (upcase (match-string 2 word)) 970 (string-to-char (match-string 3 word))
791 (match-string 3 word)) 971 (match-string 4 word))
792 (error word)) 972 (error word))
793 word))) ; un-decodable 973 word))) ; un-decodable
794 974
@@ -809,7 +989,7 @@ decodable."
809 989
810(defun rfc2047-decode (charset encoding string) 990(defun rfc2047-decode (charset encoding string)
811 "Decode STRING from the given MIME CHARSET in the given ENCODING. 991 "Decode STRING from the given MIME CHARSET in the given ENCODING.
812Valid ENCODINGs are \"B\" and \"Q\". 992Valid ENCODINGs are the characters \"B\" and \"Q\".
813If your Emacs implementation can't decode CHARSET, return nil." 993If your Emacs implementation can't decode CHARSET, return nil."
814 (if (stringp charset) 994 (if (stringp charset)
815 (setq charset (intern (downcase charset)))) 995 (setq charset (intern (downcase charset))))
@@ -824,18 +1004,17 @@ If your Emacs implementation can't decode CHARSET, return nil."
824 (memq 'gnus-unknown mail-parse-ignored-charsets)) 1004 (memq 'gnus-unknown mail-parse-ignored-charsets))
825 (setq cs (mm-charset-to-coding-system mail-parse-charset))) 1005 (setq cs (mm-charset-to-coding-system mail-parse-charset)))
826 (when cs 1006 (when cs
827 (when (and (eq cs 'ascii) 1007 (when (eq cs 'ascii)
828 mail-parse-charset) 1008 (setq cs (or mail-parse-charset 'raw-text)))
829 (setq cs mail-parse-charset))
830 (mm-decode-coding-string 1009 (mm-decode-coding-string
831 (cond 1010 (cond
832 ((equal "B" encoding) 1011 ((char-equal ?B encoding)
833 (base64-decode-string 1012 (base64-decode-string
834 (rfc2047-pad-base64 string))) 1013 (rfc2047-pad-base64 string)))
835 ((equal "Q" encoding) 1014 ((char-equal ?Q encoding)
836 (quoted-printable-decode-string 1015 (quoted-printable-decode-string
837 (mm-replace-chars-in-string string ?_ ? ))) 1016 (mm-subst-char-in-string ?_ ? string t)))
838 (t (error "Invalid encoding: %s" encoding))) 1017 (t (error "Invalid encoding: %c" encoding)))
839 cs)))) 1018 cs))))
840 1019
841(provide 'rfc2047) 1020(provide 'rfc2047)
diff --git a/lisp/hi-lock.el b/lisp/hi-lock.el
index 81c7296760f..431087087f1 100644
--- a/lisp/hi-lock.el
+++ b/lisp/hi-lock.el
@@ -1,6 +1,6 @@
1;;; hi-lock.el --- minor mode for interactive automatic highlighting 1;;; hi-lock.el --- minor mode for interactive automatic highlighting
2 2
3;; Copyright (C) 2000, 2001 Free Software Foundation, Inc. 3;; Copyright (C) 2000, 2001, 2005 Free Software Foundation, Inc.
4 4
5;; Author: David M. Koppelman, koppel@ee.lsu.edu 5;; Author: David M. Koppelman, koppel@ee.lsu.edu
6;; Keywords: faces, minor-mode, matching, display 6;; Keywords: faces, minor-mode, matching, display
@@ -292,7 +292,7 @@ is found. A mode is excluded if it's in the list `hi-lock-exclude-modes'."
292 (> (prefix-numeric-value arg) 0))) 292 (> (prefix-numeric-value arg) 0)))
293 ;; Turned on. 293 ;; Turned on.
294 (when (and (not hi-lock-mode-prev) hi-lock-mode) 294 (when (and (not hi-lock-mode-prev) hi-lock-mode)
295 (add-hook 'find-file-hooks 'hi-lock-find-file-hook) 295 (add-hook 'find-file-hook 'hi-lock-find-file-hook)
296 (add-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook) 296 (add-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook)
297 (when (eq nil font-lock-defaults) 297 (when (eq nil font-lock-defaults)
298 (setq font-lock-defaults '(nil))) 298 (setq font-lock-defaults '(nil)))
@@ -313,7 +313,7 @@ is found. A mode is excluded if it's in the list `hi-lock-exclude-modes'."
313 hi-lock-file-patterns nil) 313 hi-lock-file-patterns nil)
314 (when font-lock-mode (hi-lock-refontify))))) 314 (when font-lock-mode (hi-lock-refontify)))))
315 (define-key-after menu-bar-edit-menu [hi-lock] nil) 315 (define-key-after menu-bar-edit-menu [hi-lock] nil)
316 (remove-hook 'find-file-hooks 'hi-lock-find-file-hook) 316 (remove-hook 'find-file-hook 'hi-lock-find-file-hook)
317 (remove-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook)))) 317 (remove-hook 'font-lock-mode-hook 'hi-lock-font-lock-hook))))
318 318
319 319
@@ -568,5 +568,5 @@ Optional argument END is maximum excursion."
568 568
569(provide 'hi-lock) 569(provide 'hi-lock)
570 570
571;;; arch-tag: d2e8fd07-4cc9-4c6f-a200-1e729bc54066 571;; arch-tag: d2e8fd07-4cc9-4c6f-a200-1e729bc54066
572;;; hi-lock.el ends here 572;;; hi-lock.el ends here
diff --git a/lisp/hilit-chg.el b/lisp/hilit-chg.el
index f670079e7d7..8e84bbf68e2 100644
--- a/lisp/hilit-chg.el
+++ b/lisp/hilit-chg.el
@@ -993,12 +993,12 @@ changes are made, so \\[highlight-changes-next-change] and
993 993
994;; Global Highlight Changes mode is modeled after Global Font-lock mode. 994;; Global Highlight Changes mode is modeled after Global Font-lock mode.
995;; Three hooks are used to gain control. When Global Changes Mode is 995;; Three hooks are used to gain control. When Global Changes Mode is
996;; enabled, `find-file-hooks' and `change-major-mode-hook' are set. 996;; enabled, `find-file-hook' and `change-major-mode-hook' are set.
997;; `find-file-hooks' is called when visiting a file, the new mode is 997;; `find-file-hook' is called when visiting a file, the new mode is
998;; known at this time. 998;; known at this time.
999;; `change-major-mode-hook' is called when a buffer is changing mode. 999;; `change-major-mode-hook' is called when a buffer is changing mode.
1000;; This could be because of finding a file in which case 1000;; This could be because of finding a file in which case
1001;; `find-file-hooks' has already been called and has done its work. 1001;; `find-file-hook' has already been called and has done its work.
1002;; However, it also catches the case where a new mode is being set by 1002;; However, it also catches the case where a new mode is being set by
1003;; the user. However, it is called from `kill-all-variables' and at 1003;; the user. However, it is called from `kill-all-variables' and at
1004;; this time the mode is the old mode, which is not what we want. 1004;; this time the mode is the old mode, which is not what we want.
@@ -1080,18 +1080,18 @@ variable `highlight-changes-global-changes-existing-buffers' is non-nil).
1080 (setq global-highlight-changes t) 1080 (setq global-highlight-changes t)
1081 (message "Turning ON Global Highlight Changes mode in %s state" 1081 (message "Turning ON Global Highlight Changes mode in %s state"
1082 highlight-changes-global-initial-state) 1082 highlight-changes-global-initial-state)
1083 (add-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook) 1083 ;; FIXME: Not sure what this was intended to do. --Stef
1084 (add-hook 'find-file-hooks 'hilit-chg-check-global) 1084 ;; (add-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook)
1085 (add-hook 'find-file-hook 'hilit-chg-check-global)
1085 (if highlight-changes-global-changes-existing-buffers 1086 (if highlight-changes-global-changes-existing-buffers
1086 (hilit-chg-update-all-buffers 1087 (hilit-chg-update-all-buffers
1087 highlight-changes-global-initial-state))) 1088 highlight-changes-global-initial-state)))
1088 1089
1089 (message "Turning OFF global Highlight Changes mode") 1090 (message "Turning OFF global Highlight Changes mode")
1090 (remove-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook) 1091 ;; FIXME: Not sure what this was intended to do. --Stef
1091 (remove-hook 'find-file-hooks 'hilit-chg-check-global) 1092 ;; (remove-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook)
1092 (remove-hook 'post-command-hook 1093 (remove-hook 'post-command-hook 'hilit-chg-post-command-hook)
1093 'hilit-chg-post-command-hook) 1094 (remove-hook 'find-file-hook 'hilit-chg-check-global)
1094 (remove-hook 'find-file-hooks 'hilit-chg-check-global)
1095 (if highlight-changes-global-changes-existing-buffers 1095 (if highlight-changes-global-changes-existing-buffers
1096 (hilit-chg-update-all-buffers nil)))) 1096 (hilit-chg-update-all-buffers nil))))
1097 1097
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index 0d2b221ee8b..b29027fcf42 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -36,18 +36,12 @@
36 36
37(require 'image) 37(require 'image)
38 38
39;;;###autoload (push '("\\.jpg\\'" . image-mode) auto-mode-alist) 39;;;###autoload (push '("\\.jpe?g\\'" . image-mode) auto-mode-alist)
40;;;###autoload (push '("\\.jpeg\\'" . image-mode) auto-mode-alist) 40;;;###autoload (push '("\\.png\\'" . image-mode) auto-mode-alist)
41;;;###autoload (push '("\\.gif\\'" . image-mode) auto-mode-alist) 41;;;###autoload (push '("\\.gif\\'" . image-mode) auto-mode-alist)
42;;;###autoload (push '("\\.png\\'" . image-mode) auto-mode-alist) 42;;;###autoload (push '("\\.tiff?\\'" . image-mode) auto-mode-alist)
43;;;###autoload (push '("\\.tiff\\'" . image-mode) auto-mode-alist) 43;;;###autoload (push '("\\.p[bpgn]m\\'" . image-mode) auto-mode-alist)
44;;;###autoload (push '("\\.tif\\'" . image-mode) auto-mode-alist) 44;;;###autoload (push '("\\.x[bp]m\\'" . image-mode-maybe) auto-mode-alist)
45;;;###autoload (push '("\\.xbm\\'" . image-mode) auto-mode-alist)
46;;;###autoload (push '("\\.xpm\\'" . image-mode) auto-mode-alist)
47;;;###autoload (push '("\\.pbm\\'" . image-mode) auto-mode-alist)
48;;;###autoload (push '("\\.pgm\\'" . image-mode) auto-mode-alist)
49;;;###autoload (push '("\\.ppm\\'" . image-mode) auto-mode-alist)
50;;;###autoload (push '("\\.pnm\\'" . image-mode) auto-mode-alist)
51 45
52(defvar image-mode-map 46(defvar image-mode-map
53 (let ((map (make-sparse-keymap))) 47 (let ((map (make-sparse-keymap)))
@@ -65,9 +59,64 @@ to toggle between display as an image and display as text."
65 (setq mode-name "Image") 59 (setq mode-name "Image")
66 (setq major-mode 'image-mode) 60 (setq major-mode 'image-mode)
67 (use-local-map image-mode-map) 61 (use-local-map image-mode-map)
62 (add-hook 'change-major-mode-hook 'image-toggle-display-text nil t)
63 (if (not (get-text-property (point-min) 'display))
64 (image-toggle-display)
65 ;; Set next vars when image is already displayed but local
66 ;; variables were cleared by kill-all-local-variables
67 (setq cursor-type nil truncate-lines t))
68 (run-mode-hooks 'image-mode-hook) 68 (run-mode-hooks 'image-mode-hook)
69 (message (substitute-command-keys 69 (message (concat (substitute-command-keys
70 "Type \\[image-toggle-display] to view the image as an image."))) 70 "Type \\[image-toggle-display] to view the image as ")
71 (if (get-text-property (point-min) 'display)
72 "text" "an image") ".")))
73
74;;;###autoload
75(define-minor-mode image-minor-mode
76 "Toggle Image minor mode.
77With arg, turn Image minor mode on if arg is positive, off otherwise.
78See the command `image-mode' for more information on this mode."
79 nil " Image" image-mode-map
80 :group 'image
81 :version "22.1"
82 (if (not image-minor-mode)
83 (image-toggle-display-text)
84 (if (get-text-property (point-min) 'display)
85 (setq cursor-type nil truncate-lines t))
86 (add-hook 'change-major-mode-hook (lambda () (image-minor-mode -1)) nil t)
87 (message (concat (substitute-command-keys
88 "Type \\[image-toggle-display] to view the image as ")
89 (if (get-text-property (point-min) 'display)
90 "text" "an image") "."))))
91
92;;;###autoload
93(defun image-mode-maybe ()
94 "Set major or minor mode for image files.
95Set Image major mode only when there are no other major modes
96associated with a filename in `auto-mode-alist'. When an image
97filename matches another major mode in `auto-mode-alist' then
98set that major mode and Image minor mode.
99
100See commands `image-mode' and `image-minor-mode' for more
101information on these modes."
102 (interactive)
103 (let* ((mode-alist
104 (delq nil (mapcar
105 (lambda (elt)
106 (unless (memq (or (car-safe (cdr elt)) (cdr elt))
107 '(image-mode image-mode-maybe))
108 elt))
109 auto-mode-alist))))
110 (if (assoc-default buffer-file-name mode-alist 'string-match)
111 (let ((auto-mode-alist mode-alist))
112 (set-auto-mode)
113 (image-minor-mode t))
114 (image-mode))))
115
116(defun image-toggle-display-text ()
117 "Showing the text of the image file."
118 (if (get-text-property (point-min) 'display)
119 (image-toggle-display)))
71 120
72(defun image-toggle-display () 121(defun image-toggle-display ()
73 "Start or stop displaying an image file as the actual image. 122 "Start or stop displaying an image file as the actual image.
@@ -84,7 +133,8 @@ and showing the image as an image."
84 (set-buffer-modified-p modified) 133 (set-buffer-modified-p modified)
85 (kill-local-variable 'cursor-type) 134 (kill-local-variable 'cursor-type)
86 (kill-local-variable 'truncate-lines) 135 (kill-local-variable 'truncate-lines)
87 (message "Repeat this command to go back to displaying the image")) 136 (if (called-interactively-p)
137 (message "Repeat this command to go back to displaying the image")))
88 ;; Turn the image data into a real image, but only if the whole file 138 ;; Turn the image data into a real image, but only if the whole file
89 ;; was inserted 139 ;; was inserted
90 (let* ((data 140 (let* ((data
@@ -100,6 +150,7 @@ and showing the image as an image."
100 ;; read-only when we're visiting the file (as 150 ;; read-only when we're visiting the file (as
101 ;; opposed to just inserting it). 151 ;; opposed to just inserting it).
102 read-only t front-sticky (read-only))) 152 read-only t front-sticky (read-only)))
153 (inhibit-read-only t)
103 (buffer-undo-list t) 154 (buffer-undo-list t)
104 (modified (buffer-modified-p))) 155 (modified (buffer-modified-p)))
105 (add-text-properties (point-min) (point-max) props) 156 (add-text-properties (point-min) (point-max) props)
@@ -110,7 +161,8 @@ and showing the image as an image."
110 ;; This just makes the arrow displayed in the right fringe 161 ;; This just makes the arrow displayed in the right fringe
111 ;; area look correct when the image is wider than the window. 162 ;; area look correct when the image is wider than the window.
112 (setq truncate-lines t) 163 (setq truncate-lines t)
113 (message "Repeat this command to go back to displaying the file as text")))) 164 (if (called-interactively-p)
165 (message "Repeat this command to go back to displaying the file as text")))))
114 166
115(provide 'image-mode) 167(provide 'image-mode)
116 168
diff --git a/lisp/info.el b/lisp/info.el
index 870e1ad89f6..cefe603a400 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -3026,12 +3026,12 @@ if point is in a menu item description, follow that menu item."
3026 :help "Go to menu of visited nodes"] 3026 :help "Go to menu of visited nodes"]
3027 ["Table of Contents" Info-toc 3027 ["Table of Contents" Info-toc
3028 :help "Go to table of contents"] 3028 :help "Go to table of contents"]
3029 ("Index..." 3029 ("Index"
3030 ["Lookup a String" Info-index 3030 ["Lookup a String..." Info-index
3031 :help "Look for a string in the index items"] 3031 :help "Look for a string in the index items"]
3032 ["Next Matching Item" Info-index-next 3032 ["Next Matching Item" Info-index-next :active Info-index-alternatives
3033 :help "Look for another occurrence of previous item"] 3033 :help "Look for another occurrence of previous item"]
3034 ["Lookup a string in all indices" info-apropos 3034 ["Lookup a string in all indices..." info-apropos
3035 :help "Look for a string in the indices of all manuals"]) 3035 :help "Look for a string in the indices of all manuals"])
3036 ["Edit" Info-edit :help "Edit contents of this node" 3036 ["Edit" Info-edit :help "Edit contents of this node"
3037 :active Info-enable-edit] 3037 :active Info-enable-edit]
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index f08305de180..8fc75054660 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -1681,7 +1681,7 @@ The default status is as follows:
1681 1681
1682(reset-language-environment) 1682(reset-language-environment)
1683 1683
1684(defun set-display-table-and-terminal-coding-system (language-name) 1684(defun set-display-table-and-terminal-coding-system (language-name &optional coding-system)
1685 "Set up the display table and terminal coding system for LANGUAGE-NAME." 1685 "Set up the display table and terminal coding system for LANGUAGE-NAME."
1686 (let ((coding (get-language-info language-name 'unibyte-display))) 1686 (let ((coding (get-language-info language-name 'unibyte-display)))
1687 (if coding 1687 (if coding
@@ -1695,7 +1695,7 @@ The default status is as follows:
1695 (dotimes (i 128) 1695 (dotimes (i 128)
1696 (aset standard-display-table (+ i 128) nil)))) 1696 (aset standard-display-table (+ i 128) nil))))
1697 (or (eq window-system 'pc) 1697 (or (eq window-system 'pc)
1698 (set-terminal-coding-system coding)))) 1698 (set-terminal-coding-system (or coding-system coding)))))
1699 1699
1700(defun set-language-environment (language-name) 1700(defun set-language-environment (language-name)
1701 "Set up multi-lingual environment for using LANGUAGE-NAME. 1701 "Set up multi-lingual environment for using LANGUAGE-NAME.
@@ -2415,7 +2415,8 @@ See also `locale-charset-language-names', `locale-language-names',
2415 ;; we are using single-byte characters, 2415 ;; we are using single-byte characters,
2416 ;; so the display table and terminal coding system are irrelevant. 2416 ;; so the display table and terminal coding system are irrelevant.
2417 (when default-enable-multibyte-characters 2417 (when default-enable-multibyte-characters
2418 (set-display-table-and-terminal-coding-system language-name)) 2418 (set-display-table-and-terminal-coding-system
2419 language-name coding-system))
2419 2420
2420 ;; Set the `keyboard-coding-system' if appropriate (tty 2421 ;; Set the `keyboard-coding-system' if appropriate (tty
2421 ;; only). At least X and MS Windows can generate 2422 ;; only). At least X and MS Windows can generate
@@ -2458,9 +2459,16 @@ system codeset `%s' for this locale." coding-system codeset))))))))
2458 (set-keyboard-coding-system code-page-coding) 2459 (set-keyboard-coding-system code-page-coding)
2459 (set-terminal-coding-system code-page-coding)))) 2460 (set-terminal-coding-system code-page-coding))))
2460 2461
2461 ;; On Darwin, file names are always encoded in utf-8, no matter the locale.
2462 (when (eq system-type 'darwin) 2462 (when (eq system-type 'darwin)
2463 (setq default-file-name-coding-system 'utf-8)) 2463 ;; On Darwin, file names are always encoded in utf-8, no matter
2464 ;; the locale.
2465 (setq default-file-name-coding-system 'utf-8)
2466 ;; Mac OS X's Terminal.app by default uses utf-8 regardless of
2467 ;; the locale.
2468 (when (and (null window-system)
2469 (equal (getenv "TERM_PROGRAM") "Apple_Terminal"))
2470 (set-terminal-coding-system 'utf-8)
2471 (set-keyboard-coding-system 'utf-8)))
2464 2472
2465 ;; Default to A4 paper if we're not in a C, POSIX or US locale. 2473 ;; Default to A4 paper if we're not in a C, POSIX or US locale.
2466 ;; (See comments in Flocale_info.) 2474 ;; (See comments in Flocale_info.)
diff --git a/lisp/international/mule.el b/lisp/international/mule.el
index 08be907357a..8d5ca33881a 100644
--- a/lisp/international/mule.el
+++ b/lisp/international/mule.el
@@ -1508,10 +1508,11 @@ text, and convert it in the temporary buffer. Otherwise, convert in-place."
1508;;; FILE I/O 1508;;; FILE I/O
1509 1509
1510(defcustom auto-coding-alist 1510(defcustom auto-coding-alist
1511 '(("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\)\\'" . no-conversion) 1511 '(("\\.\\(arc\\|zip\\|lzh\\|zoo\\|[jew]ar\\|xpi\\)\\'" . no-conversion)
1512 ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\)\\'" . no-conversion) 1512 ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . no-conversion)
1513 ("\\.\\(sx[dmicw]\\|tar\\|tgz\\)\\'" . no-conversion) 1513 ("\\.\\(sx[dmicw]\\|tar\\|tgz\\)\\'" . no-conversion)
1514 ("\\.\\(gz\\|Z\\|bz\\|bz2\\|gpg\\)\\'" . no-conversion) 1514 ("\\.\\(gz\\|Z\\|bz\\|bz2\\|gpg\\)\\'" . no-conversion)
1515 ("\\.\\(jpe?g\\|png\\|gif\\|tiff?\\|p[bpgn]m\\)\\'" . no-conversion)
1515 ("/#[^/]+#\\'" . emacs-mule)) 1516 ("/#[^/]+#\\'" . emacs-mule))
1516 "Alist of filename patterns vs corresponding coding systems. 1517 "Alist of filename patterns vs corresponding coding systems.
1517Each element looks like (REGEXP . CODING-SYSTEM). 1518Each element looks like (REGEXP . CODING-SYSTEM).
diff --git a/lisp/kmacro.el b/lisp/kmacro.el
index c6a97bb3d34..20816fc7fea 100644
--- a/lisp/kmacro.el
+++ b/lisp/kmacro.el
@@ -614,10 +614,13 @@ With numeric arg, repeat macro now that many times,
614counting the definition just completed as the first repetition. 614counting the definition just completed as the first repetition.
615An argument of zero means repeat until error." 615An argument of zero means repeat until error."
616 (interactive "P") 616 (interactive "P")
617 (end-kbd-macro arg #'kmacro-loop-setup-function) 617 ;; Isearch may push the kmacro-end-macro key sequence onto the macro.
618 (when (and last-kbd-macro (= (length last-kbd-macro) 0)) 618 ;; Just ignore it when executing the macro.
619 (message "Ignore empty macro") 619 (unless executing-kbd-macro
620 (kmacro-pop-ring))) 620 (end-kbd-macro arg #'kmacro-loop-setup-function)
621 (when (and last-kbd-macro (= (length last-kbd-macro) 0))
622 (message "Ignore empty macro")
623 (kmacro-pop-ring))))
621 624
622 625
623;;;###autoload 626;;;###autoload
diff --git a/lisp/language/thai-util.el b/lisp/language/thai-util.el
index 0957748799d..cbfc82c9dc8 100644
--- a/lisp/language/thai-util.el
+++ b/lisp/language/thai-util.el
@@ -1,10 +1,9 @@
1;;; thai-util.el --- utilities for Thai -*- coding: iso-2022-7bit; -*- 1;;; thai-util.el --- utilities for Thai -*- coding: iso-2022-7bit; -*-
2 2
3;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. 3;; Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2005
4;; Licensed to the Free Software Foundation.
5;; Copyright (C) 2003
6;; National Institute of Advanced Industrial Science and Technology (AIST) 4;; National Institute of Advanced Industrial Science and Technology (AIST)
7;; Registration Number H13PRO009 5;; Registration Number H13PRO009
6;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
8 7
9;; Keywords: mule, multilingual, Thai, i18n 8;; Keywords: mule, multilingual, Thai, i18n
10 9
@@ -253,6 +252,42 @@ positions (integers or markers) specifying the region."
253 (prog1 (match-end 0) 252 (prog1 (match-end 0)
254 (thai-compose-syllable pos (match-end 0))))))))) 253 (thai-compose-syllable pos (match-end 0)))))))))
255 254
255;; Thai-word-mode requires functions in the feature `thai-word'.
256(require 'thai-word)
257
258(defvar thai-word-mode-map
259 (let ((map (make-sparse-keymap)))
260 (define-key map [remap forward-word] 'thai-forward-word)
261 (define-key map [remap backward-word] 'thai-backward-word)
262 (define-key map [remap kill-word] 'thai-kill-word)
263 (define-key map [remap backward-kill-word] 'thai-backward-kill-word)
264 (define-key map [remap transpose-words] 'thai-transpose-words)
265 map)
266 "Keymap for `thai-word-mode'.")
267
268(define-minor-mode thai-word-mode
269 "Minor mode to make word-oriented commands aware of Thai words.
270The commands affected are \\[forward-word], \\[backward-word], \\[kill-word], \\[backward-kill-word], \\[transpose-words], and \\[fill-paragraph]."
271 :global t
272 (cond (thai-word-mode
273 ;; This enables linebreak between Thai characters.
274 (modify-category-entry (make-char 'thai-tis620) ?|)
275 ;; This enables linebreak at a Thai word boundary.
276 (put-charset-property 'thai-tis620 'fill-find-break-point-function
277 'thai-fill-find-break-point))
278 (t
279 (modify-category-entry (make-char 'thai-tis620) ?| nil t)
280 (put-charset-property 'thai-tis620 'fill-find-break-point-function
281 nil))))
282
283;; Function to call on entering the Thai language environment.
284(defun setup-thai-language-environment-internal ()
285 (thai-word-mode 1))
286
287;; Function to call on exiting the Thai language environment.
288(defun exit-thai-language-environment-internal ()
289 (thai-word-mode -1))
290
256;; 291;;
257(provide 'thai-util) 292(provide 'thai-util)
258 293
diff --git a/lisp/language/thai-word.el b/lisp/language/thai-word.el
index 82f6fcdea6a..9c3ba81859e 100644
--- a/lisp/language/thai-word.el
+++ b/lisp/language/thai-word.el
@@ -1,7 +1,8 @@
1;;; thai-word.el -- find Thai word boundaries 1;;; thai-word.el -- find Thai word boundaries
2 2
3;; Copyright (C) 2000, 2001, 2002, 2003, 2004 3;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
4;; Electrotechnical Laboratory, JAPAN. 4;; National Institute of Advanced Industrial Science and Technology (AIST)
5;; Registration Number H14PRO021
5 6
6;; Author: Kenichi HANDA <handa@etl.go.jp> 7;; Author: Kenichi HANDA <handa@etl.go.jp>
7 8
@@ -72,13 +73,10 @@
72;; which means that you can easily index the list character by 73;; which means that you can easily index the list character by
73;; character. 74;; character.
74 75
75(defconst thai-word-table nil) 76(defvar thai-word-table
76 77 (let ((table (list 'thai-words)))
77 78 (dolist (elt
78;; Set up `thai-word-table'. 79 ;;; The following is indented as this to minimize this file size.
79
80(let
81 ((l
82 '("¡¡" 80 '("¡¡"
83 "¡¡Å" 81 "¡¡Å"
84 "¡¡Ø¸Àѳ±ì" 82 "¡¡Ø¸Àѳ±ì"
@@ -10732,11 +10730,10 @@
10732 "äÎâ¡ÃÁÔàµÍÃì" 10730 "äÎâ¡ÃÁÔàµÍÃì"
10733 "äÎâ´Ã¤ÒÃìºÍ¹" 10731 "äÎâ´Ã¤ÒÃìºÍ¹"
10734 "äÎâÅ" 10732 "äÎâÅ"
10735 ))) 10733 ))
10736 (setq thai-word-table (list 'thai-words)) 10734 (set-nested-alist elt 1 table))
10737 (while l 10735 table)
10738 (set-nested-alist (car l) 1 thai-word-table) 10736 "Nested alist of Thai words.")
10739 (setq l (cdr l))))
10740 10737
10741 10738
10742(defun thai-update-word-table (file &optional append) 10739(defun thai-update-word-table (file &optional append)
@@ -11042,6 +11039,33 @@ If COUNT is negative, move point forward (- COUNT) words."
11042 (thai-forward-word (- count))) 11039 (thai-forward-word (- count)))
11043 11040
11044 11041
11042(defun thai-kill-word (arg)
11043 "Like kill-word but pay attention to Thai word boundaries.
11044With argument, do this that many times."
11045 (interactive "p")
11046 (kill-region (point) (progn (thai-forward-word arg) (point))))
11047
11048
11049(defun thai-backward-kill-word (arg)
11050 "Like backward-kill-word but pay attention to Thai word boundaries."
11051 (interactive "p")
11052 (thai-kill-word (- arg)))
11053
11054
11055(defun thai-transpose-words (arg)
11056 "Like transpose-words but pay attention to Thai word boundaries."
11057 (interactive "*p")
11058 (transpose-subr 'thai-forward-word arg))
11059
11060(defun thai-fill-find-break-point (linebeg)
11061 "Go to a line breaking position near point considering Thai word boundaries."
11062 (let ((pos (point)))
11063 (thai-forward-word -1)
11064 (when (<= (point) linebeg)
11065 (goto-char pos)
11066 (thai-forward-word 1))
11067 (kinsoku linebeg)))
11068
11045(provide 'thai-word) 11069(provide 'thai-word)
11046 11070
11047 11071
diff --git a/lisp/language/thai.el b/lisp/language/thai.el
index 604eaf6384e..f9cd655635a 100644
--- a/lisp/language/thai.el
+++ b/lisp/language/thai.el
@@ -1,14 +1,12 @@
1;;; thai.el --- support for Thai -*- coding: iso-2022-7bit; no-byte-compile: t -*- 1;;; thai.el --- support for Thai -*- coding: iso-2022-7bit; no-byte-compile: t -*-
2 2
3;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. 3;; Copyright (C) 1995, 1997, 1998, 1999, 2000, 2002, 2005
4;; Licensed to the Free Software Foundation.
5;; Copyright (C) 2002 Free Software Foundation, Inc.
6;; Copyright (C) 2003
7;; National Institute of Advanced Industrial Science and Technology (AIST) 4;; National Institute of Advanced Industrial Science and Technology (AIST)
8;; Registration Number H13PRO009 5;; Registration Number H13PRO009
9;; Copyright (C) 2005 6;; Copyright (C) 2005
10;; National Institute of Advanced Industrial Science and Technology (AIST) 7;; National Institute of Advanced Industrial Science and Technology (AIST)
11;; Registration Number H14PRO021 8;; Registration Number H14PRO021
9;; Copyright (C) 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
12 10
13;; Keywords: multilingual, Thai, i18n 11;; Keywords: multilingual, Thai, i18n
14 12
@@ -54,6 +52,8 @@
54 (input-method . "thai-kesmanee") 52 (input-method . "thai-kesmanee")
55 (unibyte-display . thai-tis620) 53 (unibyte-display . thai-tis620)
56 (features thai-util) 54 (features thai-util)
55 (setup-function . setup-thai-language-environment-internal)
56 (exit-function . exit-thai-language-environment-internal)
57 (sample-text 57 (sample-text
58 . (thai-compose-string 58 . (thai-compose-string
59 (copy-sequence "Thai (,T@RIRd7B(B) ,TJGQJ4U$CQ:(B, ,TJGQJ4U$hP(B"))) 59 (copy-sequence "Thai (,T@RIRd7B(B) ,TJGQJ4U$CQ:(B, ,TJGQJ4U$hP(B")))
diff --git a/lisp/longlines.el b/lisp/longlines.el
new file mode 100644
index 00000000000..8491a0b7960
--- /dev/null
+++ b/lisp/longlines.el
@@ -0,0 +1,393 @@
1;;; longlines.el --- automatically wrap long lines
2
3;; Copyright (C) 2000, 2001, 2004, 2005 by Free Software Foundation, Inc.
4
5;; Authors: Kai Grossjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
6;; Alex Schroeder <alex@gnu.org>
7;; Chong Yidong <cyd@stupidchicken.com>
8;; Maintainer: Chong Yidong <cyd@stupidchicken.com>
9;; Keywords: convenience
10
11;; This file is part of GNU Emacs.
12
13;; GNU Emacs is free software; you can redistribute it and/or modify
14;; it under the terms of the GNU General Public License as published by
15;; the Free Software Foundation; either version 2, or (at your option)
16;; any later version.
17
18;; GNU Emacs is distributed in the hope that it will be useful,
19;; but WITHOUT ANY WARRANTY; without even the implied warranty of
20;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21;; GNU General Public License for more details.
22
23;; You should have received a copy of the GNU General Public License
24;; along with GNU Emacs; see the file COPYING. If not, write to the
25;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
26;; Boston, MA 02111-1307, USA.
27
28;;; Commentary:
29
30;; Some text editors save text files with long lines, and they
31;; automatically break these lines at whitespace, without actually
32;; inserting any newline characters. When doing `M-q' in Emacs, you
33;; are inserting newline characters. Longlines mode provides a file
34;; format which wraps the long lines when reading a file and unwraps
35;; the lines when saving the file. It can also wrap and unwrap
36;; automatically as editing takes place.
37
38;; Special thanks to Rod Smith for many useful bug reports.
39
40;;; Code:
41
42(require 'easy-mmode)
43
44(defgroup longlines nil
45 "Automatic wrapping of long lines when loading files."
46 :group 'fill)
47
48(defcustom longlines-auto-wrap t
49 "*Non-nil means long lines are automatically wrapped after each command.
50Otherwise, you can perform filling using `fill-paragraph' or
51`auto-fill-mode'. In any case, the soft newlines will be removed
52when the file is saved to disk."
53 :group 'longlines
54 :type 'boolean)
55
56(defcustom longlines-wrap-follows-window-size nil
57 "*Non-nil means wrapping and filling happen at the edge of the window.
58Otherwise, `fill-column' is used, regardless of the window size. This
59does not work well when the buffer is displayed in multiple windows
60with differing widths."
61 :group 'longlines
62 :type 'boolean)
63
64(defcustom longlines-show-hard-newlines nil
65 "*Non-nil means each hard newline is marked with a symbol.
66You can also enable the display temporarily, using the command
67`longlines-show-hard-newlines'"
68 :group 'longlines
69 :type 'boolean)
70
71(defcustom longlines-show-effect (propertize "|\n" 'face 'escape-glyph)
72 "*A string to display when showing hard newlines.
73This is used when `longlines-show-hard-newlines' is on."
74 :group 'longlines
75 :type 'string)
76
77;; Internal variables
78
79(defvar longlines-wrap-beg nil)
80(defvar longlines-wrap-end nil)
81(defvar longlines-wrap-point nil)
82(defvar longlines-showing nil)
83
84(make-variable-buffer-local 'longlines-wrap-beg)
85(make-variable-buffer-local 'longlines-wrap-end)
86(make-variable-buffer-local 'longlines-wrap-point)
87(make-variable-buffer-local 'longlines-showing)
88
89;; Mode
90
91;;;###autoload
92(define-minor-mode longlines-mode
93 "Toggle Long Lines mode.
94In Long Lines mode, long lines are wrapped if they extend beyond
95`fill-column'. The soft newlines used for line wrapping will not
96show up when the text is yanked or saved to disk.
97
98If `longlines-auto-wrap' is non-nil, lines are automatically
99wrapped whenever the buffer is changed. You can always call
100`fill-paragraph' to fill individual paragraphs.
101
102If `longlines-show-hard-newlines' is non-nil, hard newlines will
103be marked by a symbol."
104 nil " ll" nil
105 (if longlines-mode
106 ;; Turn on longlines mode
107 (progn
108 (use-hard-newlines 1 'never)
109 (set (make-local-variable 'require-final-newline) nil)
110 (add-to-list 'buffer-file-format 'longlines)
111 (add-hook 'change-major-mode-hook 'longlines-mode-off nil t)
112 (make-local-variable 'buffer-substring-filters)
113 (add-to-list 'buffer-substring-filters 'longlines-encode-string)
114 (when longlines-wrap-follows-window-size
115 (set (make-local-variable 'fill-column)
116 (- (window-width) window-min-width))
117 (add-hook 'window-configuration-change-hook
118 'longlines-window-change-function nil t))
119 (let ((buffer-undo-list t)
120 (mod (buffer-modified-p)))
121 ;; Turning off undo is OK since (spaces + newlines) is
122 ;; conserved, except for a corner case in
123 ;; longlines-wrap-lines that we'll never encounter from here
124 (longlines-decode-region (point-min) (point-max))
125 (longlines-wrap-region (point-min) (point-max))
126 (set-buffer-modified-p mod))
127 (when (and longlines-show-hard-newlines
128 (not longlines-showing))
129 (longlines-show-hard-newlines))
130 (when longlines-auto-wrap
131 (auto-fill-mode 0)
132 (add-hook 'after-change-functions
133 'longlines-after-change-function nil t)
134 (add-hook 'post-command-hook
135 'longlines-post-command-function nil t)))
136 ;; Turn off longlines mode
137 (setq buffer-file-format (delete 'longlines buffer-file-format))
138 (if longlines-showing
139 (longlines-unshow-hard-newlines))
140 (let ((buffer-undo-list t))
141 (longlines-encode-region (point-min) (point-max)))
142 (remove-hook 'change-major-mode-hook 'longlines-mode-off t)
143 (remove-hook 'before-kill-functions 'longlines-encode-region t)
144 (remove-hook 'after-change-functions 'longlines-after-change-function t)
145 (remove-hook 'post-command-hook 'longlines-post-command-function t)
146 (remove-hook 'window-configuration-change-hook
147 'longlines-window-change-function t)
148 (kill-local-variable 'fill-column)))
149
150(defun longlines-mode-off ()
151 "Turn off longlines mode.
152This function exists to be called by `change-major-mode-hook' when the
153major mode changes."
154 (longlines-mode 0))
155
156;; Showing the effect of hard newlines in the buffer
157
158(defface longlines-visible-face
159 '((t (:background "red")))
160 "Face used to make hard newlines visible in `longlines-mode'.")
161
162(defun longlines-show-hard-newlines (&optional arg)
163 "Make hard newlines visible by adding a face.
164With optional argument ARG, make the hard newlines invisible again."
165 (interactive "P")
166 (let ((buffer-undo-list t)
167 (mod (buffer-modified-p)))
168 (if arg
169 (longlines-unshow-hard-newlines)
170 (setq longlines-showing t)
171 (longlines-show-region (point-min) (point-max)))
172 (set-buffer-modified-p mod)))
173
174(defun longlines-show-region (beg end)
175 "Make hard newlines between BEG and END visible."
176 (let* ((pmin (min beg end))
177 (pmax (max beg end))
178 (pos (text-property-any pmin pmax 'hard t)))
179 (while pos
180 (put-text-property pos (1+ pos) 'display
181 (copy-sequence longlines-show-effect))
182 (setq pos (text-property-any (1+ pos) pmax 'hard t)))))
183
184(defun longlines-unshow-hard-newlines ()
185 "Make hard newlines invisible again."
186 (interactive)
187 (setq longlines-showing nil)
188 (let ((pos (text-property-any (point-min) (point-max) 'hard t)))
189 (while pos
190 (remove-text-properties pos (1+ pos) '(display))
191 (setq pos (text-property-any (1+ pos) (point-max) 'hard t)))))
192
193;; Wrapping the paragraphs.
194
195(defun longlines-wrap-region (beg end)
196 "Wrap each successive line, starting with the line before BEG.
197Stop when we reach lines after END that don't need wrapping, or the
198end of the buffer."
199 (setq longlines-wrap-point (point))
200 (goto-char beg)
201 (forward-line -1)
202 ;; Two successful longlines-wrap-line's in a row mean successive
203 ;; lines don't need wrapping.
204 (while (null (and (longlines-wrap-line)
205 (or (eobp)
206 (and (>= (point) end)
207 (longlines-wrap-line))))))
208 (goto-char longlines-wrap-point))
209
210(defun longlines-wrap-line ()
211 "If the current line needs to be wrapped, wrap it and return nil.
212If wrapping is performed, point remains on the line. If the line does
213not need to be wrapped, move point to the next line and return t."
214 (if (longlines-set-breakpoint)
215 (progn (backward-char 1)
216 (delete-char 1)
217 (insert-char ?\n 1)
218 nil)
219 (if (longlines-merge-lines-p)
220 (progn (end-of-line)
221 (delete-char 1)
222 ;; After certain commands (e.g. kill-line), there may be two
223 ;; successive soft newlines in the buffer. In this case, we
224 ;; replace these two newlines by a single space. Unfortunately,
225 ;; this breaks the conservation of (spaces + newlines), so we
226 ;; have to fiddle with longlines-wrap-point.
227 (if (or (bolp) (eolp))
228 (if (> longlines-wrap-point (point))
229 (setq longlines-wrap-point
230 (1- longlines-wrap-point)))
231 (insert-char ? 1))
232 nil)
233 (forward-line 1)
234 t)))
235
236(defun longlines-set-breakpoint ()
237 "Place point where we should break the current line, and return t.
238If the line should not be broken, return nil; point remains on the
239line."
240 (move-to-column fill-column)
241 (if (and (re-search-forward "[^ ]" (line-end-position) 1)
242 (> (current-column) fill-column))
243 ;; This line is too long. Can we break it?
244 (or (longlines-find-break-backward)
245 (progn (move-to-column fill-column)
246 (longlines-find-break-forward)))))
247
248(defun longlines-find-break-backward ()
249 "Move point backward to the first available breakpoint and return t.
250If no breakpoint is found, return nil."
251 (and (search-backward " " (line-beginning-position) 1)
252 (save-excursion
253 (skip-chars-backward " " (line-beginning-position))
254 (null (bolp)))
255 (progn (forward-char 1)
256 (if (and fill-nobreak-predicate
257 (run-hook-with-args-until-success
258 'fill-nobreak-predicate))
259 (progn (skip-chars-backward " " (line-beginning-position))
260 (longlines-find-break-backward))
261 t))))
262
263(defun longlines-find-break-forward ()
264 "Move point forward to the first available breakpoint and return t.
265If no break point is found, return nil."
266 (and (search-forward " " (line-end-position) 1)
267 (progn (skip-chars-forward " " (line-end-position))
268 (null (eolp)))
269 (if (and fill-nobreak-predicate
270 (run-hook-with-args-until-success
271 'fill-nobreak-predicate))
272 (longlines-find-break-forward)
273 t)))
274
275(defun longlines-merge-lines-p ()
276 "Return t if part of the next line can fit onto the current line.
277Otherwise, return nil. Text cannot be moved across hard newlines."
278 (save-excursion
279 (end-of-line)
280 (and (null (eobp))
281 (null (get-text-property (point) 'hard))
282 (let ((space (- fill-column (current-column))))
283 (forward-line 1)
284 (if (eq (char-after) ? )
285 t ; We can always merge some spaces
286 (<= (if (search-forward " " (line-end-position) 1)
287 (current-column)
288 (1+ (current-column)))
289 space))))))
290
291(defun longlines-decode-region (beg end)
292 "Turn all newlines between BEG and END into hard newlines."
293 (save-excursion
294 (goto-char (min beg end))
295 (while (search-forward "\n" (max beg end) t)
296 (set-hard-newline-properties
297 (match-beginning 0) (match-end 0)))))
298
299(defun longlines-encode-region (beg end &optional buffer)
300 "Replace each soft newline between BEG and END with exactly one space.
301Hard newlines are left intact. The optional argument BUFFER exists for
302compatibility with `format-alist', and is ignored."
303 (save-excursion
304 (let ((mod (buffer-modified-p)))
305 (goto-char (min beg end))
306 (while (search-forward "\n" (max (max beg end)) t)
307 (unless (get-text-property (match-beginning 0) 'hard)
308 (replace-match " ")))
309 (set-buffer-modified-p mod)
310 end)))
311
312(defun longlines-encode-string (string)
313 "Return a copy of STRING with each soft newline replaced by a space.
314Hard newlines are left intact."
315 (let* ((str (copy-sequence string))
316 (pos (string-match "\n" str)))
317 (while pos
318 (if (null (get-text-property pos 'hard str))
319 (aset str pos ? ))
320 (setq pos (string-match "\n" str (1+ pos))))
321 str))
322
323;; Auto wrap
324
325(defun longlines-auto-wrap (&optional arg)
326 "Turn on automatic line wrapping, and wrap the entire buffer.
327With optional argument ARG, turn off line wrapping."
328 (interactive "P")
329 (remove-hook 'after-change-functions 'longlines-after-change-function t)
330 (remove-hook 'post-command-hook 'longlines-post-command-function t)
331 (if arg
332 (progn (setq longlines-auto-wrap nil)
333 (message "Auto wrap disabled."))
334 (setq longlines-auto-wrap t)
335 (add-hook 'after-change-functions
336 'longlines-after-change-function nil t)
337 (add-hook 'post-command-hook
338 'longlines-post-command-function nil t)
339 (let ((mod (buffer-modified-p)))
340 (longlines-wrap-region (point-min) (point-max))
341 (set-buffer-modified-p mod))
342 (message "Auto wrap enabled.")))
343
344(defun longlines-after-change-function (beg end len)
345 "Update `longlines-wrap-beg' and `longlines-wrap-end'.
346This is called by `after-change-functions' to keep track of the region
347that has changed."
348 (unless undo-in-progress
349 (setq longlines-wrap-beg
350 (if longlines-wrap-beg (min longlines-wrap-beg beg) beg))
351 (setq longlines-wrap-end
352 (if longlines-wrap-end (max longlines-wrap-end end) end))))
353
354(defun longlines-post-command-function ()
355 "Perform line wrapping on the parts of the buffer that have changed.
356This is called by `post-command-hook' after each command."
357 (when longlines-wrap-beg
358 (cond ((or (eq this-command 'yank)
359 (eq this-command 'yank-pop))
360 (longlines-decode-region (point) (mark t))
361 (if longlines-showing
362 (longlines-show-region (point) (mark t))))
363 ((and (eq this-command 'newline) longlines-showing)
364 (save-excursion
365 (if (search-backward "\n" nil t)
366 (longlines-show-region
367 (match-beginning 0) (match-end 0))))))
368 (unless (or (eq this-command 'fill-paragraph)
369 (eq this-command 'fill-region))
370 (longlines-wrap-region longlines-wrap-beg longlines-wrap-end))
371 (setq longlines-wrap-beg nil)
372 (setq longlines-wrap-end nil)))
373
374(defun longlines-window-change-function ()
375 "Re-wrap the buffer if the window width has changed.
376This is called by `window-size-change-functions'."
377 (when (/= fill-column (- (window-width) window-min-width))
378 (setq fill-column (- (window-width) window-min-width))
379 (let ((mod (buffer-modified-p)))
380 (longlines-wrap-region (point-min) (point-max))
381 (set-buffer-modified-p mod))))
382
383;; Loading and saving
384
385(add-to-list
386 'format-alist
387 (list 'longlines "Automatically wrap long lines." nil
388 'longlines-decode-region 'longlines-encode-region t nil))
389
390(provide 'longlines)
391
392;; arch-tag: 3489d225-5506-47b9-8659-d8807b77c624
393;;; longlines.el ends here
diff --git a/lisp/mail/mailalias.el b/lisp/mail/mailalias.el
index 18f52e6434f..b520841db3d 100644
--- a/lisp/mail/mailalias.el
+++ b/lisp/mail/mailalias.el
@@ -111,9 +111,10 @@ entered so far."
111This value is used when the value of `mail-directory-function' 111This value is used when the value of `mail-directory-function'
112is `mail-directory-process'. The value should be a list 112is `mail-directory-process'. The value should be a list
113of the form (COMMAND ARG ...), where each of the list elements 113of the form (COMMAND ARG ...), where each of the list elements
114is evaluated. When `mail-directory-requery' is non-nil, during 114is evaluated. COMMAND should evaluate to a string. When
115evaluation of these elements, the variable `pattern' contains 115`mail-directory-requery' is non-nil, during evaluation of these
116the partial input being completed. 116elements, the variable `pattern' contains the partial input being
117completed. `pattern' is nil when `mail-directory-requery' is nil.
117 118
118The value might look like this: 119The value might look like this:
119 120
@@ -149,7 +150,7 @@ Three types of values are possible:
149 "Alist of local users, aliases and directory entries as available. 150 "Alist of local users, aliases and directory entries as available.
150Elements have the form (MAILNAME) or (MAILNAME . FULLNAME). 151Elements have the form (MAILNAME) or (MAILNAME . FULLNAME).
151If the value means t, it means the real value should be calculated 152If the value means t, it means the real value should be calculated
152for the next use. this is used in `mail-complete'.") 153for the next use. This is used in `mail-complete'.")
153 154
154(defvar mail-local-names t 155(defvar mail-local-names t
155 "Alist of local users. 156 "Alist of local users.
@@ -469,7 +470,9 @@ PATTERN is the string we want to complete."
469 mail-aliases)) 470 mail-aliases))
470 (if (consp mail-local-names) 471 (if (consp mail-local-names)
471 mail-local-names) 472 mail-local-names)
472 (or directory mail-directory-names)) 473 (or directory
474 (when (consp mail-directory-names)
475 mail-directory-names)))
473 (lambda (a b) 476 (lambda (a b)
474 ;; should cache downcased strings 477 ;; should cache downcased strings
475 (string< (downcase (car a)) 478 (string< (downcase (car a))
@@ -478,8 +481,10 @@ PATTERN is the string we want to complete."
478 481
479 482
480(defun mail-directory (pattern) 483(defun mail-directory (pattern)
481 "Call directory to get names matching PATTERN or all if nil. 484 "Use mail-directory facility to get user names matching PATTERN.
482Calls `mail-directory-function' and applies `mail-directory-parser' to output." 485If PATTERN is nil, get all the defined user names.
486This function calls `mail-directory-function' to query the directory,
487then uses `mail-directory-parser' to parse the output it returns."
483 (save-excursion 488 (save-excursion
484 (message "Querying directory...") 489 (message "Querying directory...")
485 (set-buffer (generate-new-buffer " *mail-directory*")) 490 (set-buffer (generate-new-buffer " *mail-directory*"))
@@ -509,8 +514,9 @@ Calls `mail-directory-function' and applies `mail-directory-parser' to output."
509(defun mail-directory-process (pattern) 514(defun mail-directory-process (pattern)
510 "Run a shell command to output names in directory. 515 "Run a shell command to output names in directory.
511See `mail-directory-process'." 516See `mail-directory-process'."
512 (apply 'call-process (eval (car mail-directory-process)) nil t nil 517 (when (consp mail-directory-process)
513 (mapcar 'eval (cdr mail-directory-process)))) 518 (apply 'call-process (eval (car mail-directory-process)) nil t nil
519 (mapcar 'eval (cdr mail-directory-process)))))
514 520
515;; This should handle a dialog. Currently expects port to spit out names. 521;; This should handle a dialog. Currently expects port to spit out names.
516(defun mail-directory-stream (pattern) 522(defun mail-directory-stream (pattern)
diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el
index 06282c430f0..371bb90b9cf 100644
--- a/lisp/mail/supercite.el
+++ b/lisp/mail/supercite.el
@@ -1,6 +1,6 @@
1;;; supercite.el --- minor mode for citing mail and news replies 1;;; supercite.el --- minor mode for citing mail and news replies
2 2
3;; Copyright (C) 1993, 1997, 2003, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1993, 1997, 2003, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Author: 1993 Barry A. Warsaw <bwarsaw@python.org> 5;; Author: 1993 Barry A. Warsaw <bwarsaw@python.org>
6;; Maintainer: FSF 6;; Maintainer: FSF
@@ -243,7 +243,7 @@ See the variable `sc-cite-frame-alist' for details."
243 243
244(defcustom sc-cite-region-limit t 244(defcustom sc-cite-region-limit t
245 "*This variable controls automatic citation of yanked text. 245 "*This variable controls automatic citation of yanked text.
246Legal values are: 246Valid values are:
247 247
248non-nil -- cite the entire region, regardless of its size 248non-nil -- cite the entire region, regardless of its size
249nil -- do not cite the region at all 249nil -- do not cite the region at all
@@ -347,7 +347,7 @@ Non-nil uses nested citations, nil uses non-nested citations."
347 347
348(defcustom sc-nuke-mail-headers 'all 348(defcustom sc-nuke-mail-headers 'all
349 "*Controls mail header nuking. 349 "*Controls mail header nuking.
350Used in conjunction with `sc-nuke-mail-header-list'. Legal values are: 350Used in conjunction with `sc-nuke-mail-header-list'. Valid values are:
351 351
352`all' -- nuke all mail headers 352`all' -- nuke all mail headers
353`none' -- don't nuke any mail headers 353`none' -- don't nuke any mail headers
@@ -796,7 +796,7 @@ The number of lines left is specified by `sc-blank-lines-after-headers'."
796 nonentry-func '(sc-mail-nuke-header-line))) 796 nonentry-func '(sc-mail-nuke-header-line)))
797 ;; we never get far enough to interpret a frame if s-n-m-h == 'none 797 ;; we never get far enough to interpret a frame if s-n-m-h == 'none
798 ((eq sc-nuke-mail-headers 'none)) 798 ((eq sc-nuke-mail-headers 'none))
799 (t (error "Illegal value for sc-nuke-mail-headers: %s" 799 (t (error "Invalid value for sc-nuke-mail-headers: %s"
800 sc-nuke-mail-headers)) 800 sc-nuke-mail-headers))
801 ) ; end-cond 801 ) ; end-cond
802 (append 802 (append
@@ -838,7 +838,7 @@ error occurs."
838 "Return the mail header field value associated with FIELD. 838 "Return the mail header field value associated with FIELD.
839If there was no mail header with FIELD as its key, return the value of 839If there was no mail header with FIELD as its key, return the value of
840`sc-mumble'. FIELD is case insensitive." 840`sc-mumble'. FIELD is case insensitive."
841 (or (cdr (assoc (downcase field) sc-mail-info)) sc-mumble)) 841 (or (cdr (assoc-string field sc-mail-info 'case-fold)) sc-mumble))
842 842
843(defun sc-mail-field-query (arg) 843(defun sc-mail-field-query (arg)
844 "View the value of a mail field. 844 "View the value of a mail field.
@@ -916,8 +916,8 @@ Match addresses of the style ``<name[stuff]>.''"
916 "Get the full email address path from FROM. 916 "Get the full email address path from FROM.
917AUTHOR is the author's name (which is removed from the address)." 917AUTHOR is the author's name (which is removed from the address)."
918 (let ((eos (length from))) 918 (let ((eos (length from)))
919 (if (string-match (concat "\\(^\\|^\"\\)" author 919 (if (string-match (concat "\\`\"?" (regexp-quote author)
920 "\\(\\s +\\|\"\\s +\\)") from 0) 920 "\"?\\s +") from 0)
921 (let ((address (substring from (match-end 0) eos))) 921 (let ((address (substring from (match-end 0) eos)))
922 (if (and (= (aref address 0) ?<) 922 (if (and (= (aref address 0) ?<)
923 (= (aref address (1- (length address))) ?>)) 923 (= (aref address (1- (length address))) ?>))
@@ -2054,5 +2054,5 @@ more information. Info node `(SC)Top'."
2054(provide 'supercite) 2054(provide 'supercite)
2055(run-hooks 'sc-load-hook) 2055(run-hooks 'sc-load-hook)
2056 2056
2057;;; arch-tag: a5d5bfa6-3bd5-4414-8c65-0afc83e45cd3 2057;; arch-tag: a5d5bfa6-3bd5-4414-8c65-0afc83e45cd3
2058;;; supercite.el ends here 2058;;; supercite.el ends here
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index d988cae1260..273d4739b4d 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -136,7 +136,7 @@ A large number or nil slows down menu responsiveness."
136 '(menu-item "--")) 136 '(menu-item "--"))
137 137
138(define-key menu-bar-file-menu [recover-session] 138(define-key menu-bar-file-menu [recover-session]
139 '(menu-item "Recover Crashed Session..." recover-session 139 '(menu-item "Recover Crashed Session" recover-session
140 :enable (and auto-save-list-file-prefix 140 :enable (and auto-save-list-file-prefix
141 (file-directory-p 141 (file-directory-p
142 (file-name-directory auto-save-list-file-prefix)) 142 (file-name-directory auto-save-list-file-prefix))
@@ -298,7 +298,7 @@ A large number or nil slows down menu responsiveness."
298 '(menu-item "Continue Tags Search" tags-loop-continue 298 '(menu-item "Continue Tags Search" tags-loop-continue
299 :help "Continue last tags search operation")) 299 :help "Continue last tags search operation"))
300(define-key menu-bar-search-menu [tags-srch] 300(define-key menu-bar-search-menu [tags-srch]
301 '(menu-item "Search tagged files" tags-search 301 '(menu-item "Search tagged files..." tags-search
302 :help "Search for a regexp in all tagged files")) 302 :help "Search for a regexp in all tagged files"))
303(define-key menu-bar-search-menu [separator-tag-search] 303(define-key menu-bar-search-menu [separator-tag-search]
304 '(menu-item "--")) 304 '(menu-item "--"))
@@ -342,7 +342,7 @@ A large number or nil slows down menu responsiveness."
342 '(menu-item "Continue Replace" tags-loop-continue 342 '(menu-item "Continue Replace" tags-loop-continue
343 :help "Continue last tags replace operation")) 343 :help "Continue last tags replace operation"))
344(define-key menu-bar-replace-menu [tags-repl] 344(define-key menu-bar-replace-menu [tags-repl]
345 '(menu-item "Replace in tagged files" tags-query-replace 345 '(menu-item "Replace in tagged files..." tags-query-replace
346 :help "Interactively replace a regexp in all tagged files")) 346 :help "Interactively replace a regexp in all tagged files"))
347(define-key menu-bar-replace-menu [separator-replace-tags] 347(define-key menu-bar-replace-menu [separator-replace-tags]
348 '(menu-item "--")) 348 '(menu-item "--"))
@@ -377,14 +377,14 @@ A large number or nil slows down menu responsiveness."
377(defvar menu-bar-goto-menu (make-sparse-keymap "Go To")) 377(defvar menu-bar-goto-menu (make-sparse-keymap "Go To"))
378 378
379(define-key menu-bar-goto-menu [set-tags-name] 379(define-key menu-bar-goto-menu [set-tags-name]
380 '(menu-item "Set Tags File Name" visit-tags-table 380 '(menu-item "Set Tags File Name..." visit-tags-table
381 :help "Tell Tags commands which tag table file to use")) 381 :help "Tell Tags commands which tag table file to use"))
382 382
383(define-key menu-bar-goto-menu [separator-tag-file] 383(define-key menu-bar-goto-menu [separator-tag-file]
384 '(menu-item "--")) 384 '(menu-item "--"))
385 385
386(define-key menu-bar-goto-menu [apropos-tags] 386(define-key menu-bar-goto-menu [apropos-tags]
387 '(menu-item "Tags Apropos" tags-apropos 387 '(menu-item "Tags Apropos..." tags-apropos
388 :help "Find function/variables whose names match regexp")) 388 :help "Find function/variables whose names match regexp"))
389(define-key menu-bar-goto-menu [next-tag-otherw] 389(define-key menu-bar-goto-menu [next-tag-otherw]
390 '(menu-item "Next Tag in Other Window" 390 '(menu-item "Next Tag in Other Window"
@@ -673,7 +673,7 @@ by \"Save Options\" in Custom buffers.")
673 '("--")) 673 '("--"))
674 674
675(define-key menu-bar-options-menu [mouse-set-font] 675(define-key menu-bar-options-menu [mouse-set-font]
676 '(menu-item "Set Font/Fontset" mouse-set-font 676 '(menu-item "Set Font/Fontset..." mouse-set-font
677 :visible (display-multi-font-p) 677 :visible (display-multi-font-p)
678 :help "Select a font from list of known fonts/fontsets")) 678 :help "Select a font from list of known fonts/fontsets"))
679 679
@@ -1332,10 +1332,10 @@ key (or menu-item)"))
1332(define-key menu-bar-manuals-menu [sep3] 1332(define-key menu-bar-manuals-menu [sep3]
1333 '("--")) 1333 '("--"))
1334(define-key menu-bar-manuals-menu [command] 1334(define-key menu-bar-manuals-menu [command]
1335 '(menu-item "Find Command in Manual" Info-goto-emacs-command-node 1335 '(menu-item "Find Command in Manual..." Info-goto-emacs-command-node
1336 :help "Display manual section that describes a command")) 1336 :help "Display manual section that describes a command"))
1337(define-key menu-bar-manuals-menu [key] 1337(define-key menu-bar-manuals-menu [key]
1338 '(menu-item "Find Key in Manual" Info-goto-emacs-key-command-node 1338 '(menu-item "Find Key in Manual..." Info-goto-emacs-key-command-node
1339 :help "Display manual section that describes a key")) 1339 :help "Display manual section that describes a key"))
1340 1340
1341(define-key menu-bar-help-menu [eliza] 1341(define-key menu-bar-help-menu [eliza]
@@ -1369,7 +1369,7 @@ key (or menu-item)"))
1369(define-key menu-bar-help-menu [sep2] 1369(define-key menu-bar-help-menu [sep2]
1370 '("--")) 1370 '("--"))
1371(define-key menu-bar-help-menu [finder-by-keyword] 1371(define-key menu-bar-help-menu [finder-by-keyword]
1372 '(menu-item "Find Emacs Packages..." finder-by-keyword 1372 '(menu-item "Find Emacs Packages" finder-by-keyword
1373 :help "Find packages and features by keyword")) 1373 :help "Find packages and features by keyword"))
1374(define-key menu-bar-help-menu [manuals] 1374(define-key menu-bar-help-menu [manuals]
1375 (list 'menu-item "More Manuals" menu-bar-manuals-menu 1375 (list 'menu-item "More Manuals" menu-bar-manuals-menu
diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog
index e48186d8b3b..b6bcb3938b0 100644
--- a/lisp/mh-e/ChangeLog
+++ b/lisp/mh-e/ChangeLog
@@ -1,3 +1,11 @@
12005-03-25 Werner Lemberg <wl@gnu.org>
2
3 * mh-e.el, mh-identity.el, mh-mime.el: Replace `legal' with `valid'.
4
52005-03-25 Werner Lemberg <wl@gnu.org>
6
7 * mh-e.el: Replace `illegal' with `invalid'.
8
12004-09-07 Stefan <monnier@iro.umontreal.ca> 92004-09-07 Stefan <monnier@iro.umontreal.ca>
2 10
3 * mh-inc.el (mh-inc-spool-list): Correctly declare the external var. 11 * mh-inc.el (mh-inc-spool-list): Correctly declare the external var.
diff --git a/lisp/mh-e/mh-e.el b/lisp/mh-e/mh-e.el
index 2081d49b6cd..c2322624507 100644
--- a/lisp/mh-e/mh-e.el
+++ b/lisp/mh-e/mh-e.el
@@ -1,7 +1,7 @@
1;;; mh-e.el --- GNU Emacs interface to the MH mail system 1;;; mh-e.el --- GNU Emacs interface to the MH mail system
2 2
3;; Copyright (C) 1985, 86, 87, 88, 90, 92, 93, 94, 95, 97, 1999, 3;; Copyright (C) 1985, 86, 87, 88, 90, 92, 93, 94, 95, 97, 1999,
4;; 2000, 01, 02, 03, 2004 Free Software Foundation, Inc. 4;; 2000, 01, 02, 03, 2004, 2005 Free Software Foundation, Inc.
5 5
6;; Author: Bill Wohler <wohler@newt.com> 6;; Author: Bill Wohler <wohler@newt.com>
7;; Maintainer: Bill Wohler <wohler@newt.com> 7;; Maintainer: Bill Wohler <wohler@newt.com>
@@ -1526,7 +1526,7 @@ Many commands that operate on individual messages, such as `mh-forward' or
1526ways. 1526ways.
1527 1527
1528If you provide the prefix argument (\\[universal-argument]) to these commands, 1528If you provide the prefix argument (\\[universal-argument]) to these commands,
1529then you will be prompted for the message range. This can be any legal MH 1529then you will be prompted for the message range. This can be any valid MH
1530range which can include messages, sequences, and the abbreviations (described 1530range which can include messages, sequences, and the abbreviations (described
1531in the mh(1) man page): 1531in the mh(1) man page):
1532 1532
@@ -2146,7 +2146,7 @@ to avoid exceeding system command line argument limits."
2146(defun mh-greaterp (msg1 msg2) 2146(defun mh-greaterp (msg1 msg2)
2147 "Return the greater of two message indicators MSG1 and MSG2. 2147 "Return the greater of two message indicators MSG1 and MSG2.
2148Strings are \"smaller\" than numbers. 2148Strings are \"smaller\" than numbers.
2149Legal values are things like \"cur\", \"last\", 1, and 1820." 2149Valid values are things like \"cur\", \"last\", 1, and 1820."
2150 (if (numberp msg1) 2150 (if (numberp msg1)
2151 (if (numberp msg2) 2151 (if (numberp msg2)
2152 (> msg1 msg2) 2152 (> msg1 msg2)
@@ -2158,7 +2158,7 @@ Legal values are things like \"cur\", \"last\", 1, and 1820."
2158(defun mh-lessp (msg1 msg2) 2158(defun mh-lessp (msg1 msg2)
2159 "Return the lesser of two message indicators MSG1 and MSG2. 2159 "Return the lesser of two message indicators MSG1 and MSG2.
2160Strings are \"smaller\" than numbers. 2160Strings are \"smaller\" than numbers.
2161Legal values are things like \"cur\", \"last\", 1, and 1820." 2161Valid values are things like \"cur\", \"last\", 1, and 1820."
2162 (not (mh-greaterp msg1 msg2))) 2162 (not (mh-greaterp msg1 msg2)))
2163 2163
2164 2164
@@ -2306,7 +2306,7 @@ If INTERNAL-FLAG is non-nil, then do not inform MH of the change."
2306(defun mh-define-sequence (seq msgs) 2306(defun mh-define-sequence (seq msgs)
2307 "Define the SEQ to contain the list of MSGS. 2307 "Define the SEQ to contain the list of MSGS.
2308Do not mark pseudo-sequences or empty sequences. 2308Do not mark pseudo-sequences or empty sequences.
2309Signals an error if SEQ is an illegal name." 2309Signals an error if SEQ is an invalid name."
2310 (if (and msgs 2310 (if (and msgs
2311 (mh-valid-seq-p seq) 2311 (mh-valid-seq-p seq)
2312 (not (mh-folder-name-p seq))) 2312 (not (mh-folder-name-p seq)))
diff --git a/lisp/mh-e/mh-identity.el b/lisp/mh-e/mh-identity.el
index be385ad09e6..4bb5f90cf18 100644
--- a/lisp/mh-e/mh-identity.el
+++ b/lisp/mh-e/mh-identity.el
@@ -1,6 +1,6 @@
1;;; mh-identity.el --- Multiple identify support for MH-E. 1;;; mh-identity.el --- Multiple identify support for MH-E.
2 2
3;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Peter S. Galbraith <psg@debian.org> 5;; Author: Peter S. Galbraith <psg@debian.org>
6;; Maintainer: Bill Wohler <wohler@newt.com> 6;; Maintainer: Bill Wohler <wohler@newt.com>
@@ -122,7 +122,7 @@ Return t if anything is deleted."
122 "Return the handler for a FIELD or nil if none set. 122 "Return the handler for a FIELD or nil if none set.
123The field name is downcased. If the FIELD begins with the character 123The field name is downcased. If the FIELD begins with the character
124`:', then it must have a special handler defined in 124`:', then it must have a special handler defined in
125`mh-identity-handlers', else return an error since it is not a legal 125`mh-identity-handlers', else return an error since it is not a valid
126message header." 126message header."
127 (or (cdr (assoc (downcase field) mh-identity-handlers)) 127 (or (cdr (assoc (downcase field) mh-identity-handlers))
128 (and (eq (aref field 0) ?:) 128 (and (eq (aref field 0) ?:)
diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el
index 72cb654dedd..bc870134779 100644
--- a/lisp/mh-e/mh-mime.el
+++ b/lisp/mh-e/mh-mime.el
@@ -1,6 +1,7 @@
1;;; mh-mime.el --- MH-E support for composing MIME messages 1;;; mh-mime.el --- MH-E support for composing MIME messages
2 2
3;; Copyright (C) 1993, 1995, 2001, 02, 03, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1993, 1995, 2001, 02, 03, 2004, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Author: Bill Wohler <wohler@newt.com> 6;; Author: Bill Wohler <wohler@newt.com>
6;; Maintainer: Bill Wohler <wohler@newt.com> 7;; Maintainer: Bill Wohler <wohler@newt.com>
@@ -197,7 +198,7 @@ Returns nil if file command not on system."
197 ("text/richtext") ("text/x-vcard") ("text/xml") 198 ("text/richtext") ("text/x-vcard") ("text/xml")
198 199
199 ("video/mpeg") ("video/quicktime")) 200 ("video/mpeg") ("video/quicktime"))
200 "Legal MIME content types. 201 "Valid MIME content types.
201See documentation for \\[mh-edit-mhn].") 202See documentation for \\[mh-edit-mhn].")
202 203
203;; RFC 2045 - Multipurpose Internet Mail Extensions (MIME) Part One: 204;; RFC 2045 - Multipurpose Internet Mail Extensions (MIME) Part One:
@@ -224,7 +225,7 @@ See documentation for \\[mh-edit-mhn].")
224 ("tftp") ; RFC2046 Trivial File Transfer Protocol 225 ("tftp") ; RFC2046 Trivial File Transfer Protocol
225 ("url") ; RFC2017 URL scheme MIME access-type Protocol 226 ("url") ; RFC2017 URL scheme MIME access-type Protocol
226 ("wais")) ; RFC1738 Wide Area Information Servers 227 ("wais")) ; RFC1738 Wide Area Information Servers
227 "Legal MIME access-type values.") 228 "Valid MIME access-type values.")
228 229
229;;;###mh-autoload 230;;;###mh-autoload
230(defun mh-mhn-compose-insertion (filename type description attributes) 231(defun mh-mhn-compose-insertion (filename type description attributes)
diff --git a/lisp/midnight.el b/lisp/midnight.el
index 37bdf065f51..a81ce37856a 100644
--- a/lisp/midnight.el
+++ b/lisp/midnight.el
@@ -1,6 +1,6 @@
1;;; midnight.el --- run something every midnight, e.g., kill old buffers 1;;; midnight.el --- run something every midnight, e.g., kill old buffers
2 2
3;;; Copyright (C) 1998, 2004 Free Software Foundation, Inc. 3;;; Copyright (C) 1998, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Sam Steingold <sds@usa.net> 5;; Author: Sam Steingold <sds@usa.net>
6;; Maintainer: Sam Steingold <sds@usa.net> 6;; Maintainer: Sam Steingold <sds@usa.net>
@@ -215,7 +215,7 @@ the time when it is run.")
215Sets the first argument SYMB (which must be symbol `midnight-delay') 215Sets the first argument SYMB (which must be symbol `midnight-delay')
216to its second argument TM." 216to its second argument TM."
217 (assert (eq symb 'midnight-delay) t 217 (assert (eq symb 'midnight-delay) t
218 "Illegal argument to `midnight-delay-set': `%s'") 218 "Invalid argument to `midnight-delay-set': `%s'")
219 (set symb tm) 219 (set symb tm)
220 (when (timerp midnight-timer) (cancel-timer midnight-timer)) 220 (when (timerp midnight-timer) (cancel-timer midnight-timer))
221 (setq midnight-timer 221 (setq midnight-timer
diff --git a/lisp/international/iso-acc.el b/lisp/obsolete/iso-acc.el
index 6c94f4aa562..740fa942c13 100644
--- a/lisp/international/iso-acc.el
+++ b/lisp/obsolete/iso-acc.el
@@ -1,6 +1,7 @@
1;;; iso-acc.el --- minor mode providing electric accent keys 1;;; iso-acc.el --- minor mode providing electric accent keys
2 2
3;; Copyright (C) 1993, 1994, 1996, 2001 Free Software Foundation, Inc. 3;; Copyright (C) 1993, 1994, 1996, 2001, 2002, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Author: Johan Vromans 6;; Author: Johan Vromans
6;; Maintainer: FSF 7;; Maintainer: FSF
@@ -487,5 +488,5 @@ Noninteractively, this operates on text from START to END."
487 488
488(add-hook 'minibuffer-setup-hook 'iso-acc-minibuf-setup) 489(add-hook 'minibuffer-setup-hook 'iso-acc-minibuf-setup)
489 490
490;;; arch-tag: 149ff409-7c3e-4574-9b5d-ac038939c0a6 491;; arch-tag: 149ff409-7c3e-4574-9b5d-ac038939c0a6
491;;; iso-acc.el ends here 492;;; iso-acc.el ends here
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 457177d7c4c..bafc901d3d1 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -1613,6 +1613,8 @@ and overlay is highlighted between MK and END-MK."
1613 (compilation-set-window-height w) 1613 (compilation-set-window-height w)
1614 1614
1615 (when highlight-regexp 1615 (when highlight-regexp
1616 (if (timerp next-error-highlight-timer)
1617 (cancel-timer next-error-highlight-timer))
1616 (unless compilation-highlight-overlay 1618 (unless compilation-highlight-overlay
1617 (setq compilation-highlight-overlay 1619 (setq compilation-highlight-overlay
1618 (make-overlay (point-min) (point-min))) 1620 (make-overlay (point-min) (point-min)))
@@ -1632,8 +1634,11 @@ and overlay is highlighted between MK and END-MK."
1632 (move-overlay compilation-highlight-overlay 1634 (move-overlay compilation-highlight-overlay
1633 (point) end (current-buffer))) 1635 (point) end (current-buffer)))
1634 (if (numberp next-error-highlight) 1636 (if (numberp next-error-highlight)
1635 (sit-for next-error-highlight)) 1637 (setq next-error-highlight-timer
1636 (if (not (eq next-error-highlight t)) 1638 (run-at-time next-error-highlight nil 'delete-overlay
1639 compilation-highlight-overlay)))
1640 (if (not (or (eq next-error-highlight t)
1641 (numberp next-error-highlight)))
1637 (delete-overlay compilation-highlight-overlay)))))) 1642 (delete-overlay compilation-highlight-overlay))))))
1638 (when (and (eq next-error-highlight 'fringe-arrow)) 1643 (when (and (eq next-error-highlight 'fringe-arrow))
1639 (set (make-local-variable 'overlay-arrow-position) 1644 (set (make-local-variable 'overlay-arrow-position)
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index 64f039f54f9..700fa1c9efe 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -1,6 +1,6 @@
1;;; cperl-mode.el --- Perl code editing commands for Emacs 1;;; cperl-mode.el --- Perl code editing commands for Emacs
2 2
3;; Copyright (C) 1985,86,87,91,92,93,94,95,96,97,98,99,2000,03,2004 3;; Copyright (C) 1985,86,87,91,92,93,94,95,96,97,98,99,2000,03,2004,2005
4;; Free Software Foundation, Inc. 4;; Free Software Foundation, Inc.
5 5
6;; Author: Ilya Zakharevich and Bob Olson 6;; Author: Ilya Zakharevich and Bob Olson
@@ -713,7 +713,7 @@ should work if the balance of delimiters is not broken by POD).
713 713
714The main trick (to make $ a \"backslash\") makes constructions like 714The main trick (to make $ a \"backslash\") makes constructions like
715${aaa} look like unbalanced braces. The only trick I can think of is 715${aaa} look like unbalanced braces. The only trick I can think of is
716to insert it as $ {aaa} (legal in perl5, not in perl4). 716to insert it as $ {aaa} (valid in perl5, not in perl4).
717 717
718Similar problems arise in regexps, when /(\\s|$)/ should be rewritten 718Similar problems arise in regexps, when /(\\s|$)/ should be rewritten
719as /($|\\s)/. Note that such a transposition is not always possible. 719as /($|\\s)/. Note that such a transposition is not always possible.
diff --git a/lisp/progmodes/ebnf-abn.el b/lisp/progmodes/ebnf-abn.el
index 35771a10f32..5bb0dd03913 100644
--- a/lisp/progmodes/ebnf-abn.el
+++ b/lisp/progmodes/ebnf-abn.el
@@ -1,6 +1,6 @@
1;;; ebnf-abn.el --- parser for ABNF (Augmented BNF) 1;;; ebnf-abn.el --- parser for ABNF (Augmented BNF)
2 2
3;; Copyright (C) 2004 Free Sofware Foundation, Inc. 3;; Copyright (C) 2004, 2005 Free Sofware Foundation, Inc.
4 4
5;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> 5;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
6;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> 6;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -518,7 +518,7 @@ See documentation for variable `ebnf-abn-lex'."
518 'end-of-input) 518 'end-of-input)
519 ;; error 519 ;; error
520 ((eq token 'error) 520 ((eq token 'error)
521 (error "Illegal character")) 521 (error "Invalid character"))
522 ;; end of rule 522 ;; end of rule
523 ((eq token 'end-of-rule) 523 ((eq token 'end-of-rule)
524 'end-of-rule) 524 'end-of-rule)
@@ -600,7 +600,7 @@ See documentation for variable `ebnf-abn-lex'."
600 ((= (following-char) ?\n) 600 ((= (following-char) ?\n)
601 t) 601 t)
602 (t 602 (t
603 (error "Illegal character")) 603 (error "Invalid character"))
604 )) 604 ))
605 605
606 606
diff --git a/lisp/progmodes/ebnf-bnf.el b/lisp/progmodes/ebnf-bnf.el
index d32ad5a77c9..09db8f8865d 100644
--- a/lisp/progmodes/ebnf-bnf.el
+++ b/lisp/progmodes/ebnf-bnf.el
@@ -1,6 +1,6 @@
1;;; ebnf-bnf.el --- parser for EBNF 1;;; ebnf-bnf.el --- parser for EBNF
2 2
3;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 3;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
4;; Free Sofware Foundation, Inc. 4;; Free Sofware Foundation, Inc.
5 5
6;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> 6;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -461,7 +461,7 @@ See documentation for variable `ebnf-bnf-lex'."
461 'end-of-input) 461 'end-of-input)
462 ;; error 462 ;; error
463 ((eq token 'error) 463 ((eq token 'error)
464 (error "Illegal character")) 464 (error "Invalid character"))
465 ;; default 465 ;; default
466 ((eq token 'default) 466 ((eq token 'default)
467 (forward-char) 467 (forward-char)
@@ -470,7 +470,7 @@ See documentation for variable `ebnf-bnf-lex'."
470 (prog1 470 (prog1
471 (ebnf-bnf-lex) 471 (ebnf-bnf-lex)
472 (setq ebnf-default-p t)) 472 (setq ebnf-default-p t))
473 (error "Illegal `default' element"))) 473 (error "Invalid `default' element")))
474 ;; integer 474 ;; integer
475 ((eq token 'integer) 475 ((eq token 'integer)
476 (setq ebnf-bnf-lex (ebnf-buffer-substring "0-9")) 476 (setq ebnf-bnf-lex (ebnf-buffer-substring "0-9"))
@@ -550,7 +550,7 @@ See documentation for variable `ebnf-bnf-lex'."
550 (forward-char) 550 (forward-char)
551 t) 551 t)
552 (t 552 (t
553 (error "Illegal character")) 553 (error "Invalid character"))
554 )) 554 ))
555 555
556 556
diff --git a/lisp/progmodes/ebnf-dtd.el b/lisp/progmodes/ebnf-dtd.el
index 9a99f222cc8..621cf424463 100644
--- a/lisp/progmodes/ebnf-dtd.el
+++ b/lisp/progmodes/ebnf-dtd.el
@@ -1,6 +1,6 @@
1;;; ebnf-dtd.el --- parser for DTD (Data Type Description for XML) 1;;; ebnf-dtd.el --- parser for DTD (Data Type Description for XML)
2 2
3;; Copyright (C) 2004 Free Sofware Foundation, Inc. 3;; Copyright (C) 2004, 2005 Free Sofware Foundation, Inc.
4 4
5;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> 5;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
6;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> 6;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -1181,7 +1181,7 @@ See documentation for variable `ebnf-dtd-lex'."
1181 'end-of-input) 1181 'end-of-input)
1182 ;; error 1182 ;; error
1183 ((eq token 'error) 1183 ((eq token 'error)
1184 (error "Illegal character")) 1184 (error "Invalid character"))
1185 ;; beginning of declaration: 1185 ;; beginning of declaration:
1186 ;; <?name, <!ATTLIST, <!DOCTYPE, <!ELEMENT, <!ENTITY, <!NOTATION 1186 ;; <?name, <!ATTLIST, <!DOCTYPE, <!ELEMENT, <!ENTITY, <!NOTATION
1187 ((eq token 'less-than) 1187 ((eq token 'less-than)
@@ -1322,7 +1322,7 @@ See documentation for variable `ebnf-dtd-lex'."
1322 (forward-char 3) 1322 (forward-char 3)
1323 t) 1323 t)
1324 (t 1324 (t
1325 (error "Illegal character")) 1325 (error "Invalid character"))
1326 )) 1326 ))
1327 1327
1328 1328
diff --git a/lisp/progmodes/ebnf-ebx.el b/lisp/progmodes/ebnf-ebx.el
index d7dfa7af89f..45ccb956af8 100644
--- a/lisp/progmodes/ebnf-ebx.el
+++ b/lisp/progmodes/ebnf-ebx.el
@@ -1,6 +1,6 @@
1;;; ebnf-ebx.el --- parser for EBNF used to specify XML (EBNFX) 1;;; ebnf-ebx.el --- parser for EBNF used to specify XML (EBNFX)
2 2
3;; Copyright (C) 2004 Free Sofware Foundation, Inc. 3;; Copyright (C) 2004, 2005 Free Sofware Foundation, Inc.
4 4
5;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> 5;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
6;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br> 6;; Maintainer: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -453,7 +453,7 @@ See documentation for variable `ebnf-ebx-lex'."
453 'end-of-input) 453 'end-of-input)
454 ;; error 454 ;; error
455 ((eq token 'error) 455 ((eq token 'error)
456 (error "Illegal character")) 456 (error "Invalid character"))
457 ;; end of rule 457 ;; end of rule
458 ((eq token 'end-of-rule) 458 ((eq token 'end-of-rule)
459 'end-of-rule) 459 'end-of-rule)
diff --git a/lisp/progmodes/ebnf-iso.el b/lisp/progmodes/ebnf-iso.el
index f36065bd558..ba28dfb5af9 100644
--- a/lisp/progmodes/ebnf-iso.el
+++ b/lisp/progmodes/ebnf-iso.el
@@ -1,6 +1,6 @@
1;;; ebnf-iso.el --- parser for ISO EBNF 1;;; ebnf-iso.el --- parser for ISO EBNF
2 2
3;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 3;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
4;; Free Software Foundation, Inc. 4;; Free Software Foundation, Inc.
5 5
6;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> 6;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -112,7 +112,7 @@
112;; 112;;
113;; ISO EBNF accepts the characters given by <character> production above, 113;; ISO EBNF accepts the characters given by <character> production above,
114;; HORIZONTAL TAB (^I), VERTICAL TAB (^K), NEWLINE (^J or ^M) and FORM FEED 114;; HORIZONTAL TAB (^I), VERTICAL TAB (^K), NEWLINE (^J or ^M) and FORM FEED
115;; (^L), any other characters are illegal. But ebnf2ps accepts also the 115;; (^L), any other characters are invalid. But ebnf2ps accepts also the
116;; european 8-bit accentuated characters (from \240 to \377) and underscore 116;; european 8-bit accentuated characters (from \240 to \377) and underscore
117;; (_). 117;; (_).
118;; 118;;
@@ -427,7 +427,7 @@ See documentation for variable `ebnf-iso-lex'."
427 'end-of-input) 427 'end-of-input)
428 ;; error 428 ;; error
429 ((eq token 'error) 429 ((eq token 'error)
430 (error "Illegal character")) 430 (error "Invalid character"))
431 ;; integer 431 ;; integer
432 ((eq token 'integer) 432 ((eq token 'integer)
433 (setq ebnf-iso-lex (ebnf-buffer-substring "0-9")) 433 (setq ebnf-iso-lex (ebnf-buffer-substring "0-9"))
@@ -527,7 +527,7 @@ See documentation for variable `ebnf-iso-lex'."
527 (forward-char) 527 (forward-char)
528 (setq pair (1+ pair)))) 528 (setq pair (1+ pair))))
529 (t 529 (t
530 (error "Illegal character")) 530 (error "Invalid character"))
531 )))) 531 ))))
532 532
533 533
diff --git a/lisp/progmodes/ebnf-yac.el b/lisp/progmodes/ebnf-yac.el
index c7bf0e31541..58f422b1714 100644
--- a/lisp/progmodes/ebnf-yac.el
+++ b/lisp/progmodes/ebnf-yac.el
@@ -1,6 +1,6 @@
1;;; ebnf-yac.el --- parser for Yacc/Bison 1;;; ebnf-yac.el --- parser for Yacc/Bison
2 2
3;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 3;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
4;; Free Sofware Foundation, Inc. 4;; Free Sofware Foundation, Inc.
5 5
6;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> 6;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -346,7 +346,7 @@ See documentation for variable `ebnf-yac-lex'."
346 'end-of-input) 346 'end-of-input)
347 ;; error 347 ;; error
348 ((eq token 'error) 348 ((eq token 'error)
349 (error "Illegal character")) 349 (error "Invalid character"))
350 ;; "string" 350 ;; "string"
351 ((eq token 'string) 351 ((eq token 'string)
352 (setq ebnf-yac-lex (ebnf-get-string)) 352 (setq ebnf-yac-lex (ebnf-get-string))
@@ -425,7 +425,7 @@ See documentation for variable `ebnf-yac-lex'."
425 ((= (following-char) ?\') 425 ((= (following-char) ?\')
426 (ebnf-string " -&(-~" ?\' "character")) 426 (ebnf-string " -&(-~" ?\' "character"))
427 (t 427 (t
428 (error "Illegal character")) 428 (error "Invalid character"))
429 ))) 429 )))
430 (ebnf-yac-skip-spaces)) 430 (ebnf-yac-skip-spaces))
431 431
@@ -476,7 +476,7 @@ See documentation for variable `ebnf-yac-lex'."
476 (forward-char) 476 (forward-char)
477 (setq not-end nil))) 477 (setq not-end nil)))
478 (t 478 (t
479 (error "Illegal character")) 479 (error "Invalid character"))
480 )))) 480 ))))
481 481
482 482
diff --git a/lisp/progmodes/ebnf2ps.el b/lisp/progmodes/ebnf2ps.el
index 1d2f8d630e1..1a680ffa077 100644
--- a/lisp/progmodes/ebnf2ps.el
+++ b/lisp/progmodes/ebnf2ps.el
@@ -1,6 +1,6 @@
1;;; ebnf2ps.el --- translate an EBNF to a syntactic chart on PostScript 1;;; ebnf2ps.el --- translate an EBNF to a syntactic chart on PostScript
2 2
3;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 3;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
4;; Free Software Foundation, Inc. 4;; Free Software Foundation, Inc.
5 5
6;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br> 6;; Author: Vinicius Jose Latorre <viniciusjl@ig.com.br>
@@ -5499,7 +5499,7 @@ killed after process termination."
5499 ;;(skip-chars-forward (concat chars "\240-\377") ebnf-limit) 5499 ;;(skip-chars-forward (concat chars "\240-\377") ebnf-limit)
5500 (skip-chars-forward (concat chars ebnf-8-bit-chars) ebnf-limit) 5500 (skip-chars-forward (concat chars ebnf-8-bit-chars) ebnf-limit)
5501 (if (or (eobp) (/= (following-char) eos-char)) 5501 (if (or (eobp) (/= (following-char) eos-char))
5502 (error "Illegal %s: missing `%c'" kind eos-char) 5502 (error "Invalid %s: missing `%c'" kind eos-char)
5503 (forward-char) 5503 (forward-char)
5504 (1- (point)))))) 5504 (1- (point))))))
5505 5505
diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el
index fdb7fffac6c..4c8b847b7cd 100644
--- a/lisp/progmodes/f90.el
+++ b/lisp/progmodes/f90.el
@@ -597,41 +597,32 @@ characters long.")
597 597
598;; Hideshow support. 598;; Hideshow support.
599(defconst f90-end-block-re 599(defconst f90-end-block-re
600 (concat "^[ \t0-9]*\\<end\\>[ \t]*" 600 (concat "^[ \t0-9]*\\<end[ \t]*"
601 (regexp-opt '("do" "if" "forall" "function" "interface" 601 (regexp-opt '("do" "if" "forall" "function" "interface"
602 "module" "program" "select" "subroutine" 602 "module" "program" "select" "subroutine"
603 "type" "where" ) t) 603 "type" "where" ) t)
604 "[ \t]*\\sw*") 604 "[ \t]*\\sw*")
605 "Regexp matching the end of a \"block\" of F90 code. 605 "Regexp matching the end of an F90 \"block\", from the line start.
606Used in the F90 entry in `hs-special-modes-alist'.") 606Used in the F90 entry in `hs-special-modes-alist'.")
607 607
608;; Ignore the fact that FUNCTION, SUBROUTINE, WHERE, FORALL have a 608;; Ignore the fact that FUNCTION, SUBROUTINE, WHERE, FORALL have a
609;; following "(". DO, CASE, IF can have labels; IF must be 609;; following "(". DO, CASE, IF can have labels.
610;; accompanied by THEN.
611;; A big problem is that many of these statements can be broken over
612;; lines, even with embedded comments. We only try to handle this for
613;; IF ... THEN statements, assuming and hoping it will be less common
614;; for other constructs. We match up to one new-line, provided ")
615;; THEN" appears on one line. Matching on just ") THEN" is no good,
616;; since that includes ELSE branches.
617;; For a fully accurate solution, hideshow would probably have to be
618;; modified to allow functions as well as regexps to be used to
619;; specify block start and end positions.
620(defconst f90-start-block-re 610(defconst f90-start-block-re
621 (concat 611 (concat
622 "^[ \t0-9]*" ; statement number 612 "^[ \t0-9]*" ; statement number
623 "\\(\\(" 613 "\\(\\("
624 "\\(\\sw+[ \t]*:[ \t]*\\)?" ; structure label 614 "\\(\\sw+[ \t]*:[ \t]*\\)?" ; structure label
625 "\\(do\\|select[ \t]*case\\|if[ \t]*(.*\n?.*)[ \t]*then\\|" 615 "\\(do\\|select[ \t]*case\\|"
616 ;; See comments in fortran-start-block-re for the problems of IF.
617 "if[ \t]*(\\(.*\\|"
618 ".*\n\\([^if]*\\([^i].\\|.[^f]\\|.\\>\\)\\)\\)\\<then\\|"
626 ;; Distinguish WHERE block from isolated WHERE. 619 ;; Distinguish WHERE block from isolated WHERE.
627 "\\(where\\|forall\\)[ \t]*(.*)[ \t]*\\(!\\|$\\)\\)\\)" 620 "\\(where\\|forall\\)[ \t]*(.*)[ \t]*\\(!\\|$\\)\\)\\)"
628 "\\|" 621 "\\|"
629 "program\\|interface\\|module\\|type\\|function\\|subroutine" 622 "program\\|interface\\|module\\|type\\|function\\|subroutine"
630 ;; ") THEN" at line end. Problem - also does ELSE.
631;;; "\\|.*)[ \t]*then[ \t]*\\($\\|!\\)"
632 "\\)" 623 "\\)"
633 "[ \t]*") 624 "[ \t]*")
634 "Regexp matching the start of a \"block\" of F90 code. 625 "Regexp matching the start of an F90 \"block\", from the line start.
635A simple regexp cannot do this in fully correct fashion, so this 626A simple regexp cannot do this in fully correct fashion, so this
636tries to strike a compromise between complexity and flexibility. 627tries to strike a compromise between complexity and flexibility.
637Used in the F90 entry in `hs-special-modes-alist'.") 628Used in the F90 entry in `hs-special-modes-alist'.")
@@ -1305,12 +1296,12 @@ Checks for consistency of block types and labels (if present).
1305Does not check the outermost block, because it may be incomplete. 1296Does not check the outermost block, because it may be incomplete.
1306Interactively, pushes mark before moving point." 1297Interactively, pushes mark before moving point."
1307 (interactive "p") 1298 (interactive "p")
1299 (if (interactive-p) (push-mark (point) t))
1308 (and num (< num 0) (f90-end-of-block (- num))) 1300 (and num (< num 0) (f90-end-of-block (- num)))
1309 (let ((case-fold-search t) 1301 (let ((case-fold-search t)
1310 (count (or num 1)) 1302 (count (or num 1))
1311 end-list end-this end-type end-label 1303 end-list end-this end-type end-label
1312 start-this start-type start-label) 1304 start-this start-type start-label)
1313 (if (interactive-p) (push-mark (point) t))
1314 (beginning-of-line) ; probably want this 1305 (beginning-of-line) ; probably want this
1315 (while (and (> count 0) (re-search-backward f90-blocks-re nil 'move)) 1306 (while (and (> count 0) (re-search-backward f90-blocks-re nil 'move))
1316 (beginning-of-line) 1307 (beginning-of-line)
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el
index 3effb6e7d38..70150111a86 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -1,6 +1,6 @@
1;;; flymake.el -- a universal on-the-fly syntax checker 1;;; flymake.el -- a universal on-the-fly syntax checker
2 2
3;; Copyright (C) 2003 Free Software Foundation 3;; Copyright (C) 2003, 2005 Free Software Foundation
4 4
5;; Author: Pavel Kobiakov <pk_at_work@yahoo.com> 5;; Author: Pavel Kobiakov <pk_at_work@yahoo.com>
6;; Maintainer: Pavel Kobiakov <pk_at_work@yahoo.com> 6;; Maintainer: Pavel Kobiakov <pk_at_work@yahoo.com>
@@ -49,17 +49,17 @@
49 (if test (make-hash-table :test test) (make-hash-table)) 49 (if test (make-hash-table :test test) (make-hash-table))
50 (makehash test))) 50 (makehash test)))
51 51
52(defun flymake-float-time () 52(defalias 'flymake-float-time
53 (if (featurep 'xemacs) 53 (if (fboundp 'float-time)
54 (let ((tm (current-time))) 54 'float-time
55 (multiple-value-bind (s0 s1 s2) (current-time) 55 (lambda ()
56 (+ (* (float (ash 1 16)) s0) (float s1) (* 0.0000001 s2)))) 56 (multiple-value-bind (s0 s1 s2) (current-time)
57 (float-time))) 57 (+ (* (float (ash 1 16)) s0) (float s1) (* 0.0000001 s2))))))
58 58
59(defsubst flymake-replace-regexp-in-string (regexp rep str) 59(defsubst flymake-replace-regexp-in-string (regexp rep str)
60 (if (featurep 'xemacs) 60 (if (fboundp 'replace-regexp-in-string)
61 (replace-in-string str regexp rep) 61 (replace-regexp-in-string regexp rep str)
62 (replace-regexp-in-string regexp rep str))) 62 (replace-in-string str regexp rep)))
63 63
64(defun flymake-split-string (str pattern) 64(defun flymake-split-string (str pattern)
65 "Split, then remove first and/or last in case it's empty." 65 "Split, then remove first and/or last in case it's empty."
@@ -71,22 +71,22 @@
71 splitted)) 71 splitted))
72 72
73(defsubst flymake-get-temp-dir () 73(defsubst flymake-get-temp-dir ()
74 (if (featurep 'xemacs) 74 (if (fboundp 'temp-directory)
75 (temp-directory) 75 (temp-directory)
76 temporary-file-directory)) 76 temporary-file-directory))
77 77
78(defun flymake-line-beginning-position () 78(defalias 'flymake-line-beginning-position
79 (save-excursion 79 (if (fboundp 'line-beginning-position)
80 (beginning-of-line) 80 'line-beginning-position
81 (point))) 81 (lambda (&optional arg) (save-excursion (beginning-of-line arg) (point)))))
82 82
83(defun flymake-line-end-position () 83(defalias 'flymake-line-end-position
84 (save-excursion 84 (if (fboundp 'line-end-position)
85 (end-of-line) 85 'line-end-position
86 (point))) 86 (lambda (&optional arg) (save-excursion (end-of-line arg) (point)))))
87 87
88(defun flymake-popup-menu (pos menu-data) 88(defun flymake-popup-menu (pos menu-data)
89 (if (featurep 'xemacs) 89 (if (and (fboundp 'popup-menu) (fboundp 'make-event))
90 (let* ((x-pos (nth 0 (nth 0 pos))) 90 (let* ((x-pos (nth 0 (nth 0 pos)))
91 (y-pos (nth 1 (nth 0 pos))) 91 (y-pos (nth 1 (nth 0 pos)))
92 (fake-event-props '(button 1 x 1 y 1))) 92 (fake-event-props '(button 1 x 1 y 1)))
@@ -104,10 +104,10 @@
104 menu-items)) 104 menu-items))
105 (list menu-title (cons "" menu-commands)))) 105 (list menu-title (cons "" menu-commands))))
106 106
107(defun flymake-nop ())
108
109(if (featurep 'xemacs) (progn 107(if (featurep 'xemacs) (progn
110 108
109(defun flymake-nop ())
110
111(defun flymake-make-xemacs-menu (menu-data) 111(defun flymake-make-xemacs-menu (menu-data)
112 (let* ((menu-title (nth 0 menu-data)) 112 (let* ((menu-title (nth 0 menu-data))
113 (menu-items (nth 1 menu-data)) 113 (menu-items (nth 1 menu-data))
@@ -134,19 +134,19 @@
134 134
135(defun flymake-current-row () 135(defun flymake-current-row ()
136 "Return current row number in current frame." 136 "Return current row number in current frame."
137 (if (featurep 'xemacs) 137 (if (fboundp 'window-edges)
138 (count-lines (window-start) (point)) 138 (+ (car (cdr (window-edges))) (count-lines (window-start) (point)))
139 (+ (car (cdr (window-edges))) (count-lines (window-start) (point))))) 139 (count-lines (window-start) (point))))
140 140
141(defun flymake-selected-frame () 141(defun flymake-selected-frame ()
142 (if (featurep 'xemacs) 142 (if (fboundp 'window-edges)
143 (selected-window) 143 (selected-frame)
144 (selected-frame))) 144 (selected-window)))
145 145
146;;;; ]] 146;;;; ]]
147 147
148(defcustom flymake-log-level -1 148(defcustom flymake-log-level -1
149 "Logging level, only messages with level > flymake-log-level will not be logged 149 "Logging level, only messages with level lower or equal will be logged.
150-1 = NONE, 0 = ERROR, 1 = WARNING, 2 = INFO, 3 = DEBUG" 150-1 = NONE, 0 = ERROR, 1 = WARNING, 2 = INFO, 3 = DEBUG"
151 :group 'flymake 151 :group 'flymake
152 :type 'integer) 152 :type 'integer)
@@ -170,7 +170,7 @@
170 tmp)) 170 tmp))
171 171
172(defun flymake-set-at (list pos val) 172(defun flymake-set-at (list pos val)
173 "Set VAL at position POS in LIST" 173 "Set VAL at position POS in LIST."
174 (let ((tmp (copy-sequence list))) ; (???) 174 (let ((tmp (copy-sequence list))) ; (???)
175 (setcar (nthcdr pos tmp) val) 175 (setcar (nthcdr pos tmp) val)
176 tmp)) 176 tmp))
@@ -199,8 +199,7 @@
199 199
200 (if (eq buffer (current-buffer)) 200 (if (eq buffer (current-buffer))
201 (symbol-value var-name) 201 (symbol-value var-name)
202 (save-excursion 202 (with-current-buffer buffer
203 (set-buffer buffer)
204 (symbol-value var-name)))) 203 (symbol-value var-name))))
205 204
206(defun flymake-set-buffer-var (buffer var-name var-value) 205(defun flymake-set-buffer-var (buffer var-name var-value)
@@ -210,8 +209,7 @@
210 209
211 (if (eq buffer (current-buffer)) 210 (if (eq buffer (current-buffer))
212 (set var-name var-value) 211 (set var-name var-value)
213 (save-excursion 212 (with-current-buffer buffer
214 (set-buffer buffer)
215 (set var-name var-value)))) 213 (set var-name var-value))))
216 214
217(defvar flymake-buffer-data (flymake-makehash) 215(defvar flymake-buffer-data (flymake-makehash)
@@ -231,7 +229,7 @@
231(defun flymake-set-buffer-value (buffer name value) 229(defun flymake-set-buffer-value (buffer name value)
232 (puthash name value (flymake-get-buffer-data buffer))) 230 (puthash name value (flymake-get-buffer-data buffer)))
233 231
234(defvar flymake-output-residual nil "") 232(defvar flymake-output-residual nil)
235 233
236(make-variable-buffer-local 'flymake-output-residual) 234(make-variable-buffer-local 'flymake-output-residual)
237 235
@@ -253,31 +251,30 @@
253 (".+[0-9]+\\.tex$" flymake-master-tex-init flymake-master-cleanup flymake-get-real-file-name) 251 (".+[0-9]+\\.tex$" flymake-master-tex-init flymake-master-cleanup flymake-get-real-file-name)
254 (".+\\.tex$" flymake-simple-tex-init flymake-simple-cleanup flymake-get-real-file-name) 252 (".+\\.tex$" flymake-simple-tex-init flymake-simple-cleanup flymake-get-real-file-name)
255 (".+\\.idl$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name) 253 (".+\\.idl$" flymake-simple-make-init flymake-simple-cleanup flymake-get-real-file-name)
256 ; (".+\\.cpp$" 1) 254 ;; (".+\\.cpp$" 1)
257 ; (".+\\.java$" 3) 255 ;; (".+\\.java$" 3)
258 ; (".+\\.h$" 2 (".+\\.cpp$" ".+\\.c$") 256 ;; (".+\\.h$" 2 (".+\\.cpp$" ".+\\.c$")
259 ; ("[ \t]*#[ \t]*include[ \t]*\"\\([\w0-9/\\_\.]*[/\\]*\\)\\(%s\\)\"" 1 2)) 257 ;; ("[ \t]*#[ \t]*include[ \t]*\"\\([\w0-9/\\_\.]*[/\\]*\\)\\(%s\\)\"" 1 2))
260 ; (".+\\.idl$" 1) 258 ;; (".+\\.idl$" 1)
261 ; (".+\\.odl$" 1) 259 ;; (".+\\.odl$" 1)
262 ; (".+[0-9]+\\.tex$" 2 (".+\\.tex$") 260 ;; (".+[0-9]+\\.tex$" 2 (".+\\.tex$")
263 ; ("[ \t]*\\input[ \t]*{\\(.*\\)\\(%s\\)}" 1 2 )) 261 ;; ("[ \t]*\\input[ \t]*{\\(.*\\)\\(%s\\)}" 1 2 ))
264 ; (".+\\.tex$" 1) 262 ;; (".+\\.tex$" 1)
265 ) 263 )
266 "*Files syntax checking is allowed for." 264 "*Files syntax checking is allowed for."
267 :group 'flymake 265 :group 'flymake
268 :type '(repeat (string symbol symbol symbol))) 266 :type '(repeat (string symbol symbol symbol)))
269 267
270(defun flymake-get-file-name-mode-and-masks (file-name) 268(defun flymake-get-file-name-mode-and-masks (file-name)
271 "Return the corresponding entry from 'flymake-allowed-file-name-masks'." 269 "Return the corresponding entry from `flymake-allowed-file-name-masks'."
272 (unless (stringp file-name) 270 (unless (stringp file-name)
273 (error "Invalid file-name")) 271 (error "Invalid file-name"))
274 (let ((count (length flymake-allowed-file-name-masks)) 272 (let ((fnm flymake-allowed-file-name-masks)
275 (idx 0)
276 (mode-and-masks nil)) 273 (mode-and-masks nil))
277 (while (and (not mode-and-masks) (< idx count)) 274 (while (and (not mode-and-masks) fnm)
278 (if (string-match (nth 0 (nth idx flymake-allowed-file-name-masks)) file-name) 275 (if (string-match (car (car fnm)) file-name)
279 (setq mode-and-masks (cdr (nth idx flymake-allowed-file-name-masks)))) 276 (setq mode-and-masks (cdr (car fnm))))
280 (setq idx (1+ idx))) 277 (setq fnm (cdr fnm)))
281 (flymake-log 3 "file %s, init=%s" file-name (car mode-and-masks)) 278 (flymake-log 3 "file %s, init=%s" file-name (car mode-and-masks))
282 mode-and-masks)) 279 mode-and-masks))
283 280
@@ -289,8 +286,8 @@ Return nil if we cannot, non-nil if we can."
289(defun flymake-get-init-function (file-name) 286(defun flymake-get-init-function (file-name)
290 "Return init function to be used for the file." 287 "Return init function to be used for the file."
291 (let* ((init-f (nth 0 (flymake-get-file-name-mode-and-masks file-name)))) 288 (let* ((init-f (nth 0 (flymake-get-file-name-mode-and-masks file-name))))
292 ;(flymake-log 0 "calling %s" init-f) 289 ;;(flymake-log 0 "calling %s" init-f)
293 ;(funcall init-f (current-buffer)) 290 ;;(funcall init-f (current-buffer))
294 init-f)) 291 init-f))
295 292
296(defun flymake-get-cleanup-function (file-name) 293(defun flymake-get-cleanup-function (file-name)
@@ -325,15 +322,13 @@ Return its file name if found, or nil if not found."
325 (flymake-get-buildfile-from-cache source-dir-name)) 322 (flymake-get-buildfile-from-cache source-dir-name))
326 (let* ((buildfile-dir nil) 323 (let* ((buildfile-dir nil)
327 (buildfile nil) 324 (buildfile nil)
328 (dir-count (length dirs))
329 (dir-idx 0)
330 (found nil)) 325 (found nil))
331 (while (and (not found) (< dir-idx dir-count)) 326 (while (and (not found) dirs)
332 (setq buildfile-dir (concat source-dir-name (nth dir-idx dirs))) 327 (setq buildfile-dir (concat source-dir-name (car dirs)))
333 (setq buildfile (concat buildfile-dir "/" buildfile-name)) 328 (setq buildfile (concat buildfile-dir "/" buildfile-name))
334 (when (file-exists-p buildfile) 329 (when (file-exists-p buildfile)
335 (setq found t)) 330 (setq found t))
336 (setq dir-idx (1+ dir-idx))) 331 (setq dirs (cdr dirs)))
337 (if found 332 (if found
338 (progn 333 (progn
339 (flymake-log 3 "found buildfile at %s/%s" buildfile-dir buildfile-name) 334 (flymake-log 3 "found buildfile at %s/%s" buildfile-dir buildfile-name)
@@ -359,39 +354,23 @@ Return t if so, nil if not."
359 (equal (flymake-fix-file-name file-name-one) 354 (equal (flymake-fix-file-name file-name-one)
360 (flymake-fix-file-name file-name-two))) 355 (flymake-fix-file-name file-name-two)))
361 356
362(defun flymake-ensure-ends-with-slash (filename)
363 ;; Should this really be file-name-as-directory?
364 (if (not (= (elt filename (1- (length filename))) (string-to-char "/")))
365 (concat filename "/")
366 filename))
367
368(defun flymake-get-common-file-prefix (string-one string-two) 357(defun flymake-get-common-file-prefix (string-one string-two)
369 "Return common prefix for two file names STRING-ONE and STRING-TWO." 358 "Return common prefix for two file names STRING-ONE and STRING-TWO."
370 (when (and string-one string-two) 359 (setq string-one (file-name-as-directory string-one))
371 (let* ((slash-pos-one -1) 360 (setq string-two (file-name-as-directory string-two))
372 (slash-pos-two -1) 361 (let ((n (compare-strings string-one nil nil string-two nil nil)))
373 (done nil) 362 (if (eq n t) string-one
374 (prefix nil)) 363 (setq n (abs (1+ n)))
375 (setq string-one (flymake-ensure-ends-with-slash string-one)) 364 (file-name-directory (substring string-one 0 n)))))
376 (setq string-two (flymake-ensure-ends-with-slash string-two))
377 (while (not done)
378 (setq slash-pos-one (string-match "/" string-one (1+ slash-pos-one)))
379 (setq slash-pos-two (string-match "/" string-two (1+ slash-pos-two)))
380 (if (and slash-pos-one slash-pos-two
381 (= slash-pos-one slash-pos-two)
382 (string= (substring string-one 0 slash-pos-one) (substring string-two 0 slash-pos-two)))
383 (progn
384 (setq prefix (substring string-one 0 (1+ slash-pos-one))))
385 (setq done t)))
386 prefix)))
387 365
388(defun flymake-build-relative-filename (from-dir to-dir) 366(defun flymake-build-relative-filename (from-dir to-dir)
389 "Return rel: FROM-DIR/rel == TO-DIR." 367 "Return rel: FROM-DIR/rel == TO-DIR."
368 ;; FIXME: Why not use `file-relative-name'?
390 (if (not (equal (elt from-dir 0) (elt to-dir 0))) 369 (if (not (equal (elt from-dir 0) (elt to-dir 0)))
391 (error "First chars in file names %s, %s must be equal (same drive)" 370 (error "First chars in file names %s, %s must be equal (same drive)"
392 from-dir to-dir) 371 from-dir to-dir)
393 (let* ((from (flymake-ensure-ends-with-slash (flymake-fix-file-name from-dir))) 372 (let* ((from (file-name-as-directory (flymake-fix-file-name from-dir)))
394 (to (flymake-ensure-ends-with-slash (flymake-fix-file-name to-dir))) 373 (to (file-name-as-directory (flymake-fix-file-name to-dir)))
395 (prefix (flymake-get-common-file-prefix from to)) 374 (prefix (flymake-get-common-file-prefix from to))
396 (from-suffix (substring from (length prefix))) 375 (from-suffix (substring from (length prefix)))
397 (up-count (length (flymake-split-string from-suffix "[/]"))) 376 (up-count (length (flymake-split-string from-suffix "[/]")))
@@ -413,7 +392,7 @@ Return t if so, nil if not."
413 (or rel "./")))) 392 (or rel "./"))))
414 393
415(defcustom flymake-master-file-dirs '("." "./src" "./UnitTest") 394(defcustom flymake-master-file-dirs '("." "./src" "./UnitTest")
416 "Dirs where to llok for master files." 395 "Dirs where to look for master files."
417 :group 'flymake 396 :group 'flymake
418 :type '(repeat (string))) 397 :type '(repeat (string)))
419 398
@@ -426,35 +405,33 @@ Return t if so, nil if not."
426(defvar flymake-included-file-name) 405(defvar flymake-included-file-name)
427 406
428(defun flymake-find-possible-master-files (file-name master-file-dirs masks) 407(defun flymake-find-possible-master-files (file-name master-file-dirs masks)
429 "Find (by name and location) all posible master files. 408 "Find (by name and location) all possible master files.
430Mater files are .cpp and .c for and .h. Files are searched for 409Master files are .cpp and .c for and .h. Files are searched for
431starting from the .h directory and max max-level parent dirs. 410starting from the .h directory and max max-level parent dirs.
432File contents are not checked." 411File contents are not checked."
433 (let* ((dir-idx 0) 412 (let* ((dirs master-file-dirs)
434 (dir-count (length master-file-dirs))
435 (files nil) 413 (files nil)
436 (done nil) 414 (done nil))
437 (masks-count (length masks))) 415
438 416 (while (and (not done) dirs)
439 (while (and (not done) (< dir-idx dir-count)) 417 (let* ((dir (concat (flymake-fix-file-name (file-name-directory file-name))
440 (let* ((dir (concat (flymake-fix-file-name (file-name-directory file-name)) "/" (nth dir-idx master-file-dirs))) 418 "/" (car dirs)))
441 (masks-idx 0)) 419 (masks masks))
442 (while (and (file-exists-p dir) (not done) (< masks-idx masks-count)) 420 (while (and (file-exists-p dir) (not done) masks)
443 (let* ((mask (nth masks-idx masks)) 421 (let* ((mask (car masks))
444 (dir-files (directory-files dir t mask)) 422 (dir-files (directory-files dir t mask)))
445 (file-count (length dir-files)) 423
446 (file-idx 0)) 424 (flymake-log 3 "dir %s, %d file(s) for mask %s"
447 425 dir (length dir-files) mask)
448 (flymake-log 3 "dir %s, %d file(s) for mask %s" dir file-count mask) 426 (while (and (not done) dir-files)
449 (while (and (not done) (< file-idx file-count)) 427 (when (not (file-directory-p (car dir-files)))
450 (when (not (file-directory-p (nth file-idx dir-files))) 428 (setq files (cons (car dir-files) files))
451 (setq files (cons (nth file-idx dir-files) files))
452 (when (>= (length files) flymake-master-file-count-limit) 429 (when (>= (length files) flymake-master-file-count-limit)
453 (flymake-log 3 "master file count limit (%d) reached" flymake-master-file-count-limit) 430 (flymake-log 3 "master file count limit (%d) reached" flymake-master-file-count-limit)
454 (setq done t))) 431 (setq done t)))
455 (setq file-idx (1+ file-idx)))) 432 (setq dir-files (cdr dir-files))))
456 (setq masks-idx (1+ masks-idx)))) 433 (setq masks (cdr masks))))
457 (setq dir-idx (1+ dir-idx))) 434 (setq dirs (cdr dirs)))
458 (when files 435 (when files
459 (let ((flymake-included-file-name (file-name-nondirectory file-name))) 436 (let ((flymake-included-file-name (file-name-nondirectory file-name)))
460 (setq files (sort files 'flymake-master-file-compare)))) 437 (setq files (sort files 'flymake-master-file-compare))))
@@ -512,32 +489,32 @@ instead of reading master file from disk."
512 (when (flymake-check-include source-file-name inc-path inc-name include-dirs) 489 (when (flymake-check-include source-file-name inc-path inc-name include-dirs)
513 (setq found t) 490 (setq found t)
514 ;; replace-match is not used here as it fails in 491 ;; replace-match is not used here as it fails in
515 ;; xemacs with 'last match not a buffer' error as 492 ;; XEmacs with 'last match not a buffer' error as
516 ;; check-includes calls replace-in-string 493 ;; check-includes calls replace-in-string
517 (flymake-replace-region (current-buffer) match-beg match-end 494 (flymake-replace-region match-beg match-end
518 (file-name-nondirectory patched-source-file-name)))) 495 (file-name-nondirectory patched-source-file-name))))
519 (forward-line 1))) 496 (forward-line 1)))
520 (when found 497 (when found
521 (flymake-save-buffer-in-file (current-buffer) patched-master-file-name))) 498 (flymake-save-buffer-in-file (current-buffer) patched-master-file-name)))
522 ;+(flymake-log 3 "killing buffer %s" (buffer-name master-file-temp-buffer)) 499 ;;+(flymake-log 3 "killing buffer %s" (buffer-name master-file-temp-buffer))
523 (kill-buffer master-file-temp-buffer))) 500 (kill-buffer master-file-temp-buffer)))
524 ;+(flymake-log 3 "check-patch master file %s: %s" master-file-name found) 501 ;;+(flymake-log 3 "check-patch master file %s: %s" master-file-name found)
525 (when found 502 (when found
526 (flymake-log 2 "found master file %s" master-file-name)) 503 (flymake-log 2 "found master file %s" master-file-name))
527 found)) 504 found))
528 505
529(defun flymake-replace-region (buffer beg end rep) 506(defun flymake-replace-region (beg end rep)
530 "Replace text in BUFFER in region (BEG END) with REP." 507 "Replace text in BUFFER in region (BEG END) with REP."
531 (save-excursion 508 (save-excursion
532 (delete-region beg end) 509 (goto-char end)
533 (goto-char beg) 510 ;; Insert before deleting, so as to better preserve markers's positions.
534 (insert rep))) 511 (insert rep)
512 (delete-region beg end)))
535 513
536(defun flymake-read-file-to-temp-buffer (file-name) 514(defun flymake-read-file-to-temp-buffer (file-name)
537 "Insert contents of FILE-NAME into newly created temp buffer." 515 "Insert contents of FILE-NAME into newly created temp buffer."
538 (let* ((temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (file-name-nondirectory file-name)))))) 516 (let* ((temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (file-name-nondirectory file-name))))))
539 (save-excursion 517 (with-current-buffer temp-buffer
540 (set-buffer temp-buffer)
541 (insert-file-contents file-name)) 518 (insert-file-contents file-name))
542 temp-buffer)) 519 temp-buffer))
543 520
@@ -545,8 +522,7 @@ instead of reading master file from disk."
545 "Copy contents of BUFFER into newly created temp buffer." 522 "Copy contents of BUFFER into newly created temp buffer."
546 (let ((contents nil) 523 (let ((contents nil)
547 (temp-buffer nil)) 524 (temp-buffer nil))
548 (save-excursion 525 (with-current-buffer buffer
549 (set-buffer buffer)
550 (setq contents (buffer-string)) 526 (setq contents (buffer-string))
551 527
552 (setq temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (buffer-name buffer))))) 528 (setq temp-buffer (get-buffer-create (generate-new-buffer-name (concat "flymake:" (buffer-name buffer)))))
@@ -559,18 +535,17 @@ instead of reading master file from disk."
559Return t if it can be found via include path using INC-PATH and INC-NAME." 535Return t if it can be found via include path using INC-PATH and INC-NAME."
560 (if (file-name-absolute-p inc-path) 536 (if (file-name-absolute-p inc-path)
561 (flymake-same-files source-file-name (concat inc-path "/" inc-name)) 537 (flymake-same-files source-file-name (concat inc-path "/" inc-name))
562 (let* ((count (length include-dirs)) 538 (let* ((file-name nil)
563 (idx 0)
564 (file-name nil)
565 (found nil)) 539 (found nil))
566 (while (and (not found) (< idx count)) 540 (while (and (not found) include-dirs)
567 (setq file-name (concat (file-name-directory source-file-name) "/" (nth idx include-dirs))) 541 (setq file-name (concat (file-name-directory source-file-name)
542 "/" (car include-dirs)))
568 (if (> (length inc-path) 0) 543 (if (> (length inc-path) 0)
569 (setq file-name (concat file-name "/" inc-path))) 544 (setq file-name (concat file-name "/" inc-path)))
570 (setq file-name (concat file-name "/" inc-name)) 545 (setq file-name (concat file-name "/" inc-name))
571 (when (flymake-same-files source-file-name file-name) 546 (when (flymake-same-files source-file-name file-name)
572 (setq found t)) 547 (setq found t))
573 (setq idx (1+ idx))) 548 (setq include-dirs (cdr include-dirs)))
574 found))) 549 found)))
575 550
576(defun flymake-find-buffer-for-file (file-name) 551(defun flymake-find-buffer-for-file (file-name)
@@ -617,9 +592,8 @@ Find master file, patch and save it."
617(defun flymake-save-buffer-in-file (buffer file-name) 592(defun flymake-save-buffer-in-file (buffer file-name)
618 (or buffer 593 (or buffer
619 (error "Invalid buffer")) 594 (error "Invalid buffer"))
620 (save-excursion 595 (with-current-buffer buffer
621 (save-restriction 596 (save-restriction
622 (set-buffer buffer)
623 (widen) 597 (widen)
624 (make-directory (file-name-directory file-name) 1) 598 (make-directory (file-name-directory file-name) 1)
625 (write-region (point-min) (point-max) file-name nil 566))) 599 (write-region (point-min) (point-max) file-name nil 566)))
@@ -664,8 +638,7 @@ It's flymake process filter."
664 (delete-process process) 638 (delete-process process)
665 639
666 (when source-buffer 640 (when source-buffer
667 (save-excursion 641 (with-current-buffer source-buffer
668 (set-buffer source-buffer)
669 642
670 (flymake-parse-residual source-buffer) 643 (flymake-parse-residual source-buffer)
671 (flymake-post-syntax-check source-buffer exit-status command) 644 (flymake-post-syntax-check source-buffer exit-status command)
@@ -705,8 +678,7 @@ It's flymake process filter."
705 678
706(defun flymake-parse-output-and-residual (source-buffer output) 679(defun flymake-parse-output-and-residual (source-buffer output)
707 "Split OUTPUT into lines, merge in residual if necessary." 680 "Split OUTPUT into lines, merge in residual if necessary."
708 (save-excursion 681 (with-current-buffer source-buffer
709 (set-buffer source-buffer)
710 (let* ((buffer-residual (flymake-get-buffer-output-residual source-buffer)) 682 (let* ((buffer-residual (flymake-get-buffer-output-residual source-buffer))
711 (total-output (if buffer-residual (concat buffer-residual output) output)) 683 (total-output (if buffer-residual (concat buffer-residual output) output))
712 (lines-and-residual (flymake-split-output total-output)) 684 (lines-and-residual (flymake-split-output total-output))
@@ -720,8 +692,7 @@ It's flymake process filter."
720 692
721(defun flymake-parse-residual (source-buffer) 693(defun flymake-parse-residual (source-buffer)
722 "Parse residual if it's non empty." 694 "Parse residual if it's non empty."
723 (save-excursion 695 (with-current-buffer source-buffer
724 (set-buffer source-buffer)
725 (when (flymake-get-buffer-output-residual source-buffer) 696 (when (flymake-get-buffer-output-residual source-buffer)
726 (flymake-set-buffer-new-err-info source-buffer (flymake-parse-err-lines 697 (flymake-set-buffer-new-err-info source-buffer (flymake-parse-err-lines
727 (flymake-get-buffer-new-err-info source-buffer) 698 (flymake-get-buffer-new-err-info source-buffer)
@@ -845,8 +816,7 @@ line number outside the file being compiled."
845 816
846(defun flymake-highlight-err-lines (buffer err-info-list) 817(defun flymake-highlight-err-lines (buffer err-info-list)
847 "Highlight error lines in BUFFER using info from ERR-INFO-LIST." 818 "Highlight error lines in BUFFER using info from ERR-INFO-LIST."
848 (save-excursion 819 (with-current-buffer buffer
849 (set-buffer buffer)
850 (let* ((idx 0) 820 (let* ((idx 0)
851 (count (length err-info-list))) 821 (count (length err-info-list)))
852 (while (< idx count) 822 (while (< idx count)
@@ -866,19 +836,18 @@ line number outside the file being compiled."
866 (overlay-put ov 'help-echo tooltip-text) 836 (overlay-put ov 'help-echo tooltip-text)
867 (overlay-put ov 'flymake-overlay t) 837 (overlay-put ov 'flymake-overlay t)
868 (overlay-put ov 'priority 100) 838 (overlay-put ov 'priority 100)
869 ;+(flymake-log 3 "created overlay %s" ov) 839 ;;+(flymake-log 3 "created overlay %s" ov)
870 ov) 840 ov)
871 (flymake-log 3 "created an overlay at (%d-%d)" beg end))) 841 (flymake-log 3 "created an overlay at (%d-%d)" beg end)))
872 842
873(defun flymake-delete-own-overlays (buffer) 843(defun flymake-delete-own-overlays (buffer)
874 "Delete all flymake overlays in BUFFER." 844 "Delete all flymake overlays in BUFFER."
875 (save-excursion 845 (with-current-buffer buffer
876 (set-buffer buffer)
877 (let ((ov (overlays-in (point-min) (point-max)))) 846 (let ((ov (overlays-in (point-min) (point-max))))
878 (while (consp ov) 847 (while (consp ov)
879 (when (flymake-overlay-p (car ov)) 848 (when (flymake-overlay-p (car ov))
880 (delete-overlay (car ov)) 849 (delete-overlay (car ov))
881 ;+(flymake-log 3 "deleted overlay %s" ov) 850 ;;+(flymake-log 3 "deleted overlay %s" ov)
882 ) 851 )
883 (setq ov (cdr ov)))))) 852 (setq ov (cdr ov))))))
884 853
@@ -890,11 +859,12 @@ Return t if it has at least one flymake overlay, nil if no overlay."
890 (while (consp ov) 859 (while (consp ov)
891 (when (flymake-overlay-p (car ov)) 860 (when (flymake-overlay-p (car ov))
892 (setq has-flymake-overlays t)) 861 (setq has-flymake-overlays t))
893 (setq ov (cdr ov))))) 862 (setq ov (cdr ov)))
863 has-flymake-overlays))
894 864
895(defface flymake-errline-face 865(defface flymake-errline-face
896 ;+ '((((class color)) (:foreground "OrangeRed" :bold t :underline t)) 866 ;;+ '((((class color)) (:foreground "OrangeRed" :bold t :underline t))
897 ;+ '((((class color)) (:underline "OrangeRed")) 867 ;;+ '((((class color)) (:underline "OrangeRed"))
898 '((((class color)) (:background "LightPink")) 868 '((((class color)) (:background "LightPink"))
899 (t (:bold t))) 869 (t (:bold t)))
900 "Face used for marking error lines." 870 "Face used for marking error lines."
@@ -970,7 +940,8 @@ Perhaps use text from LINE-ERR-INFO-ILST to enhance highlighting."
970 940
971(defun flymake-split-output (output) 941(defun flymake-split-output (output)
972 "Split OUTPUT into lines. 942 "Split OUTPUT into lines.
973Return last one as residual if it does not end with newline char. Returns ((lines) residual)." 943Return last one as residual if it does not end with newline char.
944Returns ((LINES) RESIDUAL)."
974 (when (and output (> (length output) 0)) 945 (when (and output (> (length output) 0))
975 (let* ((lines (flymake-split-string output "[\n\r]+")) 946 (let* ((lines (flymake-split-string output "[\n\r]+"))
976 (complete (equal "\n" (char-to-string (aref output (1- (length output)))))) 947 (complete (equal "\n" (char-to-string (aref output (1- (length output))))))
@@ -984,21 +955,18 @@ Return last one as residual if it does not end with newline char. Returns ((line
984 "Grab error line patterns from ORIGINAL-LIST in compile.el format. 955 "Grab error line patterns from ORIGINAL-LIST in compile.el format.
985Convert it to flymake internal format." 956Convert it to flymake internal format."
986 (let* ((converted-list '())) 957 (let* ((converted-list '()))
987 (mapcar 958 (dolist (item original-list)
988 (lambda (item) 959 (setq item (cdr item))
989 (setq item (cdr item)) 960 (let ((regexp (nth 0 item))
990 (let ((regexp (nth 0 item)) 961 (file (nth 1 item))
991 (file (nth 1 item)) 962 (line (nth 2 item))
992 (line (nth 2 item)) 963 (col (nth 3 item)))
993 (col (nth 3 item)) 964 (if (consp file) (setq file (car file)))
994 end-line) 965 (if (consp line) (setq line (car line)))
995 (if (consp file) (setq file (car file))) 966 (if (consp col) (setq col (car col)))
996 (if (consp line) (setq end-line (cdr line) line (car line))) 967
997 (if (consp col) (setq col (car col))) 968 (when (not (functionp line))
998 969 (setq converted-list (cons (list regexp file line col) converted-list)))))
999 (when (not (functionp line))
1000 (setq converted-list (cons (list regexp file line col) converted-list)))))
1001 original-list)
1002 converted-list)) 970 converted-list))
1003 971
1004(eval-when-compile 972(eval-when-compile
@@ -1007,40 +975,43 @@ Convert it to flymake internal format."
1007(defvar flymake-err-line-patterns ; regexp file-idx line-idx col-idx (optional) text-idx(optional), match-end to end of string is error text 975(defvar flymake-err-line-patterns ; regexp file-idx line-idx col-idx (optional) text-idx(optional), match-end to end of string is error text
1008 (append 976 (append
1009 '( 977 '(
1010 ; MS Visual C++ 6.0 978 ;; MS Visual C++ 6.0
1011 ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) \: \\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)" 979 ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) \: \\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)"
1012 1 3 nil 4) 980 1 3 nil 4)
1013 ; jikes 981 ;; jikes
1014 ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[0-9]+\:[0-9]+\:[0-9]+\: \\(\\(Error\\|Warning\\|Caution\\|Semantic Error\\):[ \t\n]*\\(.+\\)\\)" 982 ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[0-9]+\:[0-9]+\:[0-9]+\: \\(\\(Error\\|Warning\\|Caution\\|Semantic Error\\):[ \t\n]*\\(.+\\)\\)"
1015 1 3 nil 4) 983 1 3 nil 4)
1016 ; MS midl 984 ;; MS midl
1017 ("midl[ ]*:[ ]*\\(command line error .*\\)" 985 ("midl[ ]*:[ ]*\\(command line error .*\\)"
1018 nil nil nil 1) 986 nil nil nil 1)
1019 ; MS C# 987 ;; MS C#
1020 ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\),[0-9]+)\: \\(\\(error\\|warning\\|fatal error\\) \\(CS[0-9]+\\):[ \t\n]*\\(.+\\)\\)" 988 ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\),[0-9]+)\: \\(\\(error\\|warning\\|fatal error\\) \\(CS[0-9]+\\):[ \t\n]*\\(.+\\)\\)"
1021 1 3 nil 4) 989 1 3 nil 4)
1022 ; perl 990 ;; perl
1023 ("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1) 991 ("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1)
1024 ; LaTeX warnings (fileless) ("\\(LaTeX \\(Warning\\|Error\\): .*\\) on input line \\([0-9]+\\)" 20 3 nil 1) 992 ;; LaTeX warnings (fileless) ("\\(LaTeX \\(Warning\\|Error\\): .*\\) on input line \\([0-9]+\\)" 20 3 nil 1)
1025 ; ant/javac 993 ;; ant/javac
1026 (" *\\(\\[javac\\]\\)? *\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[ \t\n]*\\(.+\\)" 994 (" *\\(\\[javac\\]\\)? *\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[ \t\n]*\\(.+\\)"
1027 2 4 nil 5)) 995 2 4 nil 5))
1028 ;; compilation-error-regexp-alist) 996 ;; compilation-error-regexp-alist)
1029 (flymake-reformat-err-line-patterns-from-compile-el compilation-error-regexp-alist-alist)) 997 (flymake-reformat-err-line-patterns-from-compile-el compilation-error-regexp-alist-alist))
1030 "patterns for matching error/warning lines, (regexp file-idx line-idx err-text-idx). Use flymake-reformat-err-line-patterns-from-compile-el to add patterns from compile.el") 998 "Patterns for matching error/warning lines.
1031 999\(REGEXP FILE-IDX LINE-IDX ERR-TEXT-IDX).
1032 ;(defcustom flymake-err-line-patterns 1000Use `flymake-reformat-err-line-patterns-from-compile-el' to add patterns
1033 ; '( 1001from compile.el")
1034 ; ; MS Visual C++ 6.0 1002
1035 ; ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) \: \\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)" 1003;;(defcustom flymake-err-line-patterns
1036 ; 1 3 4) 1004;; '(
1037 ; ; jikes 1005;; ; MS Visual C++ 6.0
1038 ; ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[0-9]+\:[0-9]+\:[0-9]+\: \\(\\(Error\\|Warning\\|Caution\\):[ \t\n]*\\(.+\\)\\)" 1006;; ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)(\\([0-9]+\\)) \: \\(\\(error\\|warning\\|fatal error\\) \\(C[0-9]+\\):[ \t\n]*\\(.+\\)\\)"
1039 ; 1 3 4)) 1007;; 1 3 4)
1040 ; "patterns for matching error/warning lines, (regexp file-idx line-idx err-text-idx)" 1008;; ; jikes
1041 ; :group 'flymake 1009;; ("\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[0-9]+\:[0-9]+\:[0-9]+\: \\(\\(Error\\|Warning\\|Caution\\):[ \t\n]*\\(.+\\)\\)"
1042 ; :type '(repeat (string number number number)) 1010;; 1 3 4))
1043 ;) 1011;; "patterns for matching error/warning lines, (regexp file-idx line-idx err-text-idx)"
1012;; :group 'flymake
1013;; :type '(repeat (string number number number))
1014;;)
1044 1015
1045(defun flymake-parse-line (line) 1016(defun flymake-parse-line (line)
1046 "Parse LINE to see if it is an error of warning. 1017 "Parse LINE to see if it is an error of warning.
@@ -1049,18 +1020,17 @@ Return its components if so, nil if no."
1049 (line-no 0) 1020 (line-no 0)
1050 (err-type "e") 1021 (err-type "e")
1051 (err-text nil) 1022 (err-text nil)
1052 (count (length flymake-err-line-patterns)) 1023 (patterns flymake-err-line-patterns)
1053 (idx 0)
1054 (matched nil)) 1024 (matched nil))
1055 (while (and (< idx count) (not matched)) 1025 (while (and patterns (not matched))
1056 (when (string-match (car (nth idx flymake-err-line-patterns)) line) 1026 (when (string-match (car (car patterns)) line)
1057 (let* ((file-idx (nth 1 (nth idx flymake-err-line-patterns))) 1027 (let* ((file-idx (nth 1 (car patterns)))
1058 (line-idx (nth 2 (nth idx flymake-err-line-patterns)))) 1028 (line-idx (nth 2 (car patterns))))
1059 1029
1060 (setq raw-file-name (if file-idx (match-string file-idx line) nil)) 1030 (setq raw-file-name (if file-idx (match-string file-idx line) nil))
1061 (setq line-no (if line-idx (string-to-int (match-string line-idx line)) 0)) 1031 (setq line-no (if line-idx (string-to-int (match-string line-idx line)) 0))
1062 (setq err-text (if (> (length (nth idx flymake-err-line-patterns)) 4) 1032 (setq err-text (if (> (length (car patterns)) 4)
1063 (match-string (nth 4 (nth idx flymake-err-line-patterns)) line) 1033 (match-string (nth 4 (car patterns)) line)
1064 (flymake-patch-err-text (substring line (match-end 0))))) 1034 (flymake-patch-err-text (substring line (match-end 0)))))
1065 (or err-text (setq err-text "<no error text>")) 1035 (or err-text (setq err-text "<no error text>"))
1066 (if (and err-text (string-match "^[wW]arning" err-text)) 1036 (if (and err-text (string-match "^[wW]arning" err-text))
@@ -1069,7 +1039,7 @@ Return its components if so, nil if no."
1069 (flymake-log 3 "parse line: file-idx=%s line-idx=%s file=%s line=%s text=%s" file-idx line-idx 1039 (flymake-log 3 "parse line: file-idx=%s line-idx=%s file=%s line=%s text=%s" file-idx line-idx
1070 raw-file-name line-no err-text) 1040 raw-file-name line-no err-text)
1071 (setq matched t))) 1041 (setq matched t)))
1072 (setq idx (1+ idx))) 1042 (setq patterns (cdr patterns)))
1073 (if matched 1043 (if matched
1074 (flymake-ler-make-ler raw-file-name line-no err-type err-text) 1044 (flymake-ler-make-ler raw-file-name line-no err-type err-text)
1075 ()))) 1045 ())))
@@ -1110,8 +1080,7 @@ Return its components if so, nil if no."
1110 1080
1111(defun flymake-add-err-info (err-info-list line-err-info) 1081(defun flymake-add-err-info (err-info-list line-err-info)
1112 "Add error info (file line type text) to err info list preserving sort order." 1082 "Add error info (file line type text) to err info list preserving sort order."
1113 (let* ((count (length err-info-list)) 1083 (let* ((line-no (if (flymake-ler-get-file line-err-info) 1 (flymake-ler-get-line line-err-info)))
1114 (line-no (if (flymake-ler-get-file line-err-info) 1 (flymake-ler-get-line line-err-info)))
1115 (info-and-pos (flymake-find-err-info err-info-list line-no)) 1084 (info-and-pos (flymake-find-err-info err-info-list line-no))
1116 (exists (car info-and-pos)) 1085 (exists (car info-and-pos))
1117 (pos (nth 1 info-and-pos)) 1086 (pos (nth 1 info-and-pos))
@@ -1133,7 +1102,7 @@ Return its components if so, nil if no."
1133 (if (flymake-get-project-include-dirs-from-cache basedir) 1102 (if (flymake-get-project-include-dirs-from-cache basedir)
1134 (progn 1103 (progn
1135 (flymake-get-project-include-dirs-from-cache basedir)) 1104 (flymake-get-project-include-dirs-from-cache basedir))
1136 ;else 1105 ;;else
1137 (let* ((command-line (concat "make -C\"" basedir "\" DUMPVARS=INCLUDE_DIRS dumpvars")) 1106 (let* ((command-line (concat "make -C\"" basedir "\" DUMPVARS=INCLUDE_DIRS dumpvars"))
1138 (output (shell-command-to-string command-line)) 1107 (output (shell-command-to-string command-line))
1139 (lines (flymake-split-string output "\n")) 1108 (lines (flymake-split-string output "\n"))
@@ -1206,9 +1175,8 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1206(defun flymake-get-program-dir (buffer) 1175(defun flymake-get-program-dir (buffer)
1207 "Get dir to start program in." 1176 "Get dir to start program in."
1208 (unless (bufferp buffer) 1177 (unless (bufferp buffer)
1209 (error "Invlid buffer")) 1178 (error "Invalid buffer"))
1210 (save-excursion 1179 (with-current-buffer buffer
1211 (set-buffer buffer)
1212 default-directory)) 1180 default-directory))
1213 1181
1214(defun flymake-safe-delete-file (file-name) 1182(defun flymake-safe-delete-file (file-name)
@@ -1233,8 +1201,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1233 "Start syntax checking for buffer BUFFER." 1201 "Start syntax checking for buffer BUFFER."
1234 (unless (bufferp buffer) 1202 (unless (bufferp buffer)
1235 (error "Expected a buffer")) 1203 (error "Expected a buffer"))
1236 (save-excursion 1204 (with-current-buffer buffer
1237 (set-buffer buffer)
1238 (flymake-log 3 "flymake is running: %s" (flymake-get-buffer-is-running buffer)) 1205 (flymake-log 3 "flymake is running: %s" (flymake-get-buffer-is-running buffer))
1239 (when (and (not (flymake-get-buffer-is-running buffer)) 1206 (when (and (not (flymake-get-buffer-is-running buffer))
1240 (flymake-can-syntax-check-file (buffer-file-name buffer))) 1207 (flymake-can-syntax-check-file (buffer-file-name buffer)))
@@ -1317,7 +1284,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1317 (call-interactively 'compile)) 1284 (call-interactively 'compile))
1318 1285
1319(defvar flymake-is-running nil 1286(defvar flymake-is-running nil
1320 "If t, flymake syntax check process is running for the current buffer") 1287 "If t, flymake syntax check process is running for the current buffer.")
1321 1288
1322(make-variable-buffer-local 'flymake-is-running) 1289(make-variable-buffer-local 'flymake-is-running)
1323 1290
@@ -1361,7 +1328,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1361 (flymake-set-buffer-var buffer 'flymake-check-start-time check-start-time)) 1328 (flymake-set-buffer-var buffer 'flymake-check-start-time check-start-time))
1362 1329
1363(defvar flymake-check-was-interrupted nil 1330(defvar flymake-check-was-interrupted nil
1364 "t if syntax check was killed by flymake-compile") 1331 "Non-nil if syntax check was killed by `flymake-compile'.")
1365 1332
1366(make-variable-buffer-local 'flymake-check-was-interrupted) 1333(make-variable-buffer-local 'flymake-check-was-interrupted)
1367 1334
@@ -1378,10 +1345,9 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1378 1345
1379(defun flymake-on-timer-event (buffer) 1346(defun flymake-on-timer-event (buffer)
1380 "Start a syntax check for buffer BUFFER if necessary." 1347 "Start a syntax check for buffer BUFFER if necessary."
1381 ;+(flymake-log 3 "timer: running=%s, time=%s, cur-time=%s" (flymake-get-buffer-is-running buffer) (flymake-get-buffer-last-change-time buffer) (flymake-float-time)) 1348 ;;+(flymake-log 3 "timer: running=%s, time=%s, cur-time=%s" (flymake-get-buffer-is-running buffer) (flymake-get-buffer-last-change-time buffer) (flymake-float-time))
1382 (when (and (bufferp buffer) (not (flymake-get-buffer-is-running buffer))) 1349 (when (and (bufferp buffer) (not (flymake-get-buffer-is-running buffer)))
1383 (save-excursion 1350 (with-current-buffer buffer
1384 (set-buffer buffer)
1385 (when (and (flymake-get-buffer-last-change-time buffer) 1351 (when (and (flymake-get-buffer-last-change-time buffer)
1386 (> (flymake-float-time) (+ flymake-no-changes-timeout (flymake-get-buffer-last-change-time buffer)))) 1352 (> (flymake-float-time) (+ flymake-no-changes-timeout (flymake-get-buffer-last-change-time buffer))))
1387 (flymake-set-buffer-last-change-time buffer nil) 1353 (flymake-set-buffer-last-change-time buffer nil)
@@ -1400,18 +1366,9 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1400 (end (if (= (point) (point-max)) (point) (1+ (point))))) 1366 (end (if (= (point) (point-max)) (point) (1+ (point)))))
1401 (count-lines beg end))) 1367 (count-lines beg end)))
1402 1368
1403(defun flymake-get-line-count (buffer)
1404 "Return number of lines in buffer BUFFER."
1405 (unless (bufferp buffer)
1406 (error "Invalid buffer"))
1407 (save-excursion
1408 (set-buffer buffer)
1409 (count-lines (point-min) (point-max))))
1410
1411(defun flymake-count-lines (buffer) 1369(defun flymake-count-lines (buffer)
1412 "Return number of lines in buffer BUFFER." 1370 "Return number of lines in buffer BUFFER."
1413 (save-excursion 1371 (with-current-buffer buffer
1414 (set-buffer buffer)
1415 (count-lines (point-min) (point-max)))) 1372 (count-lines (point-min) (point-max))))
1416 1373
1417(defun flymake-get-point-pixel-pos () 1374(defun flymake-get-point-pixel-pos ()
@@ -1438,7 +1395,6 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1438 (menu-data (flymake-make-err-menu-data line-no line-err-info-list)) 1395 (menu-data (flymake-make-err-menu-data line-no line-err-info-list))
1439 (choice nil) 1396 (choice nil)
1440 (mouse-pos (flymake-get-point-pixel-pos)) 1397 (mouse-pos (flymake-get-point-pixel-pos))
1441 (moved-mouse-pos (list (car mouse-pos) (+ 10 (car (cdr mouse-pos)))))
1442 (menu-pos (list (flymake-get-point-pixel-pos) (selected-window)))) 1398 (menu-pos (list (flymake-get-point-pixel-pos) (selected-window))))
1443 (if menu-data 1399 (if menu-data
1444 (progn 1400 (progn
@@ -1474,7 +1430,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1474 nil))) 1430 nil)))
1475 1431
1476(defun flymake-goto-file-and-line (file line) 1432(defun flymake-goto-file-and-line (file line)
1477 "Try to get buffer for file and goto line line in it" 1433 "Try to get buffer for FILE and goto line LINE in it."
1478 (if (not (file-exists-p file)) 1434 (if (not (file-exists-p file))
1479 (flymake-log 1 "file %s does not exists" file) 1435 (flymake-log 1 "file %s does not exists" file)
1480 (progn 1436 (progn
@@ -1482,12 +1438,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1482 (goto-line line)))) 1438 (goto-line line))))
1483 1439
1484;; flymake minor mode declarations 1440;; flymake minor mode declarations
1485(defvar flymake-mode nil) 1441(defvar flymake-mode-line nil)
1486
1487(make-variable-buffer-local 'flymake-mode)
1488
1489(defvar flymake-mode-line nil
1490 "")
1491 1442
1492(make-variable-buffer-local 'flymake-mode-line) 1443(make-variable-buffer-local 'flymake-mode-line)
1493 1444
@@ -1520,8 +1471,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1520(defun flymake-report-status (buffer e-w &optional status) 1471(defun flymake-report-status (buffer e-w &optional status)
1521 "Show status in mode line." 1472 "Show status in mode line."
1522 (when (bufferp buffer) 1473 (when (bufferp buffer)
1523 (save-excursion 1474 (with-current-buffer buffer
1524 (set-buffer buffer)
1525 (when e-w 1475 (when e-w
1526 (flymake-set-buffer-mode-line-e-w buffer e-w) 1476 (flymake-set-buffer-mode-line-e-w buffer e-w)
1527 ) 1477 )
@@ -1548,30 +1498,22 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1548 (when flymake-gui-warnings-enabled 1498 (when flymake-gui-warnings-enabled
1549 (flymake-display-warning (format "Flymake: %s. Flymake will be switched OFF" warning)) 1499 (flymake-display-warning (format "Flymake: %s. Flymake will be switched OFF" warning))
1550 ) 1500 )
1551 (save-excursion 1501 (with-current-buffer buffer
1552 (set-buffer buffer)
1553 (flymake-mode 0) 1502 (flymake-mode 0)
1554 (flymake-log 0 "switched OFF Flymake mode for buffer %s due to fatal status %s, warning %s" 1503 (flymake-log 0 "switched OFF Flymake mode for buffer %s due to fatal status %s, warning %s"
1555 (buffer-name buffer) status warning))) 1504 (buffer-name buffer) status warning)))
1556 1505
1557(defun flymake-mode (&optional arg) 1506;;;###autoload
1558 "Toggle flymake mode on/off." 1507(define-minor-mode flymake-mode
1559 (interactive) 1508 "Minor mode to do on-the-fly syntax checking.
1560 (let ((old-flymake-mode flymake-mode) 1509When called interactively, toggles the minor mode.
1561 (turn-on nil)) 1510With arg, turn Flymake mode on if and only if arg is positive."
1562 1511 :lighter flymake-mode-line
1563 (setq turn-on 1512 (if flymake-mode
1564 (if (null arg) 1513 (if (flymake-can-syntax-check-file (buffer-file-name))
1565 (not flymake-mode) 1514 (flymake-mode-on)
1566 ;else 1515 (flymake-log 2 "flymake cannot check syntax in buffer %s" (buffer-name)))
1567 (> (prefix-numeric-value arg) 0))) 1516 (flymake-mode-off)))
1568
1569 (if turn-on
1570 (if (flymake-can-syntax-check-file (buffer-file-name))
1571 (flymake-mode-on)
1572 (flymake-log 2 "flymake cannot check syntax in buffer %s" (buffer-name)))
1573 (flymake-mode-off))
1574 (force-mode-line-update)))
1575 1517
1576(defcustom flymake-start-syntax-check-on-find-file t 1518(defcustom flymake-start-syntax-check-on-find-file t
1577 "Start syntax check on find file." 1519 "Start syntax check on find file."
@@ -1579,10 +1521,6 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1579 :type 'boolean) 1521 :type 'boolean)
1580 1522
1581;;;###autoload 1523;;;###autoload
1582(unless (assq 'flymake-mode minor-mode-alist)
1583 (setq minor-mode-alist (cons '(flymake-mode flymake-mode-line) minor-mode-alist)))
1584
1585;;;###autoload
1586(defun flymake-mode-on () 1524(defun flymake-mode-on ()
1587 "Turn flymake mode on." 1525 "Turn flymake mode on."
1588 (when (not flymake-mode) 1526 (when (not flymake-mode)
@@ -1590,7 +1528,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1590 (setq after-change-functions (cons 'flymake-after-change-function after-change-functions)) 1528 (setq after-change-functions (cons 'flymake-after-change-function after-change-functions))
1591 (add-hook 'after-save-hook 'flymake-after-save-hook) 1529 (add-hook 'after-save-hook 'flymake-after-save-hook)
1592 (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook) 1530 (add-hook 'kill-buffer-hook 'flymake-kill-buffer-hook)
1593 ;+(add-hook 'find-file-hooks 'flymake-find-file-hook) 1531 ;;+(add-hook 'find-file-hook 'flymake-find-file-hook)
1594 1532
1595 (flymake-report-status (current-buffer) "" "") 1533 (flymake-report-status (current-buffer) "" "")
1596 1534
@@ -1608,7 +1546,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1608 (setq after-change-functions (delq 'flymake-after-change-function after-change-functions)) 1546 (setq after-change-functions (delq 'flymake-after-change-function after-change-functions))
1609 (remove-hook 'after-save-hook (function flymake-after-save-hook) t) 1547 (remove-hook 'after-save-hook (function flymake-after-save-hook) t)
1610 (remove-hook 'kill-buffer-hook (function flymake-kill-buffer-hook) t) 1548 (remove-hook 'kill-buffer-hook (function flymake-kill-buffer-hook) t)
1611 ;+(remove-hook 'find-file-hooks (function flymake-find-file-hook) t) 1549 ;;+(remove-hook 'find-file-hook (function flymake-find-file-hook) t)
1612 1550
1613 (flymake-delete-own-overlays (current-buffer)) 1551 (flymake-delete-own-overlays (current-buffer))
1614 1552
@@ -1627,8 +1565,8 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1627 :type 'boolean) 1565 :type 'boolean)
1628 1566
1629(defun flymake-after-change-function (start stop len) 1567(defun flymake-after-change-function (start stop len)
1630 "Start syntax check for current buffer if it isn't already running" 1568 "Start syntax check for current buffer if it isn't already running."
1631 ;+(flymake-log 0 "setting change time to %s" (flymake-float-time)) 1569 ;;+(flymake-log 0 "setting change time to %s" (flymake-float-time))
1632 (let((new-text (buffer-substring start stop))) 1570 (let((new-text (buffer-substring start stop)))
1633 (when (and flymake-start-syntax-check-on-newline (equal new-text "\n")) 1571 (when (and flymake-start-syntax-check-on-newline (equal new-text "\n"))
1634 (flymake-log 3 "starting syntax check as new-line has been seen") 1572 (flymake-log 3 "starting syntax check as new-line has been seen")
@@ -1647,10 +1585,10 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1647 (flymake-set-buffer-timer (current-buffer) nil))) 1585 (flymake-set-buffer-timer (current-buffer) nil)))
1648 1586
1649(defun flymake-find-file-hook () 1587(defun flymake-find-file-hook ()
1650 ;+(when flymake-start-syntax-check-on-find-file 1588 ;;+(when flymake-start-syntax-check-on-find-file
1651 ;+ (flymake-log 3 "starting syntax check on file open") 1589 ;;+ (flymake-log 3 "starting syntax check on file open")
1652 ;+ (flymake-start-syntax-check-for-current-buffer) 1590 ;;+ (flymake-start-syntax-check-for-current-buffer)
1653 ;+) 1591 ;;+)
1654 (when (and (not (local-variable-p 'flymake-mode (current-buffer))) 1592 (when (and (not (local-variable-p 'flymake-mode (current-buffer)))
1655 (flymake-can-syntax-check-file (buffer-file-name (current-buffer)))) 1593 (flymake-can-syntax-check-file (buffer-file-name (current-buffer))))
1656 (flymake-mode) 1594 (flymake-mode)
@@ -1691,12 +1629,12 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1691 (forward-char))) 1629 (forward-char)))
1692 1630
1693(defun flymake-goto-line (line-no) 1631(defun flymake-goto-line (line-no)
1694 "goto-line, then skip whitespace" 1632 "Go to line LINE-NO, then skip whitespace."
1695 (goto-line line-no) 1633 (goto-line line-no)
1696 (flymake-skip-whitespace)) 1634 (flymake-skip-whitespace))
1697 1635
1698(defun flymake-goto-next-error () 1636(defun flymake-goto-next-error ()
1699 "go to next error in err ring" 1637 "Go to next error in err ring."
1700 (interactive) 1638 (interactive)
1701 (let ((line-no (flymake-get-next-err-line-no (flymake-get-buffer-err-info (current-buffer)) (flymake-current-line-no)))) 1639 (let ((line-no (flymake-get-next-err-line-no (flymake-get-buffer-err-info (current-buffer)) (flymake-current-line-no))))
1702 (when (not line-no) 1640 (when (not line-no)
@@ -1707,7 +1645,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1707 (flymake-log 1 "no errors in current buffer")))) 1645 (flymake-log 1 "no errors in current buffer"))))
1708 1646
1709(defun flymake-goto-prev-error () 1647(defun flymake-goto-prev-error ()
1710 "go to prev error in err ring" 1648 "Go to prev error in err ring."
1711 (interactive) 1649 (interactive)
1712 (let ((line-no (flymake-get-prev-err-line-no (flymake-get-buffer-err-info (current-buffer)) (flymake-current-line-no)))) 1650 (let ((line-no (flymake-get-prev-err-line-no (flymake-get-buffer-err-info (current-buffer)) (flymake-current-line-no))))
1713 (when (not line-no) 1651 (when (not line-no)
@@ -1741,9 +1679,9 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1741 1679
1742 (let* ((dir (file-name-directory file-name)) 1680 (let* ((dir (file-name-directory file-name))
1743 (slash-pos (string-match "/" dir)) 1681 (slash-pos (string-match "/" dir))
1744 (temp-dir (concat (flymake-ensure-ends-with-slash (flymake-get-temp-dir)) (substring dir (1+ slash-pos))))) 1682 (temp-dir (concat (file-name-as-directory (flymake-get-temp-dir)) (substring dir (1+ slash-pos)))))
1745 1683
1746 (file-truename (concat (flymake-ensure-ends-with-slash temp-dir) 1684 (file-truename (concat (file-name-as-directory temp-dir)
1747 (file-name-nondirectory file-name))))) 1685 (file-name-nondirectory file-name)))))
1748 1686
1749(defun flymake-strrchr (str ch) 1687(defun flymake-strrchr (str ch)
@@ -1756,14 +1694,14 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1756 pos)) 1694 pos))
1757 1695
1758(defun flymake-delete-temp-directory (dir-name) 1696(defun flymake-delete-temp-directory (dir-name)
1759 "attempt to delete temp dir created by flymake-create-temp-with-folder-structure, do not fail on error." 1697 "Attempt to delete temp dir created by `flymake-create-temp-with-folder-structure', do not fail on error."
1760 (let* ((temp-dir (flymake-get-temp-dir)) 1698 (let* ((temp-dir (flymake-get-temp-dir))
1761 (suffix (substring dir-name (1+ (length temp-dir)))) 1699 (suffix (substring dir-name (1+ (length temp-dir))))
1762 (slash-pos nil)) 1700 (slash-pos nil))
1763 1701
1764 (while (> (length suffix) 0) 1702 (while (> (length suffix) 0)
1765 ;+(flymake-log 0 "suffix=%s" suffix) 1703 ;;+(flymake-log 0 "suffix=%s" suffix)
1766 (flymake-safe-delete-directory (file-truename (concat (flymake-ensure-ends-with-slash temp-dir) suffix))) 1704 (flymake-safe-delete-directory (file-truename (concat (file-name-as-directory temp-dir) suffix)))
1767 (setq slash-pos (flymake-strrchr suffix (string-to-char "/"))) 1705 (setq slash-pos (flymake-strrchr suffix (string-to-char "/")))
1768 (if slash-pos 1706 (if slash-pos
1769 (setq suffix (substring suffix 0 slash-pos)) 1707 (setq suffix (substring suffix 0 slash-pos))
@@ -1786,8 +1724,8 @@ Delete temp file."
1786 (flymake-set-buffer-last-change-time buffer nil))) 1724 (flymake-set-buffer-last-change-time buffer nil)))
1787 1725
1788(defun flymake-get-real-file-name (buffer file-name-from-err-msg) 1726(defun flymake-get-real-file-name (buffer file-name-from-err-msg)
1789 "Translate file name from error message to `real' file name. 1727 "Translate file name from error message to \"real\" file name.
1790Return full-name. Names are real, not patched." 1728Return full-name. Names are real, not patched."
1791 (let* ((real-name nil) 1729 (let* ((real-name nil)
1792 (source-file-name (buffer-file-name buffer)) 1730 (source-file-name (buffer-file-name buffer))
1793 (master-file-name (flymake-get-buffer-value buffer "master-file-name")) 1731 (master-file-name (flymake-get-buffer-value buffer "master-file-name"))
@@ -1805,7 +1743,7 @@ Return full-name. Names are real, not patched."
1805 (setq file-name-from-err-msg source-file-name)) 1743 (setq file-name-from-err-msg source-file-name))
1806 1744
1807 (setq real-name (flymake-get-full-patched-file-name file-name-from-err-msg base-dirs files)) 1745 (setq real-name (flymake-get-full-patched-file-name file-name-from-err-msg base-dirs files))
1808 ; if real-name is nil, than file name from err msg is none of the files we've patched 1746 ;; if real-name is nil, than file name from err msg is none of the files we've patched
1809 (if (not real-name) 1747 (if (not real-name)
1810 (setq real-name (flymake-get-full-nonpatched-file-name file-name-from-err-msg base-dirs))) 1748 (setq real-name (flymake-get-full-nonpatched-file-name file-name-from-err-msg base-dirs)))
1811 (if (not real-name) 1749 (if (not real-name)
@@ -1825,7 +1763,7 @@ Return full-name. Names are real, not patched."
1825 (let* ((this-dir (nth (1- base-dirs-count) base-dirs)) 1763 (let* ((this-dir (nth (1- base-dirs-count) base-dirs))
1826 (this-file (nth 0 (nth (1- file-count) files))) 1764 (this-file (nth 0 (nth (1- file-count) files)))
1827 (this-real-name (nth 1 (nth (1- file-count) files)))) 1765 (this-real-name (nth 1 (nth (1- file-count) files))))
1828 ;+(flymake-log 0 "this-dir=%s this-file=%s this-real=%s msg-file=%s" this-dir this-file this-real-name file-name-from-err-msg) 1766 ;;+(flymake-log 0 "this-dir=%s this-file=%s this-real=%s msg-file=%s" this-dir this-file this-real-name file-name-from-err-msg)
1829 (when (and this-dir this-file (flymake-same-files 1767 (when (and this-dir this-file (flymake-same-files
1830 (flymake-get-absolute-file-name-basedir file-name-from-err-msg this-dir) 1768 (flymake-get-absolute-file-name-basedir file-name-from-err-msg this-dir)
1831 this-file)) 1769 this-file))
@@ -1941,7 +1879,7 @@ Use CREATE-TEMP-F for creating temp copy."
1941 (flymake-simple-make-init-impl buffer 'flymake-create-temp-inplace t t "Makefile" 'flymake-get-make-cmdline)) 1879 (flymake-simple-make-init-impl buffer 'flymake-create-temp-inplace t t "Makefile" 'flymake-get-make-cmdline))
1942 1880
1943(defun flymake-master-make-init (buffer get-incl-dirs-f master-file-masks include-regexp-list) 1881(defun flymake-master-make-init (buffer get-incl-dirs-f master-file-masks include-regexp-list)
1944 "create make command line for a source file checked via master file compilation" 1882 "Create make command line for a source file checked via master file compilation."
1945 (let* ((make-args nil) 1883 (let* ((make-args nil)
1946 (temp-master-file-name (flymake-init-create-temp-source-and-master-buffer-copy 1884 (temp-master-file-name (flymake-init-create-temp-source-and-master-buffer-copy
1947 buffer get-incl-dirs-f 'flymake-create-temp-inplace 1885 buffer get-incl-dirs-f 'flymake-create-temp-inplace
@@ -1971,7 +1909,7 @@ Use CREATE-TEMP-F for creating temp copy."
1971 (flymake-simple-make-init-impl buffer 'flymake-create-temp-with-folder-structure nil nil "build.xml" 'flymake-get-ant-cmdline)) 1909 (flymake-simple-make-init-impl buffer 'flymake-create-temp-with-folder-structure nil nil "build.xml" 'flymake-get-ant-cmdline))
1972 1910
1973(defun flymake-simple-java-cleanup (buffer) 1911(defun flymake-simple-java-cleanup (buffer)
1974 "cleanup after flymake-simple-make-java-init -- delete temp file and dirs" 1912 "Cleanup after `flymake-simple-make-java-init' -- delete temp file and dirs."
1975 (let* ((temp-source-file-name (flymake-get-buffer-value buffer "temp-source-file-name"))) 1913 (let* ((temp-source-file-name (flymake-get-buffer-value buffer "temp-source-file-name")))
1976 (flymake-safe-delete-file temp-source-file-name) 1914 (flymake-safe-delete-file temp-source-file-name)
1977 (when temp-source-file-name 1915 (when temp-source-file-name
@@ -1979,15 +1917,17 @@ Use CREATE-TEMP-F for creating temp copy."
1979 1917
1980;;;; perl-specific init-cleanup routines 1918;;;; perl-specific init-cleanup routines
1981(defun flymake-perl-init (buffer) 1919(defun flymake-perl-init (buffer)
1982 (let* ((temp-file (flymake-init-create-temp-buffer-copy buffer 'flymake-create-temp-inplace)) 1920 (let* ((temp-file (flymake-init-create-temp-buffer-copy
1983 (local-file (concat (flymake-build-relative-filename (file-name-directory (buffer-file-name (current-buffer))) 1921 buffer 'flymake-create-temp-inplace))
1984 (file-name-directory temp-file)) 1922 (local-file (concat (flymake-build-relative-filename
1923 (file-name-directory buffer-file-name)
1924 (file-name-directory temp-file))
1985 (file-name-nondirectory temp-file)))) 1925 (file-name-nondirectory temp-file))))
1986 (list "perl" (list "-wc " local-file)))) 1926 (list "perl" (list "-wc " local-file))))
1987 1927
1988;;;; tex-specific init-cleanup routines 1928;;;; tex-specific init-cleanup routines
1989(defun flymake-get-tex-args (file-name) 1929(defun flymake-get-tex-args (file-name)
1990 ;(list "latex" (list "-c-style-errors" file-name)) 1930 ;;(list "latex" (list "-c-style-errors" file-name))
1991 (list "texify" (list "--pdf" "--tex-option=-c-style-errors" file-name))) 1931 (list "texify" (list "--pdf" "--tex-option=-c-style-errors" file-name)))
1992 1932
1993(defun flymake-simple-tex-init (buffer) 1933(defun flymake-simple-tex-init (buffer)
@@ -2005,10 +1945,10 @@ Use CREATE-TEMP-F for creating temp copy."
2005 '(".")) 1945 '("."))
2006 1946
2007;;;; xml-specific init-cleanup routines 1947;;;; xml-specific init-cleanup routines
2008(defun flymake-xml-init(buffer) 1948(defun flymake-xml-init (buffer)
2009 (list "xml" (list "val" (flymake-init-create-temp-buffer-copy buffer 'flymake-create-temp-inplace)))) 1949 (list "xml" (list "val" (flymake-init-create-temp-buffer-copy buffer 'flymake-create-temp-inplace))))
2010 1950
2011(provide 'flymake) 1951(provide 'flymake)
2012 1952
2013;;; arch-tag: 8f0d6090-061d-4cac-8862-7c151c4a02dd 1953;; arch-tag: 8f0d6090-061d-4cac-8862-7c151c4a02dd
2014;;; flymake.el ends here 1954;;; flymake.el ends here
diff --git a/lisp/progmodes/fortran.el b/lisp/progmodes/fortran.el
index 768012c736c..30e1977d28d 100644
--- a/lisp/progmodes/fortran.el
+++ b/lisp/progmodes/fortran.el
@@ -1,7 +1,7 @@
1;;; fortran.el --- Fortran mode for GNU Emacs 1;;; fortran.el --- Fortran mode for GNU Emacs
2 2
3;; Copyright (c) 1986, 93, 94, 95, 97, 98, 99, 2000, 01, 03, 04 3;; Copyright (C) 1986, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001,
4;; Free Software Foundation, Inc. 4;; 2003, 2004, 2005 Free Software Foundation, Inc.
5 5
6;; Author: Michael D. Prange <prange@erl.mit.edu> 6;; Author: Michael D. Prange <prange@erl.mit.edu>
7;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk> 7;; Maintainer: Glenn Morris <gmorris@ast.cam.ac.uk>
@@ -95,7 +95,7 @@ with a character in column 6."
95 :group 'fortran-indent) 95 :group 'fortran-indent)
96 96
97(defcustom fortran-if-indent 3 97(defcustom fortran-if-indent 3
98 "*Extra indentation applied to IF blocks." 98 "*Extra indentation applied to IF, SELECT CASE and WHERE blocks."
99 :type 'integer 99 :type 'integer
100 :group 'fortran-indent) 100 :group 'fortran-indent)
101 101
@@ -321,7 +321,8 @@ program\\|subroutine\\)\\>[ \t]*\\(\\sw+\\)?"
321 "while" "inquire" "stop" "return" 321 "while" "inquire" "stop" "return"
322 "include" "open" "close" "read" 322 "include" "open" "close" "read"
323 "write" "format" "print" "select" "case" 323 "write" "format" "print" "select" "case"
324 "cycle" "exit" "rewind" "backspace") 324 "cycle" "exit" "rewind" "backspace"
325 "where" "elsewhere")
325 'paren) "\\>") 326 'paren) "\\>")
326 ;; Builtin operators. 327 ;; Builtin operators.
327 (concat "\\." (regexp-opt 328 (concat "\\." (regexp-opt
@@ -370,6 +371,29 @@ program\\|subroutine\\)\\>[ \t]*\\(\\sw+\\)?"
370 fortran-font-lock-keywords-2))) 371 fortran-font-lock-keywords-2)))
371 "Gaudy level highlighting for Fortran mode.") 372 "Gaudy level highlighting for Fortran mode.")
372 373
374(defvar fortran-font-lock-keywords-4
375 (append fortran-font-lock-keywords-3
376 (list (list
377 (concat "\\<"
378 (regexp-opt
379 '("int" "ifix" "idint" "real" "float" "sngl"
380 "dble" "cmplx" "ichar" "char" "aint" "dint"
381 "anint" "dnint" "nint" "idnint" "iabs" "abs"
382 "dabs" "cabs" "mod" "amod" "dmod" "isign"
383 "sign" "dsign" "idim" "dim" "ddim" "dprod"
384 "max" "max0" "amax1" "dmax1" "amax0" "max1"
385 "min0" "amin1" "dmin1" "amin0" "min1" "len"
386 "index" "lge" "lgt" "lle" "llt" "aimag"
387 "conjg" "sqrt" "dsqrt" "csqrt" "exp" "dexp"
388 "cexp" "log" "alog" "dlog" "clog" "log10"
389 "alog10" "dlog10" "sin" "dsin" "csin" "cos"
390 "dcos" "ccos" "tan" "dtan" "asin" "dasin"
391 "acos" "dacos" "atan" "datan" "atan2" "datan2"
392 "sinh" "dsinh" "cosh" "dcosh" "tanh" "dtanh")
393 'paren) "[ \t]*(") '(1 font-lock-builtin-face))))
394 "Maximum highlighting for Fortran mode.
395Consists of level 3 plus all other intrinsics not already highlighted.")
396
373;; Comments are real pain in Fortran because there is no way to 397;; Comments are real pain in Fortran because there is no way to
374;; represent the standard comment syntax in an Emacs syntax table. 398;; represent the standard comment syntax in an Emacs syntax table.
375;; (We can do so for F90-style). Therefore an unmatched quote in a 399;; (We can do so for F90-style). Therefore an unmatched quote in a
@@ -409,6 +433,64 @@ These get fixed-format comments fontified.")
409 "Value for `imenu-generic-expression' in Fortran mode.") 433 "Value for `imenu-generic-expression' in Fortran mode.")
410 434
411 435
436;; Hideshow support.
437(defconst fortran-blocks-re
438 (concat "block[ \t]*data\\|select[ \t]*case\\|"
439 (regexp-opt '("do" "if" "interface" "function" "map" "program"
440 "structure" "subroutine" "union" "where")))
441 "Regexp potentially indicating the start or end of a Fortran \"block\".
442Omits naked END statements, and DO-loops closed by anything other
443than ENDDO.")
444
445(defconst fortran-end-block-re
446 ;; Do-loops terminated by things other than ENDDO cannot be handled
447 ;; with a regexp. This omission does not seem to matter to hideshow...
448 (concat "^[ \t0-9]*\\<end[ \t]*\\("
449 fortran-blocks-re
450 ;; Naked END statement.
451 "\\|!\\|$\\)")
452 "Regexp matching the end of a Fortran \"block\", from the line start.
453Note that only ENDDO is handled for the end of a DO-loop. Used
454in the Fortran entry in `hs-special-modes-alist'.")
455
456(defconst fortran-start-block-re
457 (concat
458 "^[ \t0-9]*\\(" ; statement number
459 ;; Structure label for DO, IF, SELECT, WHERE.
460 "\\(\\(\\sw+[ \t]*:[ \t]*\\)?"
461 ;; IF blocks are a nuisance:
462 ;; IF ( ... ) foo is not a block, but a single statement.
463 ;; IF ( ... ) THEN can be split over multiple lines.
464 ;; [So can, eg, a DO WHILE (... ), but that is less common, I hope.]
465 ;; The regexp below allows for it to be split over at most 2 lines.
466 ;; That leads to the problem of not matching two consecutive IF
467 ;; statements as one, eg:
468 ;; IF ( ... ) foo
469 ;; IF ( ... ) THEN
470 ;; It simply is not possible to do this in a 100% correct fashion
471 ;; using a regexp - see the functions fortran-end-if,
472 ;; fortran-beginning-if for the hoops we have to go through.
473 ;; An alternative is to match on THEN at a line end, eg:
474 ;; ".*)[ \t]*then[ \t]*\\($\\|!\\)"
475 ;; This would also match ELSE branches, though. This does not seem
476 ;; right to me, because then one has neighbouring blocks that are
477 ;; not nested in each other.
478 "\\(if[ \t]*(\\(.*\\|"
479 ".*\n\\([^if]*\\([^i].\\|.[^f]\\|.\\>\\)\\)\\)\\<then\\|"
480 "do\\|select[ \t]*case\\|where\\)\\)\\|"
481 (regexp-opt '("interface" "function" "map" "program"
482 "structure" "subroutine" "union"))
483 "\\|block[ \t]*data\\)[ \t]*")
484 "Regexp matching the start of a Fortran \"block\", from the line start.
485A simple regexp cannot do this in fully correct fashion, so this
486tries to strike a compromise between complexity and flexibility.
487Used in the Fortran entry in `hs-special-modes-alist'.")
488
489(add-to-list 'hs-special-modes-alist
490 `(fortran-mode ,fortran-start-block-re ,fortran-end-block-re
491 "^[cC*!]" fortran-end-of-block nil))
492
493
412(defvar fortran-mode-syntax-table 494(defvar fortran-mode-syntax-table
413 (let ((table (make-syntax-table))) 495 (let ((table (make-syntax-table)))
414 ;; We might like `;' to be punctuation (g77 multi-statement 496 ;; We might like `;' to be punctuation (g77 multi-statement
@@ -422,7 +504,8 @@ These get fixed-format comments fontified.")
422 (modify-syntax-entry ?/ "." table) 504 (modify-syntax-entry ?/ "." table)
423 (modify-syntax-entry ?\' "\"" table) 505 (modify-syntax-entry ?\' "\"" table)
424 (modify-syntax-entry ?\" "\"" table) 506 (modify-syntax-entry ?\" "\"" table)
425 ;; Consistent with GNU Fortran -- see the manual. 507 ;; Consistent with GNU Fortran's default -- see the manual.
508 ;; The F77 standard imposes no rule on this issue.
426 (modify-syntax-entry ?\\ "\\" table) 509 (modify-syntax-entry ?\\ "\\" table)
427 ;; This might be better as punctuation, as for C, but this way you 510 ;; This might be better as punctuation, as for C, but this way you
428 ;; can treat floating-point numbers as symbols. 511 ;; can treat floating-point numbers as symbols.
@@ -446,6 +529,8 @@ These get fixed-format comments fontified.")
446 (define-key map "\C-c;" 'fortran-comment-region) 529 (define-key map "\C-c;" 'fortran-comment-region)
447 (define-key map "\M-;" 'fortran-indent-comment) 530 (define-key map "\M-;" 'fortran-indent-comment)
448 (define-key map "\M-\n" 'fortran-split-line) 531 (define-key map "\M-\n" 'fortran-split-line)
532 (define-key map "\M-\C-n" 'fortran-end-of-block)
533 (define-key map "\M-\C-p" 'fortran-beginning-of-block)
449 (define-key map "\M-\C-q" 'fortran-indent-subprogram) 534 (define-key map "\M-\C-q" 'fortran-indent-subprogram)
450 (define-key map "\C-c\C-w" 'fortran-window-create-momentarily) 535 (define-key map "\C-c\C-w" 'fortran-window-create-momentarily)
451 (define-key map "\C-c\C-r" 'fortran-column-ruler) 536 (define-key map "\C-c\C-r" 'fortran-column-ruler)
@@ -606,7 +691,7 @@ Key definitions:
606 691
607Variables controlling indentation style and extra features: 692Variables controlling indentation style and extra features:
608 693
609`comment-start' 694`fortran-comment-line-start'
610 To use comments starting with `!', set this to the string \"!\". 695 To use comments starting with `!', set this to the string \"!\".
611`fortran-do-indent' 696`fortran-do-indent'
612 Extra indentation within DO blocks (default 3). 697 Extra indentation within DO blocks (default 3).
@@ -696,7 +781,8 @@ with no args, if that value is non-nil."
696 '((fortran-font-lock-keywords 781 '((fortran-font-lock-keywords
697 fortran-font-lock-keywords-1 782 fortran-font-lock-keywords-1
698 fortran-font-lock-keywords-2 783 fortran-font-lock-keywords-2
699 fortran-font-lock-keywords-3) 784 fortran-font-lock-keywords-3
785 fortran-font-lock-keywords-4)
700 nil t ((?/ . "$/") ("_$" . "w")) 786 nil t ((?/ . "$/") ("_$" . "w"))
701 fortran-beginning-of-subprogram)) 787 fortran-beginning-of-subprogram))
702 (set (make-local-variable 'font-lock-syntactic-keywords) 788 (set (make-local-variable 'font-lock-syntactic-keywords)
@@ -1059,6 +1145,84 @@ Directive lines are treated as comments."
1059 (if (not not-last-statement) 1145 (if (not not-last-statement)
1060 'last-statement))) 1146 'last-statement)))
1061 1147
1148(defun fortran-looking-at-if-then ()
1149 "Return non-nil if at the start of a line with an IF ... THEN statement."
1150 ;; cf f90-looking-at-if-then.
1151 (let ((p (point))
1152 (i (fortran-beginning-if)))
1153 (if i
1154 (save-excursion
1155 (goto-char i)
1156 (beginning-of-line)
1157 (= (point) p)))))
1158
1159;; Used in hs-special-modes-alist.
1160(defun fortran-end-of-block (&optional num)
1161 "Move point forward to the end of the current code block.
1162With optional argument NUM, go forward that many balanced blocks.
1163If NUM is negative, go backward to the start of a block. Does
1164not check for consistency of block types. Interactively, pushes
1165mark before moving point."
1166 (interactive "p")
1167 (if (interactive-p) (push-mark (point) t))
1168 (and num (< num 0) (fortran-beginning-of-block (- num)))
1169 (let ((case-fold-search t)
1170 (count (or num 1)))
1171 (end-of-line)
1172 (while (and (> count 0)
1173 (re-search-forward
1174 (concat "\\(" fortran-blocks-re
1175 (if fortran-check-all-num-for-matching-do
1176 "\\|^[ \t]*[0-9]+" "")
1177 "\\|continue\\|end\\)\\>")
1178 nil 'move))
1179 (beginning-of-line)
1180 (if (if (looking-at (concat "^[0-9 \t]*" fortran-if-start-re))
1181 (fortran-looking-at-if-then)
1182 (looking-at fortran-start-block-re))
1183 (setq count (1+ count))
1184 (if (or (looking-at fortran-end-block-re)
1185 (and (or (looking-at "^[0-9 \t]*continue")
1186 (and fortran-check-all-num-for-matching-do
1187 (looking-at "[ \t]*[0-9]+")))
1188 (fortran-check-for-matching-do)))
1189 (setq count (1- count))))
1190 (end-of-line))
1191 (if (> count 0) (error "Missing block end"))))
1192
1193(defun fortran-beginning-of-block (&optional num)
1194 "Move point backwards to the start of the current code block.
1195With optional argument NUM, go backward that many balanced
1196blocks. If NUM is negative, go forward to the end of a block.
1197Does not check for consistency of block types. Interactively,
1198pushes mark before moving point."
1199 (interactive "p")
1200 (if (interactive-p) (push-mark (point) t))
1201 (and num (< num 0) (fortran-end-of-block (- num)))
1202 (let ((case-fold-search t)
1203 (count (or num 1)))
1204 (beginning-of-line)
1205 (while (and (> count 0)
1206 (re-search-backward
1207 (concat "\\(" fortran-blocks-re
1208 (if fortran-check-all-num-for-matching-do
1209 "\\|^[ \t]*[0-9]+" "")
1210 "\\|continue\\|end\\)\\>")
1211 nil 'move))
1212 (beginning-of-line)
1213 (if (if (looking-at (concat "^[0-9 \t]*" fortran-if-start-re))
1214 (fortran-looking-at-if-then)
1215 (looking-at fortran-start-block-re))
1216 (setq count (1- count))
1217 (if (or (looking-at fortran-end-block-re)
1218 (and (or (looking-at "^[0-9 \t]*continue")
1219 (and fortran-check-all-num-for-matching-do
1220 (looking-at "[ \t]*[0-9]+")))
1221 (fortran-check-for-matching-do)))
1222 (setq count (1+ count)))))
1223 ;; Includes an un-named main program block.
1224 (if (> count 0) (error "Missing block start"))))
1225
1062 1226
1063(defun fortran-blink-match (regex keyword find-begin) 1227(defun fortran-blink-match (regex keyword find-begin)
1064 "From a line matching REGEX, blink matching KEYWORD statement line. 1228 "From a line matching REGEX, blink matching KEYWORD statement line.
@@ -1679,8 +1843,9 @@ If ALL is nil, only match comments that start in column > 0."
1679 (1+ (point))))) 1843 (1+ (point)))))
1680 (if (re-search-forward "\\S\"\\s\"\\S\"" eol t) 1844 (if (re-search-forward "\\S\"\\s\"\\S\"" eol t)
1681 (backward-char 2)) 1845 (backward-char 2))
1682 ;; If the current string is longer than 72 - 6 chars, 1846 ;; If the current string is longer than (fill-column
1683 ;; break it at the fill column (else infinite loop). 1847 ;; - 6) chars, break it at the fill column (else
1848 ;; infinite loop).
1684 (if (> (- (point) start) 1849 (if (> (- (point) start)
1685 (- fill-column 6 fortran-continuation-indent)) 1850 (- fill-column 6 fortran-continuation-indent))
1686 fcpoint 1851 fcpoint
diff --git a/lisp/progmodes/gdb-ui.el b/lisp/progmodes/gdb-ui.el
index cb58a53a0d3..3e4796436f1 100644
--- a/lisp/progmodes/gdb-ui.el
+++ b/lisp/progmodes/gdb-ui.el
@@ -1299,10 +1299,10 @@ static char *magick[] = {
1299(defvar gdb-breakpoints-mode-map 1299(defvar gdb-breakpoints-mode-map
1300 (let ((map (make-sparse-keymap)) 1300 (let ((map (make-sparse-keymap))
1301 (menu (make-sparse-keymap "Breakpoints"))) 1301 (menu (make-sparse-keymap "Breakpoints")))
1302 (define-key menu [toggle] '("Toggle" . gdb-toggle-breakpoint)) 1302 (define-key menu [quit] '("Quit" . kill-this-buffer))
1303 (define-key menu [delete] '("Delete" . gdb-delete-breakpoint))
1304 (define-key menu [goto] '("Goto" . gdb-goto-breakpoint)) 1303 (define-key menu [goto] '("Goto" . gdb-goto-breakpoint))
1305 1304 (define-key menu [delete] '("Delete" . gdb-delete-breakpoint))
1305 (define-key menu [toggle] '("Toggle" . gdb-toggle-breakpoint))
1306 (suppress-keymap map) 1306 (suppress-keymap map)
1307 (define-key map [menu-bar breakpoints] (cons "Breakpoints" menu)) 1307 (define-key map [menu-bar breakpoints] (cons "Breakpoints" menu))
1308 (define-key map " " 'gdb-toggle-breakpoint) 1308 (define-key map " " 'gdb-toggle-breakpoint)
@@ -1310,6 +1310,7 @@ static char *magick[] = {
1310 (define-key map "q" 'kill-this-buffer) 1310 (define-key map "q" 'kill-this-buffer)
1311 (define-key map "\r" 'gdb-goto-breakpoint) 1311 (define-key map "\r" 'gdb-goto-breakpoint)
1312 (define-key map [mouse-2] 'gdb-goto-breakpoint) 1312 (define-key map [mouse-2] 'gdb-goto-breakpoint)
1313 (define-key map [follow-link] 'mouse-face)
1313 map)) 1314 map))
1314 1315
1315(defun gdb-breakpoints-mode () 1316(defun gdb-breakpoints-mode ()
@@ -1435,6 +1436,7 @@ static char *magick[] = {
1435 (define-key map "q" 'kill-this-buffer) 1436 (define-key map "q" 'kill-this-buffer)
1436 (define-key map "\r" 'gdb-frames-select) 1437 (define-key map "\r" 'gdb-frames-select)
1437 (define-key map [mouse-2] 'gdb-frames-select) 1438 (define-key map [mouse-2] 'gdb-frames-select)
1439 (define-key map [follow-link] 'mouse-face)
1438 map)) 1440 map))
1439 1441
1440(defun gdb-frames-mode () 1442(defun gdb-frames-mode ()
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 0988599ed54..1f9284db9cb 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -531,6 +531,9 @@ off the specialized speedbar mode."
531 531
532(defvar gdb-first-prompt t) 532(defvar gdb-first-prompt t)
533 533
534(defvar gud-filter-pending-text nil
535 "Non-nil means this is text that has been saved for later in `gud-filter'.")
536
534;;;###autoload 537;;;###autoload
535(defun gdb (command-line) 538(defun gdb (command-line)
536 "Run gdb on program FILE in buffer *gud-FILE*. 539 "Run gdb on program FILE in buffer *gud-FILE*.
@@ -562,6 +565,7 @@ and source-file directory for your debugger."
562 (setq comint-prompt-regexp "^(.*gdb[+]?) *") 565 (setq comint-prompt-regexp "^(.*gdb[+]?) *")
563 (setq paragraph-start comint-prompt-regexp) 566 (setq paragraph-start comint-prompt-regexp)
564 (setq gdb-first-prompt t) 567 (setq gdb-first-prompt t)
568 (setq gud-filter-pending-text nil)
565 (run-hooks 'gdb-mode-hook)) 569 (run-hooks 'gdb-mode-hook))
566 570
567;; One of the nice features of GDB is its impressive support for 571;; One of the nice features of GDB is its impressive support for
@@ -2445,9 +2449,6 @@ comint mode, which see."
2445 "Non-nil means don't process anything from the debugger right now. 2449 "Non-nil means don't process anything from the debugger right now.
2446It is saved for when this flag is not set.") 2450It is saved for when this flag is not set.")
2447 2451
2448(defvar gud-filter-pending-text nil
2449 "Non-nil means this is text that has been saved for later in `gud-filter'.")
2450
2451;; These functions are responsible for inserting output from your debugger 2452;; These functions are responsible for inserting output from your debugger
2452;; into the buffer. The hard work is done by the method that is 2453;; into the buffer. The hard work is done by the method that is
2453;; the value of gud-marker-filter. 2454;; the value of gud-marker-filter.
@@ -2516,19 +2517,22 @@ It is saved for when this flag is not set.")
2516 (gud-filter proc "")))))) 2517 (gud-filter proc ""))))))
2517 2518
2518(defvar gud-minor-mode-type nil) 2519(defvar gud-minor-mode-type nil)
2520(defvar gud-overlay-arrow-position nil)
2521(put 'gud-overlay-arrow-position 'overlay-arrow-string "=>")
2522(add-to-list 'overlay-arrow-variable-list 'gud-overlay-arrow-position)
2519 2523
2520(defun gud-sentinel (proc msg) 2524(defun gud-sentinel (proc msg)
2521 (cond ((null (buffer-name (process-buffer proc))) 2525 (cond ((null (buffer-name (process-buffer proc)))
2522 ;; buffer killed 2526 ;; buffer killed
2523 ;; Stop displaying an arrow in a source file. 2527 ;; Stop displaying an arrow in a source file.
2524 (setq overlay-arrow-position nil) 2528 (setq gud-overlay-arrow-position nil)
2525 (set-process-buffer proc nil) 2529 (set-process-buffer proc nil)
2526 (if (memq gud-minor-mode-type '(gdbmi gdba)) 2530 (if (memq gud-minor-mode-type '(gdbmi gdba))
2527 (gdb-reset) 2531 (gdb-reset)
2528 (gud-reset))) 2532 (gud-reset)))
2529 ((memq (process-status proc) '(signal exit)) 2533 ((memq (process-status proc) '(signal exit))
2530 ;; Stop displaying an arrow in a source file. 2534 ;; Stop displaying an arrow in a source file.
2531 (setq overlay-arrow-position nil) 2535 (setq gud-overlay-arrow-position nil)
2532 (with-current-buffer gud-comint-buffer 2536 (with-current-buffer gud-comint-buffer
2533 (if (memq gud-minor-mode-type '(gdbmi gdba)) 2537 (if (memq gud-minor-mode-type '(gdbmi gdba))
2534 (gdb-reset) 2538 (gdb-reset)
@@ -2611,13 +2615,13 @@ Obeying it means displaying in another window the specified file and line."
2611 (goto-line line) 2615 (goto-line line)
2612 (setq pos (point)) 2616 (setq pos (point))
2613 (setq overlay-arrow-string "=>") 2617 (setq overlay-arrow-string "=>")
2614 (or overlay-arrow-position 2618 (or gud-overlay-arrow-position
2615 (setq overlay-arrow-position (make-marker))) 2619 (setq gud-overlay-arrow-position (make-marker)))
2616 (set-marker overlay-arrow-position (point) (current-buffer))) 2620 (set-marker gud-overlay-arrow-position (point) (current-buffer)))
2617 (cond ((or (< pos (point-min)) (> pos (point-max))) 2621 (cond ((or (< pos (point-min)) (> pos (point-max)))
2618 (widen) 2622 (widen)
2619 (goto-char pos)))) 2623 (goto-char pos))))
2620 (if window (set-window-point window overlay-arrow-position)))))) 2624 (if window (set-window-point window gud-overlay-arrow-position))))))
2621 2625
2622;; The gud-call function must do the right thing whether its invoking 2626;; The gud-call function must do the right thing whether its invoking
2623;; keystroke is from the GUD buffer itself (via major-mode binding) 2627;; keystroke is from the GUD buffer itself (via major-mode binding)
diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el
index 44675470b67..221a6f4aebb 100644
--- a/lisp/progmodes/idlw-shell.el
+++ b/lisp/progmodes/idlw-shell.el
@@ -1,5 +1,5 @@
1;; idlw-shell.el --- run IDL as an inferior process of Emacs. 1;; idlw-shell.el --- run IDL as an inferior process of Emacs.
2;; Copyright (c) 1999,2000,2001,2002,2003,2004 Free Software Foundation 2;; Copyright (c) 1999,2000,2001,2002,2003,2004,2005 Free Software Foundation
3 3
4;; Authors: J.D. Smith <jdsmith@as.arizona.edu> 4;; Authors: J.D. Smith <jdsmith@as.arizona.edu>
5;; Carsten Dominik <dominik@astro.uva.nl> 5;; Carsten Dominik <dominik@astro.uva.nl>
@@ -437,7 +437,7 @@ end"
437 437
438(defcustom idlwave-shell-mark-stop-line t 438(defcustom idlwave-shell-mark-stop-line t
439 "*Non-nil means, mark the source code line where IDL is currently stopped. 439 "*Non-nil means, mark the source code line where IDL is currently stopped.
440Value decides about the method which is used to mark the line. Legal values 440Value decides about the method which is used to mark the line. Valid values
441are: 441are:
442 442
443nil Do not mark the line 443nil Do not mark the line
@@ -494,7 +494,7 @@ where IDL is stopped, when in Electric Debug Mode."
494 494
495(defcustom idlwave-shell-mark-breakpoints t 495(defcustom idlwave-shell-mark-breakpoints t
496 "*Non-nil means, mark breakpoints in the source files. 496 "*Non-nil means, mark breakpoints in the source files.
497Legal values are: 497Valid values are:
498nil Do not mark breakpoints. 498nil Do not mark breakpoints.
499'face Highlight line with `idlwave-shell-breakpoint-face'. 499'face Highlight line with `idlwave-shell-breakpoint-face'.
500'glyph Red dot at the beginning of line. If the display does not 500'glyph Red dot at the beginning of line. If the display does not
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index 8eba3847308..35e4b68c9b8 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -1,5 +1,6 @@
1;; idlwave.el --- IDL editing mode for GNU Emacs 1;; idlwave.el --- IDL editing mode for GNU Emacs
2;; Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation 2;; Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004, 2005
3;; Free Software Foundation
3 4
4;; Authors: J.D. Smith <jdsmith@as.arizona.edu> 5;; Authors: J.D. Smith <jdsmith@as.arizona.edu>
5;; Carsten Dominik <dominik@science.uva.nl> 6;; Carsten Dominik <dominik@science.uva.nl>
@@ -584,7 +585,7 @@ for which to assume this can be set here."
584(defcustom idlwave-completion-show-classes 1 585(defcustom idlwave-completion-show-classes 1
585 "*Number of classes to show when completing object methods and keywords. 586 "*Number of classes to show when completing object methods and keywords.
586When completing methods or keywords for an object with unknown class, 587When completing methods or keywords for an object with unknown class,
587the *Completions* buffer will show the legal classes for each completion 588the *Completions* buffer will show the valid classes for each completion
588like this: 589like this:
589 590
590MyMethod <Class1,Class2,Class3> 591MyMethod <Class1,Class2,Class3>
@@ -5337,7 +5338,7 @@ end
5337 5338
5338(defun idlwave-complete (&optional arg module class) 5339(defun idlwave-complete (&optional arg module class)
5339 "Complete a function, procedure or keyword name at point. 5340 "Complete a function, procedure or keyword name at point.
5340This function is smart and figures out what can be legally completed 5341This function is smart and figures out what can be completed
5341at this point. 5342at this point.
5342- At the beginning of a statement it completes procedure names. 5343- At the beginning of a statement it completes procedure names.
5343- In the middle of a statement it completes function names. 5344- In the middle of a statement it completes function names.
@@ -5587,7 +5588,7 @@ other completions will be tried.")
5587 (symbolp what) 5588 (symbolp what)
5588 (assoc (symbol-name what) what-list)) 5589 (assoc (symbol-name what) what-list))
5589 what) 5590 what)
5590 (t (error "Illegal WHAT")))) 5591 (t (error "Invalid WHAT"))))
5591 (nil-list '(nil nil nil nil)) 5592 (nil-list '(nil nil nil nil))
5592 (class-list (list nil nil (or class t) nil))) 5593 (class-list (list nil nil (or class t) nil)))
5593 5594
@@ -5656,7 +5657,7 @@ other completions will be tried.")
5656 ((eq what 'class) 5657 ((eq what 'class)
5657 (list nil-list nil-list 'class nil-list nil)) 5658 (list nil-list nil-list 'class nil-list nil))
5658 5659
5659 (t (error "Illegal value for WHAT"))))) 5660 (t (error "Invalid value for WHAT")))))
5660 5661
5661(defun idlwave-completing-read (&rest args) 5662(defun idlwave-completing-read (&rest args)
5662 ;; Completing read, case insensitive 5663 ;; Completing read, case insensitive
@@ -7728,7 +7729,7 @@ from all classes if class equals t."
7728 keywords)) 7729 keywords))
7729 7730
7730(defun idlwave-expand-keyword (keyword module) 7731(defun idlwave-expand-keyword (keyword module)
7731 "Expand KEYWORD to one of the legal keyword parameters of MODULE. 7732 "Expand KEYWORD to one of the valid keyword parameters of MODULE.
7732KEYWORD may be an exact match or an abbreviation of a keyword. 7733KEYWORD may be an exact match or an abbreviation of a keyword.
7733If the match is exact, KEYWORD itself is returned, even if there may be other 7734If the match is exact, KEYWORD itself is returned, even if there may be other
7734keywords of which KEYWORD is an abbreviation. This is necessary because some 7735keywords of which KEYWORD is an abbreviation. This is necessary because some
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 745bc57a9b0..5073f2bc23a 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -1,6 +1,6 @@
1;;; python.el --- silly walks for Python 1;;; python.el --- silly walks for Python
2 2
3;; Copyright (C) 2003, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Dave Love <fx@gnu.org> 5;; Author: Dave Love <fx@gnu.org>
6;; Maintainer: FSF 6;; Maintainer: FSF
@@ -336,14 +336,14 @@ keyword `raise', `break', `continue' or `pass'."
336 (unless bos (python-beginning-of-statement)) 336 (unless bos (python-beginning-of-statement))
337 (back-to-indentation) 337 (back-to-indentation)
338 (looking-at (rx (and (or "return" "raise" "break" "continue" "pass") 338 (looking-at (rx (and (or "return" "raise" "break" "continue" "pass")
339 word-end))))) 339 symbol-end)))))
340 340
341(defun python-outdent-p () 341(defun python-outdent-p ()
342 "Return non-nil if current line should outdent a level." 342 "Return non-nil if current line should outdent a level."
343 (save-excursion 343 (save-excursion
344 (back-to-indentation) 344 (back-to-indentation)
345 (and (looking-at (rx (and (or (and (or "else" "finally") word-end) 345 (and (looking-at (rx (and (or (and (or "else" "finally") symbol-end)
346 (and (or "except" "elif") word-end 346 (and (or "except" "elif") symbol-end
347 (1+ (not (any ?:))))) 347 (1+ (not (any ?:)))))
348 (optional space) ":" (optional space) 348 (optional space) ":" (optional space)
349 (or (syntax comment-start) line-end)))) 349 (or (syntax comment-start) line-end))))
@@ -355,8 +355,8 @@ keyword `raise', `break', `continue' or `pass'."
355 ;; Fixme: check this 355 ;; Fixme: check this
356 (not (looking-at (rx (and (or (and (or "if" "elif" "except" 356 (not (looking-at (rx (and (or (and (or "if" "elif" "except"
357 "for" "while") 357 "for" "while")
358 word-end (1+ (not (any ?:)))) 358 symbol-end (1+ (not (any ?:))))
359 (and "try" word-end)) 359 (and "try" symbol-end))
360 (optional space) ":" (optional space) 360 (optional space) ":" (optional space)
361 (or (syntax comment-start) line-end))))) 361 (or (syntax comment-start) line-end)))))
362 (progn (end-of-line) 362 (progn (end-of-line)
@@ -1098,28 +1098,40 @@ Don't save anything for STR matching `inferior-python-filter-regexp'."
1098(defvar python-preoutput-continuation nil 1098(defvar python-preoutput-continuation nil
1099 "If non-nil, funcall this when `python-preoutput-filter' sees `_emacs_ok'.") 1099 "If non-nil, funcall this when `python-preoutput-filter' sees `_emacs_ok'.")
1100 1100
1101(defvar python-preoutput-leftover nil)
1102
1101;; Using this stops us getting lines in the buffer like 1103;; Using this stops us getting lines in the buffer like
1102;; >>> ... ... >>> 1104;; >>> ... ... >>>
1103;; Also look for (and delete) an `_emacs_ok' string and call 1105;; Also look for (and delete) an `_emacs_ok' string and call
1104;; `python-preoutput-continuation' if we get it. 1106;; `python-preoutput-continuation' if we get it.
1105(defun python-preoutput-filter (s) 1107(defun python-preoutput-filter (s)
1106 "`comint-preoutput-filter-functions' function: ignore prompts not at bol." 1108 "`comint-preoutput-filter-functions' function: ignore prompts not at bol."
1109 (when python-preoutput-leftover
1110 (setq s (concat python-preoutput-leftover s))
1111 (setq python-preoutput-leftover nil))
1107 (cond ((and (string-match (rx (and string-start (repeat 3 (any ".>")) 1112 (cond ((and (string-match (rx (and string-start (repeat 3 (any ".>"))
1108 " " string-end)) 1113 " " string-end))
1109 s) 1114 s)
1110 (/= (let ((inhibit-field-text-motion t)) 1115 (/= (let ((inhibit-field-text-motion t))
1111 (line-beginning-position)) 1116 (line-beginning-position))
1112 (point))) 1117 (point)))
1113 "") 1118 "")
1114 ((string= s "_emacs_ok\n") 1119 ((string= s "_emacs_ok\n")
1115 (when python-preoutput-continuation 1120 (when python-preoutput-continuation
1116 (funcall python-preoutput-continuation) 1121 (funcall python-preoutput-continuation)
1117 (setq python-preoutput-continuation nil)) 1122 (setq python-preoutput-continuation nil))
1118 "") 1123 "")
1119 ((string-match "_emacs_out \\(.*\\)\n" s) 1124 ((string-match "_emacs_out \\(.*\\)\n" s)
1120 (setq python-preoutput-result (match-string 1 s)) 1125 (setq python-preoutput-result (match-string 1 s))
1126 "")
1127 ((string-match ".*\n" s)
1128 s)
1129 ((or (eq t (compare-strings s nil nil "_emacs_ok\n" nil (length s)))
1130 (let ((end (min (length "_emacs_out ") (length s))))
1131 (eq t (compare-strings s nil end "_emacs_out " nil end))))
1132 (setq python-preoutput-leftover s)
1121 "") 1133 "")
1122 (t s))) 1134 (t s)))
1123 1135
1124;;;###autoload 1136;;;###autoload
1125(defun run-python (&optional cmd noshow) 1137(defun run-python (&optional cmd noshow)
@@ -1359,7 +1371,9 @@ The result is what follows `_emacs_out' in the output (or nil)."
1359 (let ((proc (python-proc))) 1371 (let ((proc (python-proc)))
1360 (python-send-string string) 1372 (python-send-string string)
1361 (setq python-preoutput-result nil) 1373 (setq python-preoutput-result nil)
1362 (accept-process-output proc 5) 1374 (while (progn
1375 (accept-process-output proc 5)
1376 python-preoutput-leftover))
1363 python-preoutput-result)) 1377 python-preoutput-result))
1364 1378
1365;; Fixme: try to make it work with point in the arglist. Also, is 1379;; Fixme: try to make it work with point in the arglist. Also, is
@@ -1562,7 +1576,8 @@ of current line."
1562 (beginning-of-defun) 1576 (beginning-of-defun)
1563 (if (looking-at (rx (and (0+ space) (or "def" "class") (1+ space) 1577 (if (looking-at (rx (and (0+ space) (or "def" "class") (1+ space)
1564 (group (1+ (or word (syntax symbol)))) 1578 (group (1+ (or word (syntax symbol))))
1565 word-end))) 1579 ;; Greediness makes this unnecessary? --Stef
1580 symbol-end)))
1566 (push (match-string 1) accum))) 1581 (push (match-string 1) accum)))
1567 (if accum (mapconcat 'identity accum "."))))) 1582 (if accum (mapconcat 'identity accum ".")))))
1568 1583
@@ -1702,9 +1717,9 @@ lines count as headers.
1702 '(python-font-lock-keywords nil nil ((?_ . "w")) nil 1717 '(python-font-lock-keywords nil nil ((?_ . "w")) nil
1703 (font-lock-syntactic-keywords 1718 (font-lock-syntactic-keywords
1704 . python-font-lock-syntactic-keywords) 1719 . python-font-lock-syntactic-keywords)
1705;;; This probably isn't worth it. 1720 ;; This probably isn't worth it.
1706;;; (font-lock-syntactic-face-function 1721 ;; (font-lock-syntactic-face-function
1707;;; . python-font-lock-syntactic-face-function) 1722 ;; . python-font-lock-syntactic-face-function)
1708 )) 1723 ))
1709 (set (make-local-variable 'parse-sexp-lookup-properties) t) 1724 (set (make-local-variable 'parse-sexp-lookup-properties) t)
1710 (set (make-local-variable 'comment-start) "# ") 1725 (set (make-local-variable 'comment-start) "# ")
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index d08af6e8531..6e8062deb34 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -2388,7 +2388,7 @@ Optional parameter DEPTH (usually 1) says how many to look for."
2388(defun sh-var-value (var &optional ignore-error) 2388(defun sh-var-value (var &optional ignore-error)
2389 "Return the value of variable VAR, interpreting symbols. 2389 "Return the value of variable VAR, interpreting symbols.
2390It can also return t or nil. 2390It can also return t or nil.
2391If an illegal value is found, throw an error unless Optional argument 2391If an invalid value is found, throw an error unless Optional argument
2392IGNORE-ERROR is non-nil." 2392IGNORE-ERROR is non-nil."
2393 (let ((val (symbol-value var))) 2393 (let ((val (symbol-value var)))
2394 (cond 2394 (cond
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index ab7fa42e252..7e30a816e15 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -1,6 +1,6 @@
1;;; vhdl-mode.el --- major mode for editing VHDL code 1;;; vhdl-mode.el --- major mode for editing VHDL code
2 2
3;; Copyright (C) 1992-2003 Free Software Foundation, Inc. 3;; Copyright (C) 1992-2003, 2005 Free Software Foundation, Inc.
4 4
5;; Authors: Reto Zimmermann <reto@gnu.org> 5;; Authors: Reto Zimmermann <reto@gnu.org>
6;; Rodney J. Whitby <software.vhdl-mode@rwhitby.net> 6;; Rodney J. Whitby <software.vhdl-mode@rwhitby.net>
@@ -5065,7 +5065,7 @@ Try to increase performance by using this macro."
5065 5065
5066(defun vhdl-read-offset (langelem) 5066(defun vhdl-read-offset (langelem)
5067 "Read new offset value for LANGELEM from minibuffer. 5067 "Read new offset value for LANGELEM from minibuffer.
5068Return a legal value only." 5068Return a valid value only."
5069 (let ((oldoff (format "%s" (cdr-safe (assq langelem vhdl-offsets-alist)))) 5069 (let ((oldoff (format "%s" (cdr-safe (assq langelem vhdl-offsets-alist))))
5070 (errmsg "Offset must be int, func, var, or one of +, -, ++, --: ") 5070 (errmsg "Offset must be int, func, var, or one of +, -, ++, --: ")
5071 (prompt "Offset: ") 5071 (prompt "Offset: ")
diff --git a/lisp/progmodes/which-func.el b/lisp/progmodes/which-func.el
index dae5722d430..d329e234025 100644
--- a/lisp/progmodes/which-func.el
+++ b/lisp/progmodes/which-func.el
@@ -1,6 +1,7 @@
1;;; which-func.el --- print current function in mode line 1;;; which-func.el --- print current function in mode line
2 2
3;; Copyright (C) 1994, 1997, 1998, 2001, 2003 Free Software Foundation, Inc. 3;; Copyright (C) 1994, 1997, 1998, 2001, 2003, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Author: Alex Rezinsky <alexr@msil.sps.mot.com> 6;; Author: Alex Rezinsky <alexr@msil.sps.mot.com>
6;; (doesn't seem to be responsive any more) 7;; (doesn't seem to be responsive any more)
@@ -251,7 +252,7 @@ If no function name is found, return nil."
251 (when (and (null name) 252 (when (and (null name)
252 (boundp 'imenu--index-alist) (null imenu--index-alist) 253 (boundp 'imenu--index-alist) (null imenu--index-alist)
253 (null which-function-imenu-failed)) 254 (null which-function-imenu-failed))
254 (imenu--make-index-alist) 255 (imenu--make-index-alist t)
255 (unless imenu--index-alist 256 (unless imenu--index-alist
256 (make-local-variable 'which-function-imenu-failed) 257 (make-local-variable 'which-function-imenu-failed)
257 (setq which-function-imenu-failed t))) 258 (setq which-function-imenu-failed t)))
@@ -291,5 +292,5 @@ If no function name is found, return nil."
291 292
292(provide 'which-func) 293(provide 'which-func)
293 294
294;;; arch-tag: fa8a55c7-bfe3-4ffc-95ab-01bf21796827 295;; arch-tag: fa8a55c7-bfe3-4ffc-95ab-01bf21796827
295;;; which-func.el ends here 296;;; which-func.el ends here
diff --git a/lisp/progmodes/xscheme.el b/lisp/progmodes/xscheme.el
index 609c7db1e2a..bf1279da8a0 100644
--- a/lisp/progmodes/xscheme.el
+++ b/lisp/progmodes/xscheme.el
@@ -1,6 +1,7 @@
1;;; xscheme.el --- run MIT Scheme under Emacs 1;;; xscheme.el --- run MIT Scheme under Emacs
2 2
3;; Copyright (C) 1986, 1987, 1989, 1990, 2001, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1986, 1987, 1989, 1990, 2001, 2004, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Maintainer: FSF 6;; Maintainer: FSF
6;; Keywords: languages, lisp 7;; Keywords: languages, lisp
@@ -408,7 +409,7 @@ characters perform useful functions.
408 409
409Commands: 410Commands:
410\\{scheme-debugger-mode-map}" 411\\{scheme-debugger-mode-map}"
411 (error "Illegal entry to scheme-debugger-mode")) 412 (error "Invalid entry to scheme-debugger-mode"))
412 413
413(defun scheme-debugger-mode-initialize () 414(defun scheme-debugger-mode-initialize ()
414 (use-local-map scheme-debugger-mode-map) 415 (use-local-map scheme-debugger-mode-map)
diff --git a/lisp/ps-print.el b/lisp/ps-print.el
index 95af5910989..0b2a33f27c0 100644
--- a/lisp/ps-print.el
+++ b/lisp/ps-print.el
@@ -6114,6 +6114,19 @@ XSTART YSTART are the relative position for the first page in a sheet.")
6114 6114
6115(defvar ps-current-effect 0) 6115(defvar ps-current-effect 0)
6116 6116
6117(defvar ps-print-translation-table
6118 (let ((tbl (make-char-table 'translation-table nil)))
6119 (if (and (boundp 'ucs-mule-8859-to-mule-unicode)
6120 (char-table-p ucs-mule-8859-to-mule-unicode))
6121 (map-char-table
6122 #'(lambda (k v)
6123 (if (and v (eq (char-charset v) 'latin-iso8859-1) (/= k v))
6124 (aset tbl k v)))
6125 ucs-mule-8859-to-mule-unicode))
6126 tbl)
6127 "Translation table for PostScript printing.
6128The default value is a table that translates non-Latin-1 Latin characters
6129to the equivalent Latin-1 characters.")
6117 6130
6118(defun ps-plot-region (from to font &optional fg-color bg-color effects) 6131(defun ps-plot-region (from to font &optional fg-color bg-color effects)
6119 (or (equal font ps-current-font) 6132 (or (equal font ps-current-font)
diff --git a/lisp/register.el b/lisp/register.el
index 253207c3140..eaa53446c56 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -277,7 +277,7 @@ Interactively, second arg is non-nil if prefix arg is supplied."
277Called from program, takes four args: REGISTER, START, END and DELETE-FLAG. 277Called from program, takes four args: REGISTER, START, END and DELETE-FLAG.
278START and END are buffer positions indicating what to copy." 278START and END are buffer positions indicating what to copy."
279 (interactive "cCopy to register: \nr\nP") 279 (interactive "cCopy to register: \nr\nP")
280 (set-register register (buffer-substring start end)) 280 (set-register register (filter-buffer-substring start end))
281 (if delete-flag (delete-region start end))) 281 (if delete-flag (delete-region start end)))
282 282
283(defun append-to-register (register start end &optional delete-flag) 283(defun append-to-register (register start end &optional delete-flag)
@@ -289,7 +289,7 @@ START and END are buffer positions indicating what to append."
289 (or (stringp (get-register register)) 289 (or (stringp (get-register register))
290 (error "Register does not contain text")) 290 (error "Register does not contain text"))
291 (set-register register (concat (get-register register) 291 (set-register register (concat (get-register register)
292 (buffer-substring start end))) 292 (filter-buffer-substring start end)))
293 (if delete-flag (delete-region start end))) 293 (if delete-flag (delete-region start end)))
294 294
295(defun prepend-to-register (register start end &optional delete-flag) 295(defun prepend-to-register (register start end &optional delete-flag)
@@ -300,7 +300,7 @@ START and END are buffer positions indicating what to prepend."
300 (interactive "cPrepend to register: \nr\nP") 300 (interactive "cPrepend to register: \nr\nP")
301 (or (stringp (get-register register)) 301 (or (stringp (get-register register))
302 (error "Register does not contain text")) 302 (error "Register does not contain text"))
303 (set-register register (concat (buffer-substring start end) 303 (set-register register (concat (filter-buffer-substring start end)
304 (get-register register))) 304 (get-register register)))
305 (if delete-flag (delete-region start end))) 305 (if delete-flag (delete-region start end)))
306 306
diff --git a/lisp/reveal.el b/lisp/reveal.el
index eb6b4519f38..787c4d20791 100644
--- a/lisp/reveal.el
+++ b/lisp/reveal.el
@@ -163,8 +163,8 @@
163 (let ((map (make-sparse-keymap))) 163 (let ((map (make-sparse-keymap)))
164 ;; Override the default move-beginning-of-line and move-end-of-line 164 ;; Override the default move-beginning-of-line and move-end-of-line
165 ;; which skips valuable invisible text. 165 ;; which skips valuable invisible text.
166 (define-key map [?\C-a] 'beginning-of-line) 166 (define-key map [remap move-beginning-of-line] 'beginning-of-line)
167 (define-key map [?\C-e] 'end-of-line) 167 (define-key map [remap move-end-of-line] 'end-of-line)
168 map)) 168 map))
169 169
170;;;###autoload 170;;;###autoload
diff --git a/lisp/simple.el b/lisp/simple.el
index 76cd990ba03..a6aa4daf04e 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -35,6 +35,13 @@
35 (autoload 'widget-convert "wid-edit") 35 (autoload 'widget-convert "wid-edit")
36 (autoload 'shell-mode "shell")) 36 (autoload 'shell-mode "shell"))
37 37
38(defcustom idle-update-delay 0.5
39 "*Idle time delay before updating various things on the screen.
40Various Emacs features that update auxiliary information when point moves
41wait this many seconds after Emacs becomes idle before doing an update."
42 :type 'number
43 :group 'display
44 :version "22.1")
38 45
39(defgroup killing nil 46(defgroup killing nil
40 "Killing and yanking commands." 47 "Killing and yanking commands."
@@ -105,6 +112,8 @@ If `fringe-arrow', indicate the locus by the fringe arrow."
105 :group 'next-error 112 :group 'next-error
106 :version "22.1") 113 :version "22.1")
107 114
115(defvar next-error-highlight-timer nil)
116
108(defvar next-error-last-buffer nil 117(defvar next-error-last-buffer nil
109 "The most recent next-error buffer. 118 "The most recent next-error buffer.
110A buffer becomes most recent when its compilation, grep, or 119A buffer becomes most recent when its compilation, grep, or
@@ -2216,6 +2225,42 @@ These commands include \\[set-mark-command] and \\[start-kbd-macro]."
2216 (reset-this-command-lengths) 2225 (reset-this-command-lengths)
2217 (restore-overriding-map)) 2226 (restore-overriding-map))
2218 2227
2228(defvar buffer-substring-filters nil
2229 "List of filter functions for `filter-buffer-substring'.
2230Each function must accept a single argument, a string, and return
2231a string. The buffer substring is passed to the first function
2232in the list, and the return value of each function is passed to
2233the next. The return value of the last function is used as the
2234return value of `filter-buffer-substring'.
2235
2236If this variable is nil, no filtering is performed.")
2237
2238(defun filter-buffer-substring (beg end &optional delete)
2239 "Return the buffer substring between BEG and END, after filtering.
2240The buffer substring is passed through each of the filter
2241functions in `buffer-substring-filters', and the value from the
2242last filter function is returned. If `buffer-substring-filters'
2243is nil, the buffer substring is returned unaltered.
2244
2245If DELETE is non-nil, the text between BEG and END is deleted
2246from the buffer.
2247
2248Point is temporarily set to BEG before caling
2249`buffer-substring-filters', in case the functions need to know
2250where the text came from.
2251
2252This function should be used instead of `buffer-substring' or
2253`delete-and-extract-region' when you want to allow filtering to
2254take place. For example, major or minor modes can use
2255`buffer-substring-filters' to extract characters that are special
2256to a buffer, and should not be copied into other buffers."
2257 (save-excursion
2258 (goto-char beg)
2259 (let ((string (if delete (delete-and-extract-region beg end)
2260 (buffer-substring beg end))))
2261 (dolist (filter buffer-substring-filters string)
2262 (setq string (funcall filter string))))))
2263
2219;;;; Window system cut and paste hooks. 2264;;;; Window system cut and paste hooks.
2220 2265
2221(defvar interprogram-cut-function nil 2266(defvar interprogram-cut-function nil
@@ -2392,7 +2437,7 @@ specifies the yank-handler text property to be set on the killed
2392text. See `insert-for-yank'." 2437text. See `insert-for-yank'."
2393 (interactive "r") 2438 (interactive "r")
2394 (condition-case nil 2439 (condition-case nil
2395 (let ((string (delete-and-extract-region beg end))) 2440 (let ((string (filter-buffer-substring beg end t)))
2396 (when string ;STRING is nil if BEG = END 2441 (when string ;STRING is nil if BEG = END
2397 ;; Add that string to the kill ring, one way or another. 2442 ;; Add that string to the kill ring, one way or another.
2398 (if (eq last-command 'kill-region) 2443 (if (eq last-command 'kill-region)
@@ -2428,8 +2473,8 @@ If `interprogram-cut-function' is non-nil, also save the text for a window
2428system cut and paste." 2473system cut and paste."
2429 (interactive "r") 2474 (interactive "r")
2430 (if (eq last-command 'kill-region) 2475 (if (eq last-command 'kill-region)
2431 (kill-append (buffer-substring beg end) (< end beg)) 2476 (kill-append (filter-buffer-substring beg end) (< end beg))
2432 (kill-new (buffer-substring beg end))) 2477 (kill-new (filter-buffer-substring beg end)))
2433 (if transient-mark-mode 2478 (if transient-mark-mode
2434 (setq deactivate-mark t)) 2479 (setq deactivate-mark t))
2435 nil) 2480 nil)
@@ -2954,7 +2999,7 @@ the user to see that the mark has moved, and you want the previous
2954mark position to be lost. 2999mark position to be lost.
2955 3000
2956Normally, when a new mark is set, the old one should go on the stack. 3001Normally, when a new mark is set, the old one should go on the stack.
2957This is why most applications should use push-mark, not set-mark. 3002This is why most applications should use `push-mark', not `set-mark'.
2958 3003
2959Novice Emacs Lisp programmers often try to use the mark for the wrong 3004Novice Emacs Lisp programmers often try to use the mark for the wrong
2960purposes. The mark saves a location for the user's convenience. 3005purposes. The mark saves a location for the user's convenience.
@@ -5182,14 +5227,6 @@ See also `normal-erase-is-backspace'."
5182 (message "Delete key deletes %s" 5227 (message "Delete key deletes %s"
5183 (if normal-erase-is-backspace "forward" "backward")))) 5228 (if normal-erase-is-backspace "forward" "backward"))))
5184 5229
5185(defcustom idle-update-delay 0.5
5186 "*Idle time delay before updating various things on the screen.
5187Various Emacs features that update auxiliary information when point moves
5188wait this many seconds after Emacs becomes idle before doing an update."
5189 :type 'number
5190 :group 'display
5191 :version "22.1")
5192
5193(defvar vis-mode-saved-buffer-invisibility-spec nil 5230(defvar vis-mode-saved-buffer-invisibility-spec nil
5194 "Saved value of `buffer-invisibility-spec' when Visible mode is on.") 5231 "Saved value of `buffer-invisibility-spec' when Visible mode is on.")
5195 5232
diff --git a/lisp/term.el b/lisp/term.el
index 32e249024d9..eb3ae342359 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -2571,7 +2571,16 @@ See `term-prompt-regexp'."
2571 2571
2572(defun term-move-columns (delta) 2572(defun term-move-columns (delta)
2573 (setq term-current-column (max 0 (+ (term-current-column) delta))) 2573 (setq term-current-column (max 0 (+ (term-current-column) delta)))
2574 (move-to-column term-current-column t)) 2574 (let (point-at-eol)
2575 (save-excursion
2576 (end-of-line)
2577 (setq point-at-eol (point)))
2578 (move-to-column term-current-column t)
2579 ;; If move-to-column extends the current line it will use the face
2580 ;; from the last character on the line, set the face for the chars
2581 ;; to default.
2582 (when (> (point) point-at-eol)
2583 (put-text-property point-at-eol (point) 'face 'default))))
2575 2584
2576;; Insert COUNT copies of CHAR in the default face. 2585;; Insert COUNT copies of CHAR in the default face.
2577(defun term-insert-char (char count) 2586(defun term-insert-char (char count)
@@ -3026,7 +3035,7 @@ See `term-prompt-regexp'."
3026;;; default one. 3035;;; default one.
3027(defun term-reset-terminal () 3036(defun term-reset-terminal ()
3028 (erase-buffer) 3037 (erase-buffer)
3029 (setq term-current-row 1) 3038 (setq term-current-row 0)
3030 (setq term-current-column 1) 3039 (setq term-current-column 1)
3031 (setq term-insert-mode nil) 3040 (setq term-insert-mode nil)
3032 (setq term-current-face nil) 3041 (setq term-current-face nil)
@@ -3035,7 +3044,7 @@ See `term-prompt-regexp'."
3035 (setq term-ansi-current-reverse 0) 3044 (setq term-ansi-current-reverse 0)
3036 (setq term-ansi-current-color 0) 3045 (setq term-ansi-current-color 0)
3037 (setq term-ansi-current-invisible 0) 3046 (setq term-ansi-current-invisible 0)
3038 (setq term-ansi-face-already-done 1) 3047 (setq term-ansi-face-already-done 0)
3039 (setq term-ansi-current-bg-color 0)) 3048 (setq term-ansi-current-bg-color 0))
3040 3049
3041;;; New function to deal with ansi colorized output, as you can see you can 3050;;; New function to deal with ansi colorized output, as you can see you can
@@ -3683,12 +3692,20 @@ Should only be called when point is at the start of a screen line."
3683;;; at teh end of this screen line to make room. 3692;;; at teh end of this screen line to make room.
3684 3693
3685(defun term-insert-spaces (count) 3694(defun term-insert-spaces (count)
3686 (let ((save-point (point)) (save-eol)) 3695 (let ((save-point (point)) (save-eol) (point-at-eol))
3687 (term-vertical-motion 1) 3696 (term-vertical-motion 1)
3688 (if (bolp) 3697 (if (bolp)
3689 (backward-char)) 3698 (backward-char))
3690 (setq save-eol (point)) 3699 (setq save-eol (point))
3700 (save-excursion
3701 (end-of-line)
3702 (setq point-at-eol (point)))
3691 (move-to-column (+ (term-start-line-column) (- term-width count)) t) 3703 (move-to-column (+ (term-start-line-column) (- term-width count)) t)
3704 ;; If move-to-column extends the current line it will use the face
3705 ;; from the last character on the line, set the face for the chars
3706 ;; to default.
3707 (when (> (point) (point-at-eol))
3708 (put-text-property point-at-eol (point) 'face 'default))
3692 (if (> save-eol (point)) 3709 (if (> save-eol (point))
3693 (delete-region (point) save-eol)) 3710 (delete-region (point) save-eol))
3694 (goto-char save-point) 3711 (goto-char save-point)
diff --git a/lisp/term/bobcat.el b/lisp/term/bobcat.el
index 85f816570ee..b11a4ff8309 100644
--- a/lisp/term/bobcat.el
+++ b/lisp/term/bobcat.el
@@ -1,6 +1,7 @@
1;; -*- no-byte-compile: t -*- 1;; -*- no-byte-compile: t -*-
2;;; HP terminals usually encourage using ^H as the rubout character 2;;; HP terminals usually encourage using ^H as the rubout character
3(load "term/keyswap" nil t) 3(keyboard-translate ?\177 ?\^h)
4(keyboard-translate ?\^h ?\177)
4 5
5;;; arch-tag: 754e4520-0a3e-4e6e-8ca5-9481b1f85cf7 6;;; arch-tag: 754e4520-0a3e-4e6e-8ca5-9481b1f85cf7
6;;; bobcat.el ends here 7;;; bobcat.el ends here
diff --git a/lisp/term/xterm.el b/lisp/term/xterm.el
index 234280a3c3f..5c210974f72 100644
--- a/lisp/term/xterm.el
+++ b/lisp/term/xterm.el
@@ -1,6 +1,6 @@
1;;; xterm.el --- define function key sequences and standard colors for xterm 1;;; xterm.el --- define function key sequences and standard colors for xterm
2 2
3;; Copyright (C) 1995, 2002, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1995, 2002, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Author: FSF 5;; Author: FSF
6;; Keywords: terminals 6;; Keywords: terminals
diff --git a/lisp/textmodes/fill.el b/lisp/textmodes/fill.el
index ccd7f21f502..c41145befc8 100644
--- a/lisp/textmodes/fill.el
+++ b/lisp/textmodes/fill.el
@@ -539,6 +539,17 @@ The break position will be always after LINEBEG and generally before point."
539 ;; Make sure we take SOMETHING after the fill prefix if any. 539 ;; Make sure we take SOMETHING after the fill prefix if any.
540 (fill-find-break-point linebeg))))) 540 (fill-find-break-point linebeg)))))
541 541
542;; Like text-properties-at but don't include `composition' property.
543(defun fill-text-properties-at (pos)
544 (let ((l (text-properties-at pos))
545 prop-list)
546 (while l
547 (unless (eq (car l) 'composition)
548 (setq prop-list
549 (cons (car l) (cons (cadr l) prop-list))))
550 (setq l (cddr l)))
551 prop-list))
552
542(defun fill-newline () 553(defun fill-newline ()
543 ;; Replace whitespace here with one newline, then 554 ;; Replace whitespace here with one newline, then
544 ;; indent to left margin. 555 ;; indent to left margin.
@@ -546,7 +557,7 @@ The break position will be always after LINEBEG and generally before point."
546 (insert ?\n) 557 (insert ?\n)
547 ;; Give newline the properties of the space(s) it replaces 558 ;; Give newline the properties of the space(s) it replaces
548 (set-text-properties (1- (point)) (point) 559 (set-text-properties (1- (point)) (point)
549 (text-properties-at (point))) 560 (fill-text-properties-at (point)))
550 (and (looking-at "\\( [ \t]*\\)\\(\\c|\\)?") 561 (and (looking-at "\\( [ \t]*\\)\\(\\c|\\)?")
551 (or (aref (char-category-set (or (char-before (1- (point))) ?\000)) ?|) 562 (or (aref (char-category-set (or (char-before (1- (point))) ?\000)) ?|)
552 (match-end 2)) 563 (match-end 2))
diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el
index 3717db6d4c5..4c8b0dafb29 100644
--- a/lisp/textmodes/ispell.el
+++ b/lisp/textmodes/ispell.el
@@ -645,6 +645,10 @@ re-start emacs."
645 "[A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" 645 "[A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]"
646 "[^A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]" 646 "[^A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]"
647 "" nil ("-B") nil iso-8859-2) 647 "" nil ("-B") nil iso-8859-2)
648 ("slovenian" ; Slovenian
649 "[A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]"
650 "[^A-Za-z\301\304\311\315\323\332\324\300\305\245\335\256\251\310\317\253\322\341\344\351\355\363\372\364\340\345\265\375\276\271\350\357\273\362]"
651 "" nil ("-B" "-d" "slovenian") nil iso-8859-2)
648 ("svenska" ; Swedish mode 652 ("svenska" ; Swedish mode
649 "[A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]" 653 "[A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]"
650 "[^A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]" 654 "[^A-Za-z\345\344\366\351\340\374\350\346\370\347\305\304\326\311\300\334\310\306\330\307]"
diff --git a/lisp/textmodes/org.el b/lisp/textmodes/org.el
index 1ff21ea1ce0..86406d37475 100644
--- a/lisp/textmodes/org.el
+++ b/lisp/textmodes/org.el
@@ -1,14 +1,14 @@
1;; org.el --- Outline-based notes management and organizer 1;; org.el --- Outline-based notes management and organizer
2;; Carstens outline-mode for keeping track of everything. 2;; Carstens outline-mode for keeping track of everything.
3;; Copyright (c) 2003, 2004 Free Software Foundation 3;; Copyright (c) 2004, 2005 Free Software Foundation
4 4;;
5;; Author: Carsten Dominik <dominik at science dot uva dot nl> 5;; Author: Carsten Dominik <dominik at science dot uva dot nl>
6;; Keywords: outlines, hypermedia, calendar 6;; Keywords: outlines, hypermedia, calendar
7;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/ 7;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/
8;; Version: 3.04 8;; Version: 3.05
9 9;;
10;; This file is part of GNU Emacs. 10;; This file is part of GNU Emacs.
11 11;;
12;; GNU Emacs is free software; you can redistribute it and/or modify 12;; GNU Emacs is free software; you can redistribute it and/or modify
13;; it under the terms of the GNU General Public License as published by 13;; it under the terms of the GNU General Public License as published by
14;; the Free Software Foundation; either version 2, or (at your option) 14;; the Free Software Foundation; either version 2, or (at your option)
@@ -75,10 +75,18 @@
75;; ------------- 75;; -------------
76;; The documentation of Org-mode can be found in the TeXInfo file. 76;; The documentation of Org-mode can be found in the TeXInfo file.
77;; This distribution also contains a PDF version of it. At the homepage 77;; This distribution also contains a PDF version of it. At the homepage
78;; of Org-mode, you can find and read online the same text as HTML. 78;; of Org-mode, you can read online the same text online as HTML.
79;; 79;;
80;; Changes: 80;; Changes:
81;; ------- 81;; -------
82;; Version 3.05
83;; - Agenda entries from the diary are linked to the diary file, so
84;; adding and editing diary entries can be done directly from the agenda.
85;; - Many calendar/diary commands available directly from agenda.
86;; - Field copying in tables with S-RET does increment.
87;; - C-c C-x C-v extracts the visible part of the buffer for printing.
88;; - Moving subtrees up and down preserves the whitespace at the tree end.
89;;
82;; Version 3.04 90;; Version 3.04
83;; - Table editor optimized to need fewer realignments, and to keep 91;; - Table editor optimized to need fewer realignments, and to keep
84;; table shape when typing in fields. 92;; table shape when typing in fields.
@@ -213,7 +221,7 @@
213 221
214;;; Customization variables 222;;; Customization variables
215 223
216(defvar org-version "3.04" 224(defvar org-version "3.05"
217 "The version number of the file org.el.") 225 "The version number of the file org.el.")
218(defun org-version () 226(defun org-version ()
219 (interactive) 227 (interactive)
@@ -241,7 +249,13 @@
241 :group 'org) 249 :group 'org)
242 250
243(defcustom org-startup-folded t 251(defcustom org-startup-folded t
244 "Non-nil means, entering Org-mode will switch to OVERVIEW." 252 "Non-nil means, entering Org-mode will switch to OVERVIEW.
253This can also be configured on a per-file basis by adding one of
254the following lines anywhere in the buffer:
255
256 #+STARTUP: fold
257 #+STARTUP: nofold
258"
245 :group 'org-startup 259 :group 'org-startup
246 :type 'boolean) 260 :type 'boolean)
247 261
@@ -255,7 +269,13 @@ uninteresting. Also tables look terrible when wrapped."
255(defcustom org-startup-with-deadline-check nil 269(defcustom org-startup-with-deadline-check nil
256 "Non-nil means, entering Org-mode will run the deadline check. 270 "Non-nil means, entering Org-mode will run the deadline check.
257This means, if you start editing an org file, you will get an 271This means, if you start editing an org file, you will get an
258immediate reminder of any due deadlines." 272immediate reminder of any due deadlines.
273This can also be configured on a per-file basis by adding one of
274the following lines anywhere in the buffer:
275
276 #+STARTUP: dlcheck
277 #+STARTUP: nodlcheck
278"
259 :group 'org-startup 279 :group 'org-startup
260 :type 'boolean) 280 :type 'boolean)
261 281
@@ -534,6 +554,11 @@ When nil, cursor will remain in the current window."
534 :group 'org-agenda 554 :group 'org-agenda
535 :type 'boolean) 555 :type 'boolean)
536 556
557(defcustom org-fit-agenda-window t
558 "Non-nil means, change windo size of agenda to fit content."
559 :group 'org-agenda
560 :type 'boolean)
561
537(defcustom org-agenda-show-all-dates t 562(defcustom org-agenda-show-all-dates t
538 "Non-nil means, `org-agenda' shows every day in the selected range. 563 "Non-nil means, `org-agenda' shows every day in the selected range.
539When nil, only the days which actually have entries are shown." 564When nil, only the days which actually have entries are shown."
@@ -892,7 +917,7 @@ slight (in fact: unnoticable) speed impact for normal typing. Org-mode is
892very good at guessing when a re-align will be necessary, but you can always 917very good at guessing when a re-align will be necessary, but you can always
893force one with `C-c C-c'. 918force one with `C-c C-c'.
894 919
895I you would like to use the optimized version in Org-mode, but the un-optimized 920If you would like to use the optimized version in Org-mode, but the un-optimized
896version in OrgTbl-mode, see the variable `orgtbl-optimized'. 921version in OrgTbl-mode, see the variable `orgtbl-optimized'.
897 922
898This variable can be used to turn on and off the table editor during a session, 923This variable can be used to turn on and off the table editor during a session,
@@ -971,6 +996,11 @@ line will be formatted with <th> tags."
971 :group 'org-table 996 :group 'org-table
972 :type 'boolean) 997 :type 'boolean)
973 998
999(defcustom org-table-copy-increment t
1000 "Non-nil means, increment when copying current field with \\[org-table-copy-down]."
1001 :group 'org-table
1002 :type 'boolean)
1003
974(defcustom org-table-tab-recognizes-table.el t 1004(defcustom org-table-tab-recognizes-table.el t
975 "Non-nil means, TAB will automatically notice a table.el table. 1005 "Non-nil means, TAB will automatically notice a table.el table.
976When it sees such a table, it moves point into it and - if necessary - 1006When it sees such a table, it moves point into it and - if necessary -
@@ -1260,7 +1290,7 @@ Otherwise, the buffer will just be saved to a file and stay hidden."
1260 "Face used for level 7 headlines." 1290 "Face used for level 7 headlines."
1261 :group 'org-faces) 1291 :group 'org-faces)
1262 1292
1263(defface org-level-8-face ;;font-lock-string-face 1293(defface org-level-8-face ;; font-lock-string-face
1264 '((((type tty) (class color)) (:foreground "green")) 1294 '((((type tty) (class color)) (:foreground "green"))
1265 (((class color) (background light)) (:foreground "RosyBrown")) 1295 (((class color) (background light)) (:foreground "RosyBrown"))
1266 (((class color) (background dark)) (:foreground "LightSalmon")) 1296 (((class color) (background dark)) (:foreground "LightSalmon"))
@@ -1276,8 +1306,24 @@ Otherwise, the buffer will just be saved to a file and stay hidden."
1276 "Face for deadlines and TODO keyords." 1306 "Face for deadlines and TODO keyords."
1277 :group 'org-faces) 1307 :group 'org-faces)
1278 1308
1279;; Inheritance does not work for xemacs, unfortunately. 1309(defcustom org-fontify-done-headline nil
1280;; We just copy the definitions and waste some space.... 1310 "Non-nil means, change the face of a headline if it is marked DONE.
1311Normally, only the TODO/DONE keyword indicates the state of a headline.
1312When this is non-nil, the headline after the keyword is set to the
1313`org-headline-done-face' as an additional indication."
1314 :group 'org-faces
1315 :type 'boolean)
1316
1317(defface org-headline-done-face ;; font-lock-string-face
1318 '((((type tty) (class color)) (:foreground "green"))
1319 (((class color) (background light)) (:foreground "RosyBrown"))
1320 (((class color) (background dark)) (:foreground "LightSalmon"))
1321 (t (:italic t)))
1322 "Face used to indicate that a headline is DONE. See also the variable
1323`org-fontify-done-headline'."
1324 :group 'org-faces)
1325
1326;; Inheritance does not yet work for xemacs. So we just copy...
1281 1327
1282(defface org-deadline-announce-face 1328(defface org-deadline-announce-face
1283 '((((type tty) (class color)) (:foreground "blue" :weight bold)) 1329 '((((type tty) (class color)) (:foreground "blue" :weight bold))
@@ -1341,11 +1387,11 @@ Otherwise, the buffer will just be saved to a file and stay hidden."
1341 )) 1387 ))
1342(defvar org-n-levels (length org-level-faces)) 1388(defvar org-n-levels (length org-level-faces))
1343 1389
1344
1345;; Tell the compiler about dynamically scoped variables, 1390;; Tell the compiler about dynamically scoped variables,
1346;; and variables from other packages 1391;; and variables from other packages
1347(eval-when-compile 1392(eval-when-compile
1348 (defvar zmacs-regions) 1393 (defvar zmacs-regions)
1394 (defvar original-date)
1349 (defvar org-transient-mark-mode) 1395 (defvar org-transient-mark-mode)
1350 (defvar org-old-auto-fill-inhibit-regexp) 1396 (defvar org-old-auto-fill-inhibit-regexp)
1351 (defvar orgtbl-mode-menu) 1397 (defvar orgtbl-mode-menu)
@@ -1521,8 +1567,11 @@ The following commands are available:
1521 (list (concat "^\\*+[ \t]*\\<\\(" org-comment-string "\\)\\>") 1567 (list (concat "^\\*+[ \t]*\\<\\(" org-comment-string "\\)\\>")
1522 '(1 'org-warning-face t)) 1568 '(1 'org-warning-face t))
1523 '("^#.*" (0 'font-lock-comment-face t)) 1569 '("^#.*" (0 'font-lock-comment-face t))
1524 (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\>") 1570 (if org-fontify-done-headline
1525 '(1 'org-done-face t)) 1571 (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\(.*\\)\\>")
1572 '(1 'org-done-face t) '(2 'org-headline-done-face t))
1573 (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\>")
1574 '(1 'org-done-face t)))
1526 '("^[ \t]*\\(\\(|\\|\\+-[-+]\\).*\\S-\\)" 1575 '("^[ \t]*\\(\\(|\\|\\+-[-+]\\).*\\S-\\)"
1527 (1 'org-table-face t)) 1576 (1 'org-table-face t))
1528 '("^[ \t]*\\(:.*\\)" (1 'org-table-face t))))) 1577 '("^[ \t]*\\(:.*\\)" (1 'org-table-face t)))))
@@ -1563,7 +1612,7 @@ The following commands are available:
1563(defvar org-cycle-global-status nil) 1612(defvar org-cycle-global-status nil)
1564(defvar org-cycle-subtree-status nil) 1613(defvar org-cycle-subtree-status nil)
1565(defun org-cycle (&optional arg) 1614(defun org-cycle (&optional arg)
1566 "Visibility cycling for org-mode. 1615 "Visibility cycling for Org-mode.
1567 1616
1568- When this function is called with a prefix argument, rotate the entire 1617- When this function is called with a prefix argument, rotate the entire
1569 buffer through 3 states (global cycling) 1618 buffer through 3 states (global cycling)
@@ -1579,6 +1628,9 @@ The following commands are available:
1579 zoom in further. 1628 zoom in further.
1580 3. SUBTREE: Show the entire subtree, including body text. 1629 3. SUBTREE: Show the entire subtree, including body text.
1581 1630
1631- When there is a numeric prefix, go ARG levels up and do a `show-subtree',
1632 keeping cursor position.
1633
1582- When point is not at the beginning of a headline, execute 1634- When point is not at the beginning of a headline, execute
1583 `indent-relative', like TAB normally does. See the option 1635 `indent-relative', like TAB normally does. See the option
1584 `org-cycle-emulate-tab' for details. 1636 `org-cycle-emulate-tab' for details.
@@ -1587,8 +1639,9 @@ The following commands are available:
1587 no headline in line 1, this function will act as if called with prefix arg." 1639 no headline in line 1, this function will act as if called with prefix arg."
1588 (interactive "P") 1640 (interactive "P")
1589 1641
1590 (if (and (bobp) (not (looking-at outline-regexp))) 1642 (if (or (and (bobp) (not (looking-at outline-regexp)))
1591 ; special case: use global cycling 1643 (equal arg '(4)))
1644 ;; special case: use global cycling
1592 (setq arg t)) 1645 (setq arg t))
1593 1646
1594 (cond 1647 (cond
@@ -1600,7 +1653,7 @@ The following commands are available:
1600 (org-table-justify-field-maybe) 1653 (org-table-justify-field-maybe)
1601 (org-table-next-field)))) 1654 (org-table-next-field))))
1602 1655
1603 (arg ;; Global cycling 1656 ((eq arg t) ;; Global cycling
1604 1657
1605 (cond 1658 (cond
1606 ((and (eq last-command this-command) 1659 ((and (eq last-command this-command)
@@ -1621,18 +1674,27 @@ The following commands are available:
1621 (if (bobp) (throw 'exit nil)))) 1674 (if (bobp) (throw 'exit nil))))
1622 (message "CONTENTS...done")) 1675 (message "CONTENTS...done"))
1623 (setq org-cycle-global-status 'contents)) 1676 (setq org-cycle-global-status 'contents))
1677
1624 ((and (eq last-command this-command) 1678 ((and (eq last-command this-command)
1625 (eq org-cycle-global-status 'contents)) 1679 (eq org-cycle-global-status 'contents))
1626 ;; We just showed the table of contents - now show everything 1680 ;; We just showed the table of contents - now show everything
1627 (show-all) 1681 (show-all)
1628 (message "SHOW ALL") 1682 (message "SHOW ALL")
1629 (setq org-cycle-global-status 'all)) 1683 (setq org-cycle-global-status 'all))
1684
1630 (t 1685 (t
1631 ;; Default action: go to overview 1686 ;; Default action: go to overview
1632 (hide-sublevels 1) 1687 (hide-sublevels 1)
1633 (message "OVERVIEW") 1688 (message "OVERVIEW")
1634 (setq org-cycle-global-status 'overview)))) 1689 (setq org-cycle-global-status 'overview))))
1635 1690
1691 ((integerp arg)
1692 ;; Show-subtree, ARG levels up from here.
1693 (save-excursion
1694 (org-back-to-heading)
1695 (outline-up-heading arg)
1696 (show-subtree)))
1697
1636 ((save-excursion (beginning-of-line 1) (looking-at outline-regexp)) 1698 ((save-excursion (beginning-of-line 1) (looking-at outline-regexp))
1637 ;; At a heading: rotate between three different views 1699 ;; At a heading: rotate between three different views
1638 (org-back-to-heading) 1700 (org-back-to-heading)
@@ -1970,7 +2032,7 @@ is changed at all."
1970 (save-excursion (outline-end-of-heading) 2032 (save-excursion (outline-end-of-heading)
1971 (setq folded (org-invisible-p))) 2033 (setq folded (org-invisible-p)))
1972 (outline-end-of-subtree)) 2034 (outline-end-of-subtree))
1973 (if (equal (char-after) ?\n) (forward-char 1)) 2035 (outline-next-heading)
1974 (setq end (point)) 2036 (setq end (point))
1975 ;; Find insertion point, with error handling 2037 ;; Find insertion point, with error handling
1976 (goto-char beg) 2038 (goto-char beg)
@@ -1982,7 +2044,10 @@ is changed at all."
1982 (if (> arg 0) 2044 (if (> arg 0)
1983 ;; Moving forward - still need to move over subtree 2045 ;; Moving forward - still need to move over subtree
1984 (progn (outline-end-of-subtree) 2046 (progn (outline-end-of-subtree)
1985 (if (equal (char-after) ?\n) (forward-char 1)))) 2047 (outline-next-heading)
2048 (if (not (or (looking-at (concat "^" outline-regexp))
2049 (bolp)))
2050 (newline))))
1986 (move-marker ins-point (point)) 2051 (move-marker ins-point (point))
1987 (setq txt (buffer-substring beg end)) 2052 (setq txt (buffer-substring beg end))
1988 (delete-region beg end) 2053 (delete-region beg end)
@@ -1993,7 +2058,7 @@ is changed at all."
1993 2058
1994(defvar org-subtree-clip "" 2059(defvar org-subtree-clip ""
1995 "Clipboard for cut and paste of subtrees. 2060 "Clipboard for cut and paste of subtrees.
1996This is actually only a cpoy of the kill, because we use the normal kill 2061This is actually only a copy of the kill, because we use the normal kill
1997ring. We need it to check if the kill was created by `org-copy-subtree'.") 2062ring. We need it to check if the kill was created by `org-copy-subtree'.")
1998 2063
1999(defvar org-subtree-clip-folded nil 2064(defvar org-subtree-clip-folded nil
@@ -2380,7 +2445,7 @@ ACTION can be set, up, or down."
2380 (setq new (1- current))) 2445 (setq new (1- current)))
2381 ((eq action 'down) 2446 ((eq action 'down)
2382 (setq new (1+ current))) 2447 (setq new (1+ current)))
2383 (t (error "Illegal ection"))) 2448 (t (error "Invalid action")))
2384 (setq new (min (max ?A (upcase new)) org-lowest-priority)) 2449 (setq new (min (max ?A (upcase new)) org-lowest-priority))
2385 (setq news (format "%c" new)) 2450 (setq news (format "%c" new))
2386 (if have 2451 (if have
@@ -2906,6 +2971,14 @@ The following commands are available:
2906(define-key org-agenda-mode-map "p" 'org-agenda-priority) 2971(define-key org-agenda-mode-map "p" 'org-agenda-priority)
2907(define-key org-agenda-mode-map "," 'org-agenda-priority) 2972(define-key org-agenda-mode-map "," 'org-agenda-priority)
2908(define-key org-agenda-mode-map "i" 'org-agenda-diary-entry) 2973(define-key org-agenda-mode-map "i" 'org-agenda-diary-entry)
2974(define-key org-agenda-mode-map "c" 'org-agenda-goto-calendar)
2975(define-key org-agenda-mode-map "C" 'org-agenda-convert-date)
2976(define-key org-agenda-mode-map "m" 'org-agenda-phases-of-moon)
2977(define-key org-agenda-mode-map "M" 'org-agenda-phases-of-moon)
2978(define-key org-agenda-mode-map "s" 'org-agenda-sunrise-sunset)
2979(define-key org-agenda-mode-map "S" 'org-agenda-sunrise-sunset)
2980(define-key org-agenda-mode-map "h" 'org-agenda-holidays)
2981(define-key org-agenda-mode-map "H" 'org-agenda-holidays)
2909(define-key org-agenda-mode-map "+" 'org-agenda-priority-up) 2982(define-key org-agenda-mode-map "+" 'org-agenda-priority-up)
2910(define-key org-agenda-mode-map "-" 'org-agenda-priority-down) 2983(define-key org-agenda-mode-map "-" 'org-agenda-priority-down)
2911(define-key org-agenda-mode-map [(right)] 'org-agenda-later) 2984(define-key org-agenda-mode-map [(right)] 'org-agenda-later)
@@ -2951,6 +3024,12 @@ The following commands are available:
2951 :style toggle :selected org-agenda-include-diary :active t] 3024 :style toggle :selected org-agenda-include-diary :active t]
2952 "--" 3025 "--"
2953 ["New Diary Entry" org-agenda-diary-entry t] 3026 ["New Diary Entry" org-agenda-diary-entry t]
3027 ("Calendar commands"
3028 ["Goto calendar" org-agenda-goto-calendar t]
3029 ["Phases of the Moon" org-agenda-phases-of-moon t]
3030 ["Sunrise/Sunset" org-agenda-sunrise-sunset t]
3031 ["Holidays" org-agenda-holidays t]
3032 ["Convert" org-agenda-convert-date t])
2954 "--" 3033 "--"
2955 ["Quit" org-agenda-quit t] 3034 ["Quit" org-agenda-quit t]
2956 ["Exit and Release Buffers" org-agenda-exit t] 3035 ["Exit and Release Buffers" org-agenda-exit t]
@@ -3110,7 +3189,7 @@ NDAYS defaults to `org-agenda-ndays'."
3110 (d (- nt n1))) 3189 (d (- nt n1)))
3111 (- sd (+ (if (< d 0) 7 0) d))))) 3190 (- sd (+ (if (< d 0) 7 0) d)))))
3112 (day-numbers (list start)) 3191 (day-numbers (list start))
3113 s e rtn rtnall file date d start-pos) 3192 s e rtn rtnall file date d start-pos end-pos)
3114 (setq org-agenda-redo-command 3193 (setq org-agenda-redo-command
3115 (list 'org-agenda include-all start-day ndays)) 3194 (list 'org-agenda include-all start-day ndays))
3116 ;; Make the list of days 3195 ;; Make the list of days
@@ -3146,7 +3225,9 @@ NDAYS defaults to `org-agenda-ndays'."
3146 s (point)) 3225 s (point))
3147 (if (or (= d today) 3226 (if (or (= d today)
3148 (and (not start-pos) (= d sd))) 3227 (and (not start-pos) (= d sd)))
3149 (setq start-pos (point))) 3228 (setq start-pos (point))
3229 (if (and start-pos (not end-pos))
3230 (setq end-pos (point))))
3150 (setq files org-agenda-files 3231 (setq files org-agenda-files
3151 rtnall nil) 3232 rtnall nil)
3152 (while (setq file (pop files)) 3233 (while (setq file (pop files))
@@ -3173,6 +3254,17 @@ NDAYS defaults to `org-agenda-ndays'."
3173 (put-text-property s (1- (point)) 'day d)))) 3254 (put-text-property s (1- (point)) 'day d))))
3174 (goto-char (point-min)) 3255 (goto-char (point-min))
3175 (setq buffer-read-only t) 3256 (setq buffer-read-only t)
3257 (if org-fit-agenda-window
3258 (fit-window-to-buffer nil (/ (* (frame-height) 3) 4)
3259 (/ (frame-height) 2)))
3260 (unless (and (pos-visible-in-window-p (point-min))
3261 (pos-visible-in-window-p (point-max)))
3262 (goto-char (1- (point-max)))
3263 (recenter -1)
3264 (if (not (pos-visible-in-window-p (or start-pos 1)))
3265 (progn
3266 (goto-char (or start-pos 1))
3267 (recenter 1))))
3176 (goto-char (or start-pos 1)) 3268 (goto-char (or start-pos 1))
3177 (if (not org-select-agenda-window) (select-window win)) 3269 (if (not org-select-agenda-window) (select-window win))
3178 (message ""))) 3270 (message "")))
@@ -3285,10 +3377,10 @@ With prefix ARG, go back that many times `org-agenda-ndays'."
3285 "Set the mode name to indicate all the small mode seetings." 3377 "Set the mode name to indicate all the small mode seetings."
3286 (setq mode-name 3378 (setq mode-name
3287 (concat "Org-Agenda" 3379 (concat "Org-Agenda"
3288 (if (equal org-agenda-ndays 1) " Day" "") 3380 (if (equal org-agenda-ndays 1) " Day" "")
3289 (if (equal org-agenda-ndays 7) " Week" "") 3381 (if (equal org-agenda-ndays 7) " Week" "")
3290 (if org-agenda-follow-mode " Follow" "") 3382 (if org-agenda-follow-mode " Follow" "")
3291 (if org-agenda-include-diary " Diary" ""))) 3383 (if org-agenda-include-diary " Diary" "")))
3292 (force-mode-line-update)) 3384 (force-mode-line-update))
3293 3385
3294(defun org-agenda-post-command-hook () 3386(defun org-agenda-post-command-hook ()
@@ -3299,26 +3391,33 @@ With prefix ARG, go back that many times `org-agenda-ndays'."
3299(defun org-get-entries-from-diary (date) 3391(defun org-get-entries-from-diary (date)
3300 "Get the (emacs calendar) diary entries for DATE." 3392 "Get the (emacs calendar) diary entries for DATE."
3301 (let* ((fancy-diary-buffer "*temporary-fancy-diary-buffer*") 3393 (let* ((fancy-diary-buffer "*temporary-fancy-diary-buffer*")
3302 (diary-display-hook '(sort-diary-entries fancy-diary-display)) 3394 (diary-display-hook '(fancy-diary-display))
3395 (list-diary-entries-hook
3396 (cons 'org-diary-default-entry list-diary-entries-hook))
3303 entries 3397 entries
3304 (disable-org-agenda t)) 3398 (disable-org-diary t))
3305 (save-excursion 3399 (save-excursion
3306 (save-window-excursion 3400 (save-window-excursion
3307 (list-diary-entries date 1))) 3401 (list-diary-entries date 1)))
3308 (if (not (get-buffer fancy-diary-buffer)) 3402 (if (not (get-buffer fancy-diary-buffer))
3309 (setq entries nil) 3403 (setq entries nil)
3310 (save-excursion 3404 (save-excursion
3311 (set-buffer fancy-diary-buffer) 3405 (switch-to-buffer fancy-diary-buffer)
3312 (setq buffer-read-only nil) 3406 (setq buffer-read-only nil)
3313 (if (= (point-max) 1) 3407 (if (= (point-max) 1)
3314 ;; No entries 3408 ;; No entries
3315 (setq entries nil) 3409 (setq entries nil)
3316 ;; Omit the date 3410 ;; Omit the date and other unnecessary stuff
3317 (beginning-of-line 3) 3411 (org-agenda-cleanup-fancy-diary)
3318 (delete-region (point-min) (point)) 3412 ;; Add prefix to each line and extend the text properties
3413 (goto-char (point-min))
3319 (while (and (re-search-forward "^" nil t) (not (eobp))) 3414 (while (and (re-search-forward "^" nil t) (not (eobp)))
3320 (replace-match " Diary: ")) 3415 (replace-match " Diary: ")
3321 (setq entries (buffer-substring (point-min) (- (point-max) 1)))) 3416 (add-text-properties (point-at-bol) (point)
3417 (text-properties-at (point))))
3418 (if (= (point-max) 1)
3419 (setq entries nil)
3420 (setq entries (buffer-substring (point-min) (- (point-max) 1)))))
3322 (set-buffer-modified-p nil) 3421 (set-buffer-modified-p nil)
3323 (kill-buffer fancy-diary-buffer))) 3422 (kill-buffer fancy-diary-buffer)))
3324 (when entries 3423 (when entries
@@ -3337,6 +3436,49 @@ With prefix ARG, go back that many times `org-agenda-ndays'."
3337 x) 3436 x)
3338 entries))))) 3437 entries)))))
3339 3438
3439(defun org-agenda-cleanup-fancy-diary ()
3440 "Remove unwanted stuff in buffer created by fancy-diary-display.
3441This gets rid of the date, the underline under the date, and
3442the dummy entry installed by org-mode to ensure non-empty diary for each
3443date."
3444 (goto-char (point-min))
3445 (if (looking-at ".*?:[ \t]*")
3446 (progn
3447 (replace-match "")
3448 (re-search-forward "\n=+$" nil t)
3449 (replace-match "")
3450 (while (re-search-backward "^ +" nil t) (replace-match "")))
3451 (re-search-forward "\n=+$" nil t)
3452 (delete-region (point-min) (min (point-max) (1+ (match-end 0)))))
3453 (if (re-search-forward "^Org-mode dummy\n?" nil t)
3454 (replace-match "")))
3455
3456;; Advise the add-to-diary-list function to allow org to jump to
3457;; diary entires. Wrapped into eval-after-load to avoid loading
3458;; advice unnecessarily
3459(eval-after-load "diary-lib"
3460 '(defadvice add-to-diary-list (before org-mark-diary-entry activate)
3461 "Make the position visible."
3462 (if (and (boundp 'disable-org-diary) ;; called from org-agenda
3463 (stringp string)
3464 (buffer-file-name))
3465 (add-text-properties
3466 0 (length string)
3467 (list 'mouse-face 'highlight
3468 'keymap org-agenda-keymap
3469 'help-echo
3470 (format
3471 "mouse-2 or RET jump to diary file %s"
3472 (abbreviate-file-name (buffer-file-name)))
3473 'org-agenda-diary-link t
3474 'org-marker (org-agenda-new-marker (point-at-bol)))
3475 string))))
3476
3477(defun org-diary-default-entry ()
3478 "Add a dummy entry to the diary.
3479Needed to avoid empty dates which mess up holiday display."
3480 (add-to-diary-list original-date "Org-mode dummy" ""))
3481
3340(defun org-add-file (&optional file) 3482(defun org-add-file (&optional file)
3341 "Add current file to the list of files in variable `org-agenda-files'. 3483 "Add current file to the list of files in variable `org-agenda-files'.
3342These are the files which are being checked for agenda entries. 3484These are the files which are being checked for agenda entries.
@@ -3468,7 +3610,7 @@ function from a program - use `org-agenda-get-day-entries' instead."
3468 file rtn results) 3610 file rtn results)
3469 ;; If this is called during org-agenda, don't return any entries to 3611 ;; If this is called during org-agenda, don't return any entries to
3470 ;; the calendar. Org Agenda will list these entries itself. 3612 ;; the calendar. Org Agenda will list these entries itself.
3471 (if (boundp 'disable-org-agenda) (setq files nil)) 3613 (if (boundp 'disable-org-diary) (setq files nil))
3472 (while (setq file (pop files)) 3614 (while (setq file (pop files))
3473 (setq rtn (apply 'org-agenda-get-day-entries file date args)) 3615 (setq rtn (apply 'org-agenda-get-day-entries file date args))
3474 (setq results (append results rtn))) 3616 (setq results (append results rtn)))
@@ -3864,7 +4006,6 @@ and by additional input from the age of a schedules or deadline entry."
3864 (let* ((pri (get-text-property (point-at-bol) 'priority))) 4006 (let* ((pri (get-text-property (point-at-bol) 'priority)))
3865 (message "Priority is %d" (if pri pri -1000)))) 4007 (message "Priority is %d" (if pri pri -1000))))
3866 4008
3867
3868(defun org-agenda-goto () 4009(defun org-agenda-goto ()
3869 "Go to the Org-mode file which contains the item at point." 4010 "Go to the Org-mode file which contains the item at point."
3870 (interactive) 4011 (interactive)
@@ -3875,10 +4016,11 @@ and by additional input from the age of a schedules or deadline entry."
3875 (switch-to-buffer-other-window buffer) 4016 (switch-to-buffer-other-window buffer)
3876 (widen) 4017 (widen)
3877 (goto-char pos) 4018 (goto-char pos)
3878 (org-show-hidden-entry) 4019 (when (eq major-mode 'org-mode)
3879 (save-excursion 4020 (org-show-hidden-entry)
3880 (and (outline-next-heading) 4021 (save-excursion
3881 (org-flag-heading nil))))) ; show the next heading 4022 (and (outline-next-heading)
4023 (org-flag-heading nil)))))) ; show the next heading
3882 4024
3883(defun org-agenda-switch-to () 4025(defun org-agenda-switch-to ()
3884 "Go to the Org-mode file which contains the item at point." 4026 "Go to the Org-mode file which contains the item at point."
@@ -3891,10 +4033,11 @@ and by additional input from the age of a schedules or deadline entry."
3891 (delete-other-windows) 4033 (delete-other-windows)
3892 (widen) 4034 (widen)
3893 (goto-char pos) 4035 (goto-char pos)
3894 (org-show-hidden-entry) 4036 (when (eq major-mode 'org-mode)
3895 (save-excursion 4037 (org-show-hidden-entry)
3896 (and (outline-next-heading) 4038 (save-excursion
3897 (org-flag-heading nil))))) ; show the next heading 4039 (and (outline-next-heading)
4040 (org-flag-heading nil)))))) ; show the next heading
3898 4041
3899(defun org-agenda-goto-mouse (ev) 4042(defun org-agenda-goto-mouse (ev)
3900 "Go to the Org-mode file which contains the deadline at the mouse click." 4043 "Go to the Org-mode file which contains the deadline at the mouse click."
@@ -3923,12 +4066,18 @@ and by additional input from the age of a schedules or deadline entry."
3923 (mouse-set-point ev) 4066 (mouse-set-point ev)
3924 (org-agenda-show)) 4067 (org-agenda-show))
3925 4068
4069(defun org-agenda-check-no-diary ()
4070 "Check if the entry is a diary link and abort if yes."
4071 (if (get-text-property (point) 'org-agenda-diary-link)
4072 (org-agenda-error)))
4073
3926(defun org-agenda-error () 4074(defun org-agenda-error ()
3927 (error "Command not allowed in this line.")) 4075 (error "Command not allowed in this line."))
3928 4076
3929(defun org-agenda-todo () 4077(defun org-agenda-todo ()
3930 "Cycle TODO state of line at point, also in Org-mode file." 4078 "Cycle TODO state of line at point, also in Org-mode file."
3931 (interactive) 4079 (interactive)
4080 (org-agenda-check-no-diary)
3932 (let* ((props (text-properties-at (point))) 4081 (let* ((props (text-properties-at (point)))
3933 (col (current-column)) 4082 (col (current-column))
3934 (marker (or (get-text-property (point) 'org-marker) 4083 (marker (or (get-text-property (point) 'org-marker)
@@ -3971,6 +4120,7 @@ and by additional input from the age of a schedules or deadline entry."
3971(defun org-agenda-priority (&optional force-direction) 4120(defun org-agenda-priority (&optional force-direction)
3972 "Set the priority of line at point, also in Org-mode file." 4121 "Set the priority of line at point, also in Org-mode file."
3973 (interactive) 4122 (interactive)
4123 (org-agenda-check-no-diary)
3974 (let* ((props (text-properties-at (point))) 4124 (let* ((props (text-properties-at (point)))
3975 (col (current-column)) 4125 (col (current-column))
3976 (marker (or (get-text-property (point) 'org-marker) 4126 (marker (or (get-text-property (point) 'org-marker)
@@ -4003,6 +4153,7 @@ and by additional input from the age of a schedules or deadline entry."
4003(defun org-agenda-date-later (arg &optional what) 4153(defun org-agenda-date-later (arg &optional what)
4004 "Change the date of this item to one day later." 4154 "Change the date of this item to one day later."
4005 (interactive "p") 4155 (interactive "p")
4156 (org-agenda-check-no-diary)
4006 (let* ((marker (or (get-text-property (point) 'org-marker) 4157 (let* ((marker (or (get-text-property (point) 'org-marker)
4007 (org-agenda-error))) 4158 (org-agenda-error)))
4008 (buffer (marker-buffer marker)) 4159 (buffer (marker-buffer marker))
@@ -4022,8 +4173,9 @@ and by additional input from the age of a schedules or deadline entry."
4022 (org-agenda-date-later (- arg) what)) 4173 (org-agenda-date-later (- arg) what))
4023 4174
4024(defun org-agenda-date-today (arg) 4175(defun org-agenda-date-today (arg)
4025 "Change the date of this item to one day later." 4176 "Change the date of this item to today."
4026 (interactive "p") 4177 (interactive "p")
4178 (org-agenda-check-no-diary)
4027 (let* ((marker (or (get-text-property (point) 'org-marker) 4179 (let* ((marker (or (get-text-property (point) 'org-marker)
4028 (org-agenda-error))) 4180 (org-agenda-error)))
4029 (buffer (marker-buffer marker)) 4181 (buffer (marker-buffer marker))
@@ -4084,7 +4236,91 @@ All the standard commands work: block, weekly etc"
4084 (get-text-property point 'day)))) 4236 (get-text-property point 'day))))
4085 (call-interactively cmd)) 4237 (call-interactively cmd))
4086 (fset 'calendar-cursor-to-date oldf))))) 4238 (fset 'calendar-cursor-to-date oldf)))))
4087 4239
4240
4241(defun org-agenda-execute-calendar-command (cmd)
4242 "Execute a calendar command from the agenda, with the date associated to
4243the cursor position."
4244 (require 'diary-lib)
4245 (unless (get-text-property (point) 'day)
4246 (error "Don't know which date to use for calendar command"))
4247 (let* ((oldf (symbol-function 'calendar-cursor-to-date))
4248 (point (point))
4249 (mark (or (mark t) (point)))
4250 (date (calendar-gregorian-from-absolute
4251 (get-text-property point 'day)))
4252 (displayed-day (extract-calendar-day date))
4253 (displayed-month (extract-calendar-month date))
4254 (displayed-year (extract-calendar-year date)))
4255 (unwind-protect
4256 (progn
4257 (fset 'calendar-cursor-to-date
4258 (lambda (&optional error)
4259 (calendar-gregorian-from-absolute
4260 (get-text-property point 'day))))
4261 (call-interactively cmd))
4262 (fset 'calendar-cursor-to-date oldf))))
4263
4264(defun org-agenda-phases-of-moon ()
4265 "Display the phases of the moon for 3 month around cursor date."
4266 (interactive)
4267 (org-agenda-execute-calendar-command 'calendar-phases-of-moon))
4268
4269(defun org-agenda-holidays ()
4270 "Display the holidays for 3 month around cursor date."
4271 (interactive)
4272 (org-agenda-execute-calendar-command 'list-calendar-holidays))
4273
4274(defun org-agenda-sunrise-sunset (arg)
4275 "Display sunrise and sunset for the cursor date.
4276Latitude and longitude can be specified with the variables
4277`calendar-latitude' and `calendar-longitude'. When called with prefix
4278argument, location will be prompted for."
4279 (interactive "P")
4280 (let ((calendar-longitude (if arg nil calendar-longitude))
4281 (calendar-latitude (if arg nil calendar-latitude))
4282 (calendar-location-name nil))
4283 (org-agenda-execute-calendar-command 'calendar-sunrise-sunset)))
4284
4285(defun org-agenda-goto-calendar ()
4286 "Open the Emacs calendar with the date at the cursor."
4287 (interactive)
4288 (let* ((day (or (get-text-property (point) 'day)
4289 (error "Don't know which date to open in calendar")))
4290 (date (calendar-gregorian-from-absolute day)))
4291 (calendar)
4292 (calendar-goto-date date)))
4293
4294(defun org-agenda-convert-date ()
4295 (interactive)
4296 (let ((day (get-text-property (point) 'day))
4297 date s)
4298 (unless day
4299 (error "Don't know which date to convert"))
4300 (setq date (calendar-gregorian-from-absolute day))
4301 (require 'cal-julian)
4302 (require 'cal-hebrew)
4303 (require 'cal-islam)
4304 (require 'cal-french)
4305 (require 'cal-mayan)
4306 (require 'cal-coptic)
4307 (require 'cal-persia)
4308 (require 'cal-china)
4309 (setq s (concat
4310 "Gregorian: " (calendar-date-string date) "\n"
4311 "Julian: " (calendar-julian-date-string date) "\n"
4312 "Astronomic: " (calendar-astro-date-string date) " (at noon UTC)\n"
4313 "Hebrew: " (calendar-hebrew-date-string date) "\n"
4314 "Islamic: " (calendar-islamic-date-string date) "\n"
4315 "French: " (calendar-french-date-string date) "\n"
4316 "Maya: " (calendar-mayan-date-string date) "\n"
4317 "Coptic: " (calendar-coptic-date-string date) "\n"
4318 "Persian: " (calendar-persian-date-string date) "\n"
4319 "Chineese: " (calendar-chinese-date-string date) "\n"))
4320 (with-output-to-temp-buffer "*Dates*"
4321 (princ s))
4322 (fit-window-to-buffer (get-buffer-window "*Dates*"))))
4323
4088;;; Link Stuff 4324;;; Link Stuff
4089 4325
4090(defun org-find-file-at-mouse (ev) 4326(defun org-find-file-at-mouse (ev)
@@ -5087,14 +5323,23 @@ Before doing so, re-align the table if necessary."
5087 (skip-chars-backward "^|\n\r") 5323 (skip-chars-backward "^|\n\r")
5088 (if (looking-at " ") (forward-char 1))))) 5324 (if (looking-at " ") (forward-char 1)))))
5089 5325
5090(defun org-table-copy-from-above (n) 5326(defun org-table-copy-down (n)
5091 "Copy into the current column the nearest non-empty field from above. 5327 "Copy a field down in the current column.
5092With prefix argument N, take the Nth non-empty field." 5328If the field at the cursor is empty, copy into it the content of the nearest
5329non-empty field above. With argument N, use the Nth non-empty field.
5330If the current fields is not empty, it is copied down to the next row, and
5331the cursor is moved with it. Therefore, repeating this command causes the
5332column to be filled row-by-row.
5333If the variable `org-table-copy-increment' is non-nil and the field is an
5334integer, it will be incremented while copying."
5093 (interactive "p") 5335 (interactive "p")
5094 (let ((colpos (org-table-current-column)) 5336 (let* ((colpos (org-table-current-column))
5095 (beg (org-table-begin)) 5337 (field (org-table-get-field))
5096 txt) 5338 (non-empty (string-match "[^ \t]" field))
5339 (beg (org-table-begin))
5340 txt)
5097 (org-table-check-inside-data-field) 5341 (org-table-check-inside-data-field)
5342 (if non-empty (progn (org-table-next-row) (org-table-blank-field)))
5098 (if (save-excursion 5343 (if (save-excursion
5099 (setq txt 5344 (setq txt
5100 (catch 'exit 5345 (catch 'exit
@@ -5103,10 +5348,13 @@ With prefix argument N, take the Nth non-empty field."
5103 beg t)) 5348 beg t))
5104 (org-table-goto-column colpos t) 5349 (org-table-goto-column colpos t)
5105 (if (and (looking-at 5350 (if (and (looking-at
5106 "|[ \t]*\\([^| \t][^|]*[^| \t]\\)[ \t]*|") 5351 "|[ \t]*\\([^| \t][^|]*?\\)[ \t]*|")
5107 (= (setq n (1- n)) 0)) 5352 (= (setq n (1- n)) 0))
5108 (throw 'exit (match-string 1))))))) 5353 (throw 'exit (match-string 1)))))))
5109 (progn 5354 (progn
5355 (if (and org-table-copy-increment
5356 (string-match "^[0-9]+$" txt))
5357 (setq txt (format "%d" (+ (string-to-int txt) 1))))
5110 (insert txt) 5358 (insert txt)
5111 (org-table-align)) 5359 (org-table-align))
5112 (error "No non-empty field found")))) 5360 (error "No non-empty field found"))))
@@ -5902,13 +6150,13 @@ separator line)."
5902 (string-to-int (match-string 1 form)) 6150 (string-to-int (match-string 1 form))
5903 n0) 6151 n0)
5904 x (nth n fields)) 6152 x (nth n fields))
5905 (unless x (error "Illegal field specifier \"%s\"" 6153 (unless x (error "Invalid field specifier \"%s\""
5906 (match-string 0 form))) 6154 (match-string 0 form)))
5907 (if (equal (string-to-number x) 0) (setq x "0")) 6155 (if (equal (string-to-number x) 0) (setq x "0"))
5908 (setq form (replace-match x t t form))) 6156 (setq form (replace-match x t t form)))
5909 (setq ev (calc-eval (list form) 'num)) 6157 (setq ev (calc-eval (list form) 'num))
5910 (if (listp ev) 6158 (if (listp ev)
5911 (error "Illegal expression: %s (%s at %d)" form (nth 1 ev) (car ev))) 6159 (error "Invalid expression: %s (%s at %d)" form (nth 1 ev) (car ev)))
5912 (org-table-blank-field) 6160 (org-table-blank-field)
5913 (if fmt 6161 (if fmt
5914 (insert (format fmt (string-to-number ev))) 6162 (insert (format fmt (string-to-number ev)))
@@ -6039,7 +6287,7 @@ table editor iin arbitrary modes.")
6039 ([(shift tab)] org-table-previous-field) 6287 ([(shift tab)] org-table-previous-field)
6040 ("\C-c\C-c" org-table-align) 6288 ("\C-c\C-c" org-table-align)
6041 ([(return)] org-table-next-row) 6289 ([(return)] org-table-next-row)
6042 ([(shift return)] org-table-copy-from-above) 6290 ([(shift return)] org-table-copy-down)
6043 ([(meta return)] org-table-wrap-region) 6291 ([(meta return)] org-table-wrap-region)
6044 ("\C-c\C-q" org-table-wrap-region) 6292 ("\C-c\C-q" org-table-wrap-region)
6045 ("\C-c?" org-table-current-column) 6293 ("\C-c?" org-table-current-column)
@@ -6157,7 +6405,7 @@ a reduced column width."
6157 "--" 6405 "--"
6158 ["Blank field" org-table-blank-field :active (org-at-table-p) :keys "C-c SPC"] 6406 ["Blank field" org-table-blank-field :active (org-at-table-p) :keys "C-c SPC"]
6159 ["Copy field from above" 6407 ["Copy field from above"
6160 org-table-copy-from-above :active (org-at-table-p) :keys "S-RET"] 6408 org-table-copy-down :active (org-at-table-p) :keys "S-RET"]
6161 "--" 6409 "--"
6162 ("Column" 6410 ("Column"
6163 ["Move column left" org-metaleft :active (org-at-table-p) :keys "M-<left>"] 6411 ["Move column left" org-metaleft :active (org-at-table-p) :keys "M-<left>"]
@@ -6678,7 +6926,57 @@ underlined headlines. The default is 3."
6678 (setq char (nth (- umax level) (reverse org-ascii-underline))) 6926 (setq char (nth (- umax level) (reverse org-ascii-underline)))
6679 (if org-export-with-section-numbers 6927 (if org-export-with-section-numbers
6680 (setq title (concat (org-section-number level) " " title))) 6928 (setq title (concat (org-section-number level) " " title)))
6681 (insert title "\n" (make-string (length title) char) "\n")))) 6929 (insert title "\n" (make-string (string-width title) char) "\n"))))
6930
6931(defun org-export-copy-visible (&optional arg)
6932 "Copy the visible part of the buffer to another buffer, for printing.
6933Also removes the first line of the buffer it is specifies a mode,
6934and all options lines."
6935 (interactive "P")
6936 (let* ((filename (concat (file-name-sans-extension (buffer-file-name))
6937 ".txt"))
6938 (buffer (find-file-noselect filename))
6939 (ore (concat
6940 (org-make-options-regexp
6941 '("CATEGORY" "SEQ_TODO" "PRI_TODO" "TYP_TODO" "STARTUP"
6942 "TITLE" "AUTHOR" "EMAIL" "TEXT" "OPTIONS" "LANGUAGE"))
6943 (if org-noutline-p "\\(\n\\|$\\)" "")))
6944 s e)
6945 (save-excursion
6946 (set-buffer buffer)
6947 (erase-buffer)
6948 (text-mode))
6949 (save-excursion
6950 (setq s (goto-char (point-min)))
6951 (while (not (= (point) (point-max)))
6952 (goto-char (org-find-invisible))
6953 (append-to-buffer buffer s (point))
6954 (setq s (goto-char (org-find-visible)))))
6955 (switch-to-buffer-other-window buffer)
6956 (newline)
6957 (goto-char (point-min))
6958 (if (looking-at ".*-\\*- mode:.*\n")
6959 (replace-match ""))
6960 (while (re-search-forward ore nil t)
6961 (replace-match ""))
6962 (goto-char (point-min))))
6963
6964(defun org-find-visible ()
6965 (if (featurep 'noutline)
6966 (let ((s (point)))
6967 (while (and (not (= (point-max) (setq s (next-overlay-change s))))
6968 (get-char-property s 'invisible)))
6969 s)
6970 (skip-chars-forward "^\n")
6971 (point)))
6972(defun org-find-invisible ()
6973 (if (featurep 'noutline)
6974 (let ((s (point)))
6975 (while (and (not (= (point-max) (setq s (next-overlay-change s))))
6976 (not (get-char-property s 'invisible))))
6977 s)
6978 (skip-chars-forward "^\r")
6979 (point)))
6682 6980
6683;; HTML 6981;; HTML
6684 6982
@@ -7423,7 +7721,7 @@ When LEVEL is non-nil, increase section numbers on that level."
7423(define-key org-mode-map [(shift tab)] 'org-shifttab) 7721(define-key org-mode-map [(shift tab)] 'org-shifttab)
7424(define-key org-mode-map "\C-c\C-c" 'org-ctrl-c-ctrl-c) 7722(define-key org-mode-map "\C-c\C-c" 'org-ctrl-c-ctrl-c)
7425(define-key org-mode-map [(return)] 'org-return) 7723(define-key org-mode-map [(return)] 'org-return)
7426(define-key org-mode-map [(shift return)] 'org-table-copy-from-above) 7724(define-key org-mode-map [(shift return)] 'org-table-copy-down)
7427(define-key org-mode-map [(meta return)] 'org-meta-return) 7725(define-key org-mode-map [(meta return)] 'org-meta-return)
7428(define-key org-mode-map [(control up)] 'org-move-line-up) 7726(define-key org-mode-map [(control up)] 'org-move-line-up)
7429(define-key org-mode-map [(control down)] 'org-move-line-down) 7727(define-key org-mode-map [(control down)] 'org-move-line-down)
@@ -7436,6 +7734,10 @@ When LEVEL is non-nil, increase section numbers on that level."
7436(define-key org-mode-map "\C-c\C-q" 'org-table-wrap-region) 7734(define-key org-mode-map "\C-c\C-q" 'org-table-wrap-region)
7437(define-key org-mode-map "\C-c\C-xa" 'org-export-as-ascii) 7735(define-key org-mode-map "\C-c\C-xa" 'org-export-as-ascii)
7438(define-key org-mode-map "\C-c\C-x\C-a" 'org-export-as-ascii) 7736(define-key org-mode-map "\C-c\C-x\C-a" 'org-export-as-ascii)
7737(define-key org-mode-map "\C-c\C-xv" 'org-export-copy-visible)
7738(define-key org-mode-map "\C-c\C-x\C-v" 'org-export-copy-visible)
7739(define-key org-mode-map "\C-c\C-xo" 'org-export-as-opml)
7740(define-key org-mode-map "\C-c\C-x\C-o" 'org-export-as-opml)
7439(define-key org-mode-map "\C-c\C-xt" 'org-insert-export-options-template) 7741(define-key org-mode-map "\C-c\C-xt" 'org-insert-export-options-template)
7440(define-key org-mode-map "\C-c:" 'org-toggle-fixed-width-section) 7742(define-key org-mode-map "\C-c:" 'org-toggle-fixed-width-section)
7441(define-key org-mode-map "\C-c\C-xh" 'org-export-as-html) 7743(define-key org-mode-map "\C-c\C-xh" 'org-export-as-html)
@@ -7444,7 +7746,7 @@ When LEVEL is non-nil, increase section numbers on that level."
7444 7746
7445;; FIXME: Do we really need to save match data in these commands? 7747;; FIXME: Do we really need to save match data in these commands?
7446;; I would like to remove it in order to minimize impact. 7748;; I would like to remove it in order to minimize impact.
7447;; Self-insert already does not preserve it. How much resources does this take??? 7749;; Self-insert already does not preserve it. How much resources used by this???
7448 7750
7449(defsubst org-table-p () 7751(defsubst org-table-p ()
7450 (if (and (eq major-mode 'org-mode) font-lock-mode) 7752 (if (and (eq major-mode 'org-mode) font-lock-mode)
@@ -7469,28 +7771,7 @@ overwritten, and the table is not marked as requiring realignment."
7469 7771
7470;; FIXME: 7772;; FIXME:
7471;; The following two functions might still be optimized to trigger 7773;; The following two functions might still be optimized to trigger
7472;; re-alignment less frequently. Right now they raise the flag each time 7774;; re-alignment less frequently.
7473;; (through before-change-functions). Here is how this could be minimized:
7474;; Basically, check if the non-white field width before deletion is
7475;; equal to the column width. If yes, the delete should trigger a
7476;; re-align. I have not implemented this so far because it is not so
7477;; easy, requires grabbing the field etc. So it may finally have some
7478;; impact on typing performance which we don't want.
7479
7480;; The defsubst is only a draft, untested...
7481
7482;; Maybe it is not so important to get rid of realigns - maybe the most
7483;; important aspect is to keep the table look noce as long as possible,
7484;; which is already achieved...
7485
7486;(defsubst org-check-delete-triggers-realign ()
7487; (let ((pos (point)))
7488; (skip-chars-backward "^|\n")
7489; (and (looking-at " *\\(.*?\\) *|")
7490; (= (nth (1- (org-table-current-column))
7491; org-table-last-column-widths)
7492; (- (match-end 1) (match-beginning 1)))
7493; (setq org-table-may-need-update t))))
7494 7775
7495(defun org-delete-backward-char (N) 7776(defun org-delete-backward-char (N)
7496 "Like `delete-backward-char', insert whitespace at field end in tables. 7777 "Like `delete-backward-char', insert whitespace at field end in tables.
@@ -7769,7 +8050,7 @@ the automatic table editor has been turned off."
7769 ["Next row" org-return (org-at-table-p)] 8050 ["Next row" org-return (org-at-table-p)]
7770 "--" 8051 "--"
7771 ["Blank field" org-table-blank-field (org-at-table-p)] 8052 ["Blank field" org-table-blank-field (org-at-table-p)]
7772 ["Copy field from above" org-table-copy-from-above (org-at-table-p)] 8053 ["Copy field from above" org-table-copy-down (org-at-table-p)]
7773 "--" 8054 "--"
7774 ("Column" 8055 ("Column"
7775 ["Move column left" org-metaleft (org-at-table-p)] 8056 ["Move column left" org-metaleft (org-at-table-p)]
@@ -7807,8 +8088,10 @@ the automatic table editor has been turned off."
7807 "--" 8088 "--"
7808 ("Export" 8089 ("Export"
7809 ["ASCII" org-export-as-ascii t] 8090 ["ASCII" org-export-as-ascii t]
8091 ["Extract visible text" org-export-copy-visible t]
7810 ["HTML" org-export-as-html t] 8092 ["HTML" org-export-as-html t]
7811 ["HTML, and open" org-export-as-html-and-open t] 8093 ["HTML, and open" org-export-as-html-and-open t]
8094 ["OPML" org-export-as-opml nil]
7812 "--" 8095 "--"
7813 ["Option template" org-insert-export-options-template t] 8096 ["Option template" org-insert-export-options-template t]
7814 ["Toggle fixed width" org-toggle-fixed-width-section t]) 8097 ["Toggle fixed width" org-toggle-fixed-width-section t])
@@ -8098,3 +8381,5 @@ When ENTRY is non-nil, show the entire entry."
8098 8381
8099;;; org.el ends here 8382;;; org.el ends here
8100 8383
8384
8385
diff --git a/lisp/textmodes/refbib.el b/lisp/textmodes/refbib.el
index 5c9e6c1c6dc..dedad3b1aa9 100644
--- a/lisp/textmodes/refbib.el
+++ b/lisp/textmodes/refbib.el
@@ -1,6 +1,6 @@
1;;; refbib.el --- convert refer-style references to ones usable by Latex bib 1;;; refbib.el --- convert refer-style references to ones usable by Latex bib
2 2
3;; Copyright (C) 1989 Free Software Foundation, Inc. 3;; Copyright (C) 1989, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Henry Kautz <kautz@research.att.com> 5;; Author: Henry Kautz <kautz@research.att.com>
6;; Keywords: bib, tex 6;; Keywords: bib, tex
@@ -35,7 +35,7 @@
35;; 9/88, created H.Kautz 35;; 9/88, created H.Kautz
36;; modified 1/19/89, allow books with editor but no author; 36;; modified 1/19/89, allow books with editor but no author;
37;; added %O ordering field; 37;; added %O ordering field;
38;; appended illegal multiple fields, instead of 38;; appended invalid multiple fields, instead of
39;; discarding; 39;; discarding;
40;; added rule, a tech report whose %R number 40;; added rule, a tech report whose %R number
41;; contains "ISBN" is really a book 41;; contains "ISBN" is really a book
@@ -292,7 +292,7 @@ title if CAPITALIZE is true. Returns value of VAR."
292 (setq val item) 292 (setq val item)
293 (if unique 293 (if unique
294 (progn 294 (progn
295 (r2b-warning "*Illegal multiple field %s %s" field item) 295 (r2b-warning "*Invalid multiple field %s %s" field item)
296 (setq val (concat val "\n" item)) 296 (setq val (concat val "\n" item))
297 ) 297 )
298 (setq val (concat val "\n\t\tand " item)) 298 (setq val (concat val "\n\t\tand " item))
diff --git a/lisp/textmodes/refer.el b/lisp/textmodes/refer.el
index 1c77a8f4b36..2e26e2d3da6 100644
--- a/lisp/textmodes/refer.el
+++ b/lisp/textmodes/refer.el
@@ -1,6 +1,6 @@
1;;; refer.el --- look up references in bibliography files 1;;; refer.el --- look up references in bibliography files
2 2
3;; Copyright (C) 1992, 1996, 2001, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1992, 1996, 2001, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Ashwin Ram <ashwin@cc.gatech.edu> 5;; Author: Ashwin Ram <ashwin@cc.gatech.edu>
6;; Maintainer: Gernot Heiser <gernot@acm.org> 6;; Maintainer: Gernot Heiser <gernot@acm.org>
@@ -388,7 +388,7 @@ found on the last refer-find-entry or refer-find-next-entry."
388 (eq refer-bib-directory 'bibinputs))) 388 (eq refer-bib-directory 'bibinputs)))
389 (refer-expand-files refer-bib-files dir-list)) 389 (refer-expand-files refer-bib-files dir-list))
390 ((listp refer-bib-files) refer-bib-files) 390 ((listp refer-bib-files) refer-bib-files)
391 (t (error "Illegal value for refer-bib-files: %s" 391 (t (error "Invalid value for refer-bib-files: %s"
392 refer-bib-files))))) 392 refer-bib-files)))))
393 (if (or (eq refer-bib-directory 'texinputs) 393 (if (or (eq refer-bib-directory 'texinputs)
394 (eq refer-bib-directory 'bibinputs)) 394 (eq refer-bib-directory 'bibinputs))
diff --git a/lisp/textmodes/reftex-cite.el b/lisp/textmodes/reftex-cite.el
index bfe2cd8282b..f12d01716fe 100644
--- a/lisp/textmodes/reftex-cite.el
+++ b/lisp/textmodes/reftex-cite.el
@@ -1,5 +1,6 @@
1;;; reftex-cite.el --- creating citations with RefTeX 1;;; reftex-cite.el --- creating citations with RefTeX
2;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. 2;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005
3;; Free Software Foundation, Inc.
3 4
4;; Author: Carsten Dominik <dominik@science.uva.nl> 5;; Author: Carsten Dominik <dominik@science.uva.nl>
5;; Version: 4.26 6;; Version: 4.26
@@ -982,7 +983,7 @@ While entering the regexp, completion on knows citation keys is possible.
982 983
983 (if (and reftex-comment-citations 984 (if (and reftex-comment-citations
984 (string-match "%l" reftex-cite-comment-format)) 985 (string-match "%l" reftex-cite-comment-format))
985 (error "reftex-cite-comment-format contains illegal %%l")) 986 (error "reftex-cite-comment-format contains invalid %%l"))
986 987
987 (while (string-match 988 (while (string-match
988 "\\(\\`\\|[^%]\\)\\(\\(%\\([0-9]*\\)\\([a-zA-Z]\\)\\)[.,;: ]*\\)" 989 "\\(\\`\\|[^%]\\)\\(\\(%\\([0-9]*\\)\\([a-zA-Z]\\)\\)[.,;: ]*\\)"
diff --git a/lisp/textmodes/reftex-index.el b/lisp/textmodes/reftex-index.el
index cb02f2e056f..8fada9c4930 100644
--- a/lisp/textmodes/reftex-index.el
+++ b/lisp/textmodes/reftex-index.el
@@ -1,5 +1,6 @@
1;;; reftex-index.el --- index support with RefTeX 1;;; reftex-index.el --- index support with RefTeX
2;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. 2;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005
3;; Free Software Foundation, Inc.
3 4
4;; Author: Carsten Dominik <dominik@science.uva.nl> 5;; Author: Carsten Dominik <dominik@science.uva.nl>
5;; Version: 4.26 6;; Version: 4.26
@@ -928,7 +929,7 @@ When index is restricted, select the previous section as restriction criterion."
928 (error "Not changed")) 929 (error "Not changed"))
929 ((string= npart "") 930 ((string= npart "")
930 (if dont-allow-empty 931 (if dont-allow-empty
931 (error "Illegal value") 932 (error "Invalid value")
932 (setf (nth n analyze) npart))) 933 (setf (nth n analyze) npart)))
933 (t (setf (nth n analyze) (concat initial npart)))) 934 (t (setf (nth n analyze) (concat initial npart))))
934 (setq new (apply 'concat analyze)) 935 (setq new (apply 'concat analyze))
@@ -1385,7 +1386,7 @@ match, the user will be asked to confirm the replacement."
1385 (file-regular-p reftex-index-phrases-restrict-file)) 1386 (file-regular-p reftex-index-phrases-restrict-file))
1386 (list reftex-index-phrases-restrict-file)) 1387 (list reftex-index-phrases-restrict-file))
1387 ((stringp reftex-index-phrases-restrict-file) 1388 ((stringp reftex-index-phrases-restrict-file)
1388 (error "Illegal restriction file %s" 1389 (error "Invalid restriction file %s"
1389 reftex-index-phrases-restrict-file)) 1390 reftex-index-phrases-restrict-file))
1390 (t reftex-index-phrases-files))) 1391 (t reftex-index-phrases-files)))
1391 (as-words reftex-index-phrases-search-whole-words)) 1392 (as-words reftex-index-phrases-search-whole-words))
diff --git a/lisp/textmodes/reftex-parse.el b/lisp/textmodes/reftex-parse.el
index 630c7101725..ce1e3d77d72 100644
--- a/lisp/textmodes/reftex-parse.el
+++ b/lisp/textmodes/reftex-parse.el
@@ -1,5 +1,6 @@
1;;; reftex-parse.el --- parser functions for RefTeX 1;;; reftex-parse.el --- parser functions for RefTeX
2;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. 2;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005
3;; Free Software Foundation, Inc.
3 4
4;; Author: Carsten Dominik <dominik@science.uva.nl> 5;; Author: Carsten Dominik <dominik@science.uva.nl>
5;; Version: 4.26 6;; Version: 4.26
@@ -544,7 +545,7 @@ of master file."
544 (funcall parse env) 545 (funcall parse env)
545 (error (format "HOOK ERROR: %s" (cdr error-var)))))) 546 (error (format "HOOK ERROR: %s" (cdr error-var))))))
546 (t 547 (t
547 "ILLEGAL VALUE OF PARSE")))) 548 "INVALID VALUE OF PARSE"))))
548 549
549(defun reftex-where-am-I () 550(defun reftex-where-am-I ()
550 ;; Return the docstruct entry above point. Actually returns a cons 551 ;; Return the docstruct entry above point. Actually returns a cons
diff --git a/lisp/textmodes/reftex-ref.el b/lisp/textmodes/reftex-ref.el
index 43095e2d684..6afbb77767c 100644
--- a/lisp/textmodes/reftex-ref.el
+++ b/lisp/textmodes/reftex-ref.el
@@ -1,5 +1,6 @@
1;;; reftex-ref.el --- code to create labels and references with RefTeX 1;;; reftex-ref.el --- code to create labels and references with RefTeX
2;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. 2;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005
3;; Free Software Foundation, Inc.
3 4
4;; Author: Carsten Dominik <dominik@science.uva.nl> 5;; Author: Carsten Dominik <dominik@science.uva.nl>
5;; Version: 4.26 6;; Version: 4.26
@@ -172,7 +173,7 @@ This function is controlled by the settings of reftex-insert-label-flags."
172 (nth 2 (reftex-label-info " " nil nil t)))) 173 (nth 2 (reftex-label-info " " nil nil t))))
173 ;; Catch the cases where the is actually no context available. 174 ;; Catch the cases where the is actually no context available.
174 (if (or (string-match "NO MATCH FOR CONTEXT REGEXP" default) 175 (if (or (string-match "NO MATCH FOR CONTEXT REGEXP" default)
175 (string-match "ILLEGAL VALUE OF PARSE" default) 176 (string-match "INVALID VALUE OF PARSE" default)
176 (string-match "SECTION HEADING NOT FOUND" default) 177 (string-match "SECTION HEADING NOT FOUND" default)
177 (string-match "HOOK ERROR" default) 178 (string-match "HOOK ERROR" default)
178 (string-match "^[ \t]*$" default)) 179 (string-match "^[ \t]*$" default))
@@ -217,7 +218,7 @@ This function is controlled by the settings of reftex-insert-label-flags."
217 218
218 ;; Test if label contains strange characters 219 ;; Test if label contains strange characters
219 ((string-match reftex-label-illegal-re label) 220 ((string-match reftex-label-illegal-re label)
220 (message "Label \"%s\" contains illegal characters" label) 221 (message "Label \"%s\" contains invalid characters" label)
221 (ding) 222 (ding)
222 (sit-for 2)) 223 (sit-for 2))
223 224
diff --git a/lisp/textmodes/reftex-vars.el b/lisp/textmodes/reftex-vars.el
index a7c0cb1c1ad..b2ca7bed250 100644
--- a/lisp/textmodes/reftex-vars.el
+++ b/lisp/textmodes/reftex-vars.el
@@ -1,5 +1,6 @@
1;;; reftex-vars.el --- configuration variables for RefTeX 1;;; reftex-vars.el --- configuration variables for RefTeX
2;; Copyright (c) 1997, 1998, 1999, 2003, 2004 Free Software Foundation, Inc. 2;; Copyright (c) 1997, 1998, 1999, 2003, 2004, 2005
3;; Free Software Foundation, Inc.
3 4
4;; Author: Carsten Dominik <dominik@science.uva.nl> 5;; Author: Carsten Dominik <dominik@science.uva.nl>
5;; Version: 4.26 6;; Version: 4.26
@@ -747,7 +748,7 @@ And here is the setup for RefTeX:
747 748
748If DERIVE is t, RefTeX will try to derive a sensible label from context. 749If DERIVE is t, RefTeX will try to derive a sensible label from context.
749A section label for example will be derived from the section heading. 750A section label for example will be derived from the section heading.
750The conversion of the context to a legal label is governed by the 751The conversion of the context to a valid label is governed by the
751specifications given in `reftex-derive-label-parameters'. 752specifications given in `reftex-derive-label-parameters'.
752If RefTeX fails to derive a label, it will prompt the user. 753If RefTeX fails to derive a label, it will prompt the user.
753If DERIVE is nil, the label generated will consist of the prefix and a 754If DERIVE is nil, the label generated will consist of the prefix and a
@@ -790,7 +791,7 @@ e (equation), n (footnote), N (endnote), plus any definitions in
790 (string :tag "selected label types" "")))) 791 (string :tag "selected label types" ""))))
791 792
792(defcustom reftex-string-to-label-function 'reftex-string-to-label 793(defcustom reftex-string-to-label-function 'reftex-string-to-label
793 "Function to turn an arbitrary string into a legal label. 794 "Function to turn an arbitrary string into a valid label.
794RefTeX's default function uses the variable `reftex-derive-label-parameters'." 795RefTeX's default function uses the variable `reftex-derive-label-parameters'."
795 :group 'reftex-making-and-inserting-labels 796 :group 'reftex-making-and-inserting-labels
796 :type 'symbol) 797 :type 'symbol)
@@ -798,7 +799,7 @@ RefTeX's default function uses the variable `reftex-derive-label-parameters'."
798(defcustom reftex-translate-to-ascii-function 'reftex-latin1-to-ascii 799(defcustom reftex-translate-to-ascii-function 'reftex-latin1-to-ascii
799 "Filter function which will process a context string before it is used 800 "Filter function which will process a context string before it is used
800to derive a label from it. The intended application is to convert ISO or 801to derive a label from it. The intended application is to convert ISO or
801Mule characters into something legal in labels. The default function 802Mule characters into something valid in labels. The default function
802removes the accents from Latin-1 characters. X-Symbol (>=2.6) sets this 803removes the accents from Latin-1 characters. X-Symbol (>=2.6) sets this
803variable to the much more general `x-symbol-translate-to-ascii'." 804variable to the much more general `x-symbol-translate-to-ascii'."
804 :group 'reftex-making-and-inserting-labels 805 :group 'reftex-making-and-inserting-labels
@@ -811,8 +812,8 @@ This variable is a list of the following items.
811 812
812NWORDS Number of words to use. 813NWORDS Number of words to use.
813MAXCHAR Maximum number of characters in a label string. 814MAXCHAR Maximum number of characters in a label string.
814ILLEGAL nil: Throw away any words containing characters illegal in labels. 815INVALID nil: Throw away any words containing characters invalid in labels.
815 t: Throw away only the illegal characters, not the whole word. 816 t: Throw away only the invalid characters, not the whole word.
816ABBREV nil: Never abbreviate words. 817ABBREV nil: Never abbreviate words.
817 t: Always abbreviate words (see `reftex-abbrev-parameters'). 818 t: Always abbreviate words (see `reftex-abbrev-parameters').
818 not t and not nil: Abbreviate words if necessary to shorten 819 not t and not nil: Abbreviate words if necessary to shorten
@@ -823,7 +824,7 @@ DOWNCASE t: Downcase words before using them."
823 :group 'reftex-making-and-inserting-labels 824 :group 'reftex-making-and-inserting-labels
824 :type '(list (integer :tag "Number of words " 3) 825 :type '(list (integer :tag "Number of words " 3)
825 (integer :tag "Maximum label length " 20) 826 (integer :tag "Maximum label length " 20)
826 (choice :tag "Illegal characters in words" 827 (choice :tag "Invalid characters in words"
827 (const :tag "throw away entire word" nil) 828 (const :tag "throw away entire word" nil)
828 (const :tag "throw away single chars" t)) 829 (const :tag "throw away single chars" t))
829 (choice :tag "Abbreviate words " 830 (choice :tag "Abbreviate words "
@@ -837,7 +838,7 @@ DOWNCASE t: Downcase words before using them."
837 (option (boolean :tag "Downcase words ")))) 838 (option (boolean :tag "Downcase words "))))
838 839
839(defcustom reftex-label-illegal-re "[^-a-zA-Z0-9_+=:;,.]" 840(defcustom reftex-label-illegal-re "[^-a-zA-Z0-9_+=:;,.]"
840 "Regexp matching characters not legal in labels." 841 "Regexp matching characters not valid in labels."
841 :group 'reftex-making-and-inserting-labels 842 :group 'reftex-making-and-inserting-labels
842 :type '(regexp :tag "Regular Expression")) 843 :type '(regexp :tag "Regular Expression"))
843 844
@@ -1226,7 +1227,7 @@ phrase buffer.
1226 1227
1227The final entry may also be a symbol if this entry has a association 1228The final entry may also be a symbol if this entry has a association
1228in the variable `reftex-index-macros-builtin' to specify the main 1229in the variable `reftex-index-macros-builtin' to specify the main
1229indexing package you are using. Legal values are currently 1230indexing package you are using. Valid values are currently
1230default The LaTeX default - unnecessary to specify this one 1231default The LaTeX default - unnecessary to specify this one
1231multind The multind.sty package 1232multind The multind.sty package
1232index The index.sty package 1233index The index.sty package
@@ -1281,7 +1282,7 @@ DEFAULT-TAG: This is the tag to be used if the macro requires a TAG argument.
1281When working with multiple indexes, RefTeX queries for an index tag when 1282When working with multiple indexes, RefTeX queries for an index tag when
1282creating index entries or displaying a specific index. This variable controls 1283creating index entries or displaying a specific index. This variable controls
1283the default offered for these queries. The default can be selected with RET 1284the default offered for these queries. The default can be selected with RET
1284during selection or completion. Legal values of this variable are: 1285during selection or completion. Valid values of this variable are:
1285 1286
1286nil Do not provide a default index 1287nil Do not provide a default index
1287\"tag\" The default index tag given as a string, e.g. \"idx\". 1288\"tag\" The default index tag given as a string, e.g. \"idx\".
@@ -1526,9 +1527,9 @@ This is a list of items, each item is like: (TYPE . (DEF-EXT OTHER-EXT ...))
1526 1527
1527TYPE: File type like \"bib\" or \"tex\". 1528TYPE: File type like \"bib\" or \"tex\".
1528DEF-EXT: The default extension for that file type, like \".tex\" or \".bib\". 1529DEF-EXT: The default extension for that file type, like \".tex\" or \".bib\".
1529OTHER-EXT: Any number of other legal extensions for this file type. 1530OTHER-EXT: Any number of other valid extensions for this file type.
1530 1531
1531When a files is searched and it does not have any of the legal extensions, 1532When a files is searched and it does not have any of the valid extensions,
1532we try the default extension first, and then the naked file name. 1533we try the default extension first, and then the naked file name.
1533 1534
1534If you are using AUCTeX, you also need to add new extensions to 1535If you are using AUCTeX, you also need to add new extensions to
diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el
index 49485c24725..865217dab08 100644
--- a/lisp/textmodes/reftex.el
+++ b/lisp/textmodes/reftex.el
@@ -1,5 +1,6 @@
1;;; reftex.el --- minor mode for doing \label, \ref, \cite, \index in LaTeX 1;;; reftex.el --- minor mode for doing \label, \ref, \cite, \index in LaTeX
2;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. 2;; Copyright (c) 1997, 1998, 1999, 2000, 2003, 2004, 2005
3;; Free Software Foundation, Inc.
3 4
4;; Author: Carsten Dominik <dominik@science.uva.nl> 5;; Author: Carsten Dominik <dominik@science.uva.nl>
5;; Version: 4.26 6;; Version: 4.26
@@ -1416,7 +1417,7 @@ Valid actions are: readable, restore, read, kill, write."
1416 ((= key ?\C-i) 1417 ((= key ?\C-i)
1417 (setq prefix (completing-read "Prefix: " xr-alist nil t)) 1418 (setq prefix (completing-read "Prefix: " xr-alist nil t))
1418 (- len (length (memq (assoc prefix xr-alist) xr-alist)))) 1419 (- len (length (memq (assoc prefix xr-alist) xr-alist))))
1419 (t (error "Illegal document selection [%c]" key))))))))) 1420 (t (error "Invalid document selection [%c]" key)))))))))
1420 1421
1421;;; ========================================================================= 1422;;; =========================================================================
1422;;; 1423;;;
@@ -1424,7 +1425,7 @@ Valid actions are: readable, restore, read, kill, write."
1424 1425
1425(defun reftex-locate-file (file type master-dir &optional die) 1426(defun reftex-locate-file (file type master-dir &optional die)
1426 "Find FILE of type TYPE in MASTER-DIR or on the path associcted with TYPE. 1427 "Find FILE of type TYPE in MASTER-DIR or on the path associcted with TYPE.
1427If the file does not have any of the legal extensions for TYPE, 1428If the file does not have any of the valid extensions for TYPE,
1428try first the default extension and only then the naked file name. 1429try first the default extension and only then the naked file name.
1429When DIE is non-nil, throw an error if file not found." 1430When DIE is non-nil, throw an error if file not found."
1430 (let* ((rec-values (if reftex-search-unrecursed-path-first '(nil t) '(t))) 1431 (let* ((rec-values (if reftex-search-unrecursed-path-first '(nil t) '(t)))
@@ -2167,17 +2168,17 @@ Works on both Emacs and XEmacs."
2167 (reftex-convert-string string "[-~ \t\n\r,;]" nil t t 2168 (reftex-convert-string string "[-~ \t\n\r,;]" nil t t
2168 5 40 nil 1 " " (nth 5 reftex-derive-label-parameters))) 2169 5 40 nil 1 " " (nth 5 reftex-derive-label-parameters)))
2169 2170
2170(defun reftex-convert-string (string split-re illegal-re dot keep-fp 2171(defun reftex-convert-string (string split-re invalid-re dot keep-fp
2171 nwords maxchar illegal abbrev sep 2172 nwords maxchar invalid abbrev sep
2172 ignore-words &optional downcase) 2173 ignore-words &optional downcase)
2173 "Convert a string (a sentence) to something shorter. 2174 "Convert a string (a sentence) to something shorter.
2174SPLIT-RE is the regular expression used to split the string into words. 2175SPLIT-RE is the regular expression used to split the string into words.
2175ILLEGAL-RE matches characters which are illegal in the final string. 2176INVALID-RE matches characters which are invalid in the final string.
2176DOT t means add dots to abbreviated words. 2177DOT t means add dots to abbreviated words.
2177KEEP-FP t means to keep a final punctuation when applicable. 2178KEEP-FP t means to keep a final punctuation when applicable.
2178NWORDS Number of words to use. 2179NWORDS Number of words to use.
2179MAXCHAR Maximum number of characters in the final string. 2180MAXCHAR Maximum number of characters in the final string.
2180ILLEGAL nil: Throw away any words containing stuff matched with ILLEGAL-RE. 2181INVALID nil: Throw away any words containing stuff matched with INVALID-RE.
2181 t: Throw away only the matched part, not the whole word. 2182 t: Throw away only the matched part, not the whole word.
2182ABBREV nil: Never abbreviate words. 2183ABBREV nil: Never abbreviate words.
2183 t: Always abbreviate words (see `reftex-abbrev-parameters'). 2184 t: Always abbreviate words (see `reftex-abbrev-parameters').
@@ -2187,7 +2188,7 @@ SEP String separating different words in the output string.
2187IGNORE-WORDS List of words which should be removed from the string." 2188IGNORE-WORDS List of words which should be removed from the string."
2188 2189
2189 (let* ((words0 (split-string string (or split-re "[ \t\n\r]"))) 2190 (let* ((words0 (split-string string (or split-re "[ \t\n\r]")))
2190 (reftex-label-illegal-re (or illegal-re "\000")) 2191 (reftex-label-illegal-re (or invalid-re "\000"))
2191 (abbrev-re (concat 2192 (abbrev-re (concat
2192 "\\`\\(" 2193 "\\`\\("
2193 (make-string (nth 0 reftex-abbrev-parameters) ?.) 2194 (make-string (nth 0 reftex-abbrev-parameters) ?.)
@@ -2203,7 +2204,7 @@ IGNORE-WORDS List of words which should be removed from the string."
2203 (cond 2204 (cond
2204 ((member (downcase word) ignore-words)) 2205 ((member (downcase word) ignore-words))
2205 ((string-match reftex-label-illegal-re word) 2206 ((string-match reftex-label-illegal-re word)
2206 (when illegal 2207 (when invalid
2207 (while (string-match reftex-label-illegal-re word) 2208 (while (string-match reftex-label-illegal-re word)
2208 (setq word (replace-match "" nil nil word))) 2209 (setq word (replace-match "" nil nil word)))
2209 (push word words))) 2210 (push word words)))
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index b97b400895d..34d39807d2d 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -1802,7 +1802,7 @@ have <h1>Very Major Headlines</h1> through <h6>Very Minor Headlines</h6>
1802 1802
1803<p>Paragraphs only need an opening tag. Line breaks and multiple spaces are 1803<p>Paragraphs only need an opening tag. Line breaks and multiple spaces are
1804ignored unless the text is <pre>preformatted.</pre> Text can be marked as 1804ignored unless the text is <pre>preformatted.</pre> Text can be marked as
1805<b>bold</b>, <i>italic</i> or <u>underlined</u> using the normal M-g or 1805<b>bold</b>, <i>italic</i> or <u>underlined</u> using the normal M-o or
1806Edit/Text Properties/Face commands. 1806Edit/Text Properties/Face commands.
1807 1807
1808Pages can have <a name=\"SOMENAME\">named points</a> and can link other points 1808Pages can have <a name=\"SOMENAME\">named points</a> and can link other points
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index cf8d642a43e..0c83406318a 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -1562,8 +1562,9 @@ Return the process in which TeX is running."
1562 (concat 1562 (concat
1563 (if file 1563 (if file
1564 (if star (concat (substring cmd 0 star) 1564 (if star (concat (substring cmd 0 star)
1565 file (substring cmd (1+ star))) 1565 (shell-quote-argument file)
1566 (concat cmd " " file)) 1566 (substring cmd (1+ star)))
1567 (concat cmd " " (shell-quote-argument file)))
1567 cmd) 1568 cmd)
1568 (if background "&" "")))) 1569 (if background "&" ""))))
1569 ;; Switch to buffer before checking for subproc output in it. 1570 ;; Switch to buffer before checking for subproc output in it.
@@ -1886,8 +1887,8 @@ FILE is typically the output DVI or PDF file."
1886 (prog1 (file-name-directory (expand-file-name file)) 1887 (prog1 (file-name-directory (expand-file-name file))
1887 (setq file (file-name-nondirectory file)))) 1888 (setq file (file-name-nondirectory file))))
1888 (root (file-name-sans-extension file)) 1889 (root (file-name-sans-extension file))
1889 (fspec (list (cons ?r (comint-quote-filename root)) 1890 (fspec (list (cons ?r (shell-quote-argument root))
1890 (cons ?f (comint-quote-filename file)))) 1891 (cons ?f (shell-quote-argument file))))
1891 (default (tex-compile-default fspec))) 1892 (default (tex-compile-default fspec)))
1892 (list default-directory 1893 (list default-directory
1893 (completing-read 1894 (completing-read
@@ -1908,14 +1909,14 @@ FILE is typically the output DVI or PDF file."
1908 (compile-command 1909 (compile-command
1909 (if star 1910 (if star
1910 (concat (substring command 0 star) 1911 (concat (substring command 0 star)
1911 (comint-quote-filename file) 1912 (shell-quote-argument file)
1912 (substring command (1+ star))) 1913 (substring command (1+ star)))
1913 (concat command " " 1914 (concat command " "
1914 tex-start-options 1915 tex-start-options
1915 (if (< 0 (length tex-start-commands)) 1916 (if (< 0 (length tex-start-commands))
1916 (concat 1917 (concat
1917 (shell-quote-argument tex-start-commands) " ")) 1918 (shell-quote-argument tex-start-commands) " "))
1918 (comint-quote-filename file))))) 1919 (shell-quote-argument file)))))
1919 (tex-send-tex-command compile-command dir))) 1920 (tex-send-tex-command compile-command dir)))
1920 1921
1921(defun tex-send-tex-command (cmd &optional dir) 1922(defun tex-send-tex-command (cmd &optional dir)
diff --git a/lisp/thumbs.el b/lisp/thumbs.el
index 5ceb4f2c148..fd3cb13de98 100644
--- a/lisp/thumbs.el
+++ b/lisp/thumbs.el
@@ -1,6 +1,6 @@
1;;; thumbs.el --- Thumbnails previewer for images files 1;;; thumbs.el --- Thumbnails previewer for images files
2 2
3;; Copyright 2004 Free Software Foundation, Inc 3;; Copyright 2004, 2005 Free Software Foundation, Inc
4 4
5;; Author: Jean-Philippe Theberge <jphiltheberge@videotron.ca> 5;; Author: Jean-Philippe Theberge <jphiltheberge@videotron.ca>
6;; Keywords: Multimedia 6;; Keywords: Multimedia
@@ -630,7 +630,7 @@ Open another window."
630 630
631(defun thumbs-modify-image (action &optional arg) 631(defun thumbs-modify-image (action &optional arg)
632 "Call convert to do ACTION on image with argument ARG. 632 "Call convert to do ACTION on image with argument ARG.
633ACTION and ARG should be legal convert command." 633ACTION and ARG should be a valid convert command."
634 (interactive "sAction: \nsValue: ") 634 (interactive "sAction: \nsValue: ")
635 ;; cleaning of old temp file 635 ;; cleaning of old temp file
636 (mapc 'delete-file 636 (mapc 'delete-file
diff --git a/lisp/tooltip.el b/lisp/tooltip.el
index 6ed93a0e99e..e6a85439166 100644
--- a/lisp/tooltip.el
+++ b/lisp/tooltip.el
@@ -130,7 +130,7 @@ position to pop up the tooltip."
130 130
131(defcustom tooltip-gud-display 131(defcustom tooltip-gud-display
132 '((eq (tooltip-event-buffer tooltip-gud-event) 132 '((eq (tooltip-event-buffer tooltip-gud-event)
133 (marker-buffer overlay-arrow-position))) 133 (marker-buffer gud-overlay-arrow-position)))
134 "List of forms determining where GUD tooltips are displayed. 134 "List of forms determining where GUD tooltips are displayed.
135 135
136Forms in the list are combined with AND. The default is to display 136Forms in the list are combined with AND. The default is to display
diff --git a/lisp/vc-cvs.el b/lisp/vc-cvs.el
index ec24282702b..1136ce565a8 100644
--- a/lisp/vc-cvs.el
+++ b/lisp/vc-cvs.el
@@ -1,6 +1,7 @@
1;;; vc-cvs.el --- non-resident support for CVS version-control 1;;; vc-cvs.el --- non-resident support for CVS version-control
2 2
3;; Copyright (C) 1995,98,99,2000,2001,02,2003 Free Software Foundation, Inc. 3;; Copyright (C) 1995,98,99,2000,2001,02,2003, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Author: FSF (see vc.el for full credits) 6;; Author: FSF (see vc.el for full credits)
6;; Maintainer: Andre Spiegel <spiegel@gnu.org> 7;; Maintainer: Andre Spiegel <spiegel@gnu.org>
@@ -745,7 +746,7 @@ is `local'.
745The default METHOD for a CVS root of the form 746The default METHOD for a CVS root of the form
746 [USER@]HOSTNAME:/path/to/repository 747 [USER@]HOSTNAME:/path/to/repository
747is `ext'. 748is `ext'.
748For an empty string, nil is returned (illegal CVS root)." 749For an empty string, nil is returned (invalid CVS root)."
749 ;; Split CVS root into colon separated fields (0-4). 750 ;; Split CVS root into colon separated fields (0-4).
750 ;; The `x:' makes sure, that leading colons are not lost; 751 ;; The `x:' makes sure, that leading colons are not lost;
751 ;; `HOST:/PATH' is then different from `:METHOD:/PATH'. 752 ;; `HOST:/PATH' is then different from `:METHOD:/PATH'.
diff --git a/lisp/vc.el b/lisp/vc.el
index 2e241e67f48..ce4cb2d36c8 100644
--- a/lisp/vc.el
+++ b/lisp/vc.el
@@ -1,7 +1,7 @@
1;;; vc.el --- drive a version-control system from within Emacs 1;;; vc.el --- drive a version-control system from within Emacs
2 2
3;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 3;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998,
4;; 2000, 2001, 2003, 2004 Free Software Foundation, Inc. 4;; 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
5 5
6;; Author: FSF (see below for full credits) 6;; Author: FSF (see below for full credits)
7;; Maintainer: Andre Spiegel <spiegel@gnu.org> 7;; Maintainer: Andre Spiegel <spiegel@gnu.org>
@@ -962,8 +962,10 @@ that is inserted into the command line before the filename."
962 ;; start-process does not support remote execution 962 ;; start-process does not support remote execution
963 (setq okstatus nil)) 963 (setq okstatus nil))
964 (if (eq okstatus 'async) 964 (if (eq okstatus 'async)
965 (let ((proc (apply 'start-process command (current-buffer) command 965 (let ((proc
966 squeezed))) 966 (let ((process-connection-type nil))
967 (apply 'start-process command (current-buffer) command
968 squeezed))))
967 (unless (active-minibuffer-window) 969 (unless (active-minibuffer-window)
968 (message "Running %s in the background..." command)) 970 (message "Running %s in the background..." command))
969 ;;(set-process-sentinel proc (lambda (p msg) (delete-process p))) 971 ;;(set-process-sentinel proc (lambda (p msg) (delete-process p)))
diff --git a/lisp/wdired.el b/lisp/wdired.el
index 92d7a81627a..a4119343600 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -330,7 +330,8 @@ See `wdired-mode'."
330 (set-buffer-modified-p nil) 330 (set-buffer-modified-p nil)
331 (setq buffer-undo-list nil) 331 (setq buffer-undo-list nil)
332 (run-hooks 'wdired-mode-hook) 332 (run-hooks 'wdired-mode-hook)
333 (message (substitute-command-keys "Press \\[wdired-finish-edit] when finished"))) 333 (message (substitute-command-keys "Press \\[wdired-finish-edit] when finished \
334or \\[wdired-abort-changes] to abort changes")))
334 335
335 336
336;; Protect the buffer so only the filenames can be changed, and put 337;; Protect the buffer so only the filenames can be changed, and put
diff --git a/lisp/window.el b/lisp/window.el
index 5768436eaae..b4fd664a43c 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -397,20 +397,13 @@ lines than are actually needed in the case where some error may be present."
397 397
398(defun window-buffer-height (window) 398(defun window-buffer-height (window)
399 "Return the height (in screen lines) of the buffer that WINDOW is displaying." 399 "Return the height (in screen lines) of the buffer that WINDOW is displaying."
400 (save-excursion 400 (with-current-buffer (window-buffer window)
401 (set-buffer (window-buffer window)) 401 (max 1
402 (goto-char (point-min)) 402 (count-screen-lines (point-min) (point-max)
403 (let ((ignore-final-newline 403 ;; If buffer ends with a newline, ignore it when
404 ;; If buffer ends with a newline, ignore it when counting height 404 ;; counting height unless point is after it.
405 ;; unless point is after it. 405 (eobp)
406 (and (not (eobp)) (eq ?\n (char-after (1- (point-max))))))) 406 window))))
407 (+ 1 (nth 2 (compute-motion (point-min)
408 '(0 . 0)
409 (- (point-max) (if ignore-final-newline 1 0))
410 (cons 0 100000000)
411 nil
412 nil
413 window))))))
414 407
415(defun count-screen-lines (&optional beg end count-final-newline window) 408(defun count-screen-lines (&optional beg end count-final-newline window)
416 "Return the number of screen lines in the region. 409 "Return the number of screen lines in the region.
diff --git a/lispref/ChangeLog b/lispref/ChangeLog
index 268304e5d4c..7f22ad2e485 100644
--- a/lispref/ChangeLog
+++ b/lispref/ChangeLog
@@ -1,3 +1,53 @@
12005-03-29 Chong Yidong <cyd@stupidchicken.com>
2
3 * text.texi (Buffer Contents): Add filter-buffer-substring and
4 buffer-substring-filters.
5
62005-03-26 Chong Yidong <cyd@stupidchicken.com>
7
8 * anti.texi (Antinews): Mention `G' interactive code.
9
10 * tips.texi (Compilation Tips): Mention benchmark.el.
11
122005-03-27 Luc Teirlinck <teirllm@auburn.edu>
13
14 * modes.texi (Other Font Lock Variables): `font-lock-fontify-block'
15 is now bound to M-o M-o.
16
17 * keymaps.texi (Prefix Keys): `facemenu-keymap' is now on M-o.
18
192005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk>
20
21 * calendar.texi: Delete file (and move contents to emacs-xtra.texi
22 in the Emacs Manual).
23 * Makefile.in (srcs): Remove calendar.texi.
24 * makefile.w32-in (srcs): Remove calendar.texi.
25 * display.texi (Display): Change name of next node.
26 * os.texi (System In): Change name of previous node.
27 * elisp.texi (Top): Remove Calendar references.
28 * vol1.texi (Top): Remove Calendar references.
29 * vol2.texi (Top): Remove Calendar references.
30
312005-03-25 Richard M. Stallman <rms@gnu.org>
32
33 * display.texi (Standard Faces, Fringe Bitmaps, Customizing Bitmaps):
34 Cleanup previous change.
35
362005-03-25 Chong Yidong <cyd@stupidchicken.com>
37
38 * display.texi (Face Attributes): Faces earlier in an :inherit
39 list take precedence.
40 (Scroll Bars): Fix description of vertical-scroll-bars.
41 Document frame-current-scroll-bars and window-current-scroll-bars.
42
43 * markers.texi (The Mark): Document temporary Transient Mark mode.
44
45 * minibuf.texi (Reading File Names): Document
46 read-file-name-completion-ignore-case.
47
48 * positions.texi (Screen Lines): Document nil for width argument
49 to compute-motion.
50
12005-03-23 Kim F. Storm <storm@cua.dk> 512005-03-23 Kim F. Storm <storm@cua.dk>
2 52
3 * display.texi (Standard Faces): Other faces used in the fringe 53 * display.texi (Standard Faces): Other faces used in the fringe
diff --git a/lispref/Makefile.in b/lispref/Makefile.in
index 770ffd5769a..2fab86ab876 100644
--- a/lispref/Makefile.in
+++ b/lispref/Makefile.in
@@ -46,7 +46,6 @@ srcs = \
46 $(srcdir)/back.texi \ 46 $(srcdir)/back.texi \
47 $(srcdir)/backups.texi \ 47 $(srcdir)/backups.texi \
48 $(srcdir)/buffers.texi \ 48 $(srcdir)/buffers.texi \
49 $(srcdir)/calendar.texi \
50 $(srcdir)/commands.texi \ 49 $(srcdir)/commands.texi \
51 $(srcdir)/compile.texi \ 50 $(srcdir)/compile.texi \
52 $(srcdir)/control.texi \ 51 $(srcdir)/control.texi \
diff --git a/lispref/anti.texi b/lispref/anti.texi
index a744ddf421b..458409f2603 100644
--- a/lispref/anti.texi
+++ b/lispref/anti.texi
@@ -238,6 +238,10 @@ alists, obarrays, and functions.) In addition, the function
238@code{test-completion} is no longer available. 238@code{test-completion} is no longer available.
239 239
240@item 240@item
241The @samp{G} interactive code character is no longer supported.
242Use @samp{F} instead.
243
244@item
241Arbitrary Lisp functions can no longer be recorded into 245Arbitrary Lisp functions can no longer be recorded into
242@code{buffer-undo-list}. As a consequence, @code{yank-undo-function} 246@code{buffer-undo-list}. As a consequence, @code{yank-undo-function}
243is obsolete, and has been removed. 247is obsolete, and has been removed.
diff --git a/lispref/calendar.texi b/lispref/calendar.texi
deleted file mode 100644
index 5c63d6f9591..00000000000
--- a/lispref/calendar.texi
+++ /dev/null
@@ -1,996 +0,0 @@
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
3@c Copyright (C) 1990, 1991, 1992, 1993, 1995, 1998 Free Software Foundation, Inc.
4@c See the file elisp.texi for copying conditions.
5@node Calendar, System Interface, Display, Top
6@chapter Customizing the Calendar and Diary
7
8 There are many customizations that you can use to make the calendar and
9diary suit your personal tastes.
10
11@menu
12* Calendar Customizing:: Defaults you can set.
13* Holiday Customizing:: Defining your own holidays.
14* Date Display Format:: Changing the format.
15* Time Display Format:: Changing the format.
16* Daylight Savings:: Changing the default.
17* Diary Customizing:: Defaults you can set.
18* Hebrew/Islamic Entries:: How to obtain them.
19* Fancy Diary Display:: Enhancing the diary display, sorting entries,
20 using included diary files.
21* Sexp Diary Entries:: Fancy things you can do.
22* Appt Customizing:: Customizing appointment reminders.
23@end menu
24
25@node Calendar Customizing
26@section Customizing the Calendar
27@vindex view-diary-entries-initially
28
29 If you set the variable @code{view-diary-entries-initially} to
30@code{t}, calling up the calendar automatically displays the diary
31entries for the current date as well. The diary dates appear only if
32the current date is visible. If you add both of the following lines to
33your init file:@refill
34
35@example
36(setq view-diary-entries-initially t)
37(calendar)
38@end example
39
40@noindent
41this displays both the calendar and diary windows whenever you start Emacs.
42
43@vindex view-calendar-holidays-initially
44 Similarly, if you set the variable
45@code{view-calendar-holidays-initially} to @code{t}, entering the
46calendar automatically displays a list of holidays for the current
47three-month period. The holiday list appears in a separate
48window.
49
50@vindex mark-diary-entries-in-calendar
51 You can set the variable @code{mark-diary-entries-in-calendar} to
52@code{t} in order to mark any dates with diary entries. This takes
53effect whenever the calendar window contents are recomputed. There are
54two ways of marking these dates: by changing the face (@pxref{Faces}),
55or by placing a plus sign (@samp{+}) beside the date.
56
57@vindex mark-holidays-in-calendar
58 Similarly, setting the variable @code{mark-holidays-in-calendar} to
59@code{t} marks holiday dates, either with a change of face or with an
60asterisk (@samp{*}).
61
62@vindex calendar-holiday-marker
63@vindex diary-entry-marker
64 The variable @code{calendar-holiday-marker} specifies how to mark a
65date as being a holiday. Its value may be a single-character string
66to insert next to the date, or a face name to use for displaying the
67date. Likewise, the variable @code{diary-entry-marker} specifies how
68to mark a date that has diary entries. The calendar creates faces
69named @code{holiday-face} and @code{diary-face} for these purposes;
70those symbols are the default values of these variables.
71
72@vindex calendar-load-hook
73 The variable @code{calendar-load-hook} is a normal hook run when the
74calendar package is first loaded (before actually starting to display
75the calendar).
76
77@vindex initial-calendar-window-hook
78 Starting the calendar runs the normal hook
79@code{initial-calendar-window-hook}. Recomputation of the calendar
80display does not run this hook. But if you leave the calendar with the
81@kbd{q} command and reenter it, the hook runs again.@refill
82
83@vindex today-visible-calendar-hook
84 The variable @code{today-visible-calendar-hook} is a normal hook run
85after the calendar buffer has been prepared with the calendar when the
86current date is visible in the window. One use of this hook is to
87replace today's date with asterisks; to do that, use the hook function
88@code{calendar-star-date}.
89
90@findex calendar-star-date
91@example
92(add-hook 'today-visible-calendar-hook 'calendar-star-date)
93@end example
94
95@noindent
96Another standard hook function marks the current date, either by
97changing its face or by adding an asterisk. Here's how to use it:
98
99@findex calendar-mark-today
100@example
101(add-hook 'today-visible-calendar-hook 'calendar-mark-today)
102@end example
103
104@noindent
105@vindex calendar-today-marker
106The variable @code{calendar-today-marker} specifies how to mark
107today's date. Its value should be a single-character string to insert
108next to the date or a face name to use for displaying the date. A
109face named @code{calendar-today-face} is provided for this purpose;
110that symbol is the default for this variable.
111
112@vindex today-invisible-calendar-hook
113@noindent
114 A similar normal hook, @code{today-invisible-calendar-hook} is run if
115the current date is @emph{not} visible in the window.
116
117@vindex calendar-move-hook
118 Each of the calendar cursor motion commands runs the hook
119@code{calendar-move-hook} after it moves the cursor.
120
121@node Holiday Customizing
122@section Customizing the Holidays
123
124@vindex calendar-holidays
125@vindex christian-holidays
126@vindex hebrew-holidays
127@vindex islamic-holidays
128 Emacs knows about holidays defined by entries on one of several lists.
129You can customize these lists of holidays to your own needs, adding or
130deleting holidays. The lists of holidays that Emacs uses are for
131general holidays (@code{general-holidays}), local holidays
132(@code{local-holidays}), Christian holidays (@code{christian-holidays}),
133Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Muslim)
134holidays (@code{islamic-holidays}), and other holidays
135(@code{other-holidays}).
136
137@vindex general-holidays
138 The general holidays are, by default, holidays common throughout the
139United States. To eliminate these holidays, set @code{general-holidays}
140to @code{nil}.
141
142@vindex local-holidays
143 There are no default local holidays (but sites may supply some). You
144can set the variable @code{local-holidays} to any list of holidays, as
145described below.
146
147@vindex all-christian-calendar-holidays
148@vindex all-hebrew-calendar-holidays
149@vindex all-islamic-calendar-holidays
150 By default, Emacs does not include all the holidays of the religions
151that it knows, only those commonly found in secular calendars. For a
152more extensive collection of religious holidays, you can set any (or
153all) of the variables @code{all-christian-calendar-holidays},
154@code{all-hebrew-calendar-holidays}, or
155@code{all-islamic-calendar-holidays} to @code{t}. If you want to
156eliminate the religious holidays, set any or all of the corresponding
157variables @code{christian-holidays}, @code{hebrew-holidays}, and
158@code{islamic-holidays} to @code{nil}.@refill
159
160@vindex other-holidays
161 You can set the variable @code{other-holidays} to any list of
162holidays. This list, normally empty, is intended for individual use.
163
164@cindex holiday forms
165 Each of the lists (@code{general-holidays}, @code{local-holidays},
166@code{christian-holidays}, @code{hebrew-holidays},
167@code{islamic-holidays}, and @code{other-holidays}) is a list of
168@dfn{holiday forms}, each holiday form describing a holiday (or
169sometimes a list of holidays).
170
171 Here is a table of the possible kinds of holiday form. Day numbers
172and month numbers count starting from 1, but ``dayname'' numbers
173count Sunday as 0. The element @var{string} is always the
174name of the holiday, as a string.
175
176@table @code
177@item (holiday-fixed @var{month} @var{day} @var{string})
178A fixed date on the Gregorian calendar.
179
180@item (holiday-float @var{month} @var{dayname} @var{k} @var{string})
181The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar
182(@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back
183from the end of the month.
184
185@item (holiday-hebrew @var{month} @var{day} @var{string})
186A fixed date on the Hebrew calendar.
187
188@item (holiday-islamic @var{month} @var{day} @var{string})
189A fixed date on the Islamic calendar.
190
191@item (holiday-julian @var{month} @var{day} @var{string})
192A fixed date on the Julian calendar.
193
194@item (holiday-sexp @var{sexp} @var{string})
195A date calculated by the Lisp expression @var{sexp}. The expression
196should use the variable @code{year} to compute and return the date of a
197holiday, or @code{nil} if the holiday doesn't happen this year. The
198value of @var{sexp} must represent the date as a list of the form
199@code{(@var{month} @var{day} @var{year})}.
200
201@item (if @var{condition} @var{holiday-form})
202A holiday that happens only if @var{condition} is true.
203
204@item (@var{function} @r{[}@var{args}@r{]})
205A list of dates calculated by the function @var{function}, called with
206arguments @var{args}.
207@end table
208
209 For example, suppose you want to add Bastille Day, celebrated in
210France on July 14. You can do this as follows:
211
212@smallexample
213(setq other-holidays '((holiday-fixed 7 14 "Bastille Day")))
214@end smallexample
215
216@noindent
217The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the
218fourteenth day of the seventh month (July).
219
220 Many holidays occur on a specific day of the week, at a specific time
221of month. Here is a holiday form describing Hurricane Supplication Day,
222celebrated in the Virgin Islands on the fourth Monday in August:
223
224@smallexample
225(holiday-float 8 1 4 "Hurricane Supplication Day")
226@end smallexample
227
228@noindent
229Here the 8 specifies August, the 1 specifies Monday (Sunday is 0,
230Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in
231the month (1 specifies the first occurrence, 2 the second occurrence,
232@minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and
233so on).
234
235 You can specify holidays that occur on fixed days of the Hebrew,
236Islamic, and Julian calendars too. For example,
237
238@smallexample
239(setq other-holidays
240 '((holiday-hebrew 10 2 "Last day of Hanukkah")
241 (holiday-islamic 3 12 "Mohammed's Birthday")
242 (holiday-julian 4 2 "Jefferson's Birthday")))
243@end smallexample
244
245@noindent
246adds the last day of Hanukkah (since the Hebrew months are numbered with
2471 starting from Nisan), the Islamic feast celebrating Mohammed's
248birthday (since the Islamic months are numbered from 1 starting with
249Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the
250Julian calendar.
251
252 To include a holiday conditionally, use either Emacs Lisp's @code{if} or the
253@code{holiday-sexp} form. For example, American presidential elections
254occur on the first Tuesday after the first Monday in November of years
255divisible by 4:
256
257@smallexample
258(holiday-sexp '(if (= 0 (% year 4))
259 (calendar-gregorian-from-absolute
260 (1+ (calendar-dayname-on-or-before
261 1 (+ 6 (calendar-absolute-from-gregorian
262 (list 11 1 year)))))))
263 "US Presidential Election")
264@end smallexample
265
266@noindent
267or
268
269@smallexample
270(if (= 0 (% displayed-year 4))
271 (fixed 11
272 (extract-calendar-day
273 (calendar-gregorian-from-absolute
274 (1+ (calendar-dayname-on-or-before
275 1 (+ 6 (calendar-absolute-from-gregorian
276 (list 11 1 displayed-year)))))))
277 "US Presidential Election"))
278@end smallexample
279
280 Some holidays just don't fit into any of these forms because special
281calculations are involved in their determination. In such cases you
282must write a Lisp function to do the calculation. To include eclipses,
283for example, add @code{(eclipses)} to @code{other-holidays}
284and write an Emacs Lisp function @code{eclipses} that returns a
285(possibly empty) list of the relevant Gregorian dates among the range
286visible in the calendar window, with descriptive strings, like this:
287
288@smallexample
289(((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... )
290@end smallexample
291
292@node Date Display Format
293@section Date Display Format
294@vindex calendar-date-display-form
295
296 You can customize the manner of displaying dates in the diary, in mode
297lines, and in messages by setting @code{calendar-date-display-form}.
298This variable holds a list of expressions that can involve the variables
299@code{month}, @code{day}, and @code{year}, which are all numbers in
300string form, and @code{monthname} and @code{dayname}, which are both
301alphabetic strings. In the American style, the default value of this
302list is as follows:
303
304@smallexample
305((if dayname (concat dayname ", ")) monthname " " day ", " year)
306@end smallexample
307
308@noindent
309while in the European style this value is the default:
310
311@smallexample
312((if dayname (concat dayname ", ")) day " " monthname " " year)
313@end smallexample
314
315@noindent
316The ISO standard date representation is this:
317
318@smallexample
319(year "-" month "-" day)
320@end smallexample
321
322@noindent
323This specifies a typical American format:
324
325@smallexample
326(month "/" day "/" (substring year -2))
327@end smallexample
328
329@node Time Display Format
330@section Time Display Format
331@vindex calendar-time-display-form
332
333 The calendar and diary by default display times of day in the
334conventional American style with the hours from 1 through 12, minutes,
335and either @samp{am} or @samp{pm}. If you prefer the European style,
336also known in the US as military, in which the hours go from 00 to 23,
337you can alter the variable @code{calendar-time-display-form}. This
338variable is a list of expressions that can involve the variables
339@code{12-hours}, @code{24-hours}, and @code{minutes}, which are all
340numbers in string form, and @code{am-pm} and @code{time-zone}, which are
341both alphabetic strings. The default value of
342@code{calendar-time-display-form} is as follows:
343
344@smallexample
345(12-hours ":" minutes am-pm
346 (if time-zone " (") time-zone (if time-zone ")"))
347@end smallexample
348
349@noindent
350Here is a value that provides European style times:
351
352@smallexample
353(24-hours ":" minutes
354 (if time-zone " (") time-zone (if time-zone ")"))
355@end smallexample
356
357@node Daylight Savings
358@section Daylight Savings Time
359@cindex daylight savings time
360
361 Emacs understands the difference between standard time and daylight
362savings time---the times given for sunrise, sunset, solstices,
363equinoxes, and the phases of the moon take that into account. The rules
364for daylight savings time vary from place to place and have also varied
365historically from year to year. To do the job properly, Emacs needs to
366know which rules to use.
367
368 Some operating systems keep track of the rules that apply to the place
369where you are; on these systems, Emacs gets the information it needs
370from the system automatically. If some or all of this information is
371missing, Emacs fills in the gaps with the rules currently used in
372Cambridge, Massachusetts, which is the center of GNU's world.
373
374
375@vindex calendar-daylight-savings-starts
376@vindex calendar-daylight-savings-ends
377 If the default choice of rules is not appropriate for your location,
378you can tell Emacs the rules to use by setting the variables
379@code{calendar-daylight-savings-starts} and
380@code{calendar-daylight-savings-ends}. Their values should be Lisp
381expressions that refer to the variable @code{year}, and evaluate to the
382Gregorian date on which daylight savings time starts or (respectively)
383ends, in the form of a list @code{(@var{month} @var{day} @var{year})}.
384The values should be @code{nil} if your area does not use daylight
385savings time.
386
387 Emacs uses these expressions to determine the start and end dates of
388daylight savings time as holidays and for correcting times of day in the
389solar and lunar calculations.
390
391 The values for Cambridge, Massachusetts are as follows:
392
393@example
394@group
395(calendar-nth-named-day 1 0 4 year)
396(calendar-nth-named-day -1 0 10 year)
397@end group
398@end example
399
400@noindent
401i.e., the first 0th day (Sunday) of the fourth month (April) in
402the year specified by @code{year}, and the last Sunday of the tenth month
403(October) of that year. If daylight savings time were
404changed to start on October 1, you would set
405@code{calendar-daylight-savings-starts} to this:
406
407@example
408(list 10 1 year)
409@end example
410
411 For a more complex example, suppose daylight savings time begins on
412the first of Nisan on the Hebrew calendar. You should set
413@code{calendar-daylight-savings-starts} to this value:
414
415@example
416(calendar-gregorian-from-absolute
417 (calendar-absolute-from-hebrew
418 (list 1 1 (+ year 3760))))
419@end example
420
421@noindent
422because Nisan is the first month in the Hebrew calendar and the Hebrew
423year differs from the Gregorian year by 3760 at Nisan.
424
425 If there is no daylight savings time at your location, or if you want
426all times in standard time, set @code{calendar-daylight-savings-starts}
427and @code{calendar-daylight-savings-ends} to @code{nil}.
428
429@vindex calendar-daylight-time-offset
430 The variable @code{calendar-daylight-time-offset} specifies the
431difference between daylight savings time and standard time, measured in
432minutes. The value for Cambridge is 60.
433
434@vindex calendar-daylight-savings-starts-time
435@vindex calendar-daylight-savings-ends-time
436 The variable @code{calendar-daylight-savings-starts-time} and the
437variable @code{calendar-daylight-savings-ends-time} specify the number
438of minutes after midnight local time when the transition to and from
439daylight savings time should occur. For Cambridge, both variables'
440values are 120.
441
442@node Diary Customizing
443@section Customizing the Diary
444
445@vindex holidays-in-diary-buffer
446 Ordinarily, the mode line of the diary buffer window indicates any
447holidays that fall on the date of the diary entries. The process of
448checking for holidays can take several seconds, so including holiday
449information delays the display of the diary buffer noticeably. If you'd
450prefer to have a faster display of the diary buffer but without the
451holiday information, set the variable @code{holidays-in-diary-buffer} to
452@code{nil}.@refill
453
454@vindex number-of-diary-entries
455 The variable @code{number-of-diary-entries} controls the number of
456days of diary entries to be displayed at one time. It affects the
457initial display when @code{view-diary-entries-initially} is @code{t}, as
458well as the command @kbd{M-x diary}. For example, the default value is
4591, which says to display only the current day's diary entries. If the
460value is 2, both the current day's and the next day's entries are
461displayed. The value can also be a vector of seven elements: for
462example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries
463appear on Sunday, the current date's and the next day's diary entries
464appear Monday through Thursday, Friday through Monday's entries appear
465on Friday, while on Saturday only that day's entries appear.
466
467@vindex print-diary-entries-hook
468@findex print-diary-entries
469 The variable @code{print-diary-entries-hook} is a normal hook run
470after preparation of a temporary buffer containing just the diary
471entries currently visible in the diary buffer. (The other, irrelevant
472diary entries are really absent from the temporary buffer; in the diary
473buffer, they are merely hidden.) The default value of this hook does
474the printing with the command @code{lpr-buffer}. If you want to use a
475different command to do the printing, just change the value of this
476hook. Other uses might include, for example, rearranging the lines into
477order by day and time.
478
479@vindex diary-date-forms
480 You can customize the form of dates in your diary file, if neither the
481standard American nor European styles suits your needs, by setting the
482variable @code{diary-date-forms}. This variable is a list of patterns
483for recognizing a date. Each date pattern is a list whose elements may
484be regular expressions (@pxref{Regular Expressions}) or the symbols
485@code{month}, @code{day}, @code{year}, @code{monthname}, and
486@code{dayname}. All these elements serve as patterns that match certain
487kinds of text in the diary file. In order for the date pattern, as a
488whole, to match, all of its elements must match consecutively.
489
490 A regular expression in a date pattern matches in its usual fashion,
491using the standard syntax table altered so that @samp{*} is a word
492constituent.
493
494 The symbols @code{month}, @code{day}, @code{year}, @code{monthname},
495and @code{dayname} match the month number, day number, year number,
496month name, and day name of the date being considered. The symbols that
497match numbers allow leading zeros; those that match names allow
498three-letter abbreviations and capitalization. All the symbols can
499match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any
500month'', and so on, it should match regardless of the date being
501considered.
502
503 The default value of @code{diary-date-forms} in the American style is
504this:
505
506@example
507((month "/" day "[^/0-9]")
508 (month "/" day "/" year "[^0-9]")
509 (monthname " *" day "[^,0-9]")
510 (monthname " *" day ", *" year "[^0-9]")
511 (dayname "\\W"))
512@end example
513
514 The date patterns in the list must be @emph{mutually exclusive} and
515must not match any portion of the diary entry itself, just the date and
516one character of whitespace. If, to be mutually exclusive, the pattern
517must match a portion of the diary entry text---beyond the whitespace
518that ends the date---then the first element of the date pattern
519@emph{must} be @code{backup}. This causes the date recognizer to back
520up to the beginning of the current word of the diary entry, after
521finishing the match. Even if you use @code{backup}, the date pattern
522must absolutely not match more than a portion of the first word of the
523diary entry. The default value of @code{diary-date-forms} in the
524European style is this list:
525
526@example
527((day "/" month "[^/0-9]")
528 (day "/" month "/" year "[^0-9]")
529 (backup day " *" monthname "\\W+\\<[^*0-9]")
530 (day " *" monthname " *" year "[^0-9]")
531 (dayname "\\W"))
532@end example
533
534@noindent
535Notice the use of @code{backup} in the third pattern, because it needs
536to match part of a word beyond the date itself to distinguish it from
537the fourth pattern.
538
539@node Hebrew/Islamic Entries
540@section Hebrew- and Islamic-Date Diary Entries
541
542 Your diary file can have entries based on Hebrew or Islamic dates, as
543well as entries based on the world-standard Gregorian calendar.
544However, because recognition of such entries is time-consuming and most
545people don't use them, you must explicitly enable their use. If you
546want the diary to recognize Hebrew-date diary entries, for example,
547you must do this:
548
549@vindex nongregorian-diary-listing-hook
550@vindex nongregorian-diary-marking-hook
551@findex list-hebrew-diary-entries
552@findex mark-hebrew-diary-entries
553@smallexample
554(add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries)
555(add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries)
556@end smallexample
557
558@noindent
559If you want Islamic-date entries, do this:
560
561@findex list-islamic-diary-entries
562@findex mark-islamic-diary-entries
563@smallexample
564(add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries)
565(add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries)
566@end smallexample
567
568 Hebrew- and Islamic-date diary entries have the same formats as
569Gregorian-date diary entries, except that @samp{H} precedes a Hebrew
570date and @samp{I} precedes an Islamic date. Moreover, because the
571Hebrew and Islamic month names are not uniquely specified by the first
572three letters, you may not abbreviate them. For example, a diary entry
573for the Hebrew date Heshvan 25 could look like this:
574
575@smallexample
576HHeshvan 25 Happy Hebrew birthday!
577@end smallexample
578
579@noindent
580and would appear in the diary for any date that corresponds to Heshvan 25
581on the Hebrew calendar. And here is an Islamic-date diary entry that matches
582Dhu al-Qada 25:
583
584@smallexample
585IDhu al-Qada 25 Happy Islamic birthday!
586@end smallexample
587
588 As with Gregorian-date diary entries, Hebrew- and Islamic-date entries
589are nonmarking if they are preceded with an ampersand (@samp{&}).
590
591 Here is a table of commands used in the calendar to create diary entries
592that match the selected date and other dates that are similar in the Hebrew
593or Islamic calendar:
594
595@table @kbd
596@item i h d
597Add a diary entry for the Hebrew date corresponding to the selected date
598(@code{insert-hebrew-diary-entry}).
599@item i h m
600Add a diary entry for the day of the Hebrew month corresponding to the
601selected date (@code{insert-monthly-hebrew-diary-entry}). This diary
602entry matches any date that has the same Hebrew day-within-month as the
603selected date.
604@item i h y
605Add a diary entry for the day of the Hebrew year corresponding to the
606selected date (@code{insert-yearly-hebrew-diary-entry}). This diary
607entry matches any date which has the same Hebrew month and day-within-month
608as the selected date.
609@item i i d
610Add a diary entry for the Islamic date corresponding to the selected date
611(@code{insert-islamic-diary-entry}).
612@item i i m
613Add a diary entry for the day of the Islamic month corresponding to the
614selected date (@code{insert-monthly-islamic-diary-entry}).
615@item i i y
616Add a diary entry for the day of the Islamic year corresponding to the
617selected date (@code{insert-yearly-islamic-diary-entry}).
618@end table
619
620@findex insert-hebrew-diary-entry
621@findex insert-monthly-hebrew-diary-entry
622@findex insert-yearly-hebrew-diary-entry
623@findex insert-islamic-diary-entry
624@findex insert-monthly-islamic-diary-entry
625@findex insert-yearly-islamic-diary-entry
626 These commands work much like the corresponding commands for ordinary
627diary entries: they apply to the date that point is on in the calendar
628window, and what they do is insert just the date portion of a diary entry
629at the end of your diary file. You must then insert the rest of the
630diary entry.
631
632@node Fancy Diary Display
633@section Fancy Diary Display
634@vindex diary-display-hook
635@findex simple-diary-display
636
637 Diary display works by preparing the diary buffer and then running the
638hook @code{diary-display-hook}. The default value of this hook
639(@code{simple-diary-display}) hides the irrelevant diary entries and
640then displays the buffer. However, if you specify the hook as follows,
641
642@cindex diary buffer
643@findex fancy-diary-display
644@example
645(add-hook 'diary-display-hook 'fancy-diary-display)
646@end example
647
648@noindent
649this enables fancy diary display. It displays diary entries and
650holidays by copying them into a special buffer that exists only for the
651sake of display. Copying to a separate buffer provides an opportunity
652to change the displayed text to make it prettier---for example, to sort
653the entries by the dates they apply to.
654
655 As with simple diary display, you can print a hard copy of the buffer
656with @code{print-diary-entries}. To print a hard copy of a day-by-day
657diary for a week, position point on Sunday of that week, type
658@kbd{7 d}, and then do @kbd{M-x print-diary-entries}. As usual, the
659inclusion of the holidays slows down the display slightly; you can speed
660things up by setting the variable @code{holidays-in-diary-buffer} to
661@code{nil}.
662
663@vindex diary-list-include-blanks
664 Ordinarily, the fancy diary buffer does not show days for which there are
665no diary entries, even if that day is a holiday. If you want such days to be
666shown in the fancy diary buffer, set the variable
667@code{diary-list-include-blanks} to @code{t}.@refill
668
669@cindex sorting diary entries
670 If you use the fancy diary display, you can use the normal hook
671@code{list-diary-entries-hook} to sort each day's diary entries by their
672time of day. Here's how:
673
674@findex sort-diary-entries
675@example
676(add-hook 'list-diary-entries-hook 'sort-diary-entries t)
677@end example
678
679@noindent
680For each day, this sorts diary entries that begin with a recognizable
681time of day according to their times. Diary entries without times come
682first within each day.
683
684 Fancy diary display also has the ability to process included diary
685files. This permits a group of people to share a diary file for events
686that apply to all of them. Lines in the diary file of this form:
687
688@smallexample
689#include "@var{filename}"
690@end smallexample
691
692@noindent
693includes the diary entries from the file @var{filename} in the fancy
694diary buffer. The include mechanism is recursive, so that included files
695can include other files, and so on; you must be careful not to have a
696cycle of inclusions, of course. Here is how to enable the include
697facility:
698
699@vindex list-diary-entries-hook
700@vindex mark-diary-entries-hook
701@findex include-other-diary-files
702@findex mark-included-diary-files
703@smallexample
704(add-hook 'list-diary-entries-hook 'include-other-diary-files)
705(add-hook 'mark-diary-entries-hook 'mark-included-diary-files)
706@end smallexample
707
708The include mechanism works only with the fancy diary display, because
709ordinary diary display shows the entries directly from your diary file.
710
711@node Sexp Diary Entries
712@section Sexp Entries and the Fancy Diary Display
713@cindex sexp diary entries
714
715 Sexp diary entries allow you to do more than just have complicated
716conditions under which a diary entry applies. If you use the fancy
717diary display, sexp entries can generate the text of the entry depending
718on the date itself. For example, an anniversary diary entry can insert
719the number of years since the anniversary date into the text of the
720diary entry. Thus the @samp{%d} in this dairy entry:
721
722@findex diary-anniversary
723@smallexample
724%%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)
725@end smallexample
726
727@noindent
728gets replaced by the age, so on October 31, 1990 the entry appears in
729the fancy diary buffer like this:
730
731@smallexample
732Arthur's birthday (42 years old)
733@end smallexample
734
735@noindent
736If the diary file instead contains this entry:
737
738@smallexample
739%%(diary-anniversary 10 31 1948) Arthur's %d%s birthday
740@end smallexample
741
742@noindent
743the entry in the fancy diary buffer for October 31, 1990 appears like this:
744
745@smallexample
746Arthur's 42nd birthday
747@end smallexample
748
749 Similarly, cyclic diary entries can interpolate the number of repetitions
750that have occurred:
751
752@findex diary-cyclic
753@smallexample
754%%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time)
755@end smallexample
756
757@noindent
758looks like this:
759
760@smallexample
761Renew medication (5th time)
762@end smallexample
763
764@noindent
765in the fancy diary display on September 8, 1990.
766
767 There is an early reminder diary sexp that includes its entry in the
768diary not only on the date of occurrence, but also on earlier dates.
769For example, if you want a reminder a week before your anniversary, you
770can use
771
772@findex diary-remind
773@smallexample
774%%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary
775@end smallexample
776
777@noindent
778and the fancy diary will show
779@smallexample
780Ed's anniversary
781@end smallexample
782@noindent
783both on December 15 and on December 22.
784
785@findex diary-date
786 The function @code{diary-date} applies to dates described by a month,
787day, year combination, each of which can be an integer, a list of
788integers, or @code{t}. The value @code{t} means all values. For
789example,
790
791@smallexample
792%%(diary-date '(10 11 12) 22 t) Rake leaves
793@end smallexample
794
795@noindent
796causes the fancy diary to show
797
798@smallexample
799Rake leaves
800@end smallexample
801
802@noindent
803on October 22, November 22, and December 22 of every year.
804
805@findex diary-float
806 The function @code{diary-float} allows you to describe diary entries
807that apply to dates like the third Friday of November, or the last
808Tuesday in April. The parameters are the @var{month}, @var{dayname},
809and an index @var{n}. The entry appears on the @var{n}th @var{dayname}
810of @var{month}, where @var{dayname}=0 means Sunday, 1 means Monday, and
811so on. If @var{n} is negative it counts backward from the end of
812@var{month}. The value of @var{month} can be a list of months, a single
813month, or @code{t} to specify all months. You can also use an optional
814parameter @var{day} to specify the @var{n}th @var{dayname} of
815@var{month} on or after/before @var{day}; the value of @var{day} defaults
816to 1 if @var{n} is positive and to the last day of @var{month} if
817@var{n} is negative. For example,
818
819@smallexample
820%%(diary-float t 1 -1) Pay rent
821@end smallexample
822
823@noindent
824causes the fancy diary to show
825
826@smallexample
827Pay rent
828@end smallexample
829
830@noindent
831on the last Monday of every month.
832
833 The generality of sexp diary entries lets you specify any diary
834entry that you can describe algorithmically. A sexp diary entry
835contains an expression that computes whether the entry applies to any
836given date. If its value is non-@code{nil}, the entry applies to that
837date; otherwise, it does not. The expression can use the variable
838@code{date} to find the date being considered; its value is a list
839(@var{month} @var{day} @var{year}) that refers to the Gregorian
840calendar.
841
842 The sexp diary entry applies to a date when the expression's value
843is non-@code{nil}, but some values have more specific meanings. If
844the value is a string, that string is a description of the event which
845occurs on that date. The value can also have the form
846@code{(@var{mark} . @var{string})}; then @var{mark} specifies how to
847mark the date in the calendar, and @var{string} is the description of
848the event. If @var{mark} is a single-character string, that character
849appears next to the date in the calendar. If @var{mark} is a face
850name, the date is displayed in that face. If @var{mark} is
851@code{nil}, that specifies no particular highlighting for the date.
852
853 Suppose you get paid on the 21st of the month if it is a weekday, and
854on the Friday before if the 21st is on a weekend. Here is how to write
855a sexp diary entry that matches those dates:
856
857@smallexample
858&%%(let ((dayname (calendar-day-of-week date))
859 (day (car (cdr date))))
860 (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
861 (and (memq day '(19 20)) (= dayname 5)))
862 ) Pay check deposited
863@end smallexample
864
865 The following sexp diary entries take advantage of the ability (in the fancy
866diary display) to concoct diary entries whose text varies based on the date:
867
868@findex diary-sunrise-sunset
869@findex diary-phases-of-moon
870@findex diary-day-of-year
871@findex diary-iso-date
872@findex diary-julian-date
873@findex diary-astro-day-number
874@findex diary-hebrew-date
875@findex diary-islamic-date
876@findex diary-french-date
877@findex diary-mayan-date
878@table @code
879@item %%(diary-sunrise-sunset)
880Make a diary entry for the local times of today's sunrise and sunset.
881@item %%(diary-phases-of-moon)
882Make a diary entry for the phases (quarters) of the moon.
883@item %%(diary-day-of-year)
884Make a diary entry with today's day number in the current year and the number
885of days remaining in the current year.
886@item %%(diary-iso-date)
887Make a diary entry with today's equivalent ISO commercial date.
888@item %%(diary-julian-date)
889Make a diary entry with today's equivalent date on the Julian calendar.
890@item %%(diary-astro-day-number)
891Make a diary entry with today's equivalent astronomical (Julian) day number.
892@item %%(diary-hebrew-date)
893Make a diary entry with today's equivalent date on the Hebrew calendar.
894@item %%(diary-islamic-date)
895Make a diary entry with today's equivalent date on the Islamic calendar.
896@item %%(diary-french-date)
897Make a diary entry with today's equivalent date on the French Revolutionary
898calendar.
899@item %%(diary-mayan-date)
900Make a diary entry with today's equivalent date on the Mayan calendar.
901@end table
902
903@noindent
904Thus including the diary entry
905
906@example
907&%%(diary-hebrew-date)
908@end example
909
910@noindent
911causes every day's diary display to contain the equivalent date on the
912Hebrew calendar, if you are using the fancy diary display. (With simple
913diary display, the line @samp{&%%(diary-hebrew-date)} appears in the
914diary for any date, but does nothing particularly useful.)
915
916 These functions can be used to construct sexp diary entries based on
917the Hebrew calendar in certain standard ways:
918
919@cindex rosh hodesh
920@findex diary-rosh-hodesh
921@cindex parasha, weekly
922@findex diary-parasha
923@cindex candle lighting times
924@findex diary-sabbath-candles
925@cindex omer count
926@findex diary-omer
927@cindex yahrzeits
928@findex diary-yahrzeit
929@table @code
930@item %%(diary-rosh-hodesh)
931Make a diary entry that tells the occurrence and ritual announcement of each
932new Hebrew month.
933@item %%(diary-parasha)
934Make a Saturday diary entry that tells the weekly synagogue scripture reading.
935@item %%(diary-sabbath-candles)
936Make a Friday diary entry that tells the @emph{local time} of Sabbath
937candle lighting.
938@item %%(diary-omer)
939Make a diary entry that gives the omer count, when appropriate.
940@item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name}
941Make a diary entry marking the anniversary of a date of death. The date
942is the @emph{Gregorian} (civil) date of death. The diary entry appears
943on the proper Hebrew calendar anniversary and on the day before. (In
944the European style, the order of the parameters is changed to @var{day},
945@var{month}, @var{year}.)
946@end table
947
948 All the functions documented above take an optional argument
949@var{mark} which specifies how to mark the date in the calendar display.
950If one of these functions decides that it applies to a certain date,
951it returns a value that contains @var{mark}.
952
953@node Appt Customizing
954@section Customizing Appointment Reminders
955
956 You can specify exactly how Emacs reminds you of an appointment, and
957how far in advance it begins doing so, by setting these variables:
958
959@vindex appt-message-warning-time
960@vindex appt-audible
961@vindex appt-visible
962@vindex appt-display-mode-line
963@vindex appt-msg-window
964@vindex appt-display-duration
965@vindex appt-disp-window-function
966@vindex appt-delete-window-function
967@table @code
968@item appt-message-warning-time
969The time in minutes before an appointment that the reminder begins. The
970default is 12 minutes.
971@item appt-audible
972If this is non-@code{nil}, Emacs rings the
973terminal bell for appointment reminders. The default is @code{t}.
974@item appt-visible
975If this is non-@code{nil}, Emacs displays the appointment
976message in the echo area. The default is @code{t}.
977@item appt-display-mode-line
978If this is non-@code{nil}, Emacs displays the number of minutes
979to the appointment on the mode line. The default is @code{t}.
980@item appt-msg-window
981If this is non-@code{nil}, Emacs displays the appointment
982message in another window. The default is @code{t}.
983@item appt-disp-window-function
984This variable holds a function to use to create the other window
985for the appointment message.
986@item appt-delete-window-function
987This variable holds a function to use to get rid of the appointment
988message window, when its time is up.
989@item appt-display-duration
990The number of seconds to display an appointment message. The default
991is 10 seconds.
992@end table
993
994@ignore
995 arch-tag: 8e50c766-4703-4888-a421-af15244cca7e
996@end ignore
diff --git a/lispref/display.texi b/lispref/display.texi
index 74c6b3feb51..d5a28b0a0cc 100644
--- a/lispref/display.texi
+++ b/lispref/display.texi
@@ -4,7 +4,7 @@
4@c 2002, 2005 Free Software Foundation, Inc. 4@c 2002, 2005 Free Software Foundation, Inc.
5@c See the file elisp.texi for copying conditions. 5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/display 6@setfilename ../info/display
7@node Display, Calendar, Processes, Top 7@node Display, System Interface, Processes, Top
8@chapter Emacs Display 8@chapter Emacs Display
9 9
10 This chapter describes a number of features related to the display 10 This chapter describes a number of features related to the display
@@ -1695,10 +1695,10 @@ font. (This works only on certain systems.)
1695 1695
1696@item fringe 1696@item fringe
1697@kindex fringe @r{(face name)} 1697@kindex fringe @r{(face name)}
1698This face controls the default colors of window fringes, the thin areas on 1698This face controls the default colors of window fringes, the thin
1699either side that are used to display continuation and truncation glyphs. 1699areas on either side that are used to display continuation and
1700Other faces used to display bitmaps in the fringe implicitly inherits from 1700truncation glyphs. Other faces used to display bitmaps in the fringe
1701this face. 1701are implicitly merged with this face.
1702 1702
1703@item minibuffer-prompt 1703@item minibuffer-prompt
1704@kindex minibuffer-prompt @r{(face name)} 1704@kindex minibuffer-prompt @r{(face name)}
@@ -2008,6 +2008,8 @@ color. The value is used like that of @code{:underline}.
2008The name of a face from which to inherit attributes, or a list of face 2008The name of a face from which to inherit attributes, or a list of face
2009names. Attributes from inherited faces are merged into the face like an 2009names. Attributes from inherited faces are merged into the face like an
2010underlying face would be, with higher priority than underlying faces. 2010underlying face would be, with higher priority than underlying faces.
2011If a list of faces is used, attributes from faces earlier in the list
2012override those from later faces.
2011 2013
2012@item :box 2014@item :box
2013Whether or not a box should be drawn around characters, its color, the 2015Whether or not a box should be drawn around characters, its color, the
@@ -2833,12 +2835,12 @@ line in a window is by specifying the @code{display} property for one
2833of the characters that appears in it. Use a display specification of 2835of the characters that appears in it. Use a display specification of
2834the form @code{(left-fringe @var{bitmap} [@var{face}])} or 2836the form @code{(left-fringe @var{bitmap} [@var{face}])} or
2835@code{(right-fringe @var{bitmap} [@var{face}])} (@pxref{Display 2837@code{(right-fringe @var{bitmap} [@var{face}])} (@pxref{Display
2836Property}). Here, @var{bitmap} is a symbol identifying the bitmap 2838Property}). Here, @var{bitmap} is a symbol identifying the bitmap you
2837you want, and @var{face} (which is optional) is the name of the face 2839want, and @var{face} (which is optional) is the name of the face whose
2838whose colors should be used for displaying the bitmap, instead of the 2840colors should be used for displaying the bitmap, instead of the
2839default @code{fringe} face. When specified, @var{face} implicitly 2841default @code{fringe} face. @var{face} is automatically merged with
2840inherits from the @code{fringe} face, so normally @var{face} only 2842the @code{fringe} face, so normally @var{face} need only specify the
2841specifies the foreground color for the bitmap. 2843foreground color for the bitmap.
2842 2844
2843 These are the symbols identify the standard fringe bitmaps. 2845 These are the symbols identify the standard fringe bitmaps.
2844Evaluate @code{(require 'fringe)} to define them. Fringe bitmap 2846Evaluate @code{(require 'fringe)} to define them. Fringe bitmap
@@ -2928,8 +2930,8 @@ This sets the face for the fringe bitmap @var{bitmap} to @var{face}.
2928If @var{face} is @code{nil}, it selects the @code{fringe} face. The 2930If @var{face} is @code{nil}, it selects the @code{fringe} face. The
2929bitmap's face controls the color to draw it in. 2931bitmap's face controls the color to draw it in.
2930 2932
2931The @var{face} implicitly inherits from the @code{fringe} face, 2933@var{face} is merged with the @code{fringe} face, so normally
2932so normally @var{face} should specifu only the foreground color. 2934@var{face} should specify only the foreground color.
2933@end defun 2935@end defun
2934 2936
2935@node Overlay Arrow 2937@node Overlay Arrow
@@ -2991,11 +2993,21 @@ used.
2991@section Scroll Bars 2993@section Scroll Bars
2992 2994
2993Normally the frame parameter @code{vertical-scroll-bars} controls 2995Normally the frame parameter @code{vertical-scroll-bars} controls
2994whether the windows in the frame have vertical scroll bars. A 2996whether the windows in the frame have vertical scroll bars, and
2995non-@code{nil} parameter value means they do. The frame parameter 2997whether they are on the left or right. The frame parameter
2996@code{scroll-bar-width} specifies how wide they are (@code{nil} 2998@code{scroll-bar-width} specifies how wide they are (@code{nil}
2997meaning the default). @xref{Window Frame Parameters}. 2999meaning the default). @xref{Window Frame Parameters}.
2998 3000
3001@defun frame-current-scroll-bars &optional frame
3002This function reports the scroll bar type settings for frame
3003@var{frame}. The value is a cons cell
3004@code{(@var{vertical-type} .@: @var{horizontal-type})}, where
3005@var{vertical-type} is either @code{left}, @code{right}, or @code{nil}
3006(which means no scroll bar.) @var{horizontal-type} is meant to
3007specify the horizontal scroll bar type, but since they are not
3008implemented, it is always @code{nil}.
3009@end defun
3010
2999@vindex vertical-scroll-bar 3011@vindex vertical-scroll-bar
3000 You can enable or disable scroll bars for a particular buffer, 3012 You can enable or disable scroll bars for a particular buffer,
3001by setting the variable @code{vertical-scroll-bar}. This variable 3013by setting the variable @code{vertical-scroll-bar}. This variable
@@ -3050,6 +3062,16 @@ are @code{nil} for no scroll bar, @code{left} to put a scroll bar on
3050the left, and @code{right} to put a scroll bar on the right. 3062the left, and @code{right} to put a scroll bar on the right.
3051@end defvar 3063@end defvar
3052 3064
3065@defun window-current-scroll-bars &optional window
3066This function reports the scroll bar type for window @var{window}.
3067If @var{window} is omitted or @code{nil}, the selected window is used.
3068The value is a cons cell
3069@code{(@var{vertical-type} .@: @var{horizontal-type})}. Unlike
3070@code{window-scroll-bars}, this reports the scroll bar type actually
3071used, once frame defaults and @code{scroll-bar-mode} are taken into
3072account.
3073@end defun
3074
3053@defvar scroll-bar-width 3075@defvar scroll-bar-width
3054This variable, always local in all buffers, specifies the width of the 3076This variable, always local in all buffers, specifies the width of the
3055buffer's scroll bars, measured in pixels. A value of @code{nil} means 3077buffer's scroll bars, measured in pixels. A value of @code{nil} means
diff --git a/lispref/elisp.texi b/lispref/elisp.texi
index b2cec876d79..894ebb20df3 100644
--- a/lispref/elisp.texi
+++ b/lispref/elisp.texi
@@ -152,7 +152,6 @@ Reference Manual, corresponding to GNU Emacs version 22.1.
152 152
153* Processes:: Running and communicating with subprocesses. 153* Processes:: Running and communicating with subprocesses.
154* Display:: Features for controlling the screen display. 154* Display:: Features for controlling the screen display.
155* Calendar:: Customizing the calendar and diary.
156* System Interface:: Getting the user id, system type, environment 155* System Interface:: Getting the user id, system type, environment
157 variables, and other such things. 156 variables, and other such things.
158 157
@@ -973,7 +972,6 @@ Object Internals
973@include processes.texi 972@include processes.texi
974 973
975@include display.texi 974@include display.texi
976@include calendar.texi
977@include os.texi 975@include os.texi
978 976
979@c MOVE to Emacs Manual: include misc-modes.texi 977@c MOVE to Emacs Manual: include misc-modes.texi
diff --git a/lispref/keymaps.texi b/lispref/keymaps.texi
index f374472e101..59e2e19966d 100644
--- a/lispref/keymaps.texi
+++ b/lispref/keymaps.texi
@@ -456,16 +456,16 @@ key.
456key. 456key.
457 457
458@item 458@item
459@cindex @kbd{M-g} 459@cindex @kbd{M-o}
460@vindex facemenu-keymap 460@vindex facemenu-keymap
461@code{facemenu-keymap} is the global keymap used for the @kbd{M-g} 461@code{facemenu-keymap} is the global keymap used for the @kbd{M-o}
462prefix key. 462prefix key.
463 463
464@c Emacs 19 feature 464@c Emacs 19 feature
465@item 465@item
466The other Emacs prefix keys are @kbd{C-x @@}, @kbd{C-x a i}, @kbd{C-x 466The other Emacs prefix keys are @kbd{M-g}, @kbd{C-x @@}, @kbd{C-x a i},
467@key{ESC}} and @kbd{@key{ESC} @key{ESC}}. They use keymaps that have no 467@kbd{C-x @key{ESC}} and @kbd{@key{ESC} @key{ESC}}. They use keymaps
468special names. 468that have no special names.
469@end itemize 469@end itemize
470 470
471 The keymap binding of a prefix key is used for looking up the event 471 The keymap binding of a prefix key is used for looking up the event
diff --git a/lispref/makefile.w32-in b/lispref/makefile.w32-in
index 8d4a95911ce..248330167b2 100644
--- a/lispref/makefile.w32-in
+++ b/lispref/makefile.w32-in
@@ -48,7 +48,6 @@ srcs = \
48 $(srcdir)/back.texi \ 48 $(srcdir)/back.texi \
49 $(srcdir)/backups.texi \ 49 $(srcdir)/backups.texi \
50 $(srcdir)/buffers.texi \ 50 $(srcdir)/buffers.texi \
51 $(srcdir)/calendar.texi \
52 $(srcdir)/commands.texi \ 51 $(srcdir)/commands.texi \
53 $(srcdir)/compile.texi \ 52 $(srcdir)/compile.texi \
54 $(srcdir)/control.texi \ 53 $(srcdir)/control.texi \
diff --git a/lispref/markers.texi b/lispref/markers.texi
index 31d6796af58..3353d7805ae 100644
--- a/lispref/markers.texi
+++ b/lispref/markers.texi
@@ -554,6 +554,12 @@ This variable if non-@code{nil} enables Transient Mark mode, in which
554every buffer-modifying primitive sets @code{deactivate-mark}. The 554every buffer-modifying primitive sets @code{deactivate-mark}. The
555consequence of this is that commands that modify the buffer normally 555consequence of this is that commands that modify the buffer normally
556make the mark inactive. 556make the mark inactive.
557
558Lisp programs can set @code{transient-mark-mode} to @code{only} to
559enable Transient Mark mode for the following command only. During
560that following command, the value of transient-mark-mode is
561@code{identity}. If it is still @code{identity} at the end of the
562command, it changes to nil.
557@end defopt 563@end defopt
558 564
559@defopt mark-even-if-inactive 565@defopt mark-even-if-inactive
diff --git a/lispref/minibuf.texi b/lispref/minibuf.texi
index bfe5214174b..a479aae8234 100644
--- a/lispref/minibuf.texi
+++ b/lispref/minibuf.texi
@@ -1296,6 +1296,11 @@ called, it calls this function with the supplied arguments instead of
1296doing its usual work. 1296doing its usual work.
1297@end defvar 1297@end defvar
1298 1298
1299@defvar read-file-name-completion-ignore-case
1300If this variable is non-@code{nil}, @code{read-file-name} ignores case
1301when performing completion.
1302@end defvar
1303
1299@defun read-directory-name prompt &optional directory default existing initial 1304@defun read-directory-name prompt &optional directory default existing initial
1300This function is like @code{read-file-name} but allows only directory 1305This function is like @code{read-file-name} but allows only directory
1301names as completion possibilities. 1306names as completion possibilities.
diff --git a/lispref/modes.texi b/lispref/modes.texi
index 9464f900d4f..f2cfcd2eb8c 100644
--- a/lispref/modes.texi
+++ b/lispref/modes.texi
@@ -2349,7 +2349,7 @@ be slow.
2349@defvar font-lock-mark-block-function 2349@defvar font-lock-mark-block-function
2350If this variable is non-@code{nil}, it should be a function that is 2350If this variable is non-@code{nil}, it should be a function that is
2351called with no arguments, to choose an enclosing range of text for 2351called with no arguments, to choose an enclosing range of text for
2352refontification for the command @kbd{M-g M-g} 2352refontification for the command @kbd{M-o M-o}
2353(@code{font-lock-fontify-block}). 2353(@code{font-lock-fontify-block}).
2354 2354
2355The function should report its choice by placing the region around it. 2355The function should report its choice by placing the region around it.
diff --git a/lispref/os.texi b/lispref/os.texi
index 1358e3421db..a1de8f09c36 100644
--- a/lispref/os.texi
+++ b/lispref/os.texi
@@ -4,7 +4,7 @@
4@c Free Software Foundation, Inc. 4@c Free Software Foundation, Inc.
5@c See the file elisp.texi for copying conditions. 5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/os 6@setfilename ../info/os
7@node System Interface, Antinews, Calendar, Top 7@node System Interface, Antinews, Display, Top
8@chapter Operating System Interface 8@chapter Operating System Interface
9 9
10 This chapter is about starting and getting out of Emacs, access to 10 This chapter is about starting and getting out of Emacs, access to
diff --git a/lispref/positions.texi b/lispref/positions.texi
index 19a26754140..822238a6342 100644
--- a/lispref/positions.texi
+++ b/lispref/positions.texi
@@ -581,9 +581,9 @@ The coordinate arguments @var{frompos} and @var{topos} are cons cells of
581the form @code{(@var{hpos} . @var{vpos})}. 581the form @code{(@var{hpos} . @var{vpos})}.
582 582
583The argument @var{width} is the number of columns available to display 583The argument @var{width} is the number of columns available to display
584text; this affects handling of continuation lines. Use the value 584text; this affects handling of continuation lines. @code{nil} means
585returned by @code{window-width} for the window of your choice; 585the actual number of usable text columns in the window, which is
586normally, use @code{(window-width @var{window})}. 586equivalent to the value returned by @code{(window-width window)}.
587 587
588The argument @var{offsets} is either @code{nil} or a cons cell of the 588The argument @var{offsets} is either @code{nil} or a cons cell of the
589form @code{(@var{hscroll} . @var{tab-offset})}. Here @var{hscroll} is 589form @code{(@var{hscroll} . @var{tab-offset})}. Here @var{hscroll} is
diff --git a/lispref/text.texi b/lispref/text.texi
index e300b345454..1d4dc0fce8a 100644
--- a/lispref/text.texi
+++ b/lispref/text.texi
@@ -207,6 +207,41 @@ This is like @code{buffer-substring}, except that it does not copy text
207properties, just the characters themselves. @xref{Text Properties}. 207properties, just the characters themselves. @xref{Text Properties}.
208@end defun 208@end defun
209 209
210@defun filter-buffer-substring start end &optional delete
211This function passes the buffer text between @var{start} and @var{end}
212through the filter functions specified by the variable
213@code{buffer-substring-filters}, and returns the value from the last
214filter function. If @code{buffer-substring-filters} is @code{nil},
215the value is the unaltered text from the buffer, what
216@code{buffer-substring} would return.
217
218If @var{delete} is non-@code{nil}, this function deletes the text
219between @var{start} and @var{end} after copying it, like
220@code{delete-and-extract-region}.
221
222Lisp code should use this function instead of @code{buffer-substring}
223or @code{delete-and-extract-region} when copying into user-accessible
224data structures such as the kill-ring, X clipboard, and registers.
225Major and minor modes can add functions to
226@code{buffer-substring-filters} to alter such text as it is copied out
227of the buffer.
228@end defun
229
230@defvar buffer-substring-filters
231This variable should be a list of functions that accept a single
232argument, a string, and return a string.
233@code{filter-buffer-substring} passes the buffer substring to the
234first function in this list, and the return value of each function is
235passed to the next function. The return value of the last function is
236used as the return value of @code{filter-buffer-substring}.
237
238As a special convention, point is set to the start of the buffer text
239being operated on (i.e., the @var{start} argument for
240@code{filter-buffer-substring}) before these functions are called.
241
242If this variable is @code{nil}, no filtering is performed.
243@end defvar
244
210@defun buffer-string 245@defun buffer-string
211This function returns the contents of the entire accessible portion of 246This function returns the contents of the entire accessible portion of
212the current buffer as a string. It is equivalent to 247the current buffer as a string. It is equivalent to
diff --git a/lispref/tips.texi b/lispref/tips.texi
index c029ee1d451..538affd7450 100644
--- a/lispref/tips.texi
+++ b/lispref/tips.texi
@@ -452,6 +452,13 @@ Profile your program with the @file{elp} library. See the file
452@file{elp.el} for instructions. 452@file{elp.el} for instructions.
453 453
454@item 454@item
455@cindex @file{benchmark.el}
456@cindex benchmarking
457Check the speed of individual Emacs Lisp forms using the
458@file{benchmark} library. See the functions @code{benchmark-run} and
459@code{benchmark-run-compiled} in @file{benchmark.el}.
460
461@item
455Use iteration rather than recursion whenever possible. 462Use iteration rather than recursion whenever possible.
456Function calls are slow in Emacs Lisp even when a compiled function 463Function calls are slow in Emacs Lisp even when a compiled function
457is calling another compiled function. 464is calling another compiled function.
diff --git a/lispref/vol1.texi b/lispref/vol1.texi
index cc771bf0359..58ab99c91ba 100644
--- a/lispref/vol1.texi
+++ b/lispref/vol1.texi
@@ -258,7 +258,6 @@ Manual, corresponding to GNU Emacs version 19.29.
258 variables, and other such things. 258 variables, and other such things.
259* Display:: Parameters controlling screen usage. 259* Display:: Parameters controlling screen usage.
260 The bell. Waiting for input. 260 The bell. Waiting for input.
261* Calendar:: Customizing the calendar and diary.
262 261
263Appendices 262Appendices
264 263
@@ -989,7 +988,6 @@ Object Internals
989@c include processes.texi 988@c include processes.texi
990@c include os.texi 989@c include os.texi
991@c include display.texi 990@c include display.texi
992@c include calendar.texi
993 991
994@c MOVE to Emacs Manual: include misc-modes.texi 992@c MOVE to Emacs Manual: include misc-modes.texi
995 993
diff --git a/lispref/vol2.texi b/lispref/vol2.texi
index f3cdb6db116..d7a67315c52 100644
--- a/lispref/vol2.texi
+++ b/lispref/vol2.texi
@@ -259,7 +259,6 @@ Manual, corresponding to GNU Emacs version 19.29.
259 variables, and other such things. 259 variables, and other such things.
260* Display:: Parameters controlling screen usage. 260* Display:: Parameters controlling screen usage.
261 The bell. Waiting for input. 261 The bell. Waiting for input.
262* Calendar:: Customizing the calendar and diary.
263 262
264Appendices 263Appendices
265 264
@@ -990,7 +989,6 @@ Object Internals
990@include processes.texi 989@include processes.texi
991@include os.texi 990@include os.texi
992@include display.texi 991@include display.texi
993@include calendar.texi
994 992
995@c MOVE to Emacs Manual: include misc-modes.texi 993@c MOVE to Emacs Manual: include misc-modes.texi
996 994
diff --git a/man/ChangeLog b/man/ChangeLog
index bfe4eab2fa5..d808b9fe6d7 100644
--- a/man/ChangeLog
+++ b/man/ChangeLog
@@ -1,3 +1,227 @@
12005-03-30 Glenn Morris <gmorris@ast.cam.ac.uk>
2
3 * programs.texi (Fortran Motion): Fix previous change.
4
52005-03-25 Katsumi Yamaoka <yamaoka@jpl.org>
6
7 * emacs-mime.texi (Display Customization): Markup fixes.
8 (rfc2047): Update.
9
102005-03-23 Reiner Steib <Reiner.Steib@gmx.de>
11
12 * gnus-faq.texi: Replaced with auto-generated version.
13
142005-03-29 Richard M. Stallman <rms@gnu.org>
15
16 * mule.texi (Single-Byte Character Support): Reinstall the C-x 8 info.
17
182005-03-29 Chong Yidong <cyd@stupidchicken.com>
19
20 * text.texi (Refill): Refer to Long Lines Mode.
21 (Longlines): New node.
22 (Auto Fill): Don't index "word wrap" here.
23 (Filling): Add Longlines to menu.
24
252005-03-29 Richard M. Stallman <rms@gnu.org>
26
27 * xresources.texi: Minor fixes.
28
29 * misc.texi (Emacs Server): Fix Texinfo usage.
30
31 * emacs.texi (Top): Don't use a real section heading for
32 "Detailed Node Listing". Fake it instead.
33
34 * basic.texi (Position Info): Minor cleanup.
35
36 * mule.texi (Input Methods): Minor cleanup.
37
382005-03-29 Glenn Morris <gmorris@ast.cam.ac.uk>
39
40 * programs.texi (ForIndent Vars): `fortran-if-indent' does other
41 constructs as well.
42 (Fortran Motion): Add fortran-end-of-block,
43 fortran-beginning-of-block.
44
452005-03-29 Kenichi Handa <handa@m17n.org>
46
47 * mule.texi (Input Methods): Refer to the command C-u C-x =.
48
49 * basic.texi (Position Info): Update the description about the
50 command C-u C-x =.
51
522005-03-28 Richard M. Stallman <rms@gnu.org>
53
54 * emacs.texi (Top): Use @section for the detailed node listing.
55
56 * calendar.texi: Minor fixes to previous change.
57
58 * programs.texi (Fortran): Small fixes to previous changes.
59
60 * emacs.texi (Top): Update list of subnodes of Dired.
61 Likewise for building.texi.
62
63 * files.texi (File Conveniences): Delete Auto Image File mode.
64
652005-03-28 Chong Yidong <cyd@stupidchicken.com>
66
67 * building.texi (Flymake): New node.
68
69 * custom.texi (Function Keys): Document kp- event types and
70 keypad-setup package.
71
72 * dired.texi (Wdired): New node.
73
74 * files.texi (File Conveniences): Reorder entries.
75 Explain how to turn on Auto-image-file mode.
76 Document Thumbs mode.
77
78 * mule.texi (Specify Coding): Document recode-region and
79 recode-file-name.
80
81 * programs.texi (Program Modes): Add Conf mode and DNS mode.
82
832005-03-27 Luc Teirlinck <teirllm@auburn.edu>
84
85 * commands.texi (Keys): M-o is now a prefix key.
86
872005-03-27 Glenn Morris <gmorris@ast.cam.ac.uk>
88
89 * programs.texi: Reformat and update copyright years.
90 (Fortran): Update section.
91
922005-03-26 Luc Teirlinck <teirllm@auburn.edu>
93
94 * files.texi: Several small changes in addition to:
95 (Visiting): Change xref for Dialog Boxes to ref.
96 (Version Headers): Replace references to obsolete var
97 `vc-header-alist' with `vc-BACKEND-header'.
98 (Customizing VC): Update value of `vc-handled-backends'.
99
1002005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk>
101
102 * emacs-xtra.texi (Advanced Calendar/Diary Usage): New section;
103 move here from Emacs Lisp Reference Manual.
104 * calendar.texi (Calendar/Diary, Diary Commands)
105 (Special Diary Entries, Importing Diary): Change some xrefs to
106 point to emacs-xtra rather than elisp.
107
108 * emacs-xtra.texi (Calendar Customizing): Move
109 view-diary-entries-initially, view-calendar-holidays-initially,
110 mark-diary-entries-in-calendar, mark-holidays-in-calendar to main
111 Emacs Manual.
112 (Appt Customizing): Merge entire section into main Emacs Manual.
113 * calendar.texi (Holidays): Move view-calendar-holidays-initially,
114 mark-holidays-in-calendar here from emacs-xtra.
115 (Displaying the Diary): Move view-diary-entries-initially,
116 mark-diary-entries-in-calendar here from emacs-xtra.
117 (Appointments): Move appt-display-mode-line,
118 appt-display-duration, appt-disp-window-function,
119 appt-delete-window-function here from emacs-xtra.
120
121 * calendar.texi: Update and reformat copyright.
122 Change all @xrefs to the non-printing emacs-xtra to @inforefs.
123 (Calendar/Diary): Menu now only on Mouse-3, not C-Mouse-3.
124 (Diary): Refer to `diary-file' rather than ~/diary.
125 (Diary Commands): Rename node to "Displaying the Diary".
126 * emacs.texi (Top): Rename "Diary Commands" section.
127 * misc.texi (Hardcopy): Rename "Diary Commands" xref.
128
1292005-03-26 Eli Zaretskii <eliz@gnu.org>
130
131 * misc.texi (Emacs Server): Fix the command for setting
132 server-name. Add an xref to Invoking emacsclient.
133
134 * help.texi (Help Summary): Clarify when "C-h ." will do something
135 nontrivial.
136 (Apropos): Add cindex entry for apropos-sort-by-scores.
137
138 * display.texi (Text Display): Add index entries for how no-break
139 characters are displayed.
140
1412005-03-26 Stephan Stahl <stahl@eos.franken.de> (tiny change)
142
143 * dired-x.texi (Multiple Dired Directories): default-directory was
144 renamed to dired-default-directory.
145
1462005-03-26 Eli Zaretskii <eliz@gnu.org>
147
148 * files.texi (Visiting): Fix cross-references introduced with the
149 last change.
150
151 * xresources.texi (GTK resources): Fix last change.
152
1532005-03-26 Jay Belanger <belanger@truman.edu>
154
155 * calc.texi (Simplifying Formulas, Rewrite Rules): Change
156 description of top and bottom of fraction.
157 (Modulo Forms): Move description of how to create modulo forms to
158 earlier in the section.
159 (Fraction Mode): Suggest using : to get a fraction by dividing.
160 (Basic Arithmetic): Adjust placement of command name.
161 (Truncating the Stack): Emphasize that "hidden" entries are still
162 visible.
163 (Installation): Move discussion of printing manual to "About This
164 Manual".
165 (About This Manual): Mention how to print the manual.
166 (Reporting Bugs): Remove first person.
167 (Building Vectors): Add algebraic version of append.
168 (Manipulating Vectors): Fix algebraic version of calc-reverse-vector.
169 (Grouping Digits): Fix typo.
170
1712005-03-25 Chong Yidong <cyd@stupidchicken.com>
172
173 * xresources.texi (X Resources): GTK options documented too.
174 (Resources): Clarify meaning of program name.
175 (Table of Resources): Add visualClass.
176 (GTK resources): Rewrite.
177 (GTK widget names, GTK Names in Emacs, GTK styles): Cleanups.
178
179 * display.texi (Text Display): Mention non-breaking spaces.
180
181 * files.texi (Reverting): Document auto-revert-check-vc-info.
182
183 * frames.texi (Mouse Commands): Document
184 x-mouse-click-focus-ignore-position and mouse-drag-copy-region.
185
186 * help.texi (Help Summary): Add `C-h .'.
187 (Apropos): Apropos accepts a list of search terms.
188 Document apropos-sort-by-scores.
189 (Help Echo): Document display-local-help.
190
191 * misc.texi (Emacs Server): Document server-name.
192 (Invoking emacsclient): Document -s option for server names.
193
194 * text.texi (Outline Visibility): Introduce "current heading
195 line" (commands can be called with point on a body line).
196 Re-order table to follow the sequence of discussion.
197 hide-body won't hide lines before first header line.
198 (TeX Mode): Add DocTeX mode.
199
2002005-03-25 Werner Lemberg <wl@gnu.org>
201
202 * calc.texi, cl.texi, gnus.texi, idlwave.texi, reftex.texi: Replace
203 `legal' with `valid'.
204
2052005-03-25 Werner Lemberg <wl@gnu.org>
206
207 * calc.texi, reftex.texi: Replace `illegal' with `invalid'.
208
2092005-03-24 Jay Belanger <belanger@truman.edu>
210
211 * calc.texi (General Mode Commands)
212 (Mode Settings in Embedded Mode): Added some explanation of
213 recording mode settings.
214
2152005-03-24 Richard M. Stallman <rms@gnu.org>
216
217 * mule.texi (Single-Byte Character Support): Delete mention
218 of iso-acc.el and iso-transl.el.
219
220 * calc.texi: Remove praise of non-free software.
221
222 * idlwave.texi: Don't say where to get IDL or its non-free manual.
223 (Installation): Node deleted.
224
12005-03-23 Lute Kamstra <lute@gnu.org> 2252005-03-23 Lute Kamstra <lute@gnu.org>
2 226
3 * search.texi (Non-ASCII Isearch): Rename from Non-Ascii Isearch. 227 * search.texi (Non-ASCII Isearch): Rename from Non-Ascii Isearch.
diff --git a/man/basic.texi b/man/basic.texi
index 2f8c2bc1764..ad3cfbca88a 100644
--- a/man/basic.texi
+++ b/man/basic.texi
@@ -677,36 +677,57 @@ point=26957 of 26956(100%) column 0
677@cindex character set of character at point 677@cindex character set of character at point
678@cindex font of character at point 678@cindex font of character at point
679@cindex text properties at point 679@cindex text properties at point
680 @w{@kbd{C-u C-x =}} displays additional information about a 680 @w{@kbd{C-u C-x =}} displays these additional information about a
681character, including the character set name and the codes that 681character.
682identify the character within that character set; @acronym{ASCII} characters are 682
683identified as belonging to the @code{ascii} character set. It also 683@itemize @bullet
684shows the character's syntax, categories, and encodings both 684@item
685internally in the buffer and externally if you save the file. It also 685The character set name, and the codes that identify the character
686shows the character's text properties (@pxref{Text Properties,,, 686within that character set; @acronym{ASCII} characters are identified
687as belonging to the @code{ascii} character set.
688
689@item
690The character's syntax and categories.
691
692@item
693The character's encodings, both internally in the buffer, and externally
694if you were to save the file.
695
696@item
697What to type to input the character in the current input method
698(if it supports the character).
699
700@item
701If you are running Emacs on a window system, the font name and glyph
702code for the character. If you are running Emacs on a terminal, the
703code(s) sent to the terminal.
704
705@item
706The character's text properties (@pxref{Text Properties,,,
687elisp, the Emacs Lisp Reference Manual}), and any overlays containing it 707elisp, the Emacs Lisp Reference Manual}), and any overlays containing it
688(@pxref{Overlays,,, elisp, the same manual}). 708(@pxref{Overlays,,, elisp, the same manual}).
709@end itemize
689 710
690 Here's an example showing the Latin-1 character A with grave accent, 711 Here's an example showing the Latin-1 character A with grave accent,
691in a buffer whose coding system is @code{iso-2022-7bit}, whose 712in a buffer whose coding system is @code{iso-latin-1}, whose
692terminal coding system is @code{iso-latin-1} (so the terminal actually 713terminal coding system is @code{iso-latin-1} (so the terminal actually
693displays the character as @samp{@`A}), and which has font-lock-mode 714displays the character as @samp{@`A}), and which has font-lock-mode
694(@pxref{Font Lock}) enabled: 715(@pxref{Font Lock}) enabled:
695 716
696@smallexample 717@smallexample
697 character: @`A (04300, 2240, 0x8c0) 718 character: @`A (04300, 2240, 0x8c0, U+00C0)
698 charset: latin-iso8859-1 719 charset: latin-iso8859-1
699 (Right-Hand Part of Latin Alphabet 1@dots{} 720 (Right-Hand Part of Latin Alphabet 1@dots{}
700 code point: 64 721 code point: 64
701 syntax: w which means: word 722 syntax: w which means: word
702 category: l:Latin 723 category: l:Latin
703 buffer code: 0x81 0xC0 724 to input: type "`A"
704 file code: ESC 2C 41 40 (encoded by coding system iso-2022-7bit) 725buffer code: 0x81 0xC0
705terminal code: C0 726 file code: ESC 2C 41 40 (encoded by coding system iso-2022-7bit)
706 727 display: terminal code 0xC0
707Text properties 728
708 font-lock-face: font-lock-variable-name-face 729There are text properties here:
709 fontified: t 730 fontified t
710@end smallexample 731@end smallexample
711 732
712@node Arguments 733@node Arguments
diff --git a/man/building.texi b/man/building.texi
index 50490e34dd5..10b7b8053d2 100644
--- a/man/building.texi
+++ b/man/building.texi
@@ -18,6 +18,7 @@ in the larger process of developing and maintaining programs.
18* Compilation Shell:: Customizing your shell properly 18* Compilation Shell:: Customizing your shell properly
19 for use in the compilation buffer. 19 for use in the compilation buffer.
20* Grep Searching:: Searching with grep. 20* Grep Searching:: Searching with grep.
21* Flymake:: Finding syntax errors on the fly.
21* Debuggers:: Running symbolic debuggers for non-Lisp programs. 22* Debuggers:: Running symbolic debuggers for non-Lisp programs.
22* Executing Lisp:: Various modes for editing Lisp programs, 23* Executing Lisp:: Various modes for editing Lisp programs,
23 with different facilities for running 24 with different facilities for running
@@ -337,6 +338,31 @@ initial default for the command---one that runs both @code{find} and
337@code{grep}, so as to search every file in a directory tree. See also 338@code{grep}, so as to search every file in a directory tree. See also
338the @code{find-grep-dired} command, in @ref{Dired and Find}. 339the @code{find-grep-dired} command, in @ref{Dired and Find}.
339 340
341@node Flymake
342@section Finding Syntax Errors On The Fly
343@cindex checking syntax
344
345 Flymake mode is a minor mode that performs on-the-fly syntax
346checking for many programming and markup languages, including C, C++,
347Perl, HTML, and @TeX{}/La@TeX{}. It is somewhat analogous to Flyspell
348mode, which performs spell checking for ordinary human languages in a
349similar fashion (@pxref{Spelling}). As you edit a file, Flymake mode
350runs an appropriate syntax checking tool in the background, using a
351temporary copy of the buffer. It then parses the error and warning
352messages, and highlights the erroneous lines in the buffer. The
353syntax checking tool used depends on the language; for example, for
354C/C++ files this is usually the C compiler. Flymake can also use
355build tools such as @code{make} for checking complicated projects.
356
357 To activate Flymake mode, type @kbd{M-x flymake-mode}. You can move
358to the errors spotted by Flymake mode with @kbd{M-x
359flymake-goto-next-error} and @kbd{M-x flymake-goto-prev-error}. To
360display any error messages associated with the current line, use
361@kbd{M-x flymake-display-err-menu-for-current-line}.
362
363 For more details about using Flymake, see @ref{Top, Flymake,
364Flymake, flymake, The Flymake Manual}.
365
340@node Debuggers 366@node Debuggers
341@section Running Debuggers Under Emacs 367@section Running Debuggers Under Emacs
342@cindex debuggers 368@cindex debuggers
diff --git a/man/calc.texi b/man/calc.texi
index c45fd8cd227..07c33206f28 100644
--- a/man/calc.texi
+++ b/man/calc.texi
@@ -83,7 +83,7 @@
83@copying 83@copying
84This file documents Calc, the GNU Emacs calculator. 84This file documents Calc, the GNU Emacs calculator.
85 85
86Copyright (C) 1990, 1991, 2001, 2002 Free Software Foundation, Inc. 86Copyright (C) 1990, 1991, 2001, 2002, 2005 Free Software Foundation, Inc.
87 87
88@quotation 88@quotation
89Permission is granted to copy, distribute and/or modify this document 89Permission is granted to copy, distribute and/or modify this document
@@ -111,14 +111,15 @@ Software Foundation raise funds for GNU development.''
111@center GNU Emacs Calc Version 2.02g 111@center GNU Emacs Calc Version 2.02g
112@c [volume] 112@c [volume]
113@sp 1 113@sp 1
114@center January 2002 114@center March 2005
115@sp 5 115@sp 5
116@center Dave Gillespie 116@center Dave Gillespie
117@center daveg@@synaptics.com 117@center daveg@@synaptics.com
118@page 118@page
119 119
120@vskip 0pt plus 1filll 120@vskip 0pt plus 1filll
121Copyright @copyright{} 1990, 1991, 2001, 2002 Free Software Foundation, Inc. 121Copyright @copyright{} 1990, 1991, 2001, 2002, 2005
122Free Software Foundation, Inc.
122@insertcopying 123@insertcopying
123@end titlepage 124@end titlepage
124 125
@@ -476,10 +477,9 @@ large and might be intimidating to the first-time user. If you plan to
476use Calc only as a traditional desk calculator, all you really need to 477use Calc only as a traditional desk calculator, all you really need to
477read is the ``Getting Started'' chapter of this manual and possibly the 478read is the ``Getting Started'' chapter of this manual and possibly the
478first few sections of the tutorial. As you become more comfortable with 479first few sections of the tutorial. As you become more comfortable with
479the program you can learn its additional features. In terms of efficiency, 480the program you can learn its additional features. Calc does not
480scope and depth, Calc cannot replace a powerful tool like Mathematica. 481have the scope and depth of a fully-functional symbolic math package,
481But Calc has the advantages of convenience, portability, and availability 482but Calc has the advantages of convenience, portability, and freedom.
482of the source code. And, of course, it's free!
483 483
484@node About This Manual, Notations Used in This Manual, What is Calc, Getting Started 484@node About This Manual, Notations Used in This Manual, What is Calc, Getting Started
485@section About This Manual 485@section About This Manual
@@ -546,8 +546,35 @@ you can also go to the part of the manual describing any Calc key,
546function, or variable using @w{@kbd{h k}}, @kbd{h f}, or @kbd{h v}, 546function, or variable using @w{@kbd{h k}}, @kbd{h f}, or @kbd{h v},
547respectively. @xref{Help Commands}. 547respectively. @xref{Help Commands}.
548 548
549Printed copies of this manual are also available from the Free Software 549The Calc manual can be printed, but because the manual is so large, you
550Foundation. 550should only make a printed copy if you really need it. To print the
551manual, you will need the @TeX{} typesetting program (this is a free
552program by Donald Knuth at Stanford University) as well as the
553@file{texindex} program and @file{texinfo.tex} file, both of which can
554be obtained from the FSF as part of the @code{texinfo} package.
555To print the Calc manual in one huge tome, you will need the
556source code to this manual, @file{calc.texi}, available as part of the
557Emacs source. Once you have this file, type @kbd{texi2dvi calc.texi}.
558Alternatively, change to the @file{man} subdirectory of the Emacs
559source distribution, and type @kbd{make calc.dvi}. (Don't worry if you
560get some ``overfull box'' warnings while @TeX{} runs.)
561The result will be a device-independent output file called
562@file{calc.dvi}, which you must print in whatever way is right
563for your system. On many systems, the command is
564
565@example
566lpr -d calc.dvi
567@end example
568
569@noindent
570or
571
572@example
573dvips calc.dvi
574@end example
575
576@c Printed copies of this manual are also available from the Free Software
577@c Foundation.
551 578
552@node Notations Used in This Manual, Demonstration of Calc, About This Manual, Getting Started 579@node Notations Used in This Manual, Demonstration of Calc, About This Manual, Getting Started
553@section Notations Used in This Manual 580@section Notations Used in This Manual
@@ -1365,13 +1392,13 @@ to look around for other data types that might be worth having.
1365 1392
1366Around this time, my friend Rick Koshi showed me his nifty new HP-28 1393Around this time, my friend Rick Koshi showed me his nifty new HP-28
1367calculator. It allowed the user to manipulate formulas as well as 1394calculator. It allowed the user to manipulate formulas as well as
1368numerical quantities, and it could also operate on matrices. I decided 1395numerical quantities, and it could also operate on matrices. I
1369that these would be good for Calc to have, too. And once things had 1396decided that these would be good for Calc to have, too. And once
1370gone this far, I figured I might as well take a look at serious algebra 1397things had gone this far, I figured I might as well take a look at
1371systems like Mathematica, Macsyma, and Maple for further ideas. Since 1398serious algebra systems for further ideas. Since these systems did
1372these systems did far more than I could ever hope to implement, I decided 1399far more than I could ever hope to implement, I decided to focus on
1373to focus on rewrite rules and other programming features so that users 1400rewrite rules and other programming features so that users could
1374could implement what they needed for themselves. 1401implement what they needed for themselves.
1375 1402
1376Rick complained that matrices were hard to read, so I put in code to 1403Rick complained that matrices were hard to read, so I put in code to
1377format them in a 2D style. Once these routines were in place, Big mode 1404format them in a 2D style. Once these routines were in place, Big mode
@@ -1412,16 +1439,14 @@ parts. Bob Weiner helped immensely with the Lucid Emacs port.
1412Among the books used in the development of Calc were Knuth's @emph{Art 1439Among the books used in the development of Calc were Knuth's @emph{Art
1413of Computer Programming} (especially volume II, @emph{Seminumerical 1440of Computer Programming} (especially volume II, @emph{Seminumerical
1414Algorithms}); @emph{Numerical Recipes} by Press, Flannery, Teukolsky, 1441Algorithms}); @emph{Numerical Recipes} by Press, Flannery, Teukolsky,
1415and Vetterling; Bevington's @emph{Data Reduction and Error Analysis for 1442and Vetterling; Bevington's @emph{Data Reduction and Error Analysis
1416the Physical Sciences}; @emph{Concrete Mathematics} by Graham, Knuth, 1443for the Physical Sciences}; @emph{Concrete Mathematics} by Graham,
1417and Patashnik; Steele's @emph{Common Lisp, the Language}; the @emph{CRC 1444Knuth, and Patashnik; Steele's @emph{Common Lisp, the Language}; the
1418Standard Math Tables} (William H. Beyer, ed.); and Abramowitz and 1445@emph{CRC Standard Math Tables} (William H. Beyer, ed.); and
1419Stegun's venerable @emph{Handbook of Mathematical Functions}. I 1446Abramowitz and Stegun's venerable @emph{Handbook of Mathematical
1420consulted the user's manuals for the HP-28 and HP-48 calculators, as 1447Functions}. Also, of course, Calc could not have been written without
1421well as for the programs Mathematica, SMP, Macsyma, Maple, MathCAD, 1448the excellent @emph{GNU Emacs Lisp Reference Manual}, by Bil Lewis and
1422Gnuplot, and others. Also, of course, Calc could not have been written 1449Dan LaLiberte.
1423without the excellent @emph{GNU Emacs Lisp Reference Manual}, by Bil
1424Lewis and Dan LaLiberte.
1425 1450
1426Final thanks go to Richard Stallman, without whose fine implementations 1451Final thanks go to Richard Stallman, without whose fine implementations
1427of the Emacs editor, language, and environment, Calc would have been 1452of the Emacs editor, language, and environment, Calc would have been
@@ -1503,8 +1528,8 @@ general areas.
1503 1528
1504@ifinfo 1529@ifinfo
1505You may wish to print out a copy of the Calc Summary and keep notes on 1530You may wish to print out a copy of the Calc Summary and keep notes on
1506it as you learn Calc. @xref{Installation}, to see how to make a printed 1531it as you learn Calc. @xref{About This Manual}, to see how to make a
1507summary. @xref{Summary}. 1532printed summary. @xref{Summary}.
1508@end ifinfo 1533@end ifinfo
1509@iftex 1534@iftex
1510The Calc Summary at the end of the reference manual includes some blank 1535The Calc Summary at the end of the reference manual includes some blank
@@ -5601,8 +5626,8 @@ entering them on the fly.
5601 5626
5602(@bullet{}) @strong{Exercise 1.} Type @kbd{m s} to get Symbolic 5627(@bullet{}) @strong{Exercise 1.} Type @kbd{m s} to get Symbolic
5603mode, then enter the formula @samp{@w{(2 + sqrt(2))} / @w{(1 + sqrt(2))}}. 5628mode, then enter the formula @samp{@w{(2 + sqrt(2))} / @w{(1 + sqrt(2))}}.
5604Using a rewrite rule, simplify this formula by multiplying both 5629Using a rewrite rule, simplify this formula by multiplying the top and
5605sides by the conjugate @w{@samp{1 - sqrt(2)}}. The result will have 5630bottom by the conjugate @w{@samp{1 - sqrt(2)}}. The result will have
5606to be expanded by the distributive law; do this with another 5631to be expanded by the distributive law; do this with another
5607rewrite. @xref{Rewrites Answer 1, 1}. (@bullet{}) 5632rewrite. @xref{Rewrites Answer 1, 1}. (@bullet{})
5608 5633
@@ -11294,6 +11319,21 @@ where @var{a} and @var{M} are real numbers or HMS forms, and
11294In many applications @expr{a} and @expr{M} will be 11319In many applications @expr{a} and @expr{M} will be
11295integers but this is not required. 11320integers but this is not required.
11296 11321
11322@ignore
11323@mindex M
11324@end ignore
11325@kindex M (modulo forms)
11326@ignore
11327@mindex mod
11328@end ignore
11329@tindex mod (operator)
11330To create a modulo form during numeric entry, press the shift-@kbd{M}
11331key to enter the word @samp{mod}. As a special convenience, pressing
11332shift-@kbd{M} a second time automatically enters the value of @expr{M}
11333that was most recently used before. During algebraic entry, either
11334type @samp{mod} by hand or press @kbd{M-m} (that's @kbd{@key{META}-m}).
11335Once again, pressing this a second time enters the current modulo.
11336
11297Modulo forms are not to be confused with the modulo operator @samp{%}. 11337Modulo forms are not to be confused with the modulo operator @samp{%}.
11298The expression @samp{27 % 10} means to compute 27 modulo 10 to produce 11338The expression @samp{27 % 10} means to compute 27 modulo 10 to produce
11299the result 7. Further computations treat this 7 as just a regular integer. 11339the result 7. Further computations treat this 7 as just a regular integer.
@@ -11326,24 +11366,6 @@ in the sense of reducing
11326modulo @expr{M}, this is not a useful definition from the 11366modulo @expr{M}, this is not a useful definition from the
11327number-theoretical point of view.) 11367number-theoretical point of view.)
11328 11368
11329@ignore
11330@mindex M
11331@end ignore
11332@kindex M (modulo forms)
11333@ignore
11334@mindex mod
11335@end ignore
11336@tindex mod (operator)
11337To create a modulo form during numeric entry, press the shift-@kbd{M}
11338key to enter the word @samp{mod}. As a special convenience, pressing
11339shift-@kbd{M} a second time automatically enters the value of @expr{M}
11340that was most recently used before. During algebraic entry, either
11341type @samp{mod} by hand or press @kbd{M-m} (that's @kbd{@key{META}-m}).
11342Once again, pressing this a second time enters the current modulo.
11343
11344You can also use @kbd{v p} and @kbd{%} to modify modulo forms.
11345@xref{Building Vectors}. @xref{Basic Arithmetic}.
11346
11347It is possible to mix HMS forms and modulo forms. For example, an 11369It is possible to mix HMS forms and modulo forms. For example, an
11348HMS form modulo 24 could be used to manipulate clock times; an HMS 11370HMS form modulo 24 could be used to manipulate clock times; an HMS
11349form modulo 360 would be suitable for angles. Making the modulo @expr{M} 11371form modulo 360 would be suitable for angles. Making the modulo @expr{M}
@@ -11356,6 +11378,9 @@ Modulo forms cannot have variables or formulas for components. If you
11356enter the formula @samp{(x + 2) mod 5}, Calc propagates the modulus 11378enter the formula @samp{(x + 2) mod 5}, Calc propagates the modulus
11357to each of the coefficients: @samp{(1 mod 5) x + (2 mod 5)}. 11379to each of the coefficients: @samp{(1 mod 5) x + (2 mod 5)}.
11358 11380
11381You can use @kbd{v p} and @kbd{%} to modify modulo forms.
11382@xref{Packing and Unpacking}. @xref{Basic Arithmetic}.
11383
11359@ignore 11384@ignore
11360@starindex 11385@starindex
11361@end ignore 11386@end ignore
@@ -12262,9 +12287,13 @@ appended to the end of the file.
12262@kindex m R 12287@kindex m R
12263@pindex calc-mode-record-mode 12288@pindex calc-mode-record-mode
12264The @kbd{m R} (@code{calc-mode-record-mode}) command tells Calc to 12289The @kbd{m R} (@code{calc-mode-record-mode}) command tells Calc to
12265record the new mode settings (as if by pressing @kbd{m m}) every 12290record all the mode settings (as if by pressing @kbd{m m}) every
12266time a mode setting changes. If Embedded mode is enabled, other 12291time a mode setting changes. If the modes are saved this way, then this
12267options are available; @pxref{Mode Settings in Embedded Mode}. 12292``automatic mode recording'' mode is also saved.
12293Type @kbd{m R} again to disable this method of recording the mode
12294settings. To turn it off permanently, the @kbd{m m} command will also be
12295necessary. (If Embedded mode is enabled, other options for recording
12296the modes are available; @pxref{Mode Settings in Embedded Mode}.)
12268 12297
12269@kindex m F 12298@kindex m F
12270@pindex calc-settings-file-name 12299@pindex calc-settings-file-name
@@ -12485,8 +12514,10 @@ of the above example situations would produce polar complex numbers.
12485Division of two integers normally yields a floating-point number if the 12514Division of two integers normally yields a floating-point number if the
12486result cannot be expressed as an integer. In some cases you would 12515result cannot be expressed as an integer. In some cases you would
12487rather get an exact fractional answer. One way to accomplish this is 12516rather get an exact fractional answer. One way to accomplish this is
12488to multiply fractions instead: @kbd{6 @key{RET} 1:4 *} produces @expr{3:2} 12517to use the @kbd{:} (@code{calc-fdiv}) [@code{fdiv}] command, which
12489even though @kbd{6 @key{RET} 4 /} produces @expr{1.5}. 12518divides the two integers on the top of the stack to produce a fraction:
12519@kbd{6 @key{RET} 4 :} produces @expr{3:2} even though
12520@kbd{6 @key{RET} 4 /} produces @expr{1.5}.
12490 12521
12491@kindex m f 12522@kindex m f
12492@pindex calc-frac-mode 12523@pindex calc-frac-mode
@@ -13291,7 +13322,7 @@ are displayed in clumps of 3 or 4 (depending on the current radix)
13291separated by commas. 13322separated by commas.
13292 13323
13293The @kbd{d g} command toggles grouping on and off. 13324The @kbd{d g} command toggles grouping on and off.
13294With a numerix prefix of 0, this command displays the current state of 13325With a numeric prefix of 0, this command displays the current state of
13295the grouping flag; with an argument of minus one it disables grouping; 13326the grouping flag; with an argument of minus one it disables grouping;
13296with a positive argument @expr{N} it enables grouping on every @expr{N} 13327with a positive argument @expr{N} it enables grouping on every @expr{N}
13297digits. For floating-point numbers, grouping normally occurs only 13328digits. For floating-point numbers, grouping normally occurs only
@@ -13797,11 +13828,12 @@ The @kbd{d t} (@code{calc-truncate-stack}) command moves the @samp{.}@:
13797line that marks the top-of-stack up or down in the Calculator buffer. 13828line that marks the top-of-stack up or down in the Calculator buffer.
13798The number right above that line is considered to the be at the top of 13829The number right above that line is considered to the be at the top of
13799the stack. Any numbers below that line are ``hidden'' from all stack 13830the stack. Any numbers below that line are ``hidden'' from all stack
13800operations. This is similar to the Emacs ``narrowing'' feature, except 13831operations (although still visible to the user). This is similar to the
13801that the values below the @samp{.} are @emph{visible}, just temporarily 13832Emacs ``narrowing'' feature, except that the values below the @samp{.}
13802frozen. This feature allows you to keep several independent calculations 13833are @emph{visible}, just temporarily frozen. This feature allows you to
13803running at once in different parts of the stack, or to apply a certain 13834keep several independent calculations running at once in different parts
13804command to an element buried deep in the stack. 13835of the stack, or to apply a certain command to an element buried deep in
13836the stack.
13805 13837
13806Pressing @kbd{d t} by itself moves the @samp{.} to the line the cursor 13838Pressing @kbd{d t} by itself moves the @samp{.} to the line the cursor
13807is on. Thus, this line and all those below it become hidden. To un-hide 13839is on. Thus, this line and all those below it become hidden. To un-hide
@@ -13940,7 +13972,7 @@ Without being switched into C mode first, Calc would have misinterpreted
13940the brackets in @samp{a[1]} and @samp{a[2]}, would not have known that 13972the brackets in @samp{a[1]} and @samp{a[2]}, would not have known that
13941@code{atan} was equivalent to Calc's built-in @code{arctan} function, 13973@code{atan} was equivalent to Calc's built-in @code{arctan} function,
13942and would have written the formula back with notations (like implicit 13974and would have written the formula back with notations (like implicit
13943multiplication) which would not have been legal for a C program. 13975multiplication) which would not have been valid for a C program.
13944 13976
13945As another example, suppose you are maintaining a C program and a La@TeX{} 13977As another example, suppose you are maintaining a C program and a La@TeX{}
13946document, each of which needs a copy of the same formula. You can grab the 13978document, each of which needs a copy of the same formula. You can grab the
@@ -14641,8 +14673,7 @@ if the matrix justification mode so specifies.
14641@pindex calc-mathematica-language 14673@pindex calc-mathematica-language
14642@cindex Mathematica language 14674@cindex Mathematica language
14643The @kbd{d M} (@code{calc-mathematica-language}) command selects the 14675The @kbd{d M} (@code{calc-mathematica-language}) command selects the
14644conventions of Mathematica, a powerful and popular mathematical tool 14676conventions of Mathematica. Notable differences in Mathematica mode
14645from Wolfram Research, Inc. Notable differences in Mathematica mode
14646are that the names of built-in functions are capitalized, and function 14677are that the names of built-in functions are capitalized, and function
14647calls use square brackets instead of parentheses. Thus the Calc 14678calls use square brackets instead of parentheses. Thus the Calc
14648formula @samp{sin(2 x)} is entered and displayed @w{@samp{Sin[2 x]}} in 14679formula @samp{sin(2 x)} is entered and displayed @w{@samp{Sin[2 x]}} in
@@ -14665,8 +14696,7 @@ Subscripts use double square brackets: @samp{a[[i]]}.
14665@pindex calc-maple-language 14696@pindex calc-maple-language
14666@cindex Maple language 14697@cindex Maple language
14667The @kbd{d W} (@code{calc-maple-language}) command selects the 14698The @kbd{d W} (@code{calc-maple-language}) command selects the
14668conventions of Maple, another mathematical tool from the University 14699conventions of Maple.
14669of Waterloo.
14670 14700
14671Maple's language is much like C. Underscores are allowed in symbol 14701Maple's language is much like C. Underscores are allowed in symbol
14672names; square brackets are used for subscripts; explicit @samp{*}s for 14702names; square brackets are used for subscripts; explicit @samp{*}s for
@@ -15472,7 +15502,7 @@ backslashes in tokens.)
15472This will parse @samp{3 bad token 4 /"\ 5} to @samp{silly(3,4,5)}. 15502This will parse @samp{3 bad token 4 /"\ 5} to @samp{silly(3,4,5)}.
15473 15503
15474The token @kbd{#} has a predefined meaning in Calc's formula parser; 15504The token @kbd{#} has a predefined meaning in Calc's formula parser;
15475it is not legal to use @samp{"#"} in a syntax rule. However, longer 15505it is not valid to use @samp{"#"} in a syntax rule. However, longer
15476tokens that include the @samp{#} character are allowed. Also, while 15506tokens that include the @samp{#} character are allowed. Also, while
15477@samp{"$"} and @samp{"\""} are allowed as tokens, their presence in 15507@samp{"$"} and @samp{"\""} are allowed as tokens, their presence in
15478the syntax table will prevent those characters from working in their 15508the syntax table will prevent those characters from working in their
@@ -16038,7 +16068,7 @@ commands work by removing the top one or two values from the stack,
16038performing the desired operation, and pushing the result back onto the 16068performing the desired operation, and pushing the result back onto the
16039stack. If the operation cannot be performed, the result pushed is a 16069stack. If the operation cannot be performed, the result pushed is a
16040formula instead of a number, such as @samp{2/0} (because division by zero 16070formula instead of a number, such as @samp{2/0} (because division by zero
16041is illegal) or @samp{sqrt(x)} (because the argument @samp{x} is a formula). 16071is invalid) or @samp{sqrt(x)} (because the argument @samp{x} is a formula).
16042 16072
16043Most of the commands described here can be invoked by a single keystroke. 16073Most of the commands described here can be invoked by a single keystroke.
16044Some of the more obscure ones are two-letter sequences beginning with 16074Some of the more obscure ones are two-letter sequences beginning with
@@ -16242,7 +16272,7 @@ must be positive real number.
16242@kindex : 16272@kindex :
16243@pindex calc-fdiv 16273@pindex calc-fdiv
16244@tindex fdiv 16274@tindex fdiv
16245The @kbd{:} (@code{calc-fdiv}) command [@code{fdiv} function in a formula] 16275The @kbd{:} (@code{calc-fdiv}) [@code{fdiv}] command
16246divides the two integers on the top of the stack to produce a fractional 16276divides the two integers on the top of the stack to produce a fractional
16247result. This is a convenient shorthand for enabling Fraction mode (with 16277result. This is a convenient shorthand for enabling Fraction mode (with
16248@kbd{m f}) temporarily and using @samp{/}. Note that during numeric entry 16278@kbd{m f}) temporarily and using @samp{/}. Note that during numeric entry
@@ -17965,14 +17995,6 @@ and the depreciation is zero for all subsequent periods. The @code{ddb}
17965function returns the amount the book value decreased in the specified 17995function returns the amount the book value decreased in the specified
17966period. 17996period.
17967 17997
17968The Calc financial function names were borrowed mostly from Microsoft
17969Excel and Borland's Quattro. The @code{ratel} function corresponds to
17970@samp{@@CGR} in Borland's Reflex. The @code{nper} and @code{nperl}
17971functions correspond to @samp{@@TERM} and @samp{@@CTERM} in Quattro,
17972respectively. Beware that the Calc functions may take their arguments
17973in a different order than the corresponding functions in your favorite
17974spreadsheet.
17975
17976@node Binary Functions, , Financial Functions, Arithmetic 17998@node Binary Functions, , Financial Functions, Arithmetic
17977@section Binary Number Functions 17999@section Binary Number Functions
17978 18000
@@ -19536,7 +19558,7 @@ packing mode (an integer or a vector of integers) and @var{items}
19536is a vector of objects to be packed (re-packed, really) according 19558is a vector of objects to be packed (re-packed, really) according
19537to that mode. For example, @samp{pack([3, -4], [a,b,c,d,e,f])} 19559to that mode. For example, @samp{pack([3, -4], [a,b,c,d,e,f])}
19538yields @samp{[a +/- b, @w{c +/- d}, e +/- f]}. The function is 19560yields @samp{[a +/- b, @w{c +/- d}, e +/- f]}. The function is
19539left in symbolic form if the packing mode is illegal, or if the 19561left in symbolic form if the packing mode is invalid, or if the
19540number of data items does not match the number of items required 19562number of data items does not match the number of items required
19541by the mode. 19563by the mode.
19542 19564
@@ -19630,7 +19652,7 @@ subtracted, multiplied, and divided; @pxref{Basic Arithmetic}.
19630@mindex @null 19652@mindex @null
19631@end ignore 19653@end ignore
19632@tindex | 19654@tindex |
19633The @kbd{|} (@code{calc-concat}) command ``concatenates'' two vectors 19655The @kbd{|} (@code{calc-concat}) [@code{vconcat}] command ``concatenates'' two vectors
19634into one. For example, after @kbd{@w{[ 1 , 2 ]} [ 3 , 4 ] |}, the stack 19656into one. For example, after @kbd{@w{[ 1 , 2 ]} [ 3 , 4 ] |}, the stack
19635will contain the single vector @samp{[1, 2, 3, 4]}. If the arguments 19657will contain the single vector @samp{[1, 2, 3, 4]}. If the arguments
19636are matrices, the rows of the first matrix are concatenated with the 19658are matrices, the rows of the first matrix are concatenated with the
@@ -20031,7 +20053,7 @@ a one-column matrix.
20031@kindex v v 20053@kindex v v
20032@pindex calc-reverse-vector 20054@pindex calc-reverse-vector
20033@tindex rev 20055@tindex rev
20034The @kbd{v v} (@code{calc-reverse-vector}) [@code{vec}] command reverses 20056The @kbd{v v} (@code{calc-reverse-vector}) [@code{rev}] command reverses
20035a vector end-for-end. Given a matrix, it reverses the order of the rows. 20057a vector end-for-end. Given a matrix, it reverses the order of the rows.
20036(To reverse the columns instead, just use @kbd{v t v v v t}. The same 20058(To reverse the columns instead, just use @kbd{v t v v v t}. The same
20037principle can be used to apply other vector commands to the columns of 20059principle can be used to apply other vector commands to the columns of
@@ -22680,7 +22702,7 @@ on while doing algebra; @pxref{Fraction Mode}.
22680Quotients are simplified by comparing all terms in the numerator 22702Quotients are simplified by comparing all terms in the numerator
22681with all terms in the denominator for possible cancellation using 22703with all terms in the denominator for possible cancellation using
22682the distributive law. For example, @expr{a x^2 b / c x^3 d} will 22704the distributive law. For example, @expr{a x^2 b / c x^3 d} will
22683cancel @expr{x^2} from both sides to get @expr{a b / c x d}. 22705cancel @expr{x^2} from the top and bottom to get @expr{a b / c x d}.
22684(The terms in the denominator will then be rearranged to @expr{c d x} 22706(The terms in the denominator will then be rearranged to @expr{c d x}
22685as described above.) If there is any common integer or fractional 22707as described above.) If there is any common integer or fractional
22686factor in the numerator and denominator, it is cancelled out; 22708factor in the numerator and denominator, it is cancelled out;
@@ -23434,7 +23456,7 @@ is allowed only within @code{IntegRules}; it means ``integrate this
23434with respect to the same integration variable.'' If Calc is unable 23456with respect to the same integration variable.'' If Calc is unable
23435to integrate @code{u}, the integration that invoked @code{IntegRules} 23457to integrate @code{u}, the integration that invoked @code{IntegRules}
23436also fails. Thus integrating @samp{twice(f(x))} fails, returning the 23458also fails. Thus integrating @samp{twice(f(x))} fails, returning the
23437unevaluated integral @samp{integ(twice(f(x)), x)}. It is still legal 23459unevaluated integral @samp{integ(twice(f(x)), x)}. It is still valid
23438to call @code{integ} with two or more arguments, however; in this case, 23460to call @code{integ} with two or more arguments, however; in this case,
23439if @code{u} is not integrable, @code{twice} itself will still be 23461if @code{u} is not integrable, @code{twice} itself will still be
23440integrated: If the above rule is changed to @samp{... := twice(integ(u,x))}, 23462integrated: If the above rule is changed to @samp{... := twice(integ(u,x))},
@@ -25281,7 +25303,7 @@ As a special feature, if the limits are infinite (or omitted, as
25281described above) but the formula includes vectors subscripted by 25303described above) but the formula includes vectors subscripted by
25282expressions that involve the iteration variable, Calc narrows 25304expressions that involve the iteration variable, Calc narrows
25283the limits to include only the range of integers which result in 25305the limits to include only the range of integers which result in
25284legal subscripts for the vector. For example, the sum 25306valid subscripts for the vector. For example, the sum
25285@samp{sum(k [a,b,c,d,e,f,g]_(2k),k)} evaluates to @samp{b + 2 d + 3 f}. 25307@samp{sum(k [a,b,c,d,e,f,g]_(2k),k)} evaluates to @samp{b + 2 d + 3 f}.
25286 25308
25287The limits of a sum do not need to be integers. For example, 25309The limits of a sum do not need to be integers. For example,
@@ -25291,7 +25313,7 @@ Calc computes the number of iterations using the formula
25291after simplification as if by @kbd{a s}, evaluate to an integer. 25313after simplification as if by @kbd{a s}, evaluate to an integer.
25292 25314
25293If the number of iterations according to the above formula does 25315If the number of iterations according to the above formula does
25294not come out to an integer, the sum is illegal and will be left 25316not come out to an integer, the sum is invalid and will be left
25295in symbolic form. However, closed forms are still supplied, and 25317in symbolic form. However, closed forms are still supplied, and
25296you are on your honor not to misuse the resulting formulas by 25318you are on your honor not to misuse the resulting formulas by
25297substituting mismatched bounds into them. For example, 25319substituting mismatched bounds into them. For example,
@@ -28746,7 +28768,7 @@ command.
28746@kindex g A 28768@kindex g A
28747@pindex calc-graph-add-3d 28769@pindex calc-graph-add-3d
28748The @kbd{g A} (@code{calc-graph-add-3d}) command adds a 3D curve 28770The @kbd{g A} (@code{calc-graph-add-3d}) command adds a 3D curve
28749to the graph. It is not legal to intermix 2D and 3D curves in a 28771to the graph. It is not valid to intermix 2D and 3D curves in a
28750single graph. This command takes three arguments, ``x'', ``y'', 28772single graph. This command takes three arguments, ``x'', ``y'',
28751and ``z'', from the stack. With a positive prefix @expr{n}, it 28773and ``z'', from the stack. With a positive prefix @expr{n}, it
28752takes @expr{n+2} arguments (common ``x'' and ``y'', plus @expr{n} 28774takes @expr{n+2} arguments (common ``x'' and ``y'', plus @expr{n}
@@ -30451,8 +30473,8 @@ use @kbd{M-# u} to update the buffer by hand.
30451@noindent 30473@noindent
30452The mode settings can be changed while Calc is in embedded mode, but 30474The mode settings can be changed while Calc is in embedded mode, but
30453will revert to their original values when embedded mode is ended 30475will revert to their original values when embedded mode is ended
30454(except for the modes changed while the mode-setting mode was 30476(except for the modes saved when the mode-recording mode is
30455@code{Save}). 30477@code{Save}; see below).
30456 30478
30457Embedded mode has a rather complicated mechanism for handling mode 30479Embedded mode has a rather complicated mechanism for handling mode
30458settings in Embedded formulas. It is possible to put annotations 30480settings in Embedded formulas. It is possible to put annotations
@@ -30511,7 +30533,7 @@ of mode setting, the second is a name for the mode itself, and
30511the third is the value in the form of a Lisp symbol, number, 30533the third is the value in the form of a Lisp symbol, number,
30512or list. Annotations with unrecognizable text in the first or 30534or list. Annotations with unrecognizable text in the first or
30513second parts are ignored. The third part is not checked to make 30535second parts are ignored. The third part is not checked to make
30514sure the value is of a legal type or range; if you write an 30536sure the value is of a valid type or range; if you write an
30515annotation by hand, be sure to give a proper value or results 30537annotation by hand, be sure to give a proper value or results
30516will be unpredictable. Mode-setting annotations are case-sensitive. 30538will be unpredictable. Mode-setting annotations are case-sensitive.
30517 30539
@@ -30572,10 +30594,11 @@ rules of reading annotations the @samp{(sci 0)} applies to it, too.
30572We would have to go down to the other formula and press @kbd{M-# u} 30594We would have to go down to the other formula and press @kbd{M-# u}
30573on it in order to get it to notice the new annotation. 30595on it in order to get it to notice the new annotation.
30574 30596
30575Two more mode-recording modes selectable by @kbd{m R} are @code{Save} 30597Two more mode-recording modes selectable by @kbd{m R} are available
30576(which works even outside of Embedded mode), in which mode settings 30598which are also available outside of Embedded mode.
30577are recorded permanently in your Calc init file (the file given by the 30599(@pxref{General Mode Commands}.) They are @code{Save}, in which mode
30578variable @code{calc-settings-file}, typically @file{~/.calc.el}) 30600settings are recorded permanently in your Calc init file (the file given
30601by the variable @code{calc-settings-file}, typically @file{~/.calc.el})
30579rather than by annotating the current document, and no-recording 30602rather than by annotating the current document, and no-recording
30580mode (where there is no symbol like @code{Save} or @code{Local} in 30603mode (where there is no symbol like @code{Save} or @code{Local} in
30581the mode line), in which mode-changing commands do not leave any 30604the mode line), in which mode-changing commands do not leave any
@@ -31799,7 +31822,7 @@ to pop @var{num} values off the stack, resimplify them by calling
31799@code{calc-normalize}, and hand them to your function according to the 31822@code{calc-normalize}, and hand them to your function according to the
31800function's argument list. Your function may include @code{&optional} and 31823function's argument list. Your function may include @code{&optional} and
31801@code{&rest} parameters, so long as calling the function with @var{num} 31824@code{&rest} parameters, so long as calling the function with @var{num}
31802parameters is legal. 31825parameters is valid.
31803 31826
31804Your function must return either a number or a formula in a form 31827Your function must return either a number or a formula in a form
31805acceptable to Calc, or a list of such numbers or formulas. These value(s) 31828acceptable to Calc, or a list of such numbers or formulas. These value(s)
@@ -32829,7 +32852,7 @@ this function returns the selected portions rather than the entire
32829stack elements. It can be given a third ``selection-mode'' argument 32852stack elements. It can be given a third ``selection-mode'' argument
32830which selects other behaviors. If it is the symbol @code{t}, then 32853which selects other behaviors. If it is the symbol @code{t}, then
32831a selection in any of the requested stack elements produces an 32854a selection in any of the requested stack elements produces an
32832``illegal operation on selections'' error. If it is the symbol @code{full}, 32855``invalid operation on selections'' error. If it is the symbol @code{full},
32833the whole stack entry is always returned regardless of selections. 32856the whole stack entry is always returned regardless of selections.
32834If it is the symbol @code{sel}, the selected portion is always returned, 32857If it is the symbol @code{sel}, the selected portion is always returned,
32835or @code{nil} if there is no selection. (This mode ignores the @kbd{j e} 32858or @code{nil} if there is no selection. (This mode ignores the @kbd{j e}
@@ -34610,48 +34633,6 @@ plots.
34610 34633
34611@end example 34634@end example
34612@end ifinfo 34635@end ifinfo
34613@appendixsec Printed Documentation
34614
34615@noindent
34616Because the Calc manual is so large, you should only make a printed
34617copy if you really need it. To print the manual, you will need the
34618@TeX{} typesetting program (this is a free program by Donald Knuth
34619at Stanford University) as well as the @file{texindex} program and
34620@file{texinfo.tex} file, both of which can be obtained from the FSF
34621as part of the @code{texinfo} package.
34622
34623To print the Calc manual in one huge 470 page tome, you will need the
34624source code to this manual, @file{calc.texi}, available as part of the
34625Emacs source. Once you have this file, type @kbd{texi2dvi calc.texi}.
34626Alternatively, change to the @file{man} subdirectory of the Emacs
34627source distribution, and type @kbd{make calc.dvi}. (Don't worry if you
34628get some ``overfull box'' warnings while @TeX{} runs.)
34629
34630The result will be a device-independent output file called
34631@file{calc.dvi}, which you must print in whatever way is right
34632for your system. On many systems, the command is
34633
34634@example
34635lpr -d calc.dvi
34636@end example
34637
34638@noindent
34639or
34640
34641@example
34642dvips calc.dvi
34643@end example
34644
34645@c the bumpoddpages macro was deleted
34646@ignore
34647@cindex Marginal notes, adjusting
34648Marginal notes for each function and key sequence normally alternate
34649between the left and right sides of the page, which is correct if the
34650manual is going to be bound as double-sided pages. Near the top of
34651the file @file{calc.texi} you will find alternate definitions of
34652the @code{\bumpoddpages} macro that put the marginal notes always on
34653the same side, best if you plan to be binding single-sided pages.
34654@end ignore
34655 34636
34656@appendixsec Settings File 34637@appendixsec Settings File
34657 34638
@@ -34703,15 +34684,6 @@ belanger@@truman.edu
34703@end example 34684@end example
34704 34685
34705@noindent 34686@noindent
34706(In the following text, ``I'' refers to the original Calc author, Dave
34707Gillespie).
34708
34709While I cannot guarantee that I will have time to work on your bug,
34710I do try to fix bugs quickly whenever I can.
34711
34712The latest version of Calc is available from Savannah, in the Emacs
34713CVS tree. See @uref{http://savannah.gnu.org/projects/emacs}.
34714
34715There is an automatic command @kbd{M-x report-calc-bug} which helps 34687There is an automatic command @kbd{M-x report-calc-bug} which helps
34716you to report bugs. This command prompts you for a brief subject 34688you to report bugs. This command prompts you for a brief subject
34717line, then leaves you in a mail editing buffer. Type @kbd{C-c C-c} to 34689line, then leaves you in a mail editing buffer. Type @kbd{C-c C-c} to
@@ -34719,18 +34691,18 @@ send your mail. Make sure your subject line indicates that you are
34719reporting a Calc bug; this command sends mail to the maintainer's 34691reporting a Calc bug; this command sends mail to the maintainer's
34720regular mailbox. 34692regular mailbox.
34721 34693
34722If you have suggestions for additional features for Calc, I would 34694If you have suggestions for additional features for Calc, please send
34723love to hear them. Some have dared to suggest that Calc is already 34695them. Some have dared to suggest that Calc is already top-heavy with
34724top-heavy with features; I really don't see what they're talking 34696features; this obviously cannot be the case, so if you have ideas, send
34725about, so, if you have ideas, send them right in. (I may even have 34697them right in.
34726time to implement them!)
34727 34698
34728At the front of the source file, @file{calc.el}, is a list of ideas for 34699At the front of the source file, @file{calc.el}, is a list of ideas for
34729future work which I have not had time to do. If any enthusiastic souls 34700future work. If any enthusiastic souls wish to take it upon themselves
34730wish to take it upon themselves to work on these, I would be delighted. 34701to work on these, please send a message (using @kbd{M-x report-calc-bug})
34731Please let me know if you plan to contribute to Calc so I can coordinate 34702so any efforts can be coordinated.
34732your efforts with mine and those of others. I will do my best to help 34703
34733you in whatever way I can. 34704The latest version of Calc is available from Savannah, in the Emacs
34705CVS tree. See @uref{http://savannah.gnu.org/projects/emacs}.
34734 34706
34735@c [summary] 34707@c [summary]
34736@node Summary, Key Index, Reporting Bugs, Top 34708@node Summary, Key Index, Reporting Bugs, Top
diff --git a/man/calendar.texi b/man/calendar.texi
index fa37ab88d2c..999c29dae06 100644
--- a/man/calendar.texi
+++ b/man/calendar.texi
@@ -1,5 +1,6 @@
1@c This is part of the Emacs manual. 1@c This is part of the Emacs manual.
2@c Copyright (C) 1985,86,87,93,94,95,1997,2000,2001 Free Software Foundation, Inc. 2@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001,
3@c 2005 Free Software Foundation, Inc.
3@c See file emacs.texi for copying conditions. 4@c See file emacs.texi for copying conditions.
4@node Calendar/Diary, Gnus, Dired, Top 5@node Calendar/Diary, Gnus, Dired, Top
5@chapter The Calendar and the Diary 6@chapter The Calendar and the Diary
@@ -19,11 +20,13 @@ calendar. The calendar uses its own buffer, whose major mode is
19Calendar mode. 20Calendar mode.
20 21
21 @kbd{Mouse-2} in the calendar brings up a menu of operations on a 22 @kbd{Mouse-2} in the calendar brings up a menu of operations on a
22particular date; @kbd{C-Mouse-3} brings up a menu of commonly used 23particular date; @kbd{Mouse-3} brings up a menu of commonly used
23calendar features that are independent of any particular date. To exit 24calendar features that are independent of any particular date. To exit
24the calendar, type @kbd{q}. @xref{Calendar, Customizing the Calendar 25the calendar, type @kbd{q}.
25and Diary,, elisp, The Emacs Lisp Reference Manual}, for customization 26
26information about the calendar and diary. 27The basic features of the Calendar/Diary are described here.
28@inforef{Advanced Calendar/Diary Usage,, emacs-xtra}, for information
29about more specialized features.
27 30
28@menu 31@menu
29* Calendar Motion:: Moving through the calendar; selecting a date. 32* Calendar Motion:: Moving through the calendar; selecting a date.
@@ -423,24 +426,31 @@ List holidays in another window for a specified range of years.
423 426
424@kindex h @r{(Calendar mode)} 427@kindex h @r{(Calendar mode)}
425@findex calendar-cursor-holidays 428@findex calendar-cursor-holidays
429@vindex view-calendar-holidays-initially
426 To see if any holidays fall on a given date, position point on that 430 To see if any holidays fall on a given date, position point on that
427date in the calendar window and use the @kbd{h} command. Alternatively, 431date in the calendar window and use the @kbd{h} command. Alternatively,
428click on that date with @kbd{Mouse-2} and then choose @kbd{Holidays} 432click on that date with @kbd{Mouse-2} and then choose @kbd{Holidays}
429from the menu that appears. Either way, this displays the holidays for 433from the menu that appears. Either way, this displays the holidays for
430that date, in the echo area if they fit there, otherwise in a separate 434that date, in the echo area if they fit there, otherwise in a separate
431window. 435window. If the variable @code{view-calendar-holidays-initially} is
436non-@code{nil}, creating the calendar displays holidays in this way.
432 437
433@kindex x @r{(Calendar mode)} 438@kindex x @r{(Calendar mode)}
434@findex mark-calendar-holidays 439@findex mark-calendar-holidays
435@kindex u @r{(Calendar mode)} 440@kindex u @r{(Calendar mode)}
436@findex calendar-unmark 441@findex calendar-unmark
442@vindex mark-holidays-in-calendar
437 To view the distribution of holidays for all the dates shown in the 443 To view the distribution of holidays for all the dates shown in the
438calendar, use the @kbd{x} command. This displays the dates that are 444calendar, use the @kbd{x} command. This displays the dates that are
439holidays in a different face (or places a @samp{*} after these dates, if 445holidays in a different face (or places a @samp{*} after these dates, if
440display with multiple faces is not available). The command applies both 446display with multiple faces is not available). @inforef{Calendar
441to the currently visible months and to other months that subsequently 447Customizing, calendar-holiday-marker, emacs-xtra}. The command applies
442become visible by scrolling. To turn marking off and erase the current 448both to the currently visible months and to other months that
443marks, type @kbd{u}, which also erases any diary marks (@pxref{Diary}). 449subsequently become visible by scrolling. To turn marking off and erase
450the current marks, type @kbd{u}, which also erases any diary marks
451(@pxref{Diary}). If the variable @code{mark-holidays-in-calendar} is
452non-@code{nil}, creating or updating the calendar marks holidays
453automatically.
444 454
445@kindex a @r{(Calendar mode)} 455@kindex a @r{(Calendar mode)}
446@findex list-calendar-holidays 456@findex list-calendar-holidays
@@ -924,9 +934,9 @@ their dates. Then Emacs can automatically pick out and display the
924events for today, for the immediate future, or for any specified 934events for today, for the immediate future, or for any specified
925date. 935date.
926 936
927 By default, Emacs uses @file{~/diary} as the diary file. This is the 937 The name of the diary file is specified by the variable
928same file that the @code{calendar} utility uses. A sample 938@code{diary-file}; @file{~/diary} is the default. A sample diary file
929@file{~/diary} file is: 939is:
930 940
931@example 941@example
93212/22/1988 Twentieth wedding anniversary!! 94212/22/1988 Twentieth wedding anniversary!!
@@ -951,18 +961,18 @@ provides a number of commands to let you view, add, and change diary
951entries. 961entries.
952 962
953@menu 963@menu
954* Diary Commands:: Viewing diary entries and associated calendar dates. 964* Displaying the Diary:: Viewing diary entries and associated calendar dates.
955* Format of Diary File:: Entering events in your diary. 965* Format of Diary File:: Entering events in your diary.
956* Date Formats:: Various ways you can specify dates. 966* Date Formats:: Various ways you can specify dates.
957* Adding to Diary:: Commands to create diary entries. 967* Adding to Diary:: Commands to create diary entries.
958* Special Diary Entries:: Anniversaries, blocks of dates, cyclic entries, etc. 968* Special Diary Entries:: Anniversaries, blocks of dates, cyclic entries, etc.
959@end menu 969@end menu
960 970
961@node Diary Commands 971@node Displaying the Diary
962@subsection Commands Displaying Diary Entries 972@subsection Displaying the Diary
963 973
964 Once you have created a @file{~/diary} file, you can use the calendar 974 Once you have created a diary file, you can use the calendar to view
965to view it. You can also view today's events outside of Calendar mode. 975it. You can also view today's events outside of Calendar mode.
966 976
967@table @kbd 977@table @kbd
968@item d 978@item d
@@ -987,6 +997,7 @@ Mail yourself email reminders about upcoming diary entries.
987 997
988@kindex d @r{(Calendar mode)} 998@kindex d @r{(Calendar mode)}
989@findex view-diary-entries 999@findex view-diary-entries
1000@vindex view-diary-entries-initially
990 Displaying the diary entries with @kbd{d} shows in a separate window 1001 Displaying the diary entries with @kbd{d} shows in a separate window
991the diary entries for the selected date in the calendar. The mode line 1002the diary entries for the selected date in the calendar. The mode line
992of the new window shows the date of the diary entries and any holidays 1003of the new window shows the date of the diary entries and any holidays
@@ -997,18 +1008,25 @@ following day.
997 1008
998 Another way to display the diary entries for a date is to click 1009 Another way to display the diary entries for a date is to click
999@kbd{Mouse-2} on the date, and then choose @kbd{Diary entries} from 1010@kbd{Mouse-2} on the date, and then choose @kbd{Diary entries} from
1000the menu that appears. 1011the menu that appears. If the variable
1012@code{view-diary-entries-initially} is non-@code{nil}, creating the
1013calendar also lists diary entries for the current date (provided the
1014current date is visible).
1001 1015
1002@kindex m @r{(Calendar mode)} 1016@kindex m @r{(Calendar mode)}
1003@findex mark-diary-entries 1017@findex mark-diary-entries
1018@vindex mark-diary-entries-in-calendar
1004 To get a broader view of which days are mentioned in the diary, use 1019 To get a broader view of which days are mentioned in the diary, use
1005the @kbd{m} command. This displays the dates that have diary entries 1020the @kbd{m} command. This displays the dates that have diary entries in
1006in a different face (or places a @samp{+} after these dates, if 1021a different face (or places a @samp{+} after these dates, if display
1007display with multiple faces is not available). The command applies both 1022with multiple faces is not available). @inforef{Calendar Customizing,
1008to the currently visible months and to other months that subsequently 1023diary-entry-marker, emacs-xtra}. The command applies both to the
1009become visible by scrolling. To turn marking off and erase the current 1024currently visible months and to other months that subsequently become
1010marks, type @kbd{u}, which also turns off holiday marks 1025visible by scrolling. To turn marking off and erase the current marks,
1011(@pxref{Holidays}). 1026type @kbd{u}, which also turns off holiday marks (@pxref{Holidays}).
1027If the variable @code{mark-diary-entries-in-calendar} is
1028non-@code{nil}, creating or updating the calendar marks diary dates
1029automatically.
1012 1030
1013@kindex s @r{(Calendar mode)} 1031@kindex s @r{(Calendar mode)}
1014@findex show-all-diary-entries 1032@findex show-all-diary-entries
@@ -1016,21 +1034,18 @@ marks, type @kbd{u}, which also turns off holiday marks
1016the @kbd{s} command. 1034the @kbd{s} command.
1017 1035
1018 Display of selected diary entries uses the selective display feature 1036 Display of selected diary entries uses the selective display feature
1019to hide entries that don't apply. 1037to hide entries that don't apply. The diary buffer as you see it is
1020 1038an illusion, so simply printing the buffer does not print what you see
1021 The diary buffer as you see it is an illusion, so simply printing the 1039on your screen. There is a special command to print hard copy of the
1022buffer does not print what you see on your screen. There is a special 1040diary buffer @emph{as it appears}; this command is @kbd{M-x
1023command to print hard copy of the diary buffer @emph{as it appears}; 1041print-diary-entries}. It sends the data directly to the printer. You
1024this command is @kbd{M-x print-diary-entries}. It sends the data 1042can customize it like @code{lpr-region} (@pxref{Hardcopy}).
1025directly to the printer. You can customize it like @code{lpr-region}
1026(@pxref{Hardcopy}).
1027 1043
1028@findex diary 1044@findex diary
1029 The command @kbd{M-x diary} displays the diary entries for the current 1045 The command @kbd{M-x diary} displays the diary entries for the current
1030date, independently of the calendar display, and optionally for the next 1046date, independently of the calendar display, and optionally for the next
1031few days as well; the variable @code{number-of-diary-entries} specifies 1047few days as well; the variable @code{number-of-diary-entries} specifies
1032how many days to include. @xref{Calendar, Customizing the Calendar 1048how many days to include. @inforef{Diary Customizing,, emacs-xtra}.
1033and Diary,, elisp, The Emacs Lisp Reference Manual}.
1034 1049
1035 If you put @code{(diary)} in your @file{.emacs} file, this 1050 If you put @code{(diary)} in your @file{.emacs} file, this
1036automatically displays a window with the day's diary entries, when you 1051automatically displays a window with the day's diary entries, when you
@@ -1335,8 +1350,7 @@ entry applies to all months of the year.@refill
1335specifying the name of a face or a single-character string to use when 1350specifying the name of a face or a single-character string to use when
1336marking the entry in the calendar. Most generally, sexp diary entries 1351marking the entry in the calendar. Most generally, sexp diary entries
1337can perform arbitrary computations to determine when they apply. 1352can perform arbitrary computations to determine when they apply.
1338@xref{Sexp Diary Entries,, Sexp Diary Entries, elisp, The Emacs Lisp 1353@inforef{Sexp Diary Entries,, emacs-xtra}.
1339Reference Manual}.
1340 1354
1341@node Appointments 1355@node Appointments
1342@section Appointments 1356@section Appointments
@@ -1344,16 +1358,30 @@ Reference Manual}.
1344 1358
1345@vindex appt-display-format 1359@vindex appt-display-format
1346@vindex appt-audible 1360@vindex appt-audible
1361@vindex appt-display-mode-line
1347 If you have a diary entry for an appointment, and that diary entry 1362 If you have a diary entry for an appointment, and that diary entry
1348begins with a recognizable time of day, Emacs can warn you several 1363begins with a recognizable time of day, Emacs can warn you several
1349minutes beforehand that that appointment is pending. Emacs alerts you 1364minutes beforehand that that appointment is pending. Emacs alerts you
1350to the appointment by displaying a message in your chosen format, as 1365to the appointment by displaying a message in your chosen format, as
1351specified by the variable @code{appt-display-format}. If the value 1366specified by the variable @code{appt-display-format}. If the value of
1352of @code{appt-audible} is non-@code{nil}, an audible reminder is also given. 1367@code{appt-audible} is non-@code{nil}, an audible reminder is also
1368given. In addition, if @code{appt-display-mode-line} is non-@code{nil},
1369Emacs displays the number of minutes to the appointment on the mode
1370line.
1371
1372@vindex appt-display-duration
1373@vindex appt-disp-window-function
1374@vindex appt-delete-window-function
1375 If @code{appt-display-format} has the value @code{window}, then the
1376variable @code{appt-display-duration} controls how long the reminder
1377window is visible for; and the variables
1378@code{appt-disp-window-function} and @code{appt-delete-window-function}
1379give the names of functions used to create and destroy the window,
1380respectively.
1353 1381
1354@findex appt-activate 1382@findex appt-activate
1355 To enable appointment notification, call the function 1383 To enable appointment notification, call the function
1356@code{appt-activate} with a positive argument. This sets up an 1384@code{appt-activate} with a positive argument. This sets up an
1357appointment list for today from the diary file, giving all diary entries 1385appointment list for today from the diary file, giving all diary entries
1358found with recognizable times of day, and reminds you just before each 1386found with recognizable times of day, and reminds you just before each
1359of them. Calling @code{appt-activate} with a negative argument disables 1387of them. Calling @code{appt-activate} with a negative argument disables
@@ -1370,7 +1398,7 @@ Monday
1370@vindex appt-message-warning-time 1398@vindex appt-message-warning-time
1371@noindent 1399@noindent
1372Then on Mondays, you will be reminded at around 9:20am about your coffee 1400Then on Mondays, you will be reminded at around 9:20am about your coffee
1373break and at around 11:50am about lunch. How many minutes in advance you 1401break and at around 11:50am about lunch. How many minutes in advance you
1374are first warned is determined by the value of 1402are first warned is determined by the value of
1375@code{appt-message-warning-time}. 1403@code{appt-message-warning-time}.
1376 1404
@@ -1441,8 +1469,8 @@ and adds the results to an Emacs diary file. For example:
1441 1469
1442@noindent 1470@noindent
1443You can use an @code{#include} directive to add the import file contents 1471You can use an @code{#include} directive to add the import file contents
1444to the main diary file, if these are distinct. @xref{Fancy Diary 1472to the main diary file, if these are distinct. @inforef{Fancy Diary
1445Display,,, elisp, The Emacs Lisp Reference Manual}. 1473Display,, emacs-xtra}.
1446 1474
1447@findex icalendar-export-file, icalendar-export-region 1475@findex icalendar-export-file, icalendar-export-region
1448 Use @code{icalendar-export-file} to interactively export an entire 1476 Use @code{icalendar-export-file} to interactively export an entire
diff --git a/man/cl.texi b/man/cl.texi
index 455465a27a3..6c52a16b733 100644
--- a/man/cl.texi
+++ b/man/cl.texi
@@ -5,7 +5,7 @@
5@copying 5@copying
6This file documents the GNU Emacs Common Lisp emulation package. 6This file documents the GNU Emacs Common Lisp emulation package.
7 7
8Copyright (C) 1993, 2002 Free Software Foundation, Inc. 8Copyright (C) 1993, 2002, 2005 Free Software Foundation, Inc.
9 9
10@quotation 10@quotation
11Permission is granted to copy, distribute and/or modify this document 11Permission is granted to copy, distribute and/or modify this document
@@ -991,7 +991,7 @@ just as with @code{setq}. @code{setf} returns the value of the last
991@var{form}. 991@var{form}.
992 992
993The following Lisp forms will work as generalized variables, and 993The following Lisp forms will work as generalized variables, and
994so may legally appear in the @var{place} argument of @code{setf}: 994so may appear in the @var{place} argument of @code{setf}:
995 995
996@itemize @bullet 996@itemize @bullet
997@item 997@item
@@ -1073,7 +1073,7 @@ x (point-max))} in this case).
1073 1073
1074@item 1074@item
1075A call of the form @code{(substring @var{subplace} @var{n} [@var{m}])}, 1075A call of the form @code{(substring @var{subplace} @var{n} [@var{m}])},
1076where @var{subplace} is itself a legal generalized variable whose 1076where @var{subplace} is itself a valid generalized variable whose
1077current value is a string, and where the value stored is also a 1077current value is a string, and where the value stored is also a
1078string. The new string is spliced into the specified part of the 1078string. The new string is spliced into the specified part of the
1079destination string. For example: 1079destination string. For example:
@@ -2379,7 +2379,7 @@ that they are exclusive rather than inclusive limits:
2379 2379
2380The @code{by} value is always positive, even for downward-counting 2380The @code{by} value is always positive, even for downward-counting
2381loops. Some sort of @code{from} value is required for downward 2381loops. Some sort of @code{from} value is required for downward
2382loops; @samp{for x downto 5} is not a legal loop clause all by 2382loops; @samp{for x downto 5} is not a valid loop clause all by
2383itself. 2383itself.
2384 2384
2385@item for @var{var} in @var{list} by @var{function} 2385@item for @var{var} in @var{list} by @var{function}
@@ -2481,7 +2481,7 @@ are also recognized but are equivalent to @code{symbols} in Emacs Lisp.
2481Due to a minor implementation restriction, it will not work to have 2481Due to a minor implementation restriction, it will not work to have
2482more than one @code{for} clause iterating over symbols, hash tables, 2482more than one @code{for} clause iterating over symbols, hash tables,
2483keymaps, overlays, or intervals in a given @code{loop}. Fortunately, 2483keymaps, overlays, or intervals in a given @code{loop}. Fortunately,
2484it would rarely if ever be useful to do so. It @emph{is} legal to mix 2484it would rarely if ever be useful to do so. It @emph{is} valid to mix
2485one of these types of clauses with other clauses like @code{for ... to} 2485one of these types of clauses with other clauses like @code{for ... to}
2486or @code{while}. 2486or @code{while}.
2487 2487
@@ -2727,7 +2727,7 @@ not automatically imply a return value. The loop must use some
2727explicit mechanism, such as @code{finally return}, to return 2727explicit mechanism, such as @code{finally return}, to return
2728the accumulated result. 2728the accumulated result.
2729 2729
2730It is legal for several accumulation clauses of the same type to 2730It is valid for several accumulation clauses of the same type to
2731accumulate into the same place. From Steele: 2731accumulate into the same place. From Steele:
2732 2732
2733@example 2733@example
@@ -3248,8 +3248,8 @@ In particular,
3248(get sym prop) @equiv{} (getf (symbol-plist sym) prop) 3248(get sym prop) @equiv{} (getf (symbol-plist sym) prop)
3249@end example 3249@end example
3250 3250
3251It is legal to use @code{getf} as a @code{setf} place, in which case 3251It is valid to use @code{getf} as a @code{setf} place, in which case
3252its @var{place} argument must itself be a legal @code{setf} place. 3252its @var{place} argument must itself be a valid @code{setf} place.
3253The @var{default} argument, if any, is ignored in this context. 3253The @var{default} argument, if any, is ignored in this context.
3254The effect is to change (via @code{setcar}) the value cell in the 3254The effect is to change (via @code{setcar}) the value cell in the
3255list that corresponds to @var{property}, or to cons a new property-value 3255list that corresponds to @var{property}, or to cons a new property-value
@@ -3535,7 +3535,7 @@ be an integer in which case the new object is seeded from that
3535integer; each different integer seed will result in a completely 3535integer; each different integer seed will result in a completely
3536different sequence of random numbers. 3536different sequence of random numbers.
3537 3537
3538It is legal to print a @code{random-state} object to a buffer or 3538It is valid to print a @code{random-state} object to a buffer or
3539file and later read it back with @code{read}. If a program wishes 3539file and later read it back with @code{read}. If a program wishes
3540to use a sequence of pseudo-random numbers which can be reproduced 3540to use a sequence of pseudo-random numbers which can be reproduced
3541later for debugging, it can call @code{(make-random-state t)} to 3541later for debugging, it can call @code{(make-random-state t)} to
@@ -4575,7 +4575,7 @@ initialized from the corresponding argument. Slots whose names
4575do not appear in the argument list are initialized based on the 4575do not appear in the argument list are initialized based on the
4576@var{default-value} in their slot descriptor. Also, @code{&optional} 4576@var{default-value} in their slot descriptor. Also, @code{&optional}
4577and @code{&key} arguments which don't specify defaults take their 4577and @code{&key} arguments which don't specify defaults take their
4578defaults from the slot descriptor. It is legal to include arguments 4578defaults from the slot descriptor. It is valid to include arguments
4579which don't correspond to slot names; these are useful if they are 4579which don't correspond to slot names; these are useful if they are
4580referred to in the defaults for optional, keyword, or @code{&aux} 4580referred to in the defaults for optional, keyword, or @code{&aux}
4581arguments which @emph{do} correspond to slots. 4581arguments which @emph{do} correspond to slots.
diff --git a/man/commands.texi b/man/commands.texi
index fe70983286f..e0208473419 100644
--- a/man/commands.texi
+++ b/man/commands.texi
@@ -169,8 +169,8 @@ key sequences, not one.@refill
169 169
170 All told, the prefix keys in Emacs are @kbd{C-c}, @kbd{C-h}, 170 All told, the prefix keys in Emacs are @kbd{C-c}, @kbd{C-h},
171@kbd{C-x}, @kbd{C-x @key{RET}}, @kbd{C-x @@}, @kbd{C-x a}, @kbd{C-x 171@kbd{C-x}, @kbd{C-x @key{RET}}, @kbd{C-x @@}, @kbd{C-x a}, @kbd{C-x
172n}, @w{@kbd{C-x r}}, @kbd{C-x v}, @kbd{C-x 4}, @kbd{C-x 5}, @kbd{C-x 172n}, @w{@kbd{C-x r}}, @kbd{C-x v}, @kbd{C-x 4}, @kbd{C-x 5}, @kbd{C-x 6},
1736}, @key{ESC}, and @kbd{M-g}. (@key{F1} and @key{F2} are aliases for 173@key{ESC}, @kbd{M-o} and @kbd{M-g}. (@key{F1} and @key{F2} are aliases for
174@kbd{C-h} and @kbd{C-x 6}.) But this list is not cast in concrete; it 174@kbd{C-h} and @kbd{C-x 6}.) But this list is not cast in concrete; it
175is just a matter of Emacs's standard key bindings. If you customize 175is just a matter of Emacs's standard key bindings. If you customize
176Emacs, you can make new prefix keys, or eliminate these. @xref{Key 176Emacs, you can make new prefix keys, or eliminate these. @xref{Key
diff --git a/man/custom.texi b/man/custom.texi
index 6c5c26b3451..30bac3bccf2 100644
--- a/man/custom.texi
+++ b/man/custom.texi
@@ -1636,6 +1636,27 @@ word:
1636(global-set-key [H-M-right] 'forward-word) 1636(global-set-key [H-M-right] 'forward-word)
1637@end example 1637@end example
1638 1638
1639@cindex keypad
1640 Many keyboards have a ``numeric keypad'' on the right hand side.
1641The numeric keys in the keypad double up as cursor motion keys,
1642toggled by a key labelled @samp{Num Lock}. By default, Emacs
1643translates these keys to the corresponding keys in the main keyboard
1644(@pxref{Keyboard Translations}). For example, when @samp{Num Lock} is
1645on, the key labelled @samp{8} on the numeric keypad produces
1646@code{kp-8}, which is translated to @kbd{8}; when @samp{Num Lock} is
1647off, the same key produces @code{kp-up}, which is translated to
1648@key{UP}. If you rebind a key such as @kbd{8} or @key{UP}, it affects
1649the equivalent keypad key too. However, if you rebind a @samp{kp-}
1650key directly, that won't affect its non-keypad equivalent.
1651
1652 Emacs provides a convenient method for binding the numeric keypad
1653keys, using the variables @code{keypad-setup},
1654@code{keypad-numlock-setup}, @code{keypad-shifted-setup}, and
1655@code{keypad-numlock-shifted-setup}. These can be found in the
1656@samp{keyboard} customization group (@pxref{Easy Customization}). You
1657can rebind the keys to perform other tasks, such as issuing numeric
1658prefix arguments.
1659
1639@node Named ASCII Chars 1660@node Named ASCII Chars
1640@subsection Named @acronym{ASCII} Control Characters 1661@subsection Named @acronym{ASCII} Control Characters
1641 1662
diff --git a/man/dired-x.texi b/man/dired-x.texi
index d51fda342df..208d07ce170 100644
--- a/man/dired-x.texi
+++ b/man/dired-x.texi
@@ -1004,10 +1004,11 @@ Alist of major modes and their notion of @code{default-directory}, as a
1004Lisp expression to evaluate. A resulting value of @code{nil} is ignored 1004Lisp expression to evaluate. A resulting value of @code{nil} is ignored
1005in favor of @code{default-directory}. 1005in favor of @code{default-directory}.
1006 1006
1007@item default-directory 1007@item dired-default-directory
1008@findex default-directory 1008@findex dired-default-directory
1009Function with usage like variable @code{default-directory}, but knows about the 1009Use this function like you would use the variable
1010special cases in variable @code{default-directory-alist}. 1010@code{default-directory}, except that @code{dired-default-directory}
1011also consults the variable @code{default-directory-alist}.
1011@end table 1012@end table
1012 1013
1013@node Find File At Point, Miscellaneous Commands, Multiple Dired Directories, Top 1014@node Find File At Point, Miscellaneous Commands, Multiple Dired Directories, Top
diff --git a/man/dired.texi b/man/dired.texi
index 6973a4e4000..b50ac82ab0b 100644
--- a/man/dired.texi
+++ b/man/dired.texi
@@ -39,6 +39,7 @@ files.
39* Hiding Subdirectories:: Making subdirectories visible or invisible. 39* Hiding Subdirectories:: Making subdirectories visible or invisible.
40* Updating: Dired Updating. Discarding lines for files of no interest. 40* Updating: Dired Updating. Discarding lines for files of no interest.
41* Find: Dired and Find. Using `find' to choose the files for Dired. 41* Find: Dired and Find. Using `find' to choose the files for Dired.
42* Wdired:: Operating on files by editing the Dired buffer.
42* Misc: Misc Dired Features. Various other features. 43* Misc: Misc Dired Features. Various other features.
43@end menu 44@end menu
44 45
@@ -1103,6 +1104,39 @@ operations work, but do not always automatically update the buffer.
1103Reverting the buffer with @kbd{g} deletes all inserted subdirectories, 1104Reverting the buffer with @kbd{g} deletes all inserted subdirectories,
1104and erases all flags and marks. 1105and erases all flags and marks.
1105 1106
1107@node Wdired
1108@section Editing the Dired Buffer
1109
1110@cindex wdired mode
1111@findex wdired-change-to-wdired-mode
1112 Wdired is a special mode that allows you to perform file operations
1113by editing the Dired buffer directly (the ``W'' in ``Wdired'' stands
1114for ``writable''.) To enter Wdired mode, type @kbd{M-x
1115wdired-change-to-wdired-mode} while in a Dired buffer. Alternatively,
1116use @samp{Edit File Names} in the @samp{Immediate} menu bar menu.
1117
1118@findex wdired-finish-edit
1119 While in Wdired mode, you can rename files by editing the file names
1120displayed in the Dired buffer. All the ordinary Emacs editing
1121commands, including rectangle operations and @code{query-replace}, are
1122available for this. Once you are done editing, type @kbd{C-c C-c}
1123(@code{wdired-finish-edit}). This applies your changes and switches
1124back to ordinary Dired mode.
1125
1126 Apart from simply renaming files, you can move a file to another
1127directory by typing in the new file name (either absolute or
1128relative). To mark a file for deletion, delete the entire filename.
1129To change the target of a symbolic link, just edit the target name
1130displayed next to the link name.
1131
1132 The rest of the text in the buffer, such as the file sizes and
1133modification dates, is marked read-only, so you can't edit it.
1134However, if you set @code{wdired-allow-to-change-permissions} to
1135@code{t}, the file permission bits can also be edited. For example,
1136you can change @samp{-rw-r--r--} to @samp{-rw-rw-rw-} to make a file
1137world-writable. These changes also take effect when you type @kbd{C-c
1138C-c}.
1139
1106@node Misc Dired Features 1140@node Misc Dired Features
1107@section Other Dired Features 1141@section Other Dired Features
1108 1142
diff --git a/man/display.texi b/man/display.texi
index ff939e00cdb..01b0291e5e8 100644
--- a/man/display.texi
+++ b/man/display.texi
@@ -913,6 +913,17 @@ they are displayed using their graphics (assuming your terminal supports
913them), otherwise as escape sequences. @xref{Single-Byte Character 913them), otherwise as escape sequences. @xref{Single-Byte Character
914Support}. 914Support}.
915 915
916@vindex show-nonbreak-escape
917@cindex no-break space, display
918@cindex no-break hyphen, display
919 Some character sets define ``no-break'' versions of the space
920and hyphen characters, which are used where a line should not be
921broken. Emacs displays these with an escape character in order to
922distinguish them from ordinary spaces and hyphens. For example, a
923non-breaking space is displayed as @samp{\ }. You can turn off this
924behavior by setting the variable @code{show-nonbreak-escape} to
925@code{nil}.
926
916@node Cursor Display 927@node Cursor Display
917@section Displaying the Cursor 928@section Displaying the Cursor
918 929
diff --git a/man/emacs-mime.texi b/man/emacs-mime.texi
index c128ed096c3..11a07df5361 100644
--- a/man/emacs-mime.texi
+++ b/man/emacs-mime.texi
@@ -387,15 +387,15 @@ The program used to start an external terminal.
387 387
388@item mm-enable-external 388@item mm-enable-external
389@vindex mm-enable-external 389@vindex mm-enable-external
390Indicate whether external MIME handlers should be used. 390Indicate whether external @acronym{MIME} handlers should be used.
391 391
392If @code{t}, all defined external MIME handlers are used. If 392If @code{t}, all defined external @acronym{MIME} handlers are used. If
393@code{nil}, files are saved to disk (@code{mailcap-save-binary-file}). 393@code{nil}, files are saved to disk (@code{mailcap-save-binary-file}).
394If it is the symbol @code{ask}, you are prompted before the external 394If it is the symbol @code{ask}, you are prompted before the external
395@acronym{MIME} handler is invoked. 395@acronym{MIME} handler is invoked.
396 396
397When you launch an attachment through mailcap (@pxref{mailcap}) an 397When you launch an attachment through mailcap (@pxref{mailcap}) an
398attempt is made to use a safe viewer with the safest options--this isn't 398attempt is made to use a safe viewer with the safest options---this isn't
399the case if you save it to disk and launch it in a different way 399the case if you save it to disk and launch it in a different way
400(command line or double-clicking). Anyhow, if you want to be sure not 400(command line or double-clicking). Anyhow, if you want to be sure not
401to launch any external programs, set this variable to @code{nil} or 401to launch any external programs, set this variable to @code{nil} or
@@ -1327,8 +1327,8 @@ RFC2047 specifies two forms of encoding---@code{Q} (a
1327Quoted-Printable-like encoding) and @code{B} (base64). This alist 1327Quoted-Printable-like encoding) and @code{B} (base64). This alist
1328specifies which charset should use which encoding. 1328specifies which charset should use which encoding.
1329 1329
1330@item rfc2047-encoding-function-alist 1330@item rfc2047-encode-function-alist
1331@vindex rfc2047-encoding-function-alist 1331@vindex rfc2047-encode-function-alist
1332This is an alist of encoding / function pairs. The encodings are 1332This is an alist of encoding / function pairs. The encodings are
1333@code{Q}, @code{B} and @code{nil}. 1333@code{Q}, @code{B} and @code{nil}.
1334 1334
@@ -1336,6 +1336,11 @@ This is an alist of encoding / function pairs. The encodings are
1336@vindex rfc2047-encoded-word-regexp 1336@vindex rfc2047-encoded-word-regexp
1337When decoding words, this library looks for matches to this regexp. 1337When decoding words, this library looks for matches to this regexp.
1338 1338
1339@item rfc2047-encode-encoded-words
1340@vindex rfc2047-encode-encoded-words
1341The boolean variable specifies whether encoded words
1342(e.g. @samp{=?hello?=}) should be encoded again.
1343
1339@end table 1344@end table
1340 1345
1341Those were the variables, and these are this functions: 1346Those were the variables, and these are this functions:
@@ -1366,6 +1371,24 @@ Decode the encoded words in the region.
1366@findex rfc2047-decode-string 1371@findex rfc2047-decode-string
1367Decode a string and return the results. 1372Decode a string and return the results.
1368 1373
1374@item rfc2047-encode-parameter
1375@findex rfc2047-encode-parameter
1376Encode a parameter in the RFC2047-like style. This is a replacement for
1377the @code{rfc2231-encode-string} function. @xref{rfc2231}.
1378
1379When attaching files as @acronym{MIME} parts, we should use the RFC2231
1380encoding to specify the file names containing non-@acronym{ASCII}
1381characters. However, many mail softwares don't support it in practice
1382and recipients won't be able to extract files with correct names.
1383Instead, the RFC2047-like encoding is acceptable generally. This
1384function provides the very RFC2047-like encoding, resigning to such a
1385regrettable trend. To use it, put the following line in your
1386@file{~/.gnus.el} file:
1387
1388@lisp
1389(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter)
1390@end lisp
1391
1369@end table 1392@end table
1370 1393
1371 1394
diff --git a/man/emacs-xtra.texi b/man/emacs-xtra.texi
index a1ccf101bd6..94a37c2ec5e 100644
--- a/man/emacs-xtra.texi
+++ b/man/emacs-xtra.texi
@@ -10,7 +10,7 @@
10@copying 10@copying
11This manual describes specialized features of Emacs. 11This manual describes specialized features of Emacs.
12 12
13Copyright (C) 2004 13Copyright (C) 2004, 2005
14Free Software Foundation, Inc. 14Free Software Foundation, Inc.
15 15
16@quotation 16@quotation
@@ -59,6 +59,7 @@ license to the document, as described in section 6 of the license.
59* Introduction:: What documentation belongs here? 59* Introduction:: What documentation belongs here?
60* Autorevert:: Auto Reverting non-file buffers. 60* Autorevert:: Auto Reverting non-file buffers.
61* Subdir switches:: Subdirectory switches in Dired. 61* Subdir switches:: Subdirectory switches in Dired.
62* Advanced Calendar/Diary Usage:: Advanced Calendar/Diary customization.
62* Index:: 63* Index::
63@end menu 64@end menu
64 65
@@ -307,6 +308,922 @@ You can make Dired forget about all subdirectory switches and relist
307all subdirectories with the buffer's default switches using 308all subdirectories with the buffer's default switches using
308@kbd{M-x dired-reset-subdir-switches}. This also reverts the Dired buffer. 309@kbd{M-x dired-reset-subdir-switches}. This also reverts the Dired buffer.
309 310
311
312@c Moved here from the Emacs Lisp Reference Manual, 2005-03-26.
313@node Advanced Calendar/Diary Usage
314@chapter Customizing the Calendar and Diary
315
316 There are many customizations that you can use to make the calendar and
317diary suit your personal tastes.
318
319@menu
320* Calendar Customizing:: Defaults you can set.
321* Holiday Customizing:: Defining your own holidays.
322* Date Display Format:: Changing the format.
323* Time Display Format:: Changing the format.
324* Daylight Savings:: Changing the default.
325* Diary Customizing:: Defaults you can set.
326* Hebrew/Islamic Entries:: How to obtain them.
327* Fancy Diary Display:: Enhancing the diary display, sorting entries,
328 using included diary files.
329* Sexp Diary Entries:: Fancy things you can do.
330@end menu
331
332@node Calendar Customizing
333@section Customizing the Calendar
334@vindex calendar-holiday-marker
335@vindex diary-entry-marker
336 The variable @code{calendar-holiday-marker} specifies how to mark a
337date as being a holiday. Its value may be a single-character string
338to insert next to the date, or a face name to use for displaying the
339date. Likewise, the variable @code{diary-entry-marker} specifies how
340to mark a date that has diary entries. The calendar creates faces
341named @code{holiday-face} and @code{diary-face} for these purposes;
342those symbols are the default values of these variables.
343
344@vindex calendar-load-hook
345 The variable @code{calendar-load-hook} is a normal hook run when the
346calendar package is first loaded (before actually starting to display
347the calendar).
348
349@vindex initial-calendar-window-hook
350 Starting the calendar runs the normal hook
351@code{initial-calendar-window-hook}. Recomputation of the calendar
352display does not run this hook. But if you leave the calendar with the
353@kbd{q} command and reenter it, the hook runs again.@refill
354
355@vindex today-visible-calendar-hook
356 The variable @code{today-visible-calendar-hook} is a normal hook run
357after the calendar buffer has been prepared with the calendar when the
358current date is visible in the window. One use of this hook is to
359replace today's date with asterisks; to do that, use the hook function
360@code{calendar-star-date}.
361
362@findex calendar-star-date
363@example
364(add-hook 'today-visible-calendar-hook 'calendar-star-date)
365@end example
366
367@noindent
368Another standard hook function marks the current date, either by
369changing its face or by adding an asterisk. Here's how to use it:
370
371@findex calendar-mark-today
372@example
373(add-hook 'today-visible-calendar-hook 'calendar-mark-today)
374@end example
375
376@noindent
377@vindex calendar-today-marker
378The variable @code{calendar-today-marker} specifies how to mark
379today's date. Its value should be a single-character string to insert
380next to the date or a face name to use for displaying the date. A
381face named @code{calendar-today-face} is provided for this purpose;
382that symbol is the default for this variable.
383
384@vindex today-invisible-calendar-hook
385@noindent
386 A similar normal hook, @code{today-invisible-calendar-hook} is run if
387the current date is @emph{not} visible in the window.
388
389@vindex calendar-move-hook
390 Each of the calendar cursor motion commands runs the hook
391@code{calendar-move-hook} after it moves the cursor.
392
393@node Holiday Customizing
394@section Customizing the Holidays
395
396@vindex calendar-holidays
397@vindex christian-holidays
398@vindex hebrew-holidays
399@vindex islamic-holidays
400 Emacs knows about holidays defined by entries on one of several lists.
401You can customize these lists of holidays to your own needs, adding or
402deleting holidays. The lists of holidays that Emacs uses are for
403general holidays (@code{general-holidays}), local holidays
404(@code{local-holidays}), Christian holidays (@code{christian-holidays}),
405Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Muslim)
406holidays (@code{islamic-holidays}), and other holidays
407(@code{other-holidays}).
408
409@vindex general-holidays
410 The general holidays are, by default, holidays common throughout the
411United States. To eliminate these holidays, set @code{general-holidays}
412to @code{nil}.
413
414@vindex local-holidays
415 There are no default local holidays (but sites may supply some). You
416can set the variable @code{local-holidays} to any list of holidays, as
417described below.
418
419@vindex all-christian-calendar-holidays
420@vindex all-hebrew-calendar-holidays
421@vindex all-islamic-calendar-holidays
422 By default, Emacs does not include all the holidays of the religions
423that it knows, only those commonly found in secular calendars. For a
424more extensive collection of religious holidays, you can set any (or
425all) of the variables @code{all-christian-calendar-holidays},
426@code{all-hebrew-calendar-holidays}, or
427@code{all-islamic-calendar-holidays} to @code{t}. If you want to
428eliminate the religious holidays, set any or all of the corresponding
429variables @code{christian-holidays}, @code{hebrew-holidays}, and
430@code{islamic-holidays} to @code{nil}.@refill
431
432@vindex other-holidays
433 You can set the variable @code{other-holidays} to any list of
434holidays. This list, normally empty, is intended for individual use.
435
436@cindex holiday forms
437 Each of the lists (@code{general-holidays}, @code{local-holidays},
438@code{christian-holidays}, @code{hebrew-holidays},
439@code{islamic-holidays}, and @code{other-holidays}) is a list of
440@dfn{holiday forms}, each holiday form describing a holiday (or
441sometimes a list of holidays).
442
443 Here is a table of the possible kinds of holiday form. Day numbers
444and month numbers count starting from 1, but ``dayname'' numbers
445count Sunday as 0. The element @var{string} is always the
446name of the holiday, as a string.
447
448@table @code
449@item (holiday-fixed @var{month} @var{day} @var{string})
450A fixed date on the Gregorian calendar.
451
452@item (holiday-float @var{month} @var{dayname} @var{k} @var{string})
453The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar
454(@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back
455from the end of the month.
456
457@item (holiday-hebrew @var{month} @var{day} @var{string})
458A fixed date on the Hebrew calendar.
459
460@item (holiday-islamic @var{month} @var{day} @var{string})
461A fixed date on the Islamic calendar.
462
463@item (holiday-julian @var{month} @var{day} @var{string})
464A fixed date on the Julian calendar.
465
466@item (holiday-sexp @var{sexp} @var{string})
467A date calculated by the Lisp expression @var{sexp}. The expression
468should use the variable @code{year} to compute and return the date of a
469holiday, or @code{nil} if the holiday doesn't happen this year. The
470value of @var{sexp} must represent the date as a list of the form
471@code{(@var{month} @var{day} @var{year})}.
472
473@item (if @var{condition} @var{holiday-form})
474A holiday that happens only if @var{condition} is true.
475
476@item (@var{function} @r{[}@var{args}@r{]})
477A list of dates calculated by the function @var{function}, called with
478arguments @var{args}.
479@end table
480
481 For example, suppose you want to add Bastille Day, celebrated in
482France on July 14. You can do this as follows:
483
484@smallexample
485(setq other-holidays '((holiday-fixed 7 14 "Bastille Day")))
486@end smallexample
487
488@noindent
489The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the
490fourteenth day of the seventh month (July).
491
492 Many holidays occur on a specific day of the week, at a specific time
493of month. Here is a holiday form describing Hurricane Supplication Day,
494celebrated in the Virgin Islands on the fourth Monday in August:
495
496@smallexample
497(holiday-float 8 1 4 "Hurricane Supplication Day")
498@end smallexample
499
500@noindent
501Here the 8 specifies August, the 1 specifies Monday (Sunday is 0,
502Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in
503the month (1 specifies the first occurrence, 2 the second occurrence,
504@minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and
505so on).
506
507 You can specify holidays that occur on fixed days of the Hebrew,
508Islamic, and Julian calendars too. For example,
509
510@smallexample
511(setq other-holidays
512 '((holiday-hebrew 10 2 "Last day of Hanukkah")
513 (holiday-islamic 3 12 "Mohammed's Birthday")
514 (holiday-julian 4 2 "Jefferson's Birthday")))
515@end smallexample
516
517@noindent
518adds the last day of Hanukkah (since the Hebrew months are numbered with
5191 starting from Nisan), the Islamic feast celebrating Mohammed's
520birthday (since the Islamic months are numbered from 1 starting with
521Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the
522Julian calendar.
523
524 To include a holiday conditionally, use either Emacs Lisp's @code{if} or the
525@code{holiday-sexp} form. For example, American presidential elections
526occur on the first Tuesday after the first Monday in November of years
527divisible by 4:
528
529@smallexample
530(holiday-sexp '(if (= 0 (% year 4))
531 (calendar-gregorian-from-absolute
532 (1+ (calendar-dayname-on-or-before
533 1 (+ 6 (calendar-absolute-from-gregorian
534 (list 11 1 year)))))))
535 "US Presidential Election")
536@end smallexample
537
538@noindent
539or
540
541@smallexample
542(if (= 0 (% displayed-year 4))
543 (fixed 11
544 (extract-calendar-day
545 (calendar-gregorian-from-absolute
546 (1+ (calendar-dayname-on-or-before
547 1 (+ 6 (calendar-absolute-from-gregorian
548 (list 11 1 displayed-year)))))))
549 "US Presidential Election"))
550@end smallexample
551
552 Some holidays just don't fit into any of these forms because special
553calculations are involved in their determination. In such cases you
554must write a Lisp function to do the calculation. To include eclipses,
555for example, add @code{(eclipses)} to @code{other-holidays}
556and write an Emacs Lisp function @code{eclipses} that returns a
557(possibly empty) list of the relevant Gregorian dates among the range
558visible in the calendar window, with descriptive strings, like this:
559
560@smallexample
561(((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... )
562@end smallexample
563
564@node Date Display Format
565@section Date Display Format
566@vindex calendar-date-display-form
567
568 You can customize the manner of displaying dates in the diary, in mode
569lines, and in messages by setting @code{calendar-date-display-form}.
570This variable holds a list of expressions that can involve the variables
571@code{month}, @code{day}, and @code{year}, which are all numbers in
572string form, and @code{monthname} and @code{dayname}, which are both
573alphabetic strings. In the American style, the default value of this
574list is as follows:
575
576@smallexample
577((if dayname (concat dayname ", ")) monthname " " day ", " year)
578@end smallexample
579
580@noindent
581while in the European style this value is the default:
582
583@smallexample
584((if dayname (concat dayname ", ")) day " " monthname " " year)
585@end smallexample
586
587@noindent
588The ISO standard date representation is this:
589
590@smallexample
591(year "-" month "-" day)
592@end smallexample
593
594@noindent
595This specifies a typical American format:
596
597@smallexample
598(month "/" day "/" (substring year -2))
599@end smallexample
600
601@node Time Display Format
602@section Time Display Format
603@vindex calendar-time-display-form
604
605 The calendar and diary by default display times of day in the
606conventional American style with the hours from 1 through 12, minutes,
607and either @samp{am} or @samp{pm}. If you prefer the European style,
608also known in the US as military, in which the hours go from 00 to 23,
609you can alter the variable @code{calendar-time-display-form}. This
610variable is a list of expressions that can involve the variables
611@code{12-hours}, @code{24-hours}, and @code{minutes}, which are all
612numbers in string form, and @code{am-pm} and @code{time-zone}, which are
613both alphabetic strings. The default value of
614@code{calendar-time-display-form} is as follows:
615
616@smallexample
617(12-hours ":" minutes am-pm
618 (if time-zone " (") time-zone (if time-zone ")"))
619@end smallexample
620
621@noindent
622Here is a value that provides European style times:
623
624@smallexample
625(24-hours ":" minutes
626 (if time-zone " (") time-zone (if time-zone ")"))
627@end smallexample
628
629@node Daylight Savings
630@section Daylight Savings Time
631@cindex daylight savings time
632
633 Emacs understands the difference between standard time and daylight
634savings time---the times given for sunrise, sunset, solstices,
635equinoxes, and the phases of the moon take that into account. The rules
636for daylight savings time vary from place to place and have also varied
637historically from year to year. To do the job properly, Emacs needs to
638know which rules to use.
639
640 Some operating systems keep track of the rules that apply to the place
641where you are; on these systems, Emacs gets the information it needs
642from the system automatically. If some or all of this information is
643missing, Emacs fills in the gaps with the rules currently used in
644Cambridge, Massachusetts, which is the center of GNU's world.
645
646
647@vindex calendar-daylight-savings-starts
648@vindex calendar-daylight-savings-ends
649 If the default choice of rules is not appropriate for your location,
650you can tell Emacs the rules to use by setting the variables
651@code{calendar-daylight-savings-starts} and
652@code{calendar-daylight-savings-ends}. Their values should be Lisp
653expressions that refer to the variable @code{year}, and evaluate to the
654Gregorian date on which daylight savings time starts or (respectively)
655ends, in the form of a list @code{(@var{month} @var{day} @var{year})}.
656The values should be @code{nil} if your area does not use daylight
657savings time.
658
659 Emacs uses these expressions to determine the start and end dates of
660daylight savings time as holidays and for correcting times of day in the
661solar and lunar calculations.
662
663 The values for Cambridge, Massachusetts are as follows:
664
665@example
666@group
667(calendar-nth-named-day 1 0 4 year)
668(calendar-nth-named-day -1 0 10 year)
669@end group
670@end example
671
672@noindent
673i.e., the first 0th day (Sunday) of the fourth month (April) in
674the year specified by @code{year}, and the last Sunday of the tenth month
675(October) of that year. If daylight savings time were
676changed to start on October 1, you would set
677@code{calendar-daylight-savings-starts} to this:
678
679@example
680(list 10 1 year)
681@end example
682
683 For a more complex example, suppose daylight savings time begins on
684the first of Nisan on the Hebrew calendar. You should set
685@code{calendar-daylight-savings-starts} to this value:
686
687@example
688(calendar-gregorian-from-absolute
689 (calendar-absolute-from-hebrew
690 (list 1 1 (+ year 3760))))
691@end example
692
693@noindent
694because Nisan is the first month in the Hebrew calendar and the Hebrew
695year differs from the Gregorian year by 3760 at Nisan.
696
697 If there is no daylight savings time at your location, or if you want
698all times in standard time, set @code{calendar-daylight-savings-starts}
699and @code{calendar-daylight-savings-ends} to @code{nil}.
700
701@vindex calendar-daylight-time-offset
702 The variable @code{calendar-daylight-time-offset} specifies the
703difference between daylight savings time and standard time, measured in
704minutes. The value for Cambridge is 60.
705
706@vindex calendar-daylight-savings-starts-time
707@vindex calendar-daylight-savings-ends-time
708 The variable @code{calendar-daylight-savings-starts-time} and the
709variable @code{calendar-daylight-savings-ends-time} specify the number
710of minutes after midnight local time when the transition to and from
711daylight savings time should occur. For Cambridge, both variables'
712values are 120.
713
714@node Diary Customizing
715@section Customizing the Diary
716
717@vindex holidays-in-diary-buffer
718 Ordinarily, the mode line of the diary buffer window indicates any
719holidays that fall on the date of the diary entries. The process of
720checking for holidays can take several seconds, so including holiday
721information delays the display of the diary buffer noticeably. If you'd
722prefer to have a faster display of the diary buffer but without the
723holiday information, set the variable @code{holidays-in-diary-buffer} to
724@code{nil}.@refill
725
726@vindex number-of-diary-entries
727 The variable @code{number-of-diary-entries} controls the number of
728days of diary entries to be displayed at one time. It affects the
729initial display when @code{view-diary-entries-initially} is @code{t}, as
730well as the command @kbd{M-x diary}. For example, the default value is
7311, which says to display only the current day's diary entries. If the
732value is 2, both the current day's and the next day's entries are
733displayed. The value can also be a vector of seven elements: for
734example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries
735appear on Sunday, the current date's and the next day's diary entries
736appear Monday through Thursday, Friday through Monday's entries appear
737on Friday, while on Saturday only that day's entries appear.
738
739@vindex print-diary-entries-hook
740@findex print-diary-entries
741 The variable @code{print-diary-entries-hook} is a normal hook run
742after preparation of a temporary buffer containing just the diary
743entries currently visible in the diary buffer. (The other, irrelevant
744diary entries are really absent from the temporary buffer; in the diary
745buffer, they are merely hidden.) The default value of this hook does
746the printing with the command @code{lpr-buffer}. If you want to use a
747different command to do the printing, just change the value of this
748hook. Other uses might include, for example, rearranging the lines into
749order by day and time.
750
751@vindex diary-date-forms
752 You can customize the form of dates in your diary file, if neither the
753standard American nor European styles suits your needs, by setting the
754variable @code{diary-date-forms}. This variable is a list of patterns
755for recognizing a date. Each date pattern is a list whose elements may
756be regular expressions (@pxref{Regular Expressions,,, elisp, the Emacs
757Lisp Reference Manual}) or the symbols @code{month}, @code{day},
758@code{year}, @code{monthname}, and @code{dayname}. All these elements
759serve as patterns that match certain kinds of text in the diary file.
760In order for the date pattern, as a whole, to match, all of its elements
761must match consecutively.
762
763 A regular expression in a date pattern matches in its usual fashion,
764using the standard syntax table altered so that @samp{*} is a word
765constituent.
766
767 The symbols @code{month}, @code{day}, @code{year}, @code{monthname},
768and @code{dayname} match the month number, day number, year number,
769month name, and day name of the date being considered. The symbols that
770match numbers allow leading zeros; those that match names allow
771three-letter abbreviations and capitalization. All the symbols can
772match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any
773month'', and so on, it should match regardless of the date being
774considered.
775
776 The default value of @code{diary-date-forms} in the American style is
777this:
778
779@example
780((month "/" day "[^/0-9]")
781 (month "/" day "/" year "[^0-9]")
782 (monthname " *" day "[^,0-9]")
783 (monthname " *" day ", *" year "[^0-9]")
784 (dayname "\\W"))
785@end example
786
787 The date patterns in the list must be @emph{mutually exclusive} and
788must not match any portion of the diary entry itself, just the date and
789one character of whitespace. If, to be mutually exclusive, the pattern
790must match a portion of the diary entry text---beyond the whitespace
791that ends the date---then the first element of the date pattern
792@emph{must} be @code{backup}. This causes the date recognizer to back
793up to the beginning of the current word of the diary entry, after
794finishing the match. Even if you use @code{backup}, the date pattern
795must absolutely not match more than a portion of the first word of the
796diary entry. The default value of @code{diary-date-forms} in the
797European style is this list:
798
799@example
800((day "/" month "[^/0-9]")
801 (day "/" month "/" year "[^0-9]")
802 (backup day " *" monthname "\\W+\\<[^*0-9]")
803 (day " *" monthname " *" year "[^0-9]")
804 (dayname "\\W"))
805@end example
806
807@noindent
808Notice the use of @code{backup} in the third pattern, because it needs
809to match part of a word beyond the date itself to distinguish it from
810the fourth pattern.
811
812@node Hebrew/Islamic Entries
813@section Hebrew- and Islamic-Date Diary Entries
814
815 Your diary file can have entries based on Hebrew or Islamic dates, as
816well as entries based on the world-standard Gregorian calendar.
817However, because recognition of such entries is time-consuming and most
818people don't use them, you must explicitly enable their use. If you
819want the diary to recognize Hebrew-date diary entries, for example,
820you must do this:
821
822@vindex nongregorian-diary-listing-hook
823@vindex nongregorian-diary-marking-hook
824@findex list-hebrew-diary-entries
825@findex mark-hebrew-diary-entries
826@smallexample
827(add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries)
828(add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries)
829@end smallexample
830
831@noindent
832If you want Islamic-date entries, do this:
833
834@findex list-islamic-diary-entries
835@findex mark-islamic-diary-entries
836@smallexample
837(add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries)
838(add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries)
839@end smallexample
840
841 Hebrew- and Islamic-date diary entries have the same formats as
842Gregorian-date diary entries, except that @samp{H} precedes a Hebrew
843date and @samp{I} precedes an Islamic date. Moreover, because the
844Hebrew and Islamic month names are not uniquely specified by the first
845three letters, you may not abbreviate them. For example, a diary entry
846for the Hebrew date Heshvan 25 could look like this:
847
848@smallexample
849HHeshvan 25 Happy Hebrew birthday!
850@end smallexample
851
852@noindent
853and would appear in the diary for any date that corresponds to Heshvan 25
854on the Hebrew calendar. And here is an Islamic-date diary entry that matches
855Dhu al-Qada 25:
856
857@smallexample
858IDhu al-Qada 25 Happy Islamic birthday!
859@end smallexample
860
861 As with Gregorian-date diary entries, Hebrew- and Islamic-date entries
862are nonmarking if they are preceded with an ampersand (@samp{&}).
863
864 Here is a table of commands used in the calendar to create diary entries
865that match the selected date and other dates that are similar in the Hebrew
866or Islamic calendar:
867
868@table @kbd
869@item i h d
870Add a diary entry for the Hebrew date corresponding to the selected date
871(@code{insert-hebrew-diary-entry}).
872@item i h m
873Add a diary entry for the day of the Hebrew month corresponding to the
874selected date (@code{insert-monthly-hebrew-diary-entry}). This diary
875entry matches any date that has the same Hebrew day-within-month as the
876selected date.
877@item i h y
878Add a diary entry for the day of the Hebrew year corresponding to the
879selected date (@code{insert-yearly-hebrew-diary-entry}). This diary
880entry matches any date which has the same Hebrew month and day-within-month
881as the selected date.
882@item i i d
883Add a diary entry for the Islamic date corresponding to the selected date
884(@code{insert-islamic-diary-entry}).
885@item i i m
886Add a diary entry for the day of the Islamic month corresponding to the
887selected date (@code{insert-monthly-islamic-diary-entry}).
888@item i i y
889Add a diary entry for the day of the Islamic year corresponding to the
890selected date (@code{insert-yearly-islamic-diary-entry}).
891@end table
892
893@findex insert-hebrew-diary-entry
894@findex insert-monthly-hebrew-diary-entry
895@findex insert-yearly-hebrew-diary-entry
896@findex insert-islamic-diary-entry
897@findex insert-monthly-islamic-diary-entry
898@findex insert-yearly-islamic-diary-entry
899 These commands work much like the corresponding commands for ordinary
900diary entries: they apply to the date that point is on in the calendar
901window, and what they do is insert just the date portion of a diary entry
902at the end of your diary file. You must then insert the rest of the
903diary entry.
904
905@node Fancy Diary Display
906@section Fancy Diary Display
907@vindex diary-display-hook
908@findex simple-diary-display
909
910 Diary display works by preparing the diary buffer and then running the
911hook @code{diary-display-hook}. The default value of this hook
912(@code{simple-diary-display}) hides the irrelevant diary entries and
913then displays the buffer. However, if you specify the hook as follows,
914
915@cindex diary buffer
916@findex fancy-diary-display
917@example
918(add-hook 'diary-display-hook 'fancy-diary-display)
919@end example
920
921@noindent
922this enables fancy diary display. It displays diary entries and
923holidays by copying them into a special buffer that exists only for the
924sake of display. Copying to a separate buffer provides an opportunity
925to change the displayed text to make it prettier---for example, to sort
926the entries by the dates they apply to.
927
928 As with simple diary display, you can print a hard copy of the buffer
929with @code{print-diary-entries}. To print a hard copy of a day-by-day
930diary for a week, position point on Sunday of that week, type
931@kbd{7 d}, and then do @kbd{M-x print-diary-entries}. As usual, the
932inclusion of the holidays slows down the display slightly; you can speed
933things up by setting the variable @code{holidays-in-diary-buffer} to
934@code{nil}.
935
936@vindex diary-list-include-blanks
937 Ordinarily, the fancy diary buffer does not show days for which there are
938no diary entries, even if that day is a holiday. If you want such days to be
939shown in the fancy diary buffer, set the variable
940@code{diary-list-include-blanks} to @code{t}.@refill
941
942@cindex sorting diary entries
943 If you use the fancy diary display, you can use the normal hook
944@code{list-diary-entries-hook} to sort each day's diary entries by their
945time of day. Here's how:
946
947@findex sort-diary-entries
948@example
949(add-hook 'list-diary-entries-hook 'sort-diary-entries t)
950@end example
951
952@noindent
953For each day, this sorts diary entries that begin with a recognizable
954time of day according to their times. Diary entries without times come
955first within each day.
956
957 Fancy diary display also has the ability to process included diary
958files. This permits a group of people to share a diary file for events
959that apply to all of them. Lines in the diary file of this form:
960
961@smallexample
962#include "@var{filename}"
963@end smallexample
964
965@noindent
966includes the diary entries from the file @var{filename} in the fancy
967diary buffer. The include mechanism is recursive, so that included files
968can include other files, and so on; you must be careful not to have a
969cycle of inclusions, of course. Here is how to enable the include
970facility:
971
972@vindex list-diary-entries-hook
973@vindex mark-diary-entries-hook
974@findex include-other-diary-files
975@findex mark-included-diary-files
976@smallexample
977(add-hook 'list-diary-entries-hook 'include-other-diary-files)
978(add-hook 'mark-diary-entries-hook 'mark-included-diary-files)
979@end smallexample
980
981The include mechanism works only with the fancy diary display, because
982ordinary diary display shows the entries directly from your diary file.
983
984@node Sexp Diary Entries
985@section Sexp Entries and the Fancy Diary Display
986@cindex sexp diary entries
987
988 Sexp diary entries allow you to do more than just have complicated
989conditions under which a diary entry applies. If you use the fancy
990diary display, sexp entries can generate the text of the entry depending
991on the date itself. For example, an anniversary diary entry can insert
992the number of years since the anniversary date into the text of the
993diary entry. Thus the @samp{%d} in this dairy entry:
994
995@findex diary-anniversary
996@smallexample
997%%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)
998@end smallexample
999
1000@noindent
1001gets replaced by the age, so on October 31, 1990 the entry appears in
1002the fancy diary buffer like this:
1003
1004@smallexample
1005Arthur's birthday (42 years old)
1006@end smallexample
1007
1008@noindent
1009If the diary file instead contains this entry:
1010
1011@smallexample
1012%%(diary-anniversary 10 31 1948) Arthur's %d%s birthday
1013@end smallexample
1014
1015@noindent
1016the entry in the fancy diary buffer for October 31, 1990 appears like this:
1017
1018@smallexample
1019Arthur's 42nd birthday
1020@end smallexample
1021
1022 Similarly, cyclic diary entries can interpolate the number of repetitions
1023that have occurred:
1024
1025@findex diary-cyclic
1026@smallexample
1027%%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time)
1028@end smallexample
1029
1030@noindent
1031looks like this:
1032
1033@smallexample
1034Renew medication (5th time)
1035@end smallexample
1036
1037@noindent
1038in the fancy diary display on September 8, 1990.
1039
1040 There is an early reminder diary sexp that includes its entry in the
1041diary not only on the date of occurrence, but also on earlier dates.
1042For example, if you want a reminder a week before your anniversary, you
1043can use
1044
1045@findex diary-remind
1046@smallexample
1047%%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary
1048@end smallexample
1049
1050@noindent
1051and the fancy diary will show
1052@smallexample
1053Ed's anniversary
1054@end smallexample
1055@noindent
1056both on December 15 and on December 22.
1057
1058@findex diary-date
1059 The function @code{diary-date} applies to dates described by a month,
1060day, year combination, each of which can be an integer, a list of
1061integers, or @code{t}. The value @code{t} means all values. For
1062example,
1063
1064@smallexample
1065%%(diary-date '(10 11 12) 22 t) Rake leaves
1066@end smallexample
1067
1068@noindent
1069causes the fancy diary to show
1070
1071@smallexample
1072Rake leaves
1073@end smallexample
1074
1075@noindent
1076on October 22, November 22, and December 22 of every year.
1077
1078@findex diary-float
1079 The function @code{diary-float} allows you to describe diary entries
1080that apply to dates like the third Friday of November, or the last
1081Tuesday in April. The parameters are the @var{month}, @var{dayname},
1082and an index @var{n}. The entry appears on the @var{n}th @var{dayname}
1083of @var{month}, where @var{dayname}=0 means Sunday, 1 means Monday, and
1084so on. If @var{n} is negative it counts backward from the end of
1085@var{month}. The value of @var{month} can be a list of months, a single
1086month, or @code{t} to specify all months. You can also use an optional
1087parameter @var{day} to specify the @var{n}th @var{dayname} of
1088@var{month} on or after/before @var{day}; the value of @var{day} defaults
1089to 1 if @var{n} is positive and to the last day of @var{month} if
1090@var{n} is negative. For example,
1091
1092@smallexample
1093%%(diary-float t 1 -1) Pay rent
1094@end smallexample
1095
1096@noindent
1097causes the fancy diary to show
1098
1099@smallexample
1100Pay rent
1101@end smallexample
1102
1103@noindent
1104on the last Monday of every month.
1105
1106 The generality of sexp diary entries lets you specify any diary
1107entry that you can describe algorithmically. A sexp diary entry
1108contains an expression that computes whether the entry applies to any
1109given date. If its value is non-@code{nil}, the entry applies to that
1110date; otherwise, it does not. The expression can use the variable
1111@code{date} to find the date being considered; its value is a list
1112(@var{month} @var{day} @var{year}) that refers to the Gregorian
1113calendar.
1114
1115 The sexp diary entry applies to a date when the expression's value
1116is non-@code{nil}, but some values have more specific meanings. If
1117the value is a string, that string is a description of the event which
1118occurs on that date. The value can also have the form
1119@code{(@var{mark} . @var{string})}; then @var{mark} specifies how to
1120mark the date in the calendar, and @var{string} is the description of
1121the event. If @var{mark} is a single-character string, that character
1122appears next to the date in the calendar. If @var{mark} is a face
1123name, the date is displayed in that face. If @var{mark} is
1124@code{nil}, that specifies no particular highlighting for the date.
1125
1126 Suppose you get paid on the 21st of the month if it is a weekday, and
1127on the Friday before if the 21st is on a weekend. Here is how to write
1128a sexp diary entry that matches those dates:
1129
1130@smallexample
1131&%%(let ((dayname (calendar-day-of-week date))
1132 (day (car (cdr date))))
1133 (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
1134 (and (memq day '(19 20)) (= dayname 5)))
1135 ) Pay check deposited
1136@end smallexample
1137
1138 The following sexp diary entries take advantage of the ability (in the fancy
1139diary display) to concoct diary entries whose text varies based on the date:
1140
1141@findex diary-sunrise-sunset
1142@findex diary-phases-of-moon
1143@findex diary-day-of-year
1144@findex diary-iso-date
1145@findex diary-julian-date
1146@findex diary-astro-day-number
1147@findex diary-hebrew-date
1148@findex diary-islamic-date
1149@findex diary-french-date
1150@findex diary-mayan-date
1151@table @code
1152@item %%(diary-sunrise-sunset)
1153Make a diary entry for the local times of today's sunrise and sunset.
1154@item %%(diary-phases-of-moon)
1155Make a diary entry for the phases (quarters) of the moon.
1156@item %%(diary-day-of-year)
1157Make a diary entry with today's day number in the current year and the number
1158of days remaining in the current year.
1159@item %%(diary-iso-date)
1160Make a diary entry with today's equivalent ISO commercial date.
1161@item %%(diary-julian-date)
1162Make a diary entry with today's equivalent date on the Julian calendar.
1163@item %%(diary-astro-day-number)
1164Make a diary entry with today's equivalent astronomical (Julian) day number.
1165@item %%(diary-hebrew-date)
1166Make a diary entry with today's equivalent date on the Hebrew calendar.
1167@item %%(diary-islamic-date)
1168Make a diary entry with today's equivalent date on the Islamic calendar.
1169@item %%(diary-french-date)
1170Make a diary entry with today's equivalent date on the French Revolutionary
1171calendar.
1172@item %%(diary-mayan-date)
1173Make a diary entry with today's equivalent date on the Mayan calendar.
1174@end table
1175
1176@noindent
1177Thus including the diary entry
1178
1179@example
1180&%%(diary-hebrew-date)
1181@end example
1182
1183@noindent
1184causes every day's diary display to contain the equivalent date on the
1185Hebrew calendar, if you are using the fancy diary display. (With simple
1186diary display, the line @samp{&%%(diary-hebrew-date)} appears in the
1187diary for any date, but does nothing particularly useful.)
1188
1189 These functions can be used to construct sexp diary entries based on
1190the Hebrew calendar in certain standard ways:
1191
1192@cindex rosh hodesh
1193@findex diary-rosh-hodesh
1194@cindex parasha, weekly
1195@findex diary-parasha
1196@cindex candle lighting times
1197@findex diary-sabbath-candles
1198@cindex omer count
1199@findex diary-omer
1200@cindex yahrzeits
1201@findex diary-yahrzeit
1202@table @code
1203@item %%(diary-rosh-hodesh)
1204Make a diary entry that tells the occurrence and ritual announcement of each
1205new Hebrew month.
1206@item %%(diary-parasha)
1207Make a Saturday diary entry that tells the weekly synagogue scripture reading.
1208@item %%(diary-sabbath-candles)
1209Make a Friday diary entry that tells the @emph{local time} of Sabbath
1210candle lighting.
1211@item %%(diary-omer)
1212Make a diary entry that gives the omer count, when appropriate.
1213@item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name}
1214Make a diary entry marking the anniversary of a date of death. The date
1215is the @emph{Gregorian} (civil) date of death. The diary entry appears
1216on the proper Hebrew calendar anniversary and on the day before. (In
1217the European style, the order of the parameters is changed to @var{day},
1218@var{month}, @var{year}.)
1219@end table
1220
1221 All the functions documented above take an optional argument
1222@var{mark} which specifies how to mark the date in the calendar display.
1223If one of these functions decides that it applies to a certain date,
1224it returns a value that contains @var{mark}.
1225
1226
310@node Index 1227@node Index
311@unnumbered Index 1228@unnumbered Index
312 1229
diff --git a/man/emacs.texi b/man/emacs.texi
index a619448a8ba..0ad3a5148c9 100644
--- a/man/emacs.texi
+++ b/man/emacs.texi
@@ -224,11 +224,13 @@ Recovery from Problems
224* Contributing:: How to contribute improvements to Emacs. 224* Contributing:: How to contribute improvements to Emacs.
225* Service:: How to get help for your own Emacs needs. 225* Service:: How to get help for your own Emacs needs.
226 226
227
228Detailed Node Listing
229---------------------
230
227Here are some other nodes which are really inferiors of the ones 231Here are some other nodes which are really inferiors of the ones
228already listed, mentioned here so you can get to them in one step: 232already listed, mentioned here so you can get to them in one step:
229 233
230 --- The Detailed Node Listing ---
231
232The Organization of the Screen 234The Organization of the Screen
233 235
234* Point:: The place in the text where editing commands operate. 236* Point:: The place in the text where editing commands operate.
@@ -563,6 +565,8 @@ Compiling and Testing Programs
563* Compilation Mode:: The mode for visiting compiler errors. 565* Compilation Mode:: The mode for visiting compiler errors.
564* Compilation Shell:: Customizing your shell properly 566* Compilation Shell:: Customizing your shell properly
565 for use in the compilation buffer. 567 for use in the compilation buffer.
568* Grep Searching:: Searching with grep.
569* Flymake:: Finding syntax errors on the fly.
566* Debuggers:: Running symbolic debuggers for non-Lisp programs. 570* Debuggers:: Running symbolic debuggers for non-Lisp programs.
567* Executing Lisp:: Various modes for editing Lisp programs, 571* Executing Lisp:: Various modes for editing Lisp programs,
568 with different facilities for running 572 with different facilities for running
@@ -676,6 +680,9 @@ Dired, the Directory Editor
676* Hiding Subdirectories:: Making subdirectories visible or invisible. 680* Hiding Subdirectories:: Making subdirectories visible or invisible.
677* Dired Updating:: Discarding lines for files of no interest. 681* Dired Updating:: Discarding lines for files of no interest.
678* Dired and Find:: Using `find' to choose the files for Dired. 682* Dired and Find:: Using `find' to choose the files for Dired.
683* Dired and Find:: Using `find' to choose the files for Dired.
684* Wdired:: Operating on files by editing the Dired buffer.
685* Misc Dired Features:: Various other features.
679 686
680The Calendar and the Diary 687The Calendar and the Diary
681 688
@@ -709,7 +716,7 @@ Conversion To and From Other Calendars
709 716
710The Diary 717The Diary
711 718
712* Diary Commands:: Viewing diary entries and associated calendar dates. 719* Displaying the Diary:: Viewing diary entries and associated calendar dates.
713* Format of Diary File:: Entering events in your diary. 720* Format of Diary File:: Entering events in your diary.
714* Date Formats:: Various ways you can specify dates. 721* Date Formats:: Various ways you can specify dates.
715* Adding to Diary:: Commands to create diary entries. 722* Adding to Diary:: Commands to create diary entries.
diff --git a/man/files.texi b/man/files.texi
index 4e944f83afd..7ed2baa0b93 100644
--- a/man/files.texi
+++ b/man/files.texi
@@ -238,13 +238,13 @@ or tool bar) use the toolkit's standard File Selection dialog instead
238of prompting for the file name in the minibuffer. On Unix and 238of prompting for the file name in the minibuffer. On Unix and
239GNU/Linux platforms, Emacs does that when built with GTK, LessTif, and 239GNU/Linux platforms, Emacs does that when built with GTK, LessTif, and
240Motif toolkits; on MS-Windows, the GUI version does that by default. 240Motif toolkits; on MS-Windows, the GUI version does that by default.
241For information on how to customize this, see @xref{Dialog Boxes}. 241For information on how to customize this, see @ref{Dialog Boxes}.
242 242
243 Secondly, Emacs supports the ``drag and drop'' protocol on the X 243 Secondly, Emacs supports the ``drag and drop'' protocol on the X
244window system. Dropping a file into an ordinary Emacs window visits 244window system. Dropping a file into an ordinary Emacs window visits
245the file using that window. However, dropping a file into a window 245the file using that window. However, dropping a file into a window
246displaying a Dired buffer moves or copies the file into the displayed 246displaying a Dired buffer moves or copies the file into the displayed
247directory. For details, see @xref{Drag and Drop} and @xref{Misc Dired 247directory. For details, see @ref{Drag and Drop}, @ref{Misc Dired
248Features}. 248Features}.
249 249
250@cindex creating files 250@cindex creating files
@@ -940,6 +940,15 @@ Auto-Revert Tail mode, @kbd{M-x auto-revert-tail-mode}.
940for a changed file. Since checking a remote file is too slow, these 940for a changed file. Since checking a remote file is too slow, these
941modes do not check or revert remote files. 941modes do not check or revert remote files.
942 942
943@vindex auto-revert-check-vc-info
944 Whenever Auto Revert mode reverts the buffer, it updates the version
945control information, such as the version control number displayed in
946the mode line. However, this information may not be properly updated
947if the version control state changes outside of Emacs---for example,
948if a new version is checked in from outside the current Emacs session.
949If you set @code{auto-revert-check-vc-info} to @code{t}, Auto Revert
950mode will update the version control status information periodically.
951
943@node Auto Save 952@node Auto Save
944@section Auto-Saving: Protection Against Disasters 953@section Auto-Saving: Protection Against Disasters
945@cindex Auto Save mode 954@cindex Auto Save mode
@@ -1263,6 +1272,10 @@ as multiple branches, are not available with SCCS. You should use
1263SCCS only if for some reason you cannot use RCS, or one of the 1272SCCS only if for some reason you cannot use RCS, or one of the
1264higher-level systems such as CVS or GNU Arch. 1273higher-level systems such as CVS or GNU Arch.
1265 1274
1275In the following, we discuss mainly RCS, SCCS and CVS. Nearly
1276everything said about CVS applies to Gnu Arch, Subversion and Meta-CVS
1277as well.
1278
1266@node VC Concepts 1279@node VC Concepts
1267@subsubsection Concepts of Version Control 1280@subsubsection Concepts of Version Control
1268 1281
@@ -1463,9 +1476,9 @@ informs you if another user has checked in changes in the same file
1463since you began editing it, and when this happens, his changes will be 1476since you began editing it, and when this happens, his changes will be
1464effectively removed when you check in your version (though they will 1477effectively removed when you check in your version (though they will
1465remain in the master file, so they will not be entirely lost). You must 1478remain in the master file, so they will not be entirely lost). You must
1466therefore verify the current version is unchanged, before you check in your 1479therefore verify that the current version is unchanged, before you
1467changes. We hope to eliminate this risk and provide automatic merging 1480check in your changes. We hope to eliminate this risk and provide
1468with RCS in a future Emacs version. 1481automatic merging with RCS in a future Emacs version.
1469 1482
1470 In addition, locking is possible with RCS even in this mode, although 1483 In addition, locking is possible with RCS even in this mode, although
1471it is not required; @kbd{C-x v v} with an unmodified file locks the 1484it is not required; @kbd{C-x v v} with an unmodified file locks the
@@ -1689,13 +1702,10 @@ there is more than one system in use for a directory, Emacs uses the one
1689that appears first in @code{vc-handled-backends} (@pxref{Customizing VC}). 1702that appears first in @code{vc-handled-backends} (@pxref{Customizing VC}).
1690On the other hand, if there are no files already registered, 1703On the other hand, if there are no files already registered,
1691Emacs uses the first system from @code{vc-handled-backends} that could 1704Emacs uses the first system from @code{vc-handled-backends} that could
1692register the file---for example, you cannot register a file under CVS if 1705register the file (for example, you cannot register a file under CVS if
1693its directory is not already part of a CVS tree. 1706its directory is not already part of a CVS tree); with the default
1694 1707value of @code{vc-handled-backends}, this means that Emacs uses RCS in
1695 With the default value of @code{vc-handled-backends}, this means 1708this situation.
1696that Emacs uses RCS if there are any files under RCS control, CVS if
1697there are any files under CVS, SCCS if any files are under SCCS, or
1698RCS as the ultimate default.
1699 1709
1700 If locking is in use, @kbd{C-x v i} leaves the file unlocked and 1710 If locking is in use, @kbd{C-x v i} leaves the file unlocked and
1701read-only. Type @kbd{C-x v v} if you wish to start editing it. After 1711read-only. Type @kbd{C-x v v} if you wish to start editing it. After
@@ -1883,7 +1893,8 @@ marked files, so that you can lock or check in several files at once.
1883If it operates on more than one file, it handles each file according to 1893If it operates on more than one file, it handles each file according to
1884its current state; thus, it might lock one file, but check in another 1894its current state; thus, it might lock one file, but check in another
1885file. This could be confusing; it is up to you to avoid confusing 1895file. This could be confusing; it is up to you to avoid confusing
1886behavior by marking a set of files that are in a similar state. 1896behavior by marking a set of files that are in a similar state. If no
1897files are marked, @kbd{v v} operates on the file in the current line.
1887 1898
1888 If any files call for check-in, @kbd{v v} reads a single log entry, 1899 If any files call for check-in, @kbd{v v} reads a single log entry,
1889then uses it for all the files being checked in. This is convenient for 1900then uses it for all the files being checked in. This is convenient for
@@ -1911,8 +1922,7 @@ program in which you are gradually adding various unfinished new
1911features. Each such independent line of development is called a 1922features. Each such independent line of development is called a
1912@dfn{branch}. VC allows you to create branches, switch between 1923@dfn{branch}. VC allows you to create branches, switch between
1913different branches, and merge changes from one branch to another. 1924different branches, and merge changes from one branch to another.
1914Please note, however, that branches are only supported for RCS at the 1925Please note, however, that branches are not supported for SCCS.
1915moment.
1916 1926
1917 A file's main line of development is usually called the @dfn{trunk}. 1927 A file's main line of development is usually called the @dfn{trunk}.
1918The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc. At 1928The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc. At
@@ -2255,7 +2265,8 @@ But if you do this, the revision numbers in the RCS master no longer
2255correspond to those of CVS. Technically, this is not a problem, but 2265correspond to those of CVS. Technically, this is not a problem, but
2256it can become difficult to keep track of what is in the CVS repository 2266it can become difficult to keep track of what is in the CVS repository
2257and what is not. So we suggest that you return from time to time to 2267and what is not. So we suggest that you return from time to time to
2258CVS-only operation, using @kbd{C-u C-x v v cvs @key{RET}}. 2268CVS-only operation, by committing your local changes back to the
2269repository using @kbd{C-u C-x v v cvs @key{RET}}.
2259 2270
2260@node Snapshots 2271@node Snapshots
2261@subsection Snapshots 2272@subsection Snapshots
@@ -2543,13 +2554,11 @@ insert a suitable header string.
2543Insert headers in a file for use with your version-control system. 2554Insert headers in a file for use with your version-control system.
2544@end table 2555@end table
2545 2556
2546@vindex vc-header-alist 2557@vindex vc-@var{backend}-header
2547 The default header string is @samp{@w{$}Id$} for RCS and 2558 The default header string is @samp{@w{$}Id$} for RCS and
2548@samp{@w{%}W%} for SCCS. You can specify other headers to insert by 2559@samp{@w{%}W%} for SCCS. You can specify other headers to insert by
2549setting the variable @code{vc-header-alist}. Its value is a list of 2560setting the variables @code{vc-@var{backend}-header} where
2550elements of the form @code{(@var{program} . @var{string})} where 2561@var{backend} is @code{rcs} or @code{sccs}.
2551@var{program} is @code{RCS} or @code{SCCS} and @var{string} is the
2552string to use.
2553 2562
2554 Instead of a single string, you can specify a list of strings; then 2563 Instead of a single string, you can specify a list of strings; then
2555each string in the list is inserted as a separate header on a line of 2564each string in the list is inserted as a separate header on a line of
@@ -2577,8 +2586,8 @@ elements of the form @code{(@var{regexp} . @var{format})}. Whenever
2577@var{regexp} matches the buffer name, @var{format} is inserted as part 2586@var{regexp} matches the buffer name, @var{format} is inserted as part
2578of the header. A header line is inserted for each element that matches 2587of the header. A header line is inserted for each element that matches
2579the buffer name, and for each string specified by 2588the buffer name, and for each string specified by
2580@code{vc-header-alist}. The header line is made by processing the 2589@code{vc-@var{backend}-header}. The header line is made by processing the
2581string from @code{vc-header-alist} with the format taken from the 2590string from @code{vc-@var{backend}-header} with the format taken from the
2582element. The default value for @code{vc-static-header-alist} is as follows: 2591element. The default value for @code{vc-static-header-alist} is as follows:
2583 2592
2584@example 2593@example
@@ -2615,10 +2624,10 @@ headers.
2615@vindex vc-handled-backends 2624@vindex vc-handled-backends
2616The variable @code{vc-handled-backends} determines which version 2625The variable @code{vc-handled-backends} determines which version
2617control systems VC should handle. The default value is @code{(RCS CVS 2626control systems VC should handle. The default value is @code{(RCS CVS
2618SCCS)}, so it contains all three version systems that are currently 2627SVN SCCS Arch MCVS)}, so it contains all six version systems that are
2619supported. If you want VC to ignore one or more of these systems, 2628currently supported. If you want VC to ignore one or more of these
2620exclude its name from the list. To disable VC entirely, set this 2629systems, exclude its name from the list. To disable VC entirely, set
2621variable to @code{nil}. 2630this variable to @code{nil}.
2622 2631
2623The order of systems in the list is significant: when you visit a file 2632The order of systems in the list is significant: when you visit a file
2624registered in more than one system (@pxref{Local Version Control}), 2633registered in more than one system (@pxref{Local Version Control}),
@@ -2771,8 +2780,9 @@ pick up any recent changes from the repository first, using @kbd{C-x v m
2771@key{RET}}, @pxref{Merging}). 2780@key{RET}}, @pxref{Merging}).
2772 2781
2773@vindex vc-cvs-global-switches 2782@vindex vc-cvs-global-switches
2774 The variable @code{vc-cvs-global-switches} should be a string 2783 The variable @code{vc-cvs-global-switches}, if non-@code{nil},
2775specifying switches to pass to CVS for all CVS operations. 2784should be a string specifying switches to pass to CVS for all CVS
2785operations.
2776 2786
2777 When @code{vc-cvs-stay-local} is @code{t}, VC also makes local 2787 When @code{vc-cvs-stay-local} is @code{t}, VC also makes local
2778version backups, so that simple diff and revert operations are 2788version backups, so that simple diff and revert operations are
@@ -2891,7 +2901,7 @@ the command is finished. For more information about windows in Emacs,
2891 With a numeric argument, @code{compare-windows} ignores changes in 2901 With a numeric argument, @code{compare-windows} ignores changes in
2892whitespace. If the variable @code{compare-ignore-case} is 2902whitespace. If the variable @code{compare-ignore-case} is
2893non-@code{nil}, the comparison ignores differences in case as well. 2903non-@code{nil}, the comparison ignores differences in case as well.
2894If the variable @code{compare-ignore-whitespace} is non-nil, 2904If the variable @code{compare-ignore-whitespace} is non-@code{nil},
2895@code{compare-windows} normally ignores changes in whitespace, and a 2905@code{compare-windows} normally ignores changes in whitespace, and a
2896prefix argument turns that off. 2906prefix argument turns that off.
2897 2907
@@ -3289,6 +3299,10 @@ Clear the cache; that is, remove all file names from it.
3289@node File Conveniences 3299@node File Conveniences
3290@section Convenience Features for Finding Files 3300@section Convenience Features for Finding Files
3291 3301
3302 In this section, we introduce some convenient facilities for finding
3303recently-opened files, reading file names from a buffer, and viewing
3304image files.
3305
3292@findex recentf-mode 3306@findex recentf-mode
3293@vindex recentf-mode 3307@vindex recentf-mode
3294@findex recentf-save-list 3308@findex recentf-save-list
@@ -3299,25 +3313,22 @@ opened files. @kbd{M-x recentf-save-list} saves the current
3299@code{recent-file-list} to a file, and @kbd{M-x recentf-edit-list} 3313@code{recent-file-list} to a file, and @kbd{M-x recentf-edit-list}
3300edits it. 3314edits it.
3301 3315
3302@findex auto-image-file-mode
3303@findex mode, auto-image-file
3304@cindex images, visiting
3305@cindex visiting image files
3306@vindex image-file-name-regexps
3307@vindex image-file-name-extensions
3308 When Auto-image-file minor mode is enabled, visiting an image file
3309displays it as an image, not as text. Likewise, inserting an image
3310file into a buffer inserts it as an image. This works only when Emacs
3311can display the relevant image type. The variables
3312@code{image-file-name-extensions} or @code{image-file-name-regexps}
3313control which file names are recognized as containing images.
3314
3315 The @kbd{M-x ffap} command generalizes @code{find-file} with more 3316 The @kbd{M-x ffap} command generalizes @code{find-file} with more
3316powerful heuristic defaults (@pxref{FFAP}), often based on the text at 3317powerful heuristic defaults (@pxref{FFAP}), often based on the text at
3317point. Partial Completion mode offers other features extending 3318point. Partial Completion mode offers other features extending
3318@code{find-file}, which can be used with @code{ffap}. 3319@code{find-file}, which can be used with @code{ffap}.
3319@xref{Completion Options}. 3320@xref{Completion Options}.
3320 3321
3322@findex thumbs-mode
3323@findex mode, thumbs
3324 Thumbs mode is a major mode for viewing directories containing many
3325image files. To use it, type @kbd{M-x thumbs} and specify the
3326directory to view. The images in that directory will be displayed in
3327a @samp{Thumbs} buffer as @dfn{thumbnails}; type @kbd{RET} on a
3328thumbnail to view the full-size image. Thumbs mode requires the
3329@file{convert} program, which is part of the ImageMagick software
3330package.
3331
3321@ignore 3332@ignore
3322 arch-tag: 768d32cb-e15a-4cc1-b7bf-62c00ee12250 3333 arch-tag: 768d32cb-e15a-4cc1-b7bf-62c00ee12250
3323@end ignore 3334@end ignore
diff --git a/man/frames.texi b/man/frames.texi
index edbda679b46..dee29afe050 100644
--- a/man/frames.texi
+++ b/man/frames.texi
@@ -83,6 +83,18 @@ in between the mouse command and @key{DELETE}, it does not do this.
83Move point to where you click (@code{mouse-set-point}). 83Move point to where you click (@code{mouse-set-point}).
84This is normally the left button. 84This is normally the left button.
85 85
86@vindex x-mouse-click-focus-ignore-position
87Normally, Emacs does not distinguish between ordinary mouse clicks and
88clicks that select a frame. When you click on a frame to select it,
89that also changes the selected window and cursor position according to
90the mouse click position. On the X window system, you can change this
91behavior by setting the variable
92@code{x-mouse-click-focus-ignore-position} to @code{t}. Then the
93first click selects the frame, but does not affect the selected window
94or cursor position. If you click again in the same place, since that
95click will be in the selected frame, it will change the window or
96cursor position.
97
86@item Drag-Mouse-1 98@item Drag-Mouse-1
87Set the region to the text you select by dragging, and copy it to the 99Set the region to the text you select by dragging, and copy it to the
88kill ring (@code{mouse-set-region}). You can specify both ends of the 100kill ring (@code{mouse-set-region}). You can specify both ends of the
@@ -96,6 +108,10 @@ entirely on the screen. The number of lines scrolled per step depends
96on how far away from the window edge the mouse has gone; the variable 108on how far away from the window edge the mouse has gone; the variable
97@code{mouse-scroll-min-lines} specifies a minimum step size. 109@code{mouse-scroll-min-lines} specifies a minimum step size.
98 110
111@vindex mouse-drag-copy-region
112If the variable @code{mouse-drag-copy-region} is @code{nil}, this
113mouse command does not copy the selected region into the kill ring.
114
99@item Mouse-2 115@item Mouse-2
100Yank the last killed text, where you click (@code{mouse-yank-at-click}). 116Yank the last killed text, where you click (@code{mouse-yank-at-click}).
101This is normally the middle button. 117This is normally the middle button.
diff --git a/man/gnus-faq.texi b/man/gnus-faq.texi
index 42266aa4646..742227b64fc 100644
--- a/man/gnus-faq.texi
+++ b/man/gnus-faq.texi
@@ -1,210 +1,203 @@
1@c Insert "\input texinfo" at 1st line before texing this file alone. 1@c \input texinfo @c -*-texinfo-*-
2@c -*-texinfo-*- 2@c Uncomment 1st line before texing this file alone.
3@c Copyright (C) 1995, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. 3@c %**start of header
4@c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
5@c
6@c Do not modify this file, it was generated from gnus-faq.xml, available from
7@c <URL:http://my.gnus.org/FAQ/>.
8@c
4@setfilename gnus-faq.info 9@setfilename gnus-faq.info
5 10@settitle Frequently Asked Questions
6@c Frequently Asked Questions, FAQ - Introduction, Emacs for Heathens, Top 11@c %**end of header
12@c
7 13
8@node Frequently Asked Questions 14@node Frequently Asked Questions
9@comment node-name, next, previous, up
10
11@c @chapter Frequently Asked Questions
12@section Frequently Asked Questions 15@section Frequently Asked Questions
13@cindex FAQ
14@cindex Frequently Asked Questions
15
16@c - Uncomment @chapter, comment @section
17@c - run (texinfo-every-node-update)
18@c - revert it.
19 16
20@menu 17@menu
21* FAQ - Introduction:: About Gnus and this FAQ. 18* FAQ - Changes::
22* FAQ 1 - Installation:: Installation of Gnus. 19* FAQ - Introduction:: About Gnus and this FAQ.
23* FAQ 2 - Startup / Group buffer:: Start up questions and the first 20* FAQ 1 - Installation FAQ:: Installation of Gnus.
24 buffer Gnus shows you. 21* FAQ 2 - Startup / Group buffer:: Start up questions and the
25* FAQ 3 - Getting messages:: Making Gnus read your mail and news. 22 first buffer Gnus shows you.
26* FAQ 4 - Reading messages:: How to efficiently read messages. 23* FAQ 3 - Getting Messages:: Making Gnus read your mail
27* FAQ 5 - Composing messages:: Composing mails or Usenet postings. 24 and news.
28* FAQ 6 - Old messages:: Importing, archiving, searching 25* FAQ 4 - Reading messages:: How to efficiently read
29 and deleting messages. 26 messages.
30* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while offline. 27* FAQ 5 - Composing messages:: Composing mails or Usenet
31* FAQ 8 - Getting help:: When this FAQ isn't enough. 28 postings.
32* FAQ 9 - Tuning Gnus:: How to make Gnus faster. 29* FAQ 6 - Old messages:: Importing, archiving,
33* FAQ - Glossary:: Terms used in the FAQ explained. 30 searching and deleting messages.
31* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while
32 offline.
33* FAQ 8 - Getting help:: When this FAQ isn't enough.
34* FAQ 9 - Tuning Gnus:: How to make Gnus faster.
35* FAQ - Glossary:: Terms used in the FAQ
36 explained.
34@end menu 37@end menu
35 38
36
37@subheading Abstract 39@subheading Abstract
38 40
39 This is the new Gnus Frequently Asked Questions list. If you have a 41This is the new Gnus Frequently Asked Questions list.
40Web browser, the official hypertext version is at 42If you have a Web browser, the official hypertext version is at
41@uref{http://my.gnus.org/FAQ/}, the Docbook source is available from 43@uref{http://my.gnus.org/FAQ/},
42@uref{http://sourceforge.net/projects/gnus/}. 44the Docbook source is available from
43 45@uref{http://sourceforge.net/projects/gnus/, http://sourceforge.net}.
44 46
45 Please submit features and suggestions to the 47Please submit features and suggestions to the
46 @email{faq-discuss@@my.gnus.org,FAQ discussion list}. 48@email{faq-discuss@@my.gnus.org, FAQ discussion list}.
47 The list is protected against junk mail with 49The list is protected against junk mail with
48 @uref{http://smarden.org/qconfirm/index.html,qconfirm, qconfirm}. As 50@uref{http://smarden.org/qconfirm/index.html, qconfirm}. As
49 a subscriber, your submissions will automatically pass. You can 51a subscriber, your submissions will automatically pass. You can
50 also subscribe to the list by sending a blank email to 52also subscribe to the list by sending a blank email to
51 @email{faq-discuss-subscribe@@my.gnus.org} 53@email{faq-discuss-subscribe@@my.gnus.org, faq-discuss-subscribe@@my.gnus.org}
52 and 54and @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss, browse
53 @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss,browse 55the archive}.
54 the archive, browse the archive}.
55
56@node FAQ - Introduction, FAQ 1 - Installation, Frequently Asked Questions, Frequently Asked Questions
57@comment node-name, next, previous, up
58@heading Introduction
59 56
60This is the Gnus Frequently Asked Questions list. 57@node FAQ - Changes
58@subheading Changes
61 59
62Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented
63 as a part of Emacs. It's been around in some form for almost a decade
64 now, and has been distributed as a standard part of Emacs for much of
65 that time. Gnus 5 is the latest (and greatest) incarnation. The
66 original version was called GNUS, and was written by Masanobu UMEDA.
67 When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and
68 decided to rewrite Gnus.
69
70 Its biggest strength is the fact that it is extremely
71 customizable. It is somewhat intimidating at first glance, but
72 most of the complexity can be ignored until you're ready to take
73 advantage of it. If you receive a reasonable volume of e-mail
74 (you're on various mailing lists), or you would like to read
75 high-volume mailing lists but cannot keep up with them, or read
76 high volume newsgroups or are just bored, then Gnus is what you
77 want.
78
79 This FAQ was maintained by Justin Sheehy until March 2002. He
80 would like to thank Steve Baur and Per Abrahamsen for doing a wonderful
81 job with this FAQ before him. We would like to do the same - thanks,
82 Justin!
83
84 60
85 If you have a Web browser, the official hypertext version is at:@*
86 @uref{http://my.gnus.org/FAQ/}.
87 This version is much nicer than the unofficial hypertext
88 versions that are archived at Utrecht, Oxford, Smart Pages, Ohio
89 State, and other FAQ archives. See the resources question below
90 if you want information on obtaining it in another format.
91
92 61
93 The information contained here was compiled with the assistance 62@itemize @bullet
94 of the Gnus development mailing list, and any errors or 63
95 misprints are the my.gnus.org team's fault, sorry. 64@item
65Updated FAQ to reflect release of Gnus 5.10 and start of
66No Gnus development.
67@end itemize
96 68
69@node FAQ - Introduction
70@subheading Introduction
71
72This is the Gnus Frequently Asked Questions list.
97 73
98@ifnottex 74Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented
99@node FAQ 1 - Installation, FAQ 2 - Startup / Group buffer, FAQ - Introduction, Frequently Asked Questions 75as a part of Emacs. It's been around in some form for almost a decade
100@end ifnottex 76now, and has been distributed as a standard part of Emacs for much of
101@subsection Installation 77that time. Gnus 5 is the latest (and greatest) incarnation. The
78original version was called GNUS, and was written by Masanobu UMEDA.
79When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and
80decided to rewrite Gnus.
81
82Its biggest strength is the fact that it is extremely
83customizable. It is somewhat intimidating at first glance, but
84most of the complexity can be ignored until you're ready to take
85advantage of it. If you receive a reasonable volume of e-mail
86(you're on various mailing lists), or you would like to read
87high-volume mailing lists but cannot keep up with them, or read
88high volume newsgroups or are just bored, then Gnus is what you
89want.
90
91This FAQ was maintained by Justin Sheehy until March 2002. He
92would like to thank Steve Baur and Per Abrahamsen for doing a wonderful
93job with this FAQ before him. We would like to do the same - thanks,
94Justin!
95
96If you have a Web browser, the official hypertext version is at:
97@uref{http://my.gnus.org/FAQ/}.
98This version is much nicer than the unofficial hypertext
99versions that are archived at Utrecht, Oxford, Smart Pages, Ohio
100State, and other FAQ archives. See the resources question below
101if you want information on obtaining it in another format.
102
103The information contained here was compiled with the assistance
104of the Gnus development mailing list, and any errors or
105misprints are the my.gnus.org team's fault, sorry.
106
107@node FAQ 1 - Installation FAQ
108@subsection Installation FAQ
102 109
103@menu 110@menu
104* [1.1]:: What is the latest version of Gnus? 111* [1.1]:: What is the latest version of Gnus?
105* [1.2]:: What's new in 5.10? 112* [1.2]:: What's new in 5.10?
106* [1.3]:: Where and how to get Gnus? 113* [1.3]:: Where and how to get Gnus?
107* [1.4]:: What to do with the tarball now? 114* [1.4]:: What to do with the tarball now?
108* [1.5]:: Which version of Emacs do I need? 115* [1.5]:: I sometimes read references to No Gnus and Oort Gnus, what
109* [1.6]:: How do I run Gnus on both Emacs and XEmacs? 116 are those?
117* [1.6]:: Which version of Emacs do I need?
118* [1.7]:: How do I run Gnus on both Emacs and XEmacs?
110@end menu 119@end menu
111 120
112 121@node [1.1]
113@ifnottex 122@subsubheading Question 1.1
114@node [1.1], [1.2], FAQ 1 - Installation, FAQ 1 - Installation
115@end ifnottex
116@subsubheading Question 1.1:
117 123
118What is the latest version of Gnus? 124What is the latest version of Gnus?
119 125
120Answer: 126@subsubheading Answer
121 127
122 Jingle please: Gnus 5.10 is released, get it while it's 128Jingle please: Gnus 5.10 is released, get it while it's
123 hot! As well as the step in version number is rather 129hot! As well as the step in version number is rather
124 small, Gnus 5.10 has tons of new features which you 130small, Gnus 5.10 has tons of new features which you
125 shouldn't miss, however if you are cautious, you might 131shouldn't miss. The current release (5.10.6) should be at
126 prefer to stay with 5.8.8 respectively 5.9 (they are 132least as stable as the latest release of the 5.8 series.
127 basically the same) until some bugfix releases are out.
128
129@ifnottex
130@node [1.2], [1.3], [1.1], FAQ 1 - Installation
131@end ifnottex
132@subsubheading Question 1.2:
133 133
134What's new in 5.10? 134@node [1.2]
135@subsubheading Question 1.2
135 136
136Answer: 137What's new in 5.10?
137 138
138 First of all, you should have a look into the file 139@subsubheading Answer
139 GNUS-NEWS in the toplevel directory of the Gnus tarball,
140 there the most important changes are listed. Here's a
141 short list of the changes I find especially
142 important/interesting:
143
144 140
145 141First of all, you should have a look into the file
142GNUS-NEWS in the toplevel directory of the Gnus tarball,
143there the most important changes are listed. Here's a
144short list of the changes I find especially
145important/interesting:
146 146
147@itemize @bullet{} 147@itemize @bullet
148 148
149@item 149@item
150 Major rewrite of the Gnus agent, Gnus agent is now 150Major rewrite of the Gnus agent, Gnus agent is now
151 active by default. 151active by default.
152 152
153@item 153@item
154 Many new article washing functions for dealing with 154Many new article washing functions for dealing with
155 ugly formatted articles. 155ugly formatted articles.
156 156
157@item 157@item
158 Anti Spam features. 158Anti Spam features.
159 159
160@item 160@item
161 message-utils now included in Gnus. 161Message-utils now included in Gnus.
162 162
163@item 163@item
164 New format specifiers for summary lines, e.g. %B for 164New format specifiers for summary lines, e.g. %B for
165 a complex trn-style thread tree. 165a complex trn-style thread tree.
166
167@end itemize 166@end itemize
168 167
169@ifnottex 168@node [1.3]
170@node [1.3], [1.4], [1.2], FAQ 1 - Installation 169@subsubheading Question 1.3
171@end ifnottex
172@subsubheading Question 1.3:
173 170
174Where and how to get Gnus? 171Where and how to get Gnus?
175 172
176Answer: 173@subsubheading Answer
177 174
178 The latest released version of Gnus isn't included in 175The latest released version of Gnus isn't included in
179 Emacs 21 and until now it also isn't available through the 176Emacs 21, therefor you should get the Gnus tarball from
180 package system of XEmacs 21.4, therefor you should get the 177@uref{http://www.gnus.org/dist/gnus.tar.gz}
181 Gnus tarball from 178or via anonymous FTP from
182 @uref{http://www.gnus.org/dist/gnus.tar.gz} 179@uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}.
183 or via anonymous FTP from 180If you use XEmacs instead of Emacs you can use XEmacs'
184 @uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}. 181package system instead.
185
186@ifnottex
187@node [1.4], [1.5], [1.3], FAQ 1 - Installation
188@end ifnottex
189@subsubheading Question 1.4:
190 182
191 What to do with the tarball now? 183@node [1.4]
192 184@subsubheading Question 1.4
193 185
194Answer: 186What to do with the tarball now?
195 187
196 Untar it via @samp{tar xvzf gnus.tar.gz} and do the common 188@subsubheading Answer
197 @samp{./configure; make; make install} circle. 189
198 (under MS-Windows either get the Cygwin environment from 190Untar it via @samp{tar xvzf gnus.tar.gz} and do the common
199 @uref{http://www.cygwin.com} 191@samp{./configure; make; make install} circle.
200 which allows you to do what's described above or unpack the 192(under MS-Windows either get the Cygwin environment from
201 tarball with some packer (e.g. Winace from 193@uref{http://www.cygwin.com}
202 @uref{http://www.winace.com}) 194which allows you to do what's described above or unpack the
203 and use the batch-file make.bat included in the tarball to install 195tarball with some packer (e.g. Winace from
204 Gnus. If you don't want to (or aren't allowed to) install Gnus 196@uref{http://www.winace.com})
205 system-wide, you can install it in your home directory and add the 197and use the batch-file make.bat included in the tarball to install
206 following lines to your ~/.xemacs/init.el or ~/.emacs: 198Gnus.) If you don't want to (or aren't allowed to) install Gnus
207 199system-wide, you can install it in your home directory and add the
200following lines to your ~/.xemacs/init.el or ~/.emacs:
208 201
209@example 202@example
210(add-to-list 'load-path "/path/to/gnus/lisp") 203(add-to-list 'load-path "/path/to/gnus/lisp")
@@ -212,436 +205,395 @@ Answer:
212 (add-to-list 'Info-directory-list "/path/to/gnus/texi/") 205 (add-to-list 'Info-directory-list "/path/to/gnus/texi/")
213 (add-to-list 'Info-default-directory-list "/path/to/gnus/texi/")) 206 (add-to-list 'Info-default-directory-list "/path/to/gnus/texi/"))
214@end example 207@end example
215
216@noindent 208@noindent
217 Make sure that you don't have any Gnus related stuff 209
218 before this line, on MS Windows use something like 210Make sure that you don't have any Gnus related stuff
219 "C:/path/to/lisp" (yes, "/"). 211before this line, on MS Windows use something like
220 212"C:/path/to/lisp" (yes, "/").
221@ifnottex 213
222@node [1.5], [1.6], [1.4], FAQ 1 - Installation 214@node [1.5]
223@end ifnottex 215@subsubheading Question 1.5
224@subsubheading Question 1.5: 216
217I sometimes read references to No Gnus and Oort Gnus,
218what are those?
219
220@subsubheading Answer
221
222Oort Gnus was the name of the development version of
223Gnus, which became Gnus 5.10 in autumn 2003. No Gnus is
224the name of the current development version which will
225once become Gnus 5.12 or Gnus 6. (If you're wondering why
226not 5.11, the odd version numbers are normally used for
227the Gnus versions bundled with Emacs)
228
229@node [1.6]
230@subsubheading Question 1.6
225 231
226Which version of Emacs do I need? 232Which version of Emacs do I need?
227 233
228Answer: 234@subsubheading Answer
229 235
230 Gnus 5.10 requires an Emacs version that is greater 236Gnus 5.10 requires an Emacs version that is greater
231 than or equal to Emacs 20.7 or XEmacs 21.1. 237than or equal to Emacs 20.7 or XEmacs 21.1. The
232 238development versions of Gnus (aka No Gnus) require Emacs
233@ifnottex 23921 or XEmacs 21.4.
234@node [1.6], , [1.5], FAQ 1 - Installation 240
235@end ifnottex 241@node [1.7]
236@subsubheading Question 1.6: 242@subsubheading Question 1.7
237 243
238How do I run Gnus on both Emacs and XEmacs? 244How do I run Gnus on both Emacs and XEmacs?
239 245
240Answer: 246@subsubheading Answer
241 247
242 You can't use the same copy of Gnus in both as the Lisp 248You can't use the same copy of Gnus in both as the Lisp
243 files are byte-compiled to a format which is different 249files are byte-compiled to a format which is different
244 depending on which Emacs did the compilation. Get one copy 250depending on which Emacs did the compilation. Get one copy
245 of Gnus for Emacs and one for XEmacs. 251of Gnus for Emacs and one for XEmacs.
246 252
247@ifnottex 253@node FAQ 2 - Startup / Group buffer
248@node FAQ 2 - Startup / Group buffer, FAQ 3 - Getting messages, FAQ 1 - Installation, Frequently Asked Questions
249@end ifnottex
250@subsection Startup / Group buffer 254@subsection Startup / Group buffer
251 255
252@menu 256@menu
253* [2.1]:: Every time I start Gnus I get a message 257* [2.1]:: Every time I start Gnus I get a message "Gnus auto-save
254 "Gnus auto-save file exists. Do you want to read it?", 258 file exists. Do you want to read it?", what does this mean and
255 what does this mean and how to prevent it? 259 how to prevent it?
256* [2.2]:: Gnus doesn't remember which groups I'm subscribed to, what's this? 260* [2.2]:: Gnus doesn't remember which groups I'm subscribed to,
257* [2.3]:: How to change the format of the lines in Group buffer? 261 what's this?
258* [2.4]:: My group buffer becomes a bit crowded, is there a way to sort my 262* [2.3]:: How to change the format of the lines in Group buffer?
259 groups into categories so I can easier browse through them? 263* [2.4]:: My group buffer becomes a bit crowded, is there a way to
260* [2.5]:: How to manually sort the groups in Group buffer? How to sort the 264 sort my groups into categories so I can easier browse through
261 groups in a topic? 265 them?
266* [2.5]:: How to manually sort the groups in Group buffer? How to
267 sort the groups in a topic?
262@end menu 268@end menu
263 269
264@ifnottex 270@node [2.1]
265@node [2.1], [2.2], FAQ 2 - Startup / Group buffer, FAQ 2 - Startup / Group buffer 271@subsubheading Question 2.1
266@end ifnottex
267@subsubheading Question 2.1:
268 272
269 Every time I start Gnus I get a message "Gnus auto-save 273Every time I start Gnus I get a message "Gnus auto-save
270 file exists. Do you want to read it?", what does this mean 274file exists. Do you want to read it?", what does this mean
271 and how to prevent it? 275and how to prevent it?
272
273 276
274Answer: 277@subsubheading Answer
275 278
276 This message means that the last time you used Gnus, it 279This message means that the last time you used Gnus, it
277 wasn't properly exited and therefor couldn't write its 280wasn't properly exited and therefor couldn't write its
278 informations to disk (e.g. which messages you read), you 281informations to disk (e.g. which messages you read), you
279 are now asked if you want to restore those informations 282are now asked if you want to restore those informations
280 from the auto-save file. 283from the auto-save file.
281
282 284
283 To prevent this message make sure you exit Gnus 285To prevent this message make sure you exit Gnus
284 via @samp{q} in group buffer instead of 286via @samp{q} in group buffer instead of
285 just killing Emacs. 287just killing Emacs.
286
287@ifnottex
288@node [2.2], [2.3], [2.1], FAQ 2 - Startup / Group buffer
289@end ifnottex
290@subsubheading Question: 2.2
291 288
292 Gnus doesn't remember which groups I'm subscribed to, 289@node [2.2]
293 what's this? 290@subsubheading Question 2.2
294
295 291
296Answer: 292Gnus doesn't remember which groups I'm subscribed to,
293what's this?
297 294
298 You get the message described in the q/a pair above while 295@subsubheading Answer
299 starting Gnus, right? It's an other symptom for the same
300 problem, so read the answer above.
301
302@ifnottex
303@node [2.3], [2.4], [2.2], FAQ 2 - Startup / Group buffer
304@end ifnottex
305@subsubheading Question 2.3:
306 296
307 How to change the format of the lines in Group buffer? 297You get the message described in the q/a pair above while
308 298starting Gnus, right? It's an other symptom for the same
299problem, so read the answer above.
309 300
310Answer: 301@node [2.3]
302@subsubheading Question 2.3
311 303
312 You've got to tweak the value of the variable 304How to change the format of the lines in Group buffer?
313 gnus-group-line-format. See the manual node "Group Line
314 Specification" for information on how to do this. An
315 example for this (guess from whose .gnus :-)):
316
317 305
318@example 306@subsubheading Answer
319 307
308You've got to tweak the value of the variable
309gnus-group-line-format. See the manual node "Group Line
310Specification" for information on how to do this. An
311example for this (guess from whose .gnus :-)):
312
313@example
320(setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n") 314(setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n")
321
322@end example 315@end example
323 316@noindent
324@ifnottex
325@node [2.4], [2.5], [2.3], FAQ 2 - Startup / Group buffer
326@end ifnottex
327@subsubheading Question 2.4:
328
329 My group buffer becomes a bit crowded, is there a way to
330 sort my groups into categories so I can easier browse
331 through them?
332
333 317
334Answer: 318@node [2.4]
319@subsubheading Question 2.4
335 320
336 Gnus offers the topic mode, it allows you to sort your 321My group buffer becomes a bit crowded, is there a way to
337 groups in, well, topics, e.g. all groups dealing with 322sort my groups into categories so I can easier browse
338 Linux under the topic linux, all dealing with music under 323through them?
339 the topic music and all dealing with scottish music under
340 the topic scottish which is a subtopic of music.
341
342 324
343 To enter topic mode, just hit t while in Group buffer. Now 325@subsubheading Answer
344 you can use @samp{T n} to create a topic
345 at point and @samp{T m} to move a group to
346 a specific topic. For more commands see the manual or the
347 menu. You might want to include the %P specifier at the
348 beginning of your gnus-group-line-format variable to have
349 the groups nicely indented.
350
351@ifnottex
352@node [2.5], , [2.4], FAQ 2 - Startup / Group buffer
353@end ifnottex
354@subsubheading Question 2.5:
355 326
356 How to manually sort the groups in Group buffer? How to 327Gnus offers the topic mode, it allows you to sort your
357 sort the groups in a topic? 328groups in, well, topics, e.g. all groups dealing with
358 329Linux under the topic linux, all dealing with music under
330the topic music and all dealing with scottish music under
331the topic scottish which is a subtopic of music.
359 332
360Answer: 333To enter topic mode, just hit t while in Group buffer. Now
334you can use @samp{T n} to create a topic
335at point and @samp{T m} to move a group to
336a specific topic. For more commands see the manual or the
337menu. You might want to include the %P specifier at the
338beginning of your gnus-group-line-format variable to have
339the groups nicely indented.
361 340
362 Move point over the group you want to move and 341@node [2.5]
363 hit @samp{C-k}, now move point to the 342@subsubheading Question 2.5
364 place where you want the group to be and 343
365 hit @samp{C-y}. 344How to manually sort the groups in Group buffer? How to
366 345sort the groups in a topic?
367@ifnottex 346
368@node FAQ 3 - Getting messages, FAQ 4 - Reading messages, FAQ 2 - Startup / Group buffer, Frequently Asked Questions 347@subsubheading Answer
369@end ifnottex 348
370@subsection Getting messages 349Move point over the group you want to move and
350hit @samp{C-k}, now move point to the
351place where you want the group to be and
352hit @samp{C-y}.
353
354@node FAQ 3 - Getting Messages
355@subsection Getting Messages
371 356
372@menu 357@menu
373* [3.1]:: I just installed Gnus, started it via M-x gnus but it only says 358* [3.1]:: I just installed Gnus, started it via @samp{M-x gnus}
374 "nntp (news) open error", what to do? 359 but it only says "nntp (news) open error", what to do?
375* [3.2]:: I'm working under Windows and have no idea what ~/.gnus means. 360* [3.2]:: I'm working under Windows and have no idea what ~/.gnus.el
376* [3.3]:: My news server requires authentication, how to store user name 361 means.
377 and password on disk? 362* [3.3]:: My news server requires authentication, how to store user
378* [3.4]:: Gnus seems to start up OK, but I can't find out how to 363 name and password on disk?
379 subscribe to a group. 364* [3.4]:: Gnus seems to start up OK, but I can't find out how to
380* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed to 365 subscribe to a group.
381 post on this server as well as I am, what's that? 366* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed
382* [3.6]:: I want Gnus to fetch news from several servers, is this possible? 367 to post on this server as well as I am, what's that?
383* [3.7]:: And how about local spool files? 368* [3.6]:: I want Gnus to fetch news from several servers, is this
384* [3.8]:: OK, reading news works now, but I want to be able to read my mail 369 possible?
385 with Gnus, too. How to do it? 370* [3.7]:: And how about local spool files?
386* [3.9]:: And what about IMAP? 371* [3.8]:: OK, reading news works now, but I want to be able to read
387* [3.10]:: At the office we use one of those MS Exchange servers, 372 my mail with Gnus, too. How to do it?
388 can I use Gnus to read my mail from it? 373* [3.9]:: And what about IMAP?
389* [3.11]:: Can I tell Gnus not to delete the mails on the server 374* [3.10]:: At the office we use one of those MS Exchange servers, can
390 it retrieves via POP3? 375 I use Gnus to read my mail from it?
376* [3.11]:: Can I tell Gnus not to delete the mails on the server it
377 retrieves via POP3?
391@end menu 378@end menu
392 379
393@ifnottex 380@node [3.1]
394@node [3.1], [3.2], FAQ 3 - Getting messages, FAQ 3 - Getting messages 381@subsubheading Question 3.1
395@end ifnottex
396@subsubheading Question 3.1:
397 382
398 I just installed Gnus, started it via 383I just installed Gnus, started it via
399 @samp{M-x gnus} 384@samp{M-x gnus}
400 but it only says "nntp (news) open error", what to do? 385but it only says "nntp (news) open error", what to do?
401
402 386
403Answer: 387@subsubheading Answer
404 388
405 You've got to tell Gnus where to fetch the news from. Read 389You've got to tell Gnus where to fetch the news from. Read
406 the documentation for information on how to do this. As a 390the documentation for information on how to do this. As a
407 first start, put those lines in ~/.gnus: 391first start, put those lines in ~/.gnus.el:
408
409 392
410@example 393@example
411(setq gnus-select-method '(nntp "news.yourprovider.net")) 394(setq gnus-select-method '(nntp "news.yourprovider.net"))
412(setq user-mail-address "you@@yourprovider.net") 395(setq user-mail-address "you@@yourprovider.net")
413(setq user-full-name "Your Name") 396(setq user-full-name "Your Name")
414@end example 397@end example
415 398@noindent
416@ifnottex
417@node [3.2], [3.3], [3.1], FAQ 3 - Getting messages
418@end ifnottex
419@subsubheading Question 3.2:
420
421 I'm working under Windows and have no idea what ~/.gnus means.
422
423 399
424Answer: 400@node [3.2]
425 401@subsubheading Question 3.2
426 The ~/ means the home directory where Gnus and Emacs look for the 402
427configuration files. However, you don't really need to know what this 403I'm working under Windows and have no idea what ~/.gnus.el means.
428means, it suffices that Emacs knows what it means :-) You can type 404
429@samp{C-x C-f ~/.gnus RET } (yes, with the forward slash, even on 405@subsubheading Answer
430Windows), and Emacs will open the right file for you. (It will most 406
431likely be new, and thus empty.) However, I'd discourage you from 407The ~/ means the home directory where Gnus and Emacs look
432doing so, since the directory Emacs chooses will most certainly not be 408for the configuration files. However, you don't really
433what you want, so let's do it the correct way. The first thing you've 409need to know what this means, it suffices that Emacs knows
434got to do is to create a suitable directory (no blanks in directory 410what it means :-) You can type
435name please) e.g. @file{c:\myhome}. Then you must set the environment 411@samp{C-x C-f ~/.gnus.el RET }
436variable HOME to this directory. To do this under Win9x or Me include 412(yes, with the forward slash, even on Windows), and
437the line 413Emacs will open the right file for you. (It will most
438 414likely be new, and thus empty.)
415However, I'd discourage you from doing so, since the
416directory Emacs chooses will most certainly not be what
417you want, so let's do it the correct way.
418The first thing you've got to do is to
419create a suitable directory (no blanks in directory name
420please) e.g. c:\myhome. Then you must set the environment
421variable HOME to this directory. To do this under Win9x
422or Me include the line
439 423
440@example 424@example
441
442SET HOME=C:\myhome 425SET HOME=C:\myhome
443
444@end example 426@end example
445
446@noindent 427@noindent
447 in your autoexec.bat and reboot. Under NT, 2000 and XP,
448 hit Winkey+Pause/Break to enter system options (if it
449 doesn't work, go to Control Panel -> System). There you'll
450 find the possibility to set environment variables, create
451 a new one with name HOME and value @file{c:\myhome}, a reboot is
452 not necessary.
453
454 428
455 Now to create ~/.gnus, say 429in your autoexec.bat and reboot. Under NT, 2000 and XP,
456 @samp{C-x C-f ~/.gnus RET C-x C-s}. 430hit Winkey+Pause/Break to enter system options (if it
457 in Emacs. 431doesn't work, go to Control Panel -> System). There you'll
458 432find the possibility to set environment variables, create
459@ifnottex 433a new one with name HOME and value C:\myhome, a reboot is
460@node [3.3], [3.4], [3.2], FAQ 3 - Getting messages 434not necessary.
461@end ifnottex
462@subsubheading Question 3.3:
463 435
464 My news server requires authentication, how to store 436Now to create ~/.gnus.el, say
465 user name and password on disk? 437@samp{C-x C-f ~/.gnus.el RET C-x C-s}.
466 438in Emacs.
467 439
468Answer: 440@node [3.3]
441@subsubheading Question 3.3
469 442
470 Create a file ~/.authinfo which includes for each server a line like this 443My news server requires authentication, how to store
471 444user name and password on disk?
445
446@subsubheading Answer
447
448Create a file ~/.authinfo which includes for each server a line like this
472 449
473@example 450@example
474machine news.yourprovider.net login YourUserName password YourPassword 451machine news.yourprovider.net login YourUserName password YourPassword
475@end example 452@end example
476
477@noindent 453@noindent
478. 454.
479 Make sure that the file isn't readable to others if you 455Make sure that the file isn't readable to others if you
480 work on a OS which is capable of doing so. (Under Unix 456work on a OS which is capable of doing so. (Under Unix
481 say 457say
482
483@example 458@example
484chmod 600 ~/.authinfo 459chmod 600 ~/.authinfo
485@end example 460@end example
486
487@noindent 461@noindent
488 in a shell.)
489
490@ifnottex
491@node [3.4], [3.5], [3.3], FAQ 3 - Getting messages
492@end ifnottex
493@subsubheading Question 3.4:
494 462
495 Gnus seems to start up OK, but I can't find out how to 463in a shell.)
496 subscribe to a group.
497
498 464
499Answer: 465@node [3.4]
466@subsubheading Question 3.4
500 467
501 If you know the name of the group say @samp{U 468Gnus seems to start up OK, but I can't find out how to
502 name.of.group RET} in group buffer (use the 469subscribe to a group.
503 tab-completion Luke). Otherwise hit ^ in group buffer,
504 this brings you to the server buffer. Now place point (the
505 cursor) over the server which carries the group you want,
506 hit @samp{RET}, move point to the group
507 you want to subscribe to and say @samp{u}
508 to subscribe to it.
509
510@ifnottex
511@node [3.5], [3.6], [3.4], FAQ 3 - Getting messages
512@end ifnottex
513@subsubheading Question 3.5:
514 470
515 Gnus doesn't show all groups / Gnus says I'm not allowed to 471@subsubheading Answer
516 post on this server as well as I am, what's that?
517
518 472
519Answer: 473If you know the name of the group say @samp{U
474name.of.group RET} in group buffer (use the
475tab-completion Luke). Otherwise hit ^ in group buffer,
476this brings you to the server buffer. Now place point (the
477cursor) over the server which carries the group you want,
478hit @samp{RET}, move point to the group
479you want to subscribe to and say @samp{u}
480to subscribe to it.
520 481
521 Some providers allow restricted anonymous access and full 482@node [3.5]
522 access only after authorization. To make Gnus send authinfo 483@subsubheading Question 3.5
523 to those servers append 484
524 485Gnus doesn't show all groups / Gnus says I'm not allowed to
486post on this server as well as I am, what's that?
487
488@subsubheading Answer
489
490Some providers allow restricted anonymous access and full
491access only after authorization. To make Gnus send authinfo
492to those servers append
525 493
526@example 494@example
527force yes 495force yes
528@end example 496@end example
529
530
531@noindent 497@noindent
532 to the line for those servers in ~/.authinfo.
533 498
534@ifnottex 499to the line for those servers in ~/.authinfo.
535@node [3.6], [3.7], [3.5], FAQ 3 - Getting messages
536@end ifnottex
537@subsubheading Question 3.6:
538 500
539 I want Gnus to fetch news from several servers, is this possible? 501@node [3.6]
540 502@subsubheading Question 3.6
541 503
542Answer: 504I want Gnus to fetch news from several servers, is this possible?
543 505
544 Of course. You can specify more sources for articles in the 506@subsubheading Answer
545 variable gnus-secondary-select-methods. Add something like 507
546 this in ~/.gnus: 508Of course. You can specify more sources for articles in the
547 509variable gnus-secondary-select-methods. Add something like
510this in ~/.gnus.el:
548 511
549@example 512@example
550(add-to-list 'gnus-secondary-select-methods 513(add-to-list 'gnus-secondary-select-methods
551 '(nntp "news.yourSecondProvider.net")) 514 '(nntp "news.yourSecondProvider.net"))
552(add-to-list 'gnus-secondary-select-methods 515(add-to-list 'gnus-secondary-select-methods
553 '(nntp "news.yourThirdProvider.net")) 516 '(nntp "news.yourThirdProvider.net"))
554@end example 517@end example
555 518@noindent
556@ifnottex
557@node [3.7], [3.8], [3.6], FAQ 3 - Getting messages
558@end ifnottex
559@subsubheading Question 3.7:
560 519
561 And how about local spool files? 520@node [3.7]
562 521@subsubheading Question 3.7
563 522
564Answer: 523And how about local spool files?
565 524
566 No problem, this is just one more select method called 525@subsubheading Answer
567 nnspool, so you want this: 526
568 527No problem, this is just one more select method called
528nnspool, so you want this:
569 529
570@example 530@example
571(add-to-list 'gnus-secondary-select-methods '(nnspool "")) 531(add-to-list 'gnus-secondary-select-methods '(nnspool ""))
572@end example 532@end example
573
574@noindent 533@noindent
575 Or this if you don't want an NNTP Server as primary news source: 534
576 535Or this if you don't want an NNTP Server as primary news source:
577 536
578@example 537@example
579(setq gnus-select-method '(nnspool "")) 538(setq gnus-select-method '(nnspool ""))
580@end example 539@end example
581
582@noindent 540@noindent
583 Gnus will look for the spool file in /usr/spool/news, if you 541
584 want something different, change the line above to something like this: 542Gnus will look for the spool file in /usr/spool/news, if you
585 543want something different, change the line above to something like this:
586 544
587@example 545@example
588(add-to-list 'gnus-secondary-select-methods 546(add-to-list 'gnus-secondary-select-methods
589 '(nnspool "" (nnspool-directory "/usr/local/myspoolddir"))) 547 '(nnspool ""
548 (nnspool-directory "/usr/local/myspoolddir")))
590@end example 549@end example
591
592@noindent 550@noindent
593 This sets the spool directory for this server only.
594 You might have to specify more stuff like the program used
595 to post articles, see the Gnus manual on how to do this.
596
597@ifnottex
598@node [3.8], [3.9], [3.7], FAQ 3 - Getting messages
599@end ifnottex
600@subsubheading Question 3.8:
601 551
602 OK, reading news works now, but I want to be able to read my mail 552This sets the spool directory for this server only.
603 with Gnus, too. How to do it? 553You might have to specify more stuff like the program used
604 554to post articles, see the Gnus manual on how to do this.
605 555
606Answer: 556@node [3.8]
607 557@subsubheading Question 3.8
608 That's a bit harder since there are many possible sources 558
609 for mail, many possible ways for storing mail and many 559OK, reading news works now, but I want to be able to read my mail
610 different ways for sending mail. The most common cases are 560with Gnus, too. How to do it?
611 these: 1: You want to read your mail from a pop3 server and 561
612 send them directly to a SMTP Server 2: Some program like 562@subsubheading Answer
613 fetchmail retrieves your mail and stores it on disk from 563
614 where Gnus shall read it. Outgoing mail is sent by 564That's a bit harder since there are many possible sources
615 Sendmail, Postfix or some other MTA. Sometimes, you even 565for mail, many possible ways for storing mail and many
616 need a combination of the above cases. 566different ways for sending mail. The most common cases are
617 567these: 1: You want to read your mail from a pop3 server and
618 568send them directly to a SMTP Server 2: Some program like
619 However, the first thing to do is to tell Gnus in which way 569fetchmail retrieves your mail and stores it on disk from
620 it should store the mail, in Gnus terminology which back end 570where Gnus shall read it. Outgoing mail is sent by
621 to use. Gnus supports many different back ends, the most 571Sendmail, Postfix or some other MTA. Sometimes, you even
622 commonly used one is nnml. It stores every mail in one file 572need a combination of the above cases.
623 and is therefor quite fast. However you might prefer a one 573
624 file per group approach if your file system has problems with 574However, the first thing to do is to tell Gnus in which way
625 many small files, the nnfolder back end is then probably the 575it should store the mail, in Gnus terminology which back end
626 choice for you. To use nnml add the following to ~/.gnus: 576to use. Gnus supports many different back ends, the most
627 577commonly used one is nnml. It stores every mail in one file
578and is therefor quite fast. However you might prefer a one
579file per group approach if your file system has problems with
580many small files, the nnfolder back end is then probably the
581choice for you. To use nnml add the following to ~/.gnus.el:
628 582
629@example 583@example
630(add-to-list 'gnus-secondary-select-methods '(nnml "")) 584(add-to-list 'gnus-secondary-select-methods '(nnml ""))
631@end example 585@end example
632
633@noindent 586@noindent
634 As you might have guessed, if you want nnfolder, it's 587
635 588As you might have guessed, if you want nnfolder, it's
636 589
637@example 590@example
638(add-to-list 'gnus-secondary-select-methods '(nnfolder "")) 591(add-to-list 'gnus-secondary-select-methods '(nnfolder ""))
639@end example 592@end example
640 593@noindent
641 594
642 Now we need to tell Gnus, where to get it's mail from. If 595Now we need to tell Gnus, where to get it's mail from. If
643 it's a POP3 server, then you need something like this: 596it's a POP3 server, then you need something like this:
644
645 597
646@example 598@example
647(eval-after-load "mail-source" 599(eval-after-load "mail-source"
@@ -649,75 +601,68 @@ Answer:
649 :user "yourUserName" 601 :user "yourUserName"
650 :password "yourPassword"))) 602 :password "yourPassword")))
651@end example 603@end example
652
653@noindent 604@noindent
654 Make sure ~/.gnus isn't readable to others if you store 605
655 your password there. If you want to read your mail from a 606Make sure ~/.gnus.el isn't readable to others if you store
656 traditional spool file on your local machine, it's 607your password there. If you want to read your mail from a
657 608traditional spool file on your local machine, it's
658 609
659@example 610@example
660(eval-after-load "mail-source" 611(eval-after-load "mail-source"
661 '(add-to-list 'mail-sources '(file :path "/path/to/spool/file"))) 612 '(add-to-list 'mail-sources '(file :path "/path/to/spool/file"))
662@end example 613@end example
663
664@noindent 614@noindent
665 If it's a Maildir, with one file per message as used by 615
666 postfix, Qmail and (optionally) fetchmail it's 616If it's a Maildir, with one file per message as used by
667 617postfix, Qmail and (optionally) fetchmail it's
668 618
669@example 619@example
670(eval-after-load "mail-source" 620(eval-after-load "mail-source"
671 '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/" 621 '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/"
672 :subdirs ("cur" "new"))) 622 :subdirs ("cur" "new")))
673@end example 623@end example
674
675@noindent 624@noindent
676 And finally if you want to read your mail from several files 625
677 in one directory, for example because procmail already split your 626And finally if you want to read your mail from several files
678 mail, it's 627in one directory, for example because procmail already split your
679 628mail, it's
680 629
681@example 630@example
682(eval-after-load "mail-source" 631(eval-after-load "mail-source"
683 '(add-to-list 'mail-sources '(directory :path "/path/to/procmail-dir/" 632 '(add-to-list 'mail-sources
684 :suffix ".prcml")) 633 '(directory :path "/path/to/procmail-dir/"
634 :suffix ".prcml")))
685@end example 635@end example
686
687@noindent 636@noindent
688 Where :suffix ".prcml" tells Gnus only to use files with the
689 suffix .prcml.
690
691 637
692 OK, now you only need to tell Gnus how to send mail. If you 638Where :suffix ".prcml" tells Gnus only to use files with the
693 want to send mail via sendmail (or whichever MTA is playing 639suffix .prcml.
694 the role of sendmail on your system), you don't need to do 640
695 anything. However, if you want to send your mail to an 641OK, now you only need to tell Gnus how to send mail. If you
696 SMTP Server you need the following in your ~/.gnus 642want to send mail via sendmail (or whichever MTA is playing
697 643the role of sendmail on your system), you don't need to do
644anything. However, if you want to send your mail to an
645SMTP Server you need the following in your ~/.gnus.el
698 646
699@example 647@example
700(setq send-mail-function 'smtpmail-send-it) 648(setq send-mail-function 'smtpmail-send-it)
701(setq message-send-mail-function 'smtpmail-send-it) 649(setq message-send-mail-function 'smtpmail-send-it)
702(setq smtpmail-default-smtp-server "smtp.yourProvider.net") 650(setq smtpmail-default-smtp-server "smtp.yourProvider.net")
703@end example 651@end example
704 652@noindent
705@ifnottex
706@node [3.9], [3.10], [3.8], FAQ 3 - Getting messages
707@end ifnottex
708@subsubheading Question 3.9:
709 653
710 And what about IMAP? 654@node [3.9]
711 655@subsubheading Question 3.9
712 656
713Answer: 657And what about IMAP?
714 658
715 There are two ways of using IMAP with Gnus. The first one is 659@subsubheading Answer
716 to use IMAP like POP3, that means Gnus fetches the mail from 660
717 the IMAP server and stores it on disk. If you want to do 661There are two ways of using IMAP with Gnus. The first one is
718 this (you don't really want to do this) add the following to 662to use IMAP like POP3, that means Gnus fetches the mail from
719 ~/.gnus 663the IMAP server and stores it on disk. If you want to do
720 664this (you don't really want to do this) add the following to
665~/.gnus.el
721 666
722@example 667@example
723(add-to-list 'mail-sources '(imap :server "mail.mycorp.com" 668(add-to-list 'mail-sources '(imap :server "mail.mycorp.com"
@@ -728,249 +673,215 @@ Answer:
728 :mailbox "INBOX" 673 :mailbox "INBOX"
729 :fetchflag "\\Seen")) 674 :fetchflag "\\Seen"))
730@end example 675@end example
731
732@noindent 676@noindent
733 You might have to tweak the values for stream and/or
734 authentification, see the Gnus manual node "Mail Source
735 Specifiers" for possible values.
736
737 677
738 If you want to use IMAP the way it's intended, you've got to 678You might have to tweak the values for stream and/or
739 follow a different approach. You've got to add the nnimap 679authentification, see the Gnus manual node "Mail Source
740 back end to your select method and give the information 680Specifiers" for possible values.
741 about the server there. 681
742 682If you want to use IMAP the way it's intended, you've got to
683follow a different approach. You've got to add the nnimap
684back end to your select method and give the information
685about the server there.
743 686
744@example 687@example
745(add-to-list 688(add-to-list 'gnus-secondary-select-methods
746 'gnus-secondary-select-methods 689 '(nnimap "Give the baby a name"
747 '(nnimap "Give the baby a name" 690 (nnimap-address "imap.yourProvider.net")
748 (nnimap-address "imap.yourProvider.net") 691 (nnimap-port 143)
749 (nnimap-port 143) 692 (nnimap-list-pattern "archive.*")))
750 (nnimap-list-pattern "archive.*")))
751@end example 693@end example
752
753@noindent 694@noindent
754 Again, you might have to specify how to authenticate to the
755 server if Gnus can't guess the correct way, see the Manual
756 Node "IMAP" for detailed information.
757
758@ifnottex
759@node [3.10], [3.11], [3.9], FAQ 3 - Getting messages
760@end ifnottex
761@subsubheading Question 3.10:
762
763 At the office we use one of those MS Exchange servers, can I use
764 Gnus to read my mail from it?
765
766
767Answer:
768 695
769 Offer your administrator a pair of new running shoes for 696Again, you might have to specify how to authenticate to the
770 activating IMAP on the server and follow the instructions 697server if Gnus can't guess the correct way, see the Manual
771 above. 698Node "IMAP" for detailed information.
772 699
773@ifnottex 700@node [3.10]
774@node [3.11], , [3.10], FAQ 3 - Getting messages 701@subsubheading Question 3.10
775@end ifnottex 702
776@subsubheading Question 3.11: 703At the office we use one of those MS Exchange servers, can I use
777 704Gnus to read my mail from it?
778 Can I tell Gnus not to delete the mails on the server it 705
779 retrieves via POP3? 706@subsubheading Answer
780 707
781 708Offer your administrator a pair of new running shoes for
782Answer: 709activating IMAP on the server and follow the instructions
783 710above.
784 First of all, that's not the way POP3 is intended to work, 711
785 if you have the possibility, you should use the IMAP 712@node [3.11]
786 Protocol if you want your messages to stay on the 713@subsubheading Question 3.11
787 server. Nevertheless there might be situations where you 714
788 need the feature, but sadly Gnus itself has no predefined 715Can I tell Gnus not to delete the mails on the server it
789 functionality to do so. 716retrieves via POP3?
790 717
791 718@subsubheading Answer
792 However this is Gnus county so there are possibilities to 719
793 achieve what you want. The easiest way is to get an external 720First of all, that's not the way POP3 is intended to work,
794 program which retrieves copies of the mail and stores them 721if you have the possibility, you should use the IMAP
795 on disk, so Gnus can read it from there. On Unix systems you 722Protocol if you want your messages to stay on the
796 could use e.g. fetchmail for this, on MS Windows you can use 723server. Nevertheless there might be situations where you
797 Hamster, an excellent local news and mail server. 724need the feature, but sadly Gnus itself has no predefined
798 725functionality to do so.
799 726
800 The other solution would be, to replace the method Gnus 727However this is Gnus county so there are possibilities to
801 uses to get mail from POP3 servers by one which is capable 728achieve what you want. The easiest way is to get an external
802 of leaving the mail on the server. If you use XEmacs, get 729program which retrieves copies of the mail and stores them
803 the package mail-lib, it includes an enhanced pop3.el, 730on disk, so Gnus can read it from there. On Unix systems you
804 look in the file, there's documentation on how to tell 731could use e.g. fetchmail for this, on MS Windows you can use
805 Gnus to use it and not to delete the retrieved mail. For 732Hamster, an excellent local news and mail server.
806 GNU Emacs look for the file epop3.el which can do the same 733
807 (If you know the home of this file, please send me an 734The other solution would be, to replace the method Gnus
808 e-mail). You can also tell Gnus to use an external program 735uses to get mail from POP3 servers by one which is capable
809 (e.g. fetchmail) to fetch your mail, see the info node 736of leaving the mail on the server. If you use XEmacs, get
810 "Mail Source Specifiers" in the Gnus manual on how to do 737the package mail-lib, it includes an enhanced pop3.el,
811 it. 738look in the file, there's documentation on how to tell
812 739Gnus to use it and not to delete the retrieved mail. For
813 740GNU Emacs look for the file epop3.el which can do the same
814@ifnottex 741(If you know the home of this file, please send me an
815@node FAQ 4 - Reading messages, FAQ 5 - Composing messages, FAQ 3 - Getting messages, Frequently Asked Questions 742e-mail). You can also tell Gnus to use an external program
816@end ifnottex 743(e.g. fetchmail) to fetch your mail, see the info node
744"Mail Source Specifiers" in the Gnus manual on how to do
745it.
746
747@node FAQ 4 - Reading messages
817@subsection Reading messages 748@subsection Reading messages
818 749
819@menu 750@menu
820* [4.1]:: When I enter a group, all read messages are gone. 751* [4.1]:: When I enter a group, all read messages are gone. How to
821 How to view them again? 752 view them again?
822* [4.2]:: How to tell Gnus to show an important message every time 753* [4.2]:: How to tell Gnus to show an important message every time I
823 I enter a group, even when it's read? 754 enter a group, even when it's read?
824* [4.3]:: How to view the headers of a message? 755* [4.3]:: How to view the headers of a message?
825* [4.4]:: How to view the raw unformatted message? 756* [4.4]:: How to view the raw unformatted message?
826* [4.5]:: How can I change the headers Gnus displays by default at the 757* [4.5]:: How can I change the headers Gnus displays by default at
827 top of the article buffer? 758 the top of the article buffer?
828* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the 759* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the
829 text part if it's available. How to do it? 760 text part if it's available. How to do it?
830* [4.7]:: Can I use some other browser than w3 to render my HTML-mails? 761* [4.7]:: Can I use some other browser than w3 to render my
831* [4.8]:: Is there anything I can do to make poorly formatted mails 762 HTML-mails?
832 more readable? 763* [4.8]:: Is there anything I can do to make poorly formatted mails
833* [4.9]:: Is there a way to automatically ignore posts by specific authors 764 more readable?
834 or with specific words in the subject? And can I highlight more 765* [4.9]:: Is there a way to automatically ignore posts by specific
835 interesting ones in some way? 766 authors or with specific words in the subject? And can I highlight
836* [4.10]:: How can I disable threading in some (e.g. mail-) groups, or set 767 more interesting ones in some way?
837 other variables specific for some groups? 768* [4.10]:: How can I disable threading in some (e.g. mail-) groups,
838* [4.11]:: Can I highlight messages written by me and follow-ups to those? 769 or set other variables specific for some groups?
839* [4.12]:: The number of total messages in a group which Gnus displays in 770* [4.11]:: Can I highlight messages written by me and follow-ups to
840 group buffer is by far to high, especially in mail groups. 771 those?
841 Is this a bug? 772* [4.12]:: The number of total messages in a group which Gnus
842* [4.13]:: I don't like the layout of summary and article buffer, 773 displays in group buffer is by far to high, especially in mail
843 how to change it? Perhaps even a three pane display? 774 groups. Is this a bug?
844* [4.14]:: I don't like the way the Summary buffer looks, how to tweak it? 775* [4.13]:: I don't like the layout of summary and article buffer, how
845* [4.15]:: How to split incoming mails in several groups? 776 to change it? Perhaps even a three pane display?
777* [4.14]:: I don't like the way the Summary buffer looks, how to
778 tweak it?
779* [4.15]:: How to split incoming mails in several groups?
846@end menu 780@end menu
847 781
848@ifnottex 782@node [4.1]
849@node [4.1], [4.2], FAQ 4 - Reading messages, FAQ 4 - Reading messages 783@subsubheading Question 4.1
850@end ifnottex
851@subsubheading Question 4.1:
852 784
853 When I enter a group, all read messages are gone. How to view them again? 785When I enter a group, all read messages are gone. How to view them again?
854
855 786
856Answer: 787@subsubheading Answer
857 788
858 If you enter the group by saying 789If you enter the group by saying
859 @samp{RET} 790@samp{RET}
860 in group buffer with point over the group, only unread and ticked messages are loaded. Say 791in group buffer with point over the group, only unread and ticked messages are loaded. Say
861 @samp{C-u RET} 792@samp{C-u RET}
862 instead to load all available messages. If you want only the e.g. 300 newest say 793instead to load all available messages. If you want only the e.g. 300 newest say
863 @samp{C-u 300 RET} 794@samp{C-u 300 RET}
864
865 795
866 Loading only unread messages can be annoying if you have threaded view enabled, say 796Loading only unread messages can be annoying if you have threaded view enabled, say
867
868 797
869@example 798@example
870(setq gnus-fetch-old-headers 'some) 799(setq gnus-fetch-old-headers 'some)
871@end example 800@end example
872
873
874@noindent 801@noindent
875 in ~/.gnus to load enough old articles to prevent teared threads, replace 'some with t to load
876 all articles (Warning: Both settings enlarge the amount of data which is
877 fetched when you enter a group and slow down the process of entering a group).
878 802
803in ~/.gnus.el to load enough old articles to prevent teared threads, replace 'some with t to load
804all articles (Warning: Both settings enlarge the amount of data which is
805fetched when you enter a group and slow down the process of entering a group).
879 806
880 If you already use Gnus 5.10, you can say 807If you already use Gnus 5.10, you can say
881 @samp{/o N} 808@samp{/o N}
882 In summary buffer to load the last N messages, this feature is not available in 5.8.8 809In summary buffer to load the last N messages, this feature is not available in 5.8.8
883
884 810
885 If you don't want all old messages, but the parent of the message you're just reading, 811If you don't want all old messages, but the parent of the message you're just reading,
886 you can say @samp{^}, if you want to retrieve the whole thread 812you can say @samp{^}, if you want to retrieve the whole thread
887 the message you're just reading belongs to, @samp{A T} is your friend. 813the message you're just reading belongs to, @samp{A T} is your friend.
888
889@ifnottex
890@node [4.2], [4.3], [4.1], FAQ 4 - Reading messages
891@end ifnottex
892@subsubheading Question 4.2:
893 814
894 How to tell Gnus to show an important message every time I 815@node [4.2]
895 enter a group, even when it's read? 816@subsubheading Question 4.2
896
897 817
898Answer: 818How to tell Gnus to show an important message every time I
819enter a group, even when it's read?
899 820
900 You can tick important messages. To do this hit 821@subsubheading Answer
901 @samp{u} while point is in summary buffer
902 over the message. When you want to remove the mark, hit
903 either @samp{d} (this deletes the tick
904 mark and set's unread mark) or @samp{M c}
905 (which deletes all marks for the message).
906
907@ifnottex
908@node [4.3], [4.4], [4.2], FAQ 4 - Reading messages
909@end ifnottex
910@subsubheading Question 4.3:
911 822
912 How to view the headers of a message? 823You can tick important messages. To do this hit
913 824@samp{u} while point is in summary buffer
825over the message. When you want to remove the mark, hit
826either @samp{d} (this deletes the tick
827mark and set's unread mark) or @samp{M c}
828(which deletes all marks for the message).
914 829
915Answer: 830@node [4.3]
831@subsubheading Question 4.3
916 832
917 Say @samp{t} 833How to view the headers of a message?
918 to show all headers, one more
919 @samp{t}
920 hides them again.
921
922@ifnottex
923@node [4.4], [4.5], [4.3], FAQ 4 - Reading messages
924@end ifnottex
925@subsubheading Question 4.4:
926 834
927 How to view the raw unformatted message? 835@subsubheading Answer
928
929 836
930Answer: 837Say @samp{t}
838to show all headers, one more
839@samp{t}
840hides them again.
931 841
932 Say 842@node [4.4]
933 @samp{C-u g} 843@subsubheading Question 4.4
934 to show the raw message
935 @samp{g}
936 returns to normal view.
937
938@ifnottex
939@node [4.5], [4.6], [4.4], FAQ 4 - Reading messages
940@end ifnottex
941@subsubheading Question 4.5:
942 844
943 How can I change the headers Gnus displays by default at 845How to view the raw unformatted message?
944 the top of the article buffer?
945
946 846
947Answer: 847@subsubheading Answer
848
849Say
850@samp{C-u g}
851to show the raw message
852@samp{g}
853returns to normal view.
854
855@node [4.5]
856@subsubheading Question 4.5
857
858How can I change the headers Gnus displays by default at
859the top of the article buffer?
860
861@subsubheading Answer
862
863The variable gnus-visible-headers controls which headers
864are shown, its value is a regular expression, header lines
865which match it are shown. So if you want author, subject,
866date, and if the header exists, Followup-To and MUA / NUA
867say this in ~/.gnus.el:
948 868
949 The variable gnus-visible-headers controls which headers
950 are shown, its value is a regular expression, header lines
951 which match it are shown. So if you want author, subject,
952 date, and if the header exists, Followup-To and MUA / NUA
953 say this in ~/.gnus:
954
955@example 869@example
956(setq gnus-visible-headers 870(setq gnus-visible-headers
957 "^\\(From:\\|Subject:\\|Date:\\|Followup-To:\ 871 '("^From" "^Subject" "^Date" "^Newsgroups" "^Followup-To"
958\\|X-Newsreader:\\|User-Agent:\\|X-Mailer:\\)") 872 "^User-Agent" "^X-Newsreader" "^X-Mailer"))
959@end example 873@end example
960 874@noindent
961@ifnottex
962@node [4.6], [4.7], [4.5], FAQ 4 - Reading messages
963@end ifnottex
964@subsubheading Question 4.6:
965 875
966 I'd like Gnus NOT to render HTML-mails but show me the 876@node [4.6]
967 text part if it's available. How to do it? 877@subsubheading Question 4.6
968
969 878
970Answer: 879I'd like Gnus NOT to render HTML-mails but show me the
880text part if it's available. How to do it?
971 881
972 Say 882@subsubheading Answer
973 883
884Say
974 885
975@example 886@example
976(eval-after-load "mm-decode" 887(eval-after-load "mm-decode"
@@ -978,240 +889,206 @@ Answer:
978 (add-to-list 'mm-discouraged-alternatives "text/html") 889 (add-to-list 'mm-discouraged-alternatives "text/html")
979 (add-to-list 'mm-discouraged-alternatives "text/richtext"))) 890 (add-to-list 'mm-discouraged-alternatives "text/richtext")))
980@end example 891@end example
981
982@noindent 892@noindent
983 in ~/.gnus. If you don't want HTML rendered, even if there's no text alternative add 893
984 894in ~/.gnus.el. If you don't want HTML rendered, even if there's no text alternative add
985 895
986@example 896@example
987(setq mm-automatic-display (remove "text/html" mm-automatic-display)) 897(setq mm-automatic-display (remove "text/html" mm-automatic-display))
988@end example 898@end example
989
990@noindent 899@noindent
991 too.
992
993@ifnottex
994@node [4.7], [4.8], [4.6], FAQ 4 - Reading messages
995@end ifnottex
996@subsubheading Question 4.7:
997 900
998 Can I use some other browser than w3 to render my HTML-mails? 901too.
999
1000 902
1001Answer: 903@node [4.7]
904@subsubheading Question 4.7
1002 905
1003 Only if you use Gnus 5.10 or younger. In this case you've got the 906Can I use some other browser than w3 to render my HTML-mails?
1004 choice between w3, w3m, links, lynx and html2text, which 907
1005 one is used can be specified in the variable 908@subsubheading Answer
1006 mm-text-html-renderer, so if you want links to render your 909
1007 mail say 910Only if you use Gnus 5.10 or younger. In this case you've got the
1008 911choice between w3, w3m, links, lynx and html2text, which
912one is used can be specified in the variable
913mm-text-html-renderer, so if you want links to render your
914mail say
1009 915
1010@example 916@example
1011(setq mm-text-html-renderer 'links) 917(setq mm-text-html-renderer 'links)
1012@end example 918@end example
1013 919@noindent
1014@ifnottex
1015@node [4.8], [4.9], [4.7], FAQ 4 - Reading messages
1016@end ifnottex
1017@subsubheading Question 4.8:
1018
1019 Is there anything I can do to make poorly formatted mails
1020 more readable?
1021
1022
1023Answer:
1024
1025 Gnus offers you several functions to "wash" incoming mail,
1026 you can find them if you browse through the menu, item Article->Washing. The most
1027 interesting ones are probably "Wrap long lines" (
1028 @samp{W w}
1029 ), "Decode ROT13" (
1030 @samp{W r}
1031 ) and "Outlook Deuglify" which repairs the dumb quoting used
1032 by many users of Microsoft products (
1033 @samp{W Y f} gives you full deuglify.
1034 See @samp{W Y C-h} or
1035 have a look at the menus for other deuglifications).
1036 Outlook deuglify is only available since Gnus 5.10.
1037
1038@ifnottex
1039@node [4.9], [4.10], [4.8], FAQ 4 - Reading messages
1040@end ifnottex
1041@subsubheading Question 4.9:
1042
1043 Is there a way to automatically ignore posts by specific
1044 authors or with specific words in the subject? And can I
1045 highlight more interesting ones in some way?
1046
1047
1048Answer:
1049
1050 You want Scoring. Scoring means, that you define rules
1051 which assign each message an integer value. Depending on
1052 the value the message is highlighted in summary buffer (if
1053 it's high, say +2000) or automatically marked read (if the
1054 value is low, say -800) or some other action happens.
1055
1056
1057 There are basically three ways of setting up rules which assign
1058 the scoring-value to messages. The first and easiest way is to set
1059 up rules based on the article you are just reading. Say you're
1060 reading a message by a guy who always writes nonsense and you want
1061 to ignore his messages in the future. Hit
1062 @samp{L}, to set up a rule which lowers the score.
1063 Now Gnus asks you which the criteria for lowering the Score shall
1064 be. Hit @samp{?} twice to see all possibilities,
1065 we want @samp{a} which means the author (the from
1066 header). Now Gnus wants to know which kind of matching we want.
1067 Hit either @samp{e} for an exact match or
1068 @samp{s} for substring-match and delete afterwards
1069 everything but the name to score down all authors with the given
1070 name no matter which email address is used. Now you need to tell
1071 Gnus when to apply the rule and how long it should last, hit e.g.
1072 @samp{p} to apply the rule now and let it last
1073 forever. If you want to raise the score instead of lowering it say
1074 @samp{I} instead of @samp{L}.
1075
1076 920
1077 You can also set up rules by hand. To do this say @samp{V 921@node [4.8]
1078 f} in summary buffer. Then you are asked for the name 922@subsubheading Question 4.8
1079 of the score file, it's name.of.group.SCORE for rules valid in 923
1080 only one group or all.Score for rules valid in all groups. See the 924Is there anything I can do to make poorly formatted mails
1081 Gnus manual for the exact syntax, basically it's one big list 925more readable?
1082 whose elements are lists again. the first element of those lists 926
1083 is the header to score on, then one more list with what to match, 927@subsubheading Answer
1084 which score to assign, when to expire the rule and how to do the 928
1085 matching. If you find me very interesting, you could e.g. add the 929Gnus offers you several functions to "wash" incoming mail, you can
1086 following to your all.Score: 930find them if you browse through the menu, item
1087 931Article->Washing. The most interesting ones are probably "Wrap
932long lines" (@samp{W w}), "Decode ROT13"
933(@samp{W r}) and "Outlook Deuglify" which repairs
934the dumb quoting used by many users of Microsoft products
935(@samp{W Y f} gives you full deuglify.
936See @samp{W Y C-h} or have a look at the menus for
937other deuglifications). Outlook deuglify is only available since
938Gnus 5.10.
939
940@node [4.9]
941@subsubheading Question 4.9
942
943Is there a way to automatically ignore posts by specific
944authors or with specific words in the subject? And can I
945highlight more interesting ones in some way?
946
947@subsubheading Answer
948
949You want Scoring. Scoring means, that you define rules
950which assign each message an integer value. Depending on
951the value the message is highlighted in summary buffer (if
952it's high, say +2000) or automatically marked read (if the
953value is low, say -800) or some other action happens.
954
955There are basically three ways of setting up rules which assign
956the scoring-value to messages. The first and easiest way is to set
957up rules based on the article you are just reading. Say you're
958reading a message by a guy who always writes nonsense and you want
959to ignore his messages in the future. Hit
960@samp{L}, to set up a rule which lowers the score.
961Now Gnus asks you which the criteria for lowering the Score shall
962be. Hit @samp{?} twice to see all possibilities,
963we want @samp{a} which means the author (the from
964header). Now Gnus wants to know which kind of matching we want.
965Hit either @samp{e} for an exact match or
966@samp{s} for substring-match and delete afterwards
967everything but the name to score down all authors with the given
968name no matter which email address is used. Now you need to tell
969Gnus when to apply the rule and how long it should last, hit e.g.
970@samp{p} to apply the rule now and let it last
971forever. If you want to raise the score instead of lowering it say
972@samp{I} instead of @samp{L}.
973
974You can also set up rules by hand. To do this say @samp{V
975f} in summary buffer. Then you are asked for the name
976of the score file, it's name.of.group.SCORE for rules valid in
977only one group or all.Score for rules valid in all groups. See the
978Gnus manual for the exact syntax, basically it's one big list
979whose elements are lists again. the first element of those lists
980is the header to score on, then one more list with what to match,
981which score to assign, when to expire the rule and how to do the
982matching. If you find me very interesting, you could e.g. add the
983following to your all.Score:
1088 984
1089@example 985@example
1090(("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s)) 986(("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s))
1091 ("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s))) 987 ("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s)))
1092@end example 988@end example
1093
1094@noindent 989@noindent
1095 This would add 999 to the score of messages written by me
1096 and 500 to the score of messages which are a (possibly
1097 indirect) answer to a message written by me. Of course
1098 nobody with a sane mind would do this :-)
1099
1100 990
1101 The third alternative is adaptive scoring. This means Gnus 991This would add 999 to the score of messages written by me
1102 watches you and tries to find out what you find 992and 500 to the score of messages which are a (possibly
1103 interesting and what annoying and sets up rules 993indirect) answer to a message written by me. Of course
1104 which reflect this. Adaptive scoring can be a huge help 994nobody with a sane mind would do this :-)
1105 when reading high traffic groups. If you want to activate 995
1106 adaptive scoring say 996The third alternative is adaptive scoring. This means Gnus
1107 997watches you and tries to find out what you find
998interesting and what annoying and sets up rules
999which reflect this. Adaptive scoring can be a huge help
1000when reading high traffic groups. If you want to activate
1001adaptive scoring say
1108 1002
1109@example 1003@example
1110(setq gnus-use-adaptive-scoring t) 1004(setq gnus-use-adaptive-scoring t)
1111@end example 1005@end example
1112
1113@noindent 1006@noindent
1114 in ~/.gnus.
1115
1116@ifnottex
1117@node [4.10], [4.11], [4.9], FAQ 4 - Reading messages
1118@end ifnottex
1119@subsubheading Question 4.10:
1120 1007
1121 How can I disable threading in some (e.g. mail-) groups, or 1008in ~/.gnus.el.
1122 set other variables specific for some groups?
1123
1124 1009
1125Answer: 1010@node [4.10]
1011@subsubheading Question 4.10
1126 1012
1127 While in group buffer move point over the group and hit 1013How can I disable threading in some (e.g. mail-) groups, or
1128 @samp{G c}, this opens a buffer where you 1014set other variables specific for some groups?
1129 can set options for the group. At the bottom of the buffer
1130 you'll find an item that allows you to set variables
1131 locally for the group. To disable threading enter
1132 gnus-show-threads as name of variable and nil as
1133 value. Hit button done at the top of the buffer when
1134 you're ready.
1135
1136@ifnottex
1137@node [4.11], [4.12], [4.10], FAQ 4 - Reading messages
1138@end ifnottex
1139@subsubheading Question 4.11:
1140 1015
1141 Can I highlight messages written by me and follow-ups to 1016@subsubheading Answer
1142 those?
1143
1144 1017
1145Answer: 1018While in group buffer move point over the group and hit
1019@samp{G c}, this opens a buffer where you
1020can set options for the group. At the bottom of the buffer
1021you'll find an item that allows you to set variables
1022locally for the group. To disable threading enter
1023gnus-show-threads as name of variable and nil as
1024value. Hit button done at the top of the buffer when
1025you're ready.
1146 1026
1147 Stop those "Can I ..." questions, the answer is always yes 1027@node [4.11]
1148 in Gnus Country :-). It's a three step process: First we 1028@subsubheading Question 4.11
1149 make faces (specifications of how summary-line shall look
1150 like) for those postings, then we'll give them some
1151 special score and finally we'll tell Gnus to use the new
1152 faces. You can find detailed instructions on how to do it on
1153 @uref{http://my.gnus.org/Members/dzimmerm/HowTo%2C2002-07-25%2C1027619165012198456/view,my.gnus.org}
1154
1155@ifnottex
1156@node [4.12], [4.13], [4.11], FAQ 4 - Reading messages
1157@end ifnottex
1158@subsubheading Question 4.12:
1159
1160 The number of total messages in a group which Gnus
1161 displays in group buffer is by far to high, especially in
1162 mail groups. Is this a bug?
1163
1164 1029
1165Answer: 1030Can I highlight messages written by me and follow-ups to
1166 1031those?
1167 No, that's a matter of design of Gnus, fixing this would
1168 mean reimplementation of major parts of Gnus'
1169 back ends. Gnus thinks "highest-article-number -
1170 lowest-article-number = total-number-of-articles". This
1171 works OK for Usenet groups, but if you delete and move
1172 many messages in mail groups, this fails. To cure the
1173 symptom, enter the group via @samp{C-u RET}
1174 (this makes Gnus get all messages), then
1175 hit @samp{M P b} to mark all messages and
1176 then say @samp{B m name.of.group} to move
1177 all messages to the group they have been in before, they
1178 get new message numbers in this process and the count is
1179 right again (until you delete and move your mail to other
1180 groups again).
1181
1182@ifnottex
1183@node [4.13], [4.14], [4.12], FAQ 4 - Reading messages
1184@end ifnottex
1185@subsubheading Question 4.13:
1186 1032
1187 I don't like the layout of summary and article buffer, how 1033@subsubheading Answer
1188 to change it? Perhaps even a three pane display?
1189
1190 1034
1191Answer: 1035Stop those "Can I ..." questions, the answer is always yes
1036in Gnus Country :-). It's a three step process: First we
1037make faces (specifications of how summary-line shall look
1038like) for those postings, then we'll give them some
1039special score and finally we'll tell Gnus to use the new
1040faces. You can find detailed instructions on how to do it on
1041@uref{http://my.gnus.org/node/view/224, my.gnus.org}
1192 1042
1193 You can control the windows configuration by calling the 1043@node [4.12]
1194 function gnus-add-configuration. The syntax is a bit 1044@subsubheading Question 4.12
1195 complicated but explained very well in the manual node
1196 "Window Layout". Some popular examples:
1197
1198 1045
1199 Instead 25% summary 75% article buffer 35% summary and 65% 1046The number of total messages in a group which Gnus
1200 article (the 1.0 for article means "take the remaining 1047displays in group buffer is by far to high, especially in
1201 space"): 1048mail groups. Is this a bug?
1202 1049
1050@subsubheading Answer
1051
1052No, that's a matter of design of Gnus, fixing this would
1053mean reimplementation of major parts of Gnus'
1054back ends. Gnus thinks "highest-article-number -
1055lowest-article-number = total-number-of-articles". This
1056works OK for Usenet groups, but if you delete and move
1057many messages in mail groups, this fails. To cure the
1058symptom, enter the group via @samp{C-u RET}
1059(this makes Gnus get all messages), then
1060hit @samp{M P b} to mark all messages and
1061then say @samp{B m name.of.group} to move
1062all messages to the group they have been in before, they
1063get new message numbers in this process and the count is
1064right again (until you delete and move your mail to other
1065groups again).
1066
1067@node [4.13]
1068@subsubheading Question 4.13
1069
1070I don't like the layout of summary and article buffer, how
1071to change it? Perhaps even a three pane display?
1072
1073@subsubheading Answer
1074
1075You can control the windows configuration by calling the
1076function gnus-add-configuration. The syntax is a bit
1077complicated but explained very well in the manual node
1078"Window Layout". Some popular examples:
1079
1080Instead 25% summary 75% article buffer 35% summary and 65%
1081article (the 1.0 for article means "take the remaining
1082space"):
1203 1083
1204@example 1084@example
1205(gnus-add-configuration 1085(gnus-add-configuration
1206 '(article (vertical 1.0 1086 '(article (vertical 1.0 (summary .35 point) (article 1.0))))
1207 (summary .35 point)
1208 (article 1.0))))
1209@end example 1087@end example
1210 1088@noindent
1211 1089
1212 A three pane layout, Group buffer on the left, summary 1090A three pane layout, Group buffer on the left, summary
1213 buffer top-right, article buffer bottom-right: 1091buffer top-right, article buffer bottom-right:
1214
1215 1092
1216@example 1093@example
1217(gnus-add-configuration 1094(gnus-add-configuration
@@ -1228,46 +1105,40 @@ Answer:
1228 (vertical 25 1105 (vertical 25
1229 (group 1.0)) 1106 (group 1.0))
1230 (vertical 1.0 1107 (vertical 1.0
1231 (summary 1.0 point))))) 1108 (summary 1.0 point)))))
1232@end example 1109@end example
1233 1110@noindent
1234@ifnottex
1235@node [4.14], [4.15], [4.13], FAQ 4 - Reading messages
1236@end ifnottex
1237@subsubheading Question 4.14:
1238 1111
1239 I don't like the way the Summary buffer looks, how to tweak it? 1112@node [4.14]
1240 1113@subsubheading Question 4.14
1241 1114
1242Answer: 1115I don't like the way the Summary buffer looks, how to tweak it?
1243
1244 You've got to play around with the variable
1245 gnus-summary-line-format. It's value is a string of
1246 symbols which stand for things like author, date, subject
1247 etc. A list of the available specifiers can be found in the
1248 manual node "Summary Buffer Lines" and the often forgotten
1249 node "Formatting Variables" and it's sub-nodes. There
1250 you'll find useful things like positioning the cursor and
1251 tabulators which allow you a summary in table form, but
1252 sadly hard tabulators are broken in 5.8.8.
1253
1254 1116
1255 Since 5.10, Gnus offers you some very nice new specifiers, 1117@subsubheading Answer
1256 e.g. %B which draws a thread-tree and %&user-date which 1118
1257 gives you a date where the details are dependent of the 1119You've got to play around with the variable
1258 articles age. Here's an example which uses both: 1120gnus-summary-line-format. It's value is a string of
1259 1121symbols which stand for things like author, date, subject
1122etc. A list of the available specifiers can be found in the
1123manual node "Summary Buffer Lines" and the often forgotten
1124node "Formatting Variables" and it's sub-nodes. There
1125you'll find useful things like positioning the cursor and
1126tabulators which allow you a summary in table form, but
1127sadly hard tabulators are broken in 5.8.8.
1128
1129Since 5.10, Gnus offers you some very nice new specifiers,
1130e.g. %B which draws a thread-tree and %&user-date which
1131gives you a date where the details are dependent of the
1132articles age. Here's an example which uses both:
1260 1133
1261@example 1134@example
1262(setq gnus-summary-line-format 1135(setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n")
1263 ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n")
1264@end example 1136@end example
1265
1266@noindent 1137@noindent
1267 resulting in:
1268
1269 1138
1270@smallexample 1139resulting in:
1140
1141@example
1271:O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat 23:06 1142:O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat 23:06
1272:O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat 23:12 1143:O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat 23:12
1273:R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat 23:16 1144:R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat 23:16
@@ -1280,54 +1151,48 @@ Answer:
1280:R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt |Sat 23:57 1151:R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt |Sat 23:57
1281:O \-> ... | 18 |Kai Grossjohann | 0:35 1152:O \-> ... | 18 |Kai Grossjohann | 0:35
1282:O \-> ... | 13 |Lars Magne Ingebrigt | 0:56 1153:O \-> ... | 13 |Lars Magne Ingebrigt | 0:56
1283@end smallexample 1154@end example
1284 1155@noindent
1285@ifnottex
1286@node [4.15], , [4.14], FAQ 4 - Reading messages
1287@end ifnottex
1288@subsubheading Question 4.15:
1289 1156
1290 How to split incoming mails in several groups? 1157@node [4.15]
1291 1158@subsubheading Question 4.15
1292 1159
1293Answer: 1160How to split incoming mails in several groups?
1294 1161
1295 Gnus offers two possibilities for splitting mail, the easy 1162@subsubheading Answer
1296 nnmail-split-methods and the more powerful Fancy Mail
1297 Splitting. I'll only talk about the first one, refer to
1298 the manual, node "Fancy Mail Splitting" for the latter.
1299
1300 1163
1301 The value of nnmail-split-methods is a list, each element 1164Gnus offers two possibilities for splitting mail, the easy
1302 is a list which stands for a splitting rule. Each rule has 1165nnmail-split-methods and the more powerful Fancy Mail
1303 the form "group where matching articles should go to", 1166Splitting. I'll only talk about the first one, refer to
1304 "regular expression which has to be matched", the first 1167the manual, node "Fancy Mail Splitting" for the latter.
1305 rule which matches wins. The last rule must always be a 1168
1306 general rule (regular expression .*) which denotes where 1169The value of nnmail-split-methods is a list, each element
1307 articles should go which don't match any other rule. If 1170is a list which stands for a splitting rule. Each rule has
1308 the folder doesn't exist yet, it will be created as soon 1171the form "group where matching articles should go to",
1309 as an article lands there. By default the mail will be 1172"regular expression which has to be matched", the first
1310 send to all groups whose rules match. If you 1173rule which matches wins. The last rule must always be a
1311 don't want that (you probably don't want), say 1174general rule (regular expression .*) which denotes where
1312 1175articles should go which don't match any other rule. If
1176the folder doesn't exist yet, it will be created as soon
1177as an article lands there. By default the mail will be
1178send to all groups whose rules match. If you
1179don't want that (you probably don't want), say
1313 1180
1314@example 1181@example
1315(setq nnmail-crosspost nil) 1182(setq nnmail-crosspost nil)
1316@end example 1183@end example
1317
1318@noindent 1184@noindent
1319 in ~/.gnus.
1320
1321 1185
1322 An example might be better than thousand words, so here's 1186in ~/.gnus.el.
1323 my nnmail-split-methods. Note that I send duplicates in a 1187
1324 special group and that the default group is spam, since I 1188An example might be better than thousand words, so here's
1325 filter all mails out which are from some list I'm 1189my nnmail-split-methods. Note that I send duplicates in a
1326 subscribed to or which are addressed directly to me 1190special group and that the default group is spam, since I
1327 before. Those rules kill about 80% of the Spam which 1191filter all mails out which are from some list I'm
1328 reaches me (Email addresses are changed to prevent spammers 1192subscribed to or which are addressed directly to me
1329 from using them): 1193before. Those rules kill about 80% of the Spam which
1330 1194reaches me (Email addresses are changed to prevent spammers
1195from using them):
1331 1196
1332@example 1197@example
1333(setq nnmail-split-methods 1198(setq nnmail-split-methods
@@ -1336,133 +1201,114 @@ Answer:
1336 ("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@@socha.bla.*") 1201 ("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@@socha.bla.*")
1337 ("tcsh" "^\\(To:\\|CC:\\).*localpart@@mx.gw.bla.*") 1202 ("tcsh" "^\\(To:\\|CC:\\).*localpart@@mx.gw.bla.*")
1338 ("BAfH" "^\\(To:\\|CC:\\).*localpart@@.*uni-muenchen.bla.*") 1203 ("BAfH" "^\\(To:\\|CC:\\).*localpart@@.*uni-muenchen.bla.*")
1339 ("Hamster-src" 1204 ("Hamster-src" "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*")
1340 "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*")
1341 ("Tagesschau" "^From: tagesschau <localpart@@www.tagesschau.bla>$") 1205 ("Tagesschau" "^From: tagesschau <localpart@@www.tagesschau.bla>$")
1342 ("Replies" "^\\(CC:\\|To:\\).*localpart@@Frank-Schmitt.bla.*") 1206 ("Replies" "^\\(CC:\\|To:\\).*localpart@@Frank-Schmitt.bla.*")
1343 ("EK" 1207 ("EK" "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*")
1344 "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*") 1208 ("Spam" "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*")
1345 ("Spam" 1209 ("Spam" "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*")
1346 "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") 1210 ("Spam" "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*")
1347 ("Spam"
1348 "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*")
1349 ("Spam"
1350 "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*")
1351 ("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)") 1211 ("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)")
1352 ("Spam" 1212 ("Spam" "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)")
1353 "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") 1213 ("Spam" "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*")
1354 ("Spam"
1355 "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*")
1356 ("Spam" "^Delivered-To: GMX delivery to spamtrap@@gmx.bla$") 1214 ("Spam" "^Delivered-To: GMX delivery to spamtrap@@gmx.bla$")
1357 ("Spam" "^Received: from link2buy.com") 1215 ("Spam" "^Received: from link2buy.com")
1358 ("Spam" "^CC: .*azzrael@@t-online.bla") 1216 ("Spam" "^CC: .*azzrael@@t-online.bla")
1359 ("Spam" "^X-Mailer-Version: 1.50 BETA") 1217 ("Spam" "^X-Mailer-Version: 1.50 BETA")
1360 ("Uni" "^\\(CC:\\|To:\\).*localpart@@uni-koblenz.bla.*") 1218 ("Uni" "^\\(CC:\\|To:\\).*localpart@@uni-koblenz.bla.*")
1361 ("Inbox" 1219 ("Inbox" "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)")
1362 "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)")
1363 ("Spam" ""))) 1220 ("Spam" "")))
1364@end example 1221@end example
1365 1222@noindent
1366 1223
1367@ifnottex 1224@node FAQ 5 - Composing messages
1368@node FAQ 5 - Composing messages, FAQ 6 - Old messages, FAQ 4 - Reading messages, Frequently Asked Questions
1369@end ifnottex
1370@subsection Composing messages 1225@subsection Composing messages
1371 1226
1372@menu 1227@menu
1373* [5.1]:: What are the basic commands I need to know for sending mail and 1228* [5.1]:: What are the basic commands I need to know for sending
1374 postings? 1229 mail and postings?
1375* [5.2]:: How to enable automatic word-wrap when composing messages? 1230* [5.2]:: How to enable automatic word-wrap when composing messages?
1376* [5.3]:: How to set stuff like From, Organization, Reply-To, signature...? 1231* [5.3]:: How to set stuff like From, Organization, Reply-To,
1377* [5.4]:: Can I set things like From, Signature etc group based on the 1232 signature...?
1378 group I post too? 1233* [5.4]:: Can I set things like From, Signature etc group based on
1379* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly spell-checking? 1234 the group I post too?
1380* [5.6]:: Can I set the dictionary based on the group I'm posting to? 1235* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly
1381* [5.7]:: Is there some kind of address-book, so I needn't remember all 1236 spell-checking?
1382 those email addresses? 1237* [5.6]:: Can I set the dictionary based on the group I'm posting
1383* [5.8]:: Sometimes I see little images at the top of article buffer. 1238 to?
1384 What's that and how can I send one with my postings, too? 1239* [5.7]:: Is there some kind of address-book, so I needn't remember
1385* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups. 1240 all those email addresses?
1386 Can Gnus warn me, when I'm replying by mail in newsgroups? 1241* [5.8]:: Sometimes I see little images at the top of article
1387* [5.10]:: How to tell Gnus not to generate a sender header? 1242 buffer. What's that and how can I send one with my postings, too?
1388* [5.11]:: I want Gnus to locally store copies of my send mail and news, 1243* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups.
1389 how to do it? 1244 Can Gnus warn me, when I'm replying by mail in newsgroups?
1390* [5.12]:: People tell me my Message-IDs are not correct, 1245* [5.10]:: How to tell Gnus not to generate a sender header?
1391 why aren't they and how to fix it? 1246* [5.11]:: I want Gnus to locally store copies of my send mail and
1247 news, how to do it?
1248* [5.12]:: People tell me my Message-IDs are not correct, why aren't
1249 they and how to fix it?
1392@end menu 1250@end menu
1393 1251
1394@ifnottex 1252@node [5.1]
1395@node [5.1], [5.2], FAQ 5 - Composing messages, FAQ 5 - Composing messages 1253@subsubheading Question 5.1
1396@end ifnottex
1397@subsubheading Question 5.1:
1398 1254
1399 What are the basic commands I need to know for sending mail and postings? 1255What are the basic commands I need to know for sending mail and postings?
1400
1401 1256
1402Answer: 1257@subsubheading Answer
1403
1404 To start composing a new mail hit @samp{m}
1405 either in Group or Summary buffer, for a posting, it's
1406 either @samp{a} in Group buffer and
1407 filling the Newsgroups header manually
1408 or @samp{a} in the Summary buffer of the
1409 group where the posting shall be send to. Replying by mail
1410 is
1411 @samp{r} if you don't want to cite the
1412 author, or import the cited text manually and
1413 @samp{R} to cite the text of the original
1414 message. For a follow up to a newsgroup, it's
1415 @samp{f} and @samp{F}
1416 (analog to @samp{r} and
1417 @samp{R}).
1418
1419 1258
1420 Enter new headers above the line saying "--text follows 1259To start composing a new mail hit @samp{m}
1421 this line--", enter the text below the line. When ready 1260either in Group or Summary buffer, for a posting, it's
1422 hit @samp{C-c C-c}, to send the message, 1261either @samp{a} in Group buffer and
1423 if you want to finish it later hit @samp{C-c 1262filling the Newsgroups header manually
1424 C-d} to save it in the drafts group, where you 1263or @samp{a} in the Summary buffer of the
1425 can start editing it again by saying @samp{D 1264group where the posting shall be send to. Replying by mail
1426 e}. 1265is
1427 1266@samp{r} if you don't want to cite the
1428@ifnottex 1267author, or import the cited text manually and
1429@node [5.2], [5.3], [5.1], FAQ 5 - Composing messages 1268@samp{R} to cite the text of the original
1430@end ifnottex 1269message. For a follow up to a newsgroup, it's
1431@subsubheading Question 5.2: 1270@samp{f} and @samp{F}
1271(analogously to @samp{r} and
1272@samp{R}).
1432 1273
1433 How to enable automatic word-wrap when composing messages? 1274Enter new headers above the line saying "--text follows
1434 1275this line--", enter the text below the line. When ready
1276hit @samp{C-c C-c}, to send the message,
1277if you want to finish it later hit @samp{C-c
1278C-d} to save it in the drafts group, where you
1279can start editing it again by saying @samp{D
1280e}.
1435 1281
1436Answer: 1282@node [5.2]
1283@subsubheading Question 5.2
1437 1284
1438 Say 1285How to enable automatic word-wrap when composing messages?
1439 1286
1287@subsubheading Answer
1288
1289Say
1440 1290
1441@example 1291@example
1442(add-hook 'message-mode-hook 1292(add-hook 'message-mode-hook
1443 (lambda () 1293 (lambda ()
1444 (setq fill-column 72) 1294 (setq fill-column 72)
1445 (turn-on-auto-fill))) 1295 (turn-on-auto-fill)))
1446@end example 1296@end example
1447
1448@noindent 1297@noindent
1449 in ~/.gnus. You can reformat a paragraph by hitting
1450 @samp{M-q} (as usual)
1451
1452@ifnottex
1453@node [5.3], [5.4], [5.2], FAQ 5 - Composing messages
1454@end ifnottex
1455@subsubheading Question 5.3:
1456 1298
1457 How to set stuff like From, Organization, Reply-To, signature...? 1299in ~/.gnus.el. You can reformat a paragraph by hitting
1458 1300@samp{M-q} (as usual)
1459 1301
1460Answer: 1302@node [5.3]
1303@subsubheading Question 5.3
1461 1304
1462 There are other ways, but you should use posting styles 1305How to set stuff like From, Organization, Reply-To, signature...?
1463 for this. (See below why). 1306
1464 This example should make the syntax clear: 1307@subsubheading Answer
1465 1308
1309There are other ways, but you should use posting styles
1310for this. (See below why).
1311This example should make the syntax clear:
1466 1312
1467@example 1313@example
1468(setq gnus-posting-styles 1314(setq gnus-posting-styles
@@ -1474,146 +1320,121 @@ Answer:
1474 ("X-SampleHeader" "foobar") 1320 ("X-SampleHeader" "foobar")
1475 (eval (setq some-variable "Foo bar"))))) 1321 (eval (setq some-variable "Foo bar")))))
1476@end example 1322@end example
1477
1478@noindent 1323@noindent
1479 The ".*" means that this settings are the default ones
1480 (see below), valid values for the first element of the
1481 following lists are signature, signature-file,
1482 organization, address, name or body. The attribute name
1483 can also be a string. In that case, this will be used as
1484 a header name, and the value will be inserted in the
1485 headers of the article; if the value is `nil', the header
1486 name will be removed. You can also say (eval (foo bar)),
1487 then the function foo will be evaluated with argument bar
1488 and the result will be thrown away.
1489
1490@ifnottex
1491@node [5.4], [5.5], [5.3], FAQ 5 - Composing messages
1492@end ifnottex
1493@subsubheading Question 5.4:
1494
1495 Can I set things like From, Signature etc group based on the group I post too?
1496
1497 1324
1498Answer: 1325The ".*" means that this settings are the default ones
1499 1326(see below), valid values for the first element of the
1500 That's the strength of posting styles. Before, we used ".*" 1327following lists are signature, signature-file,
1501 to set the default for all groups. You can use a regexp 1328organization, address, name or body. The attribute name
1502 like "^gmane" and the following settings are only applied 1329can also be a string. In that case, this will be used as
1503 to postings you send to the gmane hierarchy, use 1330a header name, and the value will be inserted in the
1504 ".*binaries" instead and they will be applied to postings 1331headers of the article; if the value is `nil', the header
1505 send to groups containing the string binaries in their 1332name will be removed. You can also say (eval (foo bar)),
1506 name etc. 1333then the function foo will be evaluated with argument bar
1507 1334and the result will be thrown away.
1508 1335
1509 You can instead of specifying a regexp specify a function 1336@node [5.4]
1510 which is evaluated, only if it returns true, the 1337@subsubheading Question 5.4
1511 corresponding settings take effect. Two interesting 1338
1512 candidates for this are message-news-p which returns t if 1339Can I set things like From, Signature etc group based on the group I post too?
1513 the current Group is a newsgroup and the corresponding 1340
1514 message-mail-p. 1341@subsubheading Answer
1515 1342
1516 1343That's the strength of posting styles. Before, we used ".*"
1517 Note that all forms that match are applied, that means in 1344to set the default for all groups. You can use a regexp
1518 the example below, when I post to 1345like "^gmane" and the following settings are only applied
1519 gmane.mail.spam.spamassassin.general, the settings under 1346to postings you send to the gmane hierarchy, use
1520 ".*" are applied and the settings under message-news-p and 1347".*binaries" instead and they will be applied to postings
1521 those under "^gmane" and those under 1348send to groups containing the string binaries in their
1522 "^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because 1349name etc.
1523 of this put general settings at the top and specific ones 1350
1524 at the bottom. 1351You can instead of specifying a regexp specify a function
1525 1352which is evaluated, only if it returns true, the
1353corresponding settings take effect. Two interesting
1354candidates for this are message-news-p which returns t if
1355the current Group is a newsgroup and the corresponding
1356message-mail-p.
1357
1358Note that all forms that match are applied, that means in
1359the example below, when I post to
1360gmane.mail.spam.spamassassin.general, the settings under
1361".*" are applied and the settings under message-news-p and
1362those under "^gmane" and those under
1363"^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because
1364of this put general settings at the top and specific ones
1365at the bottom.
1526 1366
1527@example 1367@example
1528(setq gnus-posting-styles 1368(setq gnus-posting-styles
1529 '((".*" ;;default 1369 '((".*" ;;default
1530 (name "Frank Schmitt") 1370 (name "Frank Schmitt")
1531 (organization "Hamme net, kren mer och nimmi") 1371 (organization "Hamme net, kren mer och nimmi")
1532 (signature-file "~/.signature")) 1372 (signature-file "~/.signature") )
1533 ((message-news-p) ;;Usenet news? 1373 ((message-news-p) ;;Usenet news?
1534 (address "mySpamTrap@@Frank-Schmitt.bla") 1374 (address "mySpamTrap@@Frank-Schmitt.bla")
1535 ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla")) 1375 ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla") )
1536 ((message-mail-p) ;;mail? 1376 ((message-mail-p) ;;mail?
1537 (address "usedForMails@@Frank-Schmitt.bla")) 1377 (address "usedForMails@@Frank-Schmitt.bla") )
1538 ("^gmane" ;;this is mail, too in fact 1378 ("^gmane" ;;this is mail, too in fact
1539 (address "usedForMails@@Frank-Schmitt.net") 1379 (address "usedForMails@@Frank-Schmitt.net")
1540 ("Reply-To" nil)) 1380 ("Reply-To" nil) )
1541 ("^gmane.mail.spam.spamassassin.general$" 1381 ("^gmane.mail.spam.spamassassin.general$"
1542 (eval (setq mail-envelope-from "Azzrael@@rz-online.de")) 1382 (eval (setq mail-envelope-from "Azzrael@@rz-online.de"))
1543 (address "Azzrael@@rz-online.de")))) 1383 (address "Azzrael@@rz-online.de")) ))
1544@end example 1384@end example
1545 1385@noindent
1546@ifnottex
1547@node [5.5], [5.6], [5.4], FAQ 5 - Composing messages
1548@end ifnottex
1549@subsubheading Question 5.5:
1550 1386
1551 Is there a spell-checker? Perhaps even on-the-fly spell-checking? 1387@node [5.5]
1552 1388@subsubheading Question 5.5
1553 1389
1554Answer: 1390Is there a spell-checker? Perhaps even on-the-fly spell-checking?
1555 1391
1556You can use ispell.el to spell-check stuff in Emacs. So the first 1392@subsubheading Answer
1557thing to do is to make sure that you've got either
1558@itemize @bullet
1559@item
1560@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html,ispell}
1561or
1562@item
1563@uref{http://aspell.sourceforge.net/,aspell}
1564@end itemize
1565@noindent
1566installed and in your Path.
1567
1568Then you need
1569@uref{http://www.kdstevens.com/~stevens/ispell-page.html,ispell.el,ispell.el}
1570and for on-the-fly spell-checking
1571@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html,flyspell.el,flyspell.el}.
1572Ispell.el is shipped with Gnus Emacs and available through the Emacs
1573package system, flyspell.el is shipped with Emacs and part of XEmacs
1574text-modes package which is available through the package system, so
1575there should be no need to install them manually.
1576
1577 1393
1578 Ispell.el assumes you use ispell, if you choose aspell say 1394You can use ispell.el to spell-check stuff in Emacs. So the
1579 1395first thing to do is to make sure that you've got either
1396@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html, ispell}
1397or @uref{http://aspell.sourceforge.net/, aspell}
1398installed and in your Path. Then you need
1399@uref{http://www.kdstevens.com/~stevens/ispell-page.html, ispell.el}
1400and for on-the-fly spell-checking
1401@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html, flyspell.el}.
1402Ispell.el is shipped with Emacs and available through the XEmacs package system,
1403flyspell.el is shipped with Emacs and part of XEmacs text-modes package which is
1404available through the package system, so there should be no need to install them
1405manually.
1406
1407Ispell.el assumes you use ispell, if you choose aspell say
1580 1408
1581@example 1409@example
1582(setq ispell-program-name "aspell") 1410(setq ispell-program-name "aspell")
1583@end example 1411@end example
1584
1585
1586@noindent 1412@noindent
1587 in your Emacs configuration file.
1588 1413
1414in your Emacs configuration file.
1589 1415
1590 If you want your outgoing messages to be spell-checked, say 1416If you want your outgoing messages to be spell-checked, say
1591
1592 1417
1593@example 1418@example
1594(add-hook 'message-send-hook 'ispell-message) 1419(add-hook 'message-send-hook 'ispell-message)
1595@end example 1420@end example
1596
1597@noindent 1421@noindent
1598 In your ~/.gnus, if you prefer on-the-fly spell-checking say 1422
1599 1423In your ~/.gnus.el, if you prefer on-the-fly spell-checking say
1600 1424
1601@example 1425@example
1602(add-hook 'message-mode-hook (lambda () (flyspell-mode 1))) 1426(add-hook 'message-mode-hook (lambda () (flyspell-mode 1)))
1603@end example 1427@end example
1604 1428@noindent
1605@ifnottex
1606@node [5.6], [5.7], [5.5], FAQ 5 - Composing messages
1607@end ifnottex
1608@subsubheading Question 5.6:
1609 1429
1610 Can I set the dictionary based on the group I'm posting to? 1430@node [5.6]
1611 1431@subsubheading Question 5.6
1612 1432
1613Answer: 1433Can I set the dictionary based on the group I'm posting to?
1614 1434
1615 Yes, say something like 1435@subsubheading Answer
1616 1436
1437Yes, say something like
1617 1438
1618@example 1439@example
1619(add-hook 'gnus-select-group-hook 1440(add-hook 'gnus-select-group-hook
@@ -1625,55 +1446,47 @@ Answer:
1625 (t 1446 (t
1626 (ispell-change-dictionary "english"))))) 1447 (ispell-change-dictionary "english")))))
1627@end example 1448@end example
1628
1629
1630@noindent 1449@noindent
1631 in ~/.gnus. Change "^de\\." and "deutsch8" to something
1632 that suits your needs.
1633 1450
1634@ifnottex 1451in ~/.gnus.el. Change "^de\\." and "deutsch8" to something
1635@node [5.7], [5.8], [5.6], FAQ 5 - Composing messages 1452that suits your needs.
1636@end ifnottex
1637@subsubheading Question 5.7:
1638 1453
1639 Is there some kind of address-book, so I needn't remember 1454@node [5.7]
1640 all those email addresses? 1455@subsubheading Question 5.7
1641
1642 1456
1643Answer: 1457Is there some kind of address-book, so I needn't remember
1458all those email addresses?
1644 1459
1645 There's an very basic solution for this, mail aliases. 1460@subsubheading Answer
1646 You can store your mail addresses in a ~/.mailrc file using a simple 1461
1647 alias syntax: 1462There's an very basic solution for this, mail aliases.
1648 1463You can store your mail addresses in a ~/.mailrc file using a simple
1464alias syntax:
1649 1465
1650@example 1466@example
1651alias al "Al <al@@english-heritage.bla>" 1467alias al "Al <al@@english-heritage.bla>"
1652@end example 1468@end example
1653
1654@noindent 1469@noindent
1655 Then typing your alias (followed by a space or punctuation
1656 character) on a To: or Cc: line in the message buffer will
1657 cause Gnus to insert the full address for you. See the
1658 node "Mail Aliases" in Message (not Gnus) manual for
1659 details.
1660
1661 1470
1662 However, what you really want is the Insidious Big Brother 1471Then typing your alias (followed by a space or punctuation
1663 Database bbdb. Get it through the XEmacs package system or from 1472character) on a To: or Cc: line in the message buffer will
1664 @uref{http://bbdb.sourceforge.net/,bbdb's homepage}. 1473cause Gnus to insert the full address for you. See the
1665 Now place the following in ~/.gnus, to activate bbdb for Gnus: 1474node "Mail Aliases" in Message (not Gnus) manual for
1666 1475details.
1476
1477However, what you really want is the Insidious Big Brother
1478Database bbdb. Get it through the XEmacs package system or from
1479@uref{http://bbdb.sourceforge.net/, bbdb's homepage}.
1480Now place the following in ~/.gnus.el, to activate bbdb for Gnus:
1667 1481
1668@example 1482@example
1669(require 'bbdb) 1483(require 'bbdb)
1670(bbdb-initialize 'gnus 'message) 1484(bbdb-initialize 'gnus 'message)
1671@end example 1485@end example
1672
1673@noindent 1486@noindent
1674 Now you probably want some general bbdb configuration, 1487
1675 place them in ~/.emacs: 1488Now you probably want some general bbdb configuration,
1676 1489place them in ~/.emacs:
1677 1490
1678@example 1491@example
1679(require 'bbdb) 1492(require 'bbdb)
@@ -1689,56 +1502,50 @@ alias al "Al <al@@english-heritage.bla>"
1689;;No popup-buffers 1502;;No popup-buffers
1690(setq bbdb-use-pop-up nil) 1503(setq bbdb-use-pop-up nil)
1691@end example 1504@end example
1692
1693@noindent 1505@noindent
1694 Now you should be ready to go. Say @samp{M-x bbdb RET
1695 RET} to open a bbdb buffer showing all
1696 entries. Say @samp{c} to create a new
1697 entry, @samp{b} to search your BBDB and
1698 @samp{C-o} to add a new field to an
1699 entry. If you want to add a sender to the BBDB you can
1700 also just hit `:' on the posting in the summary buffer and
1701 you are done. When you now compose a new mail,
1702 hit @samp{TAB} to cycle through know
1703 recipients.
1704
1705@ifnottex
1706@node [5.8], [5.9], [5.7], FAQ 5 - Composing messages
1707@end ifnottex
1708@subsubheading Question 5.8:
1709
1710 Sometimes I see little images at the top of article
1711 buffer. What's that and how can I send one with my
1712 postings, too?
1713
1714 1506
1715Answer: 1507Now you should be ready to go. Say @samp{M-x bbdb RET
1716 1508RET} to open a bbdb buffer showing all
1717 Those images are called X-Faces. They are 48*48 pixel b/w 1509entries. Say @samp{c} to create a new
1718 pictures, encoded in a header line. If you want to include 1510entry, @samp{b} to search your BBDB and
1719 one in your posts, you've got to convert some image to a 1511@samp{C-o} to add a new field to an
1720 X-Face. So fire up some image manipulation program (say 1512entry. If you want to add a sender to the BBDB you can
1721 Gimp), open the image you want to include, cut out the 1513also just hit `:' on the posting in the summary buffer and
1722 relevant part, reduce color depth to 1 bit, resize to 1514you are done. When you now compose a new mail,
1723 48*48 and save as bitmap. Now you should get the compface 1515hit @samp{TAB} to cycle through know
1724 package from 1516recipients.
1725 @uref{ftp://ftp.cs.indiana.edu:/pub/faces/,this site}. 1517
1726 and create the actual X-face by saying 1518@node [5.8]
1727 1519@subsubheading Question 5.8
1520
1521Sometimes I see little images at the top of article
1522buffer. What's that and how can I send one with my
1523postings, too?
1524
1525@subsubheading Answer
1526
1527Those images are called X-Faces. They are 48*48 pixel b/w
1528pictures, encoded in a header line. If you want to include
1529one in your posts, you've got to convert some image to a
1530X-Face. So fire up some image manipulation program (say
1531Gimp), open the image you want to include, cut out the
1532relevant part, reduce color depth to 1 bit, resize to
153348*48 and save as bitmap. Now you should get the compface
1534package from
1535@uref{ftp://ftp.cs.indiana.edu:/pub/faces/, this site}.
1536and create the actual X-face by saying
1728 1537
1729@example 1538@example
1730cat file.xbm | xbm2ikon |compface > file.face 1539cat file.xbm | xbm2ikon | compface > file.face
1731cat ./file.face | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' > ./file.face.quoted 1540cat file.face | sed 's/\\/\\\\/g;s/\"/\\\"/g;' > file.face.quoted
1732@end example 1541@end example
1733
1734@noindent 1542@noindent
1735If you can't use compface, there's an online X-face converter at@*
1736@uref{http://www.dairiki.org/xface/}. If you use MS Windows, you
1737could also use the WinFace program from
1738@uref{http://www.xs4all.nl/~walterln/winface/}.
1739 1543
1740Now you only have to tell Gnus to include the X-face in your postings 1544If you can't use compface, there's an online X-face converter at
1741by saying 1545@uref{http://www.dairiki.org/xface/}.
1546If you use MS Windows, you could also use the WinFace program from
1547@uref{http://www.xs4all.nl/~walterln/winface/}.
1548Now you only have to tell Gnus to include the X-face in your postings by saying
1742 1549
1743@example 1550@example
1744(setq message-default-headers 1551(setq message-default-headers
@@ -1747,33 +1554,28 @@ by saying
1747 (insert-file-contents "~/.xemacs/xface") 1554 (insert-file-contents "~/.xemacs/xface")
1748 (buffer-string))) 1555 (buffer-string)))
1749@end example 1556@end example
1750
1751@noindent 1557@noindent
1752 in ~/.gnus.
1753
1754@ifnottex
1755@node [5.9], [5.10], [5.8], FAQ 5 - Composing messages
1756@end ifnottex
1757@subsubheading Question 5.9:
1758
1759 Sometimes I accidentally hit r instead of f in
1760 newsgroups. Can Gnus warn me, when I'm replying by mail in
1761 newsgroups?
1762
1763 1558
1764Answer: 1559in ~/.gnus.el.
1765 1560
1766 Put this in ~/.gnus: 1561@node [5.9]
1767 1562@subsubheading Question 5.9
1563
1564Sometimes I accidentally hit r instead of f in
1565newsgroups. Can Gnus warn me, when I'm replying by mail in
1566newsgroups?
1567
1568@subsubheading Answer
1569
1570Put this in ~/.gnus.el:
1768 1571
1769@example 1572@example
1770(setq gnus-confirm-mail-reply-to-news t) 1573(setq gnus-confirm-mail-reply-to-news t)
1771@end example 1574@end example
1772
1773@noindent 1575@noindent
1774 if you already use Gnus 5.10, if you still use 5.8.8 or 1576
1775 5.9 try this instead: 1577if you already use Gnus 5.10, if you still use 5.8.8 or
1776 15785.9 try this instead:
1777 1579
1778@example 1580@example
1779(eval-after-load "gnus-msg" 1581(eval-after-load "gnus-msg"
@@ -1785,44 +1587,37 @@ Answer:
1785 (y-or-n-p "Really reply by mail to article author? ")) 1587 (y-or-n-p "Really reply by mail to article author? "))
1786 ad-do-it)))) 1588 ad-do-it))))
1787@end example 1589@end example
1788 1590@noindent
1789@ifnottex
1790@node [5.10], [5.11], [5.9], FAQ 5 - Composing messages
1791@end ifnottex
1792@subsubheading Question 5.10:
1793 1591
1794 How to tell Gnus not to generate a sender header? 1592@node [5.10]
1795 1593@subsubheading Question 5.10
1796 1594
1797Answer: 1595How to tell Gnus not to generate a sender header?
1798 1596
1799 Since 5.10 Gnus doesn't generate a sender header by 1597@subsubheading Answer
1800 default. For older Gnus' try this in ~/.gnus: 1598
1801 1599Since 5.10 Gnus doesn't generate a sender header by
1600default. For older Gnus' try this in ~/.gnus.el:
1802 1601
1803@example 1602@example
1804(eval-after-load "message" 1603(eval-after-load "message"
1805 '(add-to-list 'message-syntax-checks '(sender . disabled))) 1604 '(add-to-list 'message-syntax-checks '(sender . disabled)))
1806@end example 1605@end example
1807 1606@noindent
1808
1809@ifnottex
1810@node [5.11], [5.12], [5.10], FAQ 5 - Composing messages
1811@end ifnottex
1812@subsubheading Question 5.11:
1813 1607
1814 I want gnus to locally store copies of my send mail and 1608@node [5.11]
1815 news, how to do it? 1609@subsubheading Question 5.11
1816
1817 1610
1818Answer: 1611I want Gnus to locally store copies of my send mail and
1612news, how to do it?
1819 1613
1820 You must set the variable gnus-message-archive-group to do 1614@subsubheading Answer
1821 this. You can set it to a string giving the name of the 1615
1822 group where the copies shall go or like in the example 1616You must set the variable gnus-message-archive-group to do
1823 below use a function which is evaluated and which returns 1617this. You can set it to a string giving the name of the
1824 the group to use. 1618group where the copies shall go or like in the example
1825 1619below use a function which is evaluated and which returns
1620the group to use.
1826 1621
1827@example 1622@example
1828(setq gnus-message-archive-group 1623(setq gnus-message-archive-group
@@ -1830,31 +1625,31 @@ Answer:
1830 "nnml:Send-News" 1625 "nnml:Send-News"
1831 "nnml:Send-Mail"))) 1626 "nnml:Send-Mail")))
1832@end example 1627@end example
1833 1628@noindent
1834
1835@ifnottex
1836@node [5.12], , [5.11], FAQ 5 - Composing messages
1837@end ifnottex
1838@subsubheading Question 5.12:
1839 1629
1840 People tell me my Message-IDs are not correct, why 1630@node [5.12]
1841 aren't they and how to fix it? 1631@subsubheading Question 5.12
1842 1632
1633People tell me my Message-IDs are not correct, why
1634aren't they and how to fix it?
1843 1635
1844Answer: 1636@subsubheading Answer
1637
1638The message-ID is an unique identifier for messages you
1639send. To make it unique, Gnus need to know which machine
1640name to put after the "@@". If the name of the machine
1641where Gnus is running isn't suitable (it probably isn't
1642at most private machines) you can tell Gnus what to use
1643by saying:
1845 1644
1846 The message-ID is an unique identifier for messages you
1847 send. To make it unique, Gnus need to know which machine
1848 name to put after the "@@". If the name of the machine
1849 where Gnus is running isn't suitable (it probably isn't
1850 at most private machines) you can tell Gnus what to use
1851 by saying
1852@example 1645@example
1853(setq message-user-fqdn "yourmachine.yourdomain.tld") 1646(setq message-user-fqdn "yourmachine.yourdomain.tld")
1854@end example 1647@end example
1855@noindent 1648@noindent
1856 in ~/.gnus. If you use Gnus 5.9 or ealier, you can use this 1649
1857instead (works for newer versions a well): 1650in ~/.gnus.el. If you use Gnus 5.9 or ealier, you can use this
1651instead (works for newer versions a well):
1652
1858@example 1653@example
1859(eval-after-load "message" 1654(eval-after-load "message"
1860 '(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this! 1655 '(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this!
@@ -1865,110 +1660,97 @@ instead (works for newer versions a well):
1865 "Return user's fully qualified domain name." 1660 "Return user's fully qualified domain name."
1866 fqdn)))) 1661 fqdn))))
1867@end example 1662@end example
1663@noindent
1868 1664
1869 If you have no idea what to insert for 1665If you have no idea what to insert for
1870 "yourmachine.yourdomain.tld", you've got several 1666"yourmachine.yourdomain.tld", you've got several
1871 choices. You can either ask your provider if he allows 1667choices. You can either ask your provider if he allows
1872 you to use something like 1668you to use something like
1873 yourUserName.userfqdn.provider.net, or you can use 1669yourUserName.userfqdn.provider.net, or you can use
1874 somethingUnique.yourdomain.tld if you own the domain 1670somethingUnique.yourdomain.tld if you own the domain
1875 yourdomain.tld, or you can register at a service which 1671yourdomain.tld, or you can register at a service which
1876 gives private users a FQDN for free, e.g. 1672gives private users a FQDN for free, e.g.
1877 @uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}. 1673@uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}.
1878 (Sorry but this website is in German, if you know of an 1674(Sorry but this website is in German, if you know of an
1879 English one offering the same, drop me a note). 1675English one offering the same, drop me a note).
1880 1676
1881 1677Finally you can tell Gnus not to generate a Message-ID
1882 Finally you can tell Gnus not to generate a Message-ID 1678for News at all (and letting the server do the job) by saying
1883 for News at all (and letting the server do the job) by saying
1884
1885 1679
1886@example 1680@example
1887(setq message-required-news-headers 1681(setq message-required-news-headers
1888 (remove' Message-ID message-required-news-headers)) 1682 (remove' Message-ID message-required-news-headers))
1889@end example 1683@end example
1890
1891@noindent 1684@noindent
1892 you can also tell Gnus not to generate Message-IDs for mail by saying 1685
1893 1686you can also tell Gnus not to generate Message-IDs for mail by saying
1894 1687
1895@example 1688@example
1896(setq message-required-mail-headers 1689(setq message-required-mail-headers
1897 (remove' Message-ID message-required-mail-headers)) 1690 (remove' Message-ID message-required-mail-headers))
1898@end example 1691@end example
1899
1900@noindent 1692@noindent
1901 , however some mail servers don't generate proper
1902 Message-IDs, too, so test if your Mail Server behaves
1903 correctly by sending yourself a Mail and looking at the Message-ID.
1904
1905 1693
1906@ifnottex 1694, however some mail servers don't generate proper
1907@node FAQ 6 - Old messages, FAQ 7 - Gnus in a dial-up environment, FAQ 5 - Composing messages, Frequently Asked Questions 1695Message-IDs, too, so test if your Mail Server behaves
1908@end ifnottex 1696correctly by sending yourself a Mail and looking at the Message-ID.
1697
1698@node FAQ 6 - Old messages
1909@subsection Old messages 1699@subsection Old messages
1910 1700
1911@menu 1701@menu
1912* [6.1]:: How to import my old mail into Gnus? 1702* [6.1]:: How to import my old mail into Gnus?
1913* [6.2]:: How to archive interesting messages? 1703* [6.2]:: How to archive interesting messages?
1914* [6.3]:: How to search for a specific message? 1704* [6.3]:: How to search for a specific message?
1915* [6.4]:: How to get rid of old unwanted mail? 1705* [6.4]:: How to get rid of old unwanted mail?
1916* [6.5]:: I want that all read messages are expired (at least in some 1706* [6.5]:: I want that all read messages are expired (at least in some
1917 groups). How to do it? 1707 groups). How to do it?
1918* [6.6]:: I don't want expiration to delete my mails but to move them 1708* [6.6]:: I don't want expiration to delete my mails but to move them
1919 to another group. 1709 to another group.
1920@end menu 1710@end menu
1921 1711
1922@ifnottex 1712@node [6.1]
1923@node [6.1], [6.2], FAQ 6 - Old messages, FAQ 6 - Old messages 1713@subsubheading Question 6.1
1924@end ifnottex 1714
1925@subsubheading Question 6.1: 1715How to import my old mail into Gnus?
1926 1716
1927 How to import my old mail into Gnus? 1717@subsubheading Answer
1928 1718
1929 1719The easiest way is to tell your old mail program to
1930Answer: 1720export the messages in mbox format. Most Unix mailers
1931 1721are able to do this, if you come from the MS Windows
1932 The easiest way is to tell your old mail program to 1722world, you may find tools at
1933 export the messages in mbox format. Most Unix mailers 1723@uref{http://mbx2mbox.sourceforge.net/}.
1934 are able to do this, if you come from the MS Windows 1724
1935 world, you may find tools at 1725Now you've got to import this mbox file into Gnus. To do
1936 @uref{http://mbx2mbox.sourceforge.net/}. 1726this, create a nndoc group based on the mbox file by
1937 1727saying @samp{G f /path/file.mbox RET} in
1938 1728Group buffer. You now have read-only access to your
1939 Now you've got to import this mbox file into Gnus. To do 1729mail. If you want to import the messages to your normal
1940 this, create a nndoc group based on the mbox file by 1730Gnus mail groups hierarchy, enter the nndoc group you've
1941 saying @samp{G f /path/file.mbox RET} in 1731just created by saying @samp{C-u RET}
1942 Group buffer. You now have read-only access to your 1732(thus making sure all messages are retrieved), mark all
1943 mail. If you want to import the messages to your normal 1733messages by saying @samp{M P b} and
1944 Gnus mail groups hierarchy, enter the nndoc group you've 1734either copy them to the desired group by saying
1945 just created by saying @samp{C-u RET} 1735@samp{B c name.of.group RET} or send them
1946 (thus making sure all messages are retrieved), mark all 1736through nnmail-split-methods (respool them) by saying
1947 messages by saying @samp{M P b} and 1737@samp{B r}.
1948 either copy them to the desired group by saying 1738
1949 @samp{B c name.of.group RET} or send them 1739@node [6.2]
1950 through nnmail-split-methods (respool them) by saying 1740@subsubheading Question 6.2
1951 @samp{B r}. 1741
1952 1742How to archive interesting messages?
1953@ifnottex 1743
1954@node [6.2], [6.3], [6.1], FAQ 6 - Old messages 1744@subsubheading Answer
1955@end ifnottex 1745
1956@subsubheading Question 6.2: 1746If you stumble across an interesting message, say in
1957 1747gnu.emacs.gnus and want to archive it there are several
1958 How to archive interesting messages? 1748solutions. The first and easiest is to save it to a file
1959 1749by saying @samp{O f}. However, wouldn't
1960 1750it be much more convenient to have more direct access to
1961Answer: 1751the archived message from Gnus? If you say yes, put this
1962 1752snippet by Frank Haun <pille3003@@fhaun.de> in
1963 If you stumble across an interesting message, say in 1753~/.gnus.el:
1964 gnu.emacs.gnus and want to archive it there are several
1965 solutions. The first and easiest is to save it to a file
1966 by saying @samp{O f}. However, wouldn't
1967 it be much more convenient to have more direct access to
1968 the archived message from Gnus? If you say yes, put this
1969 snippet by Frank Haun <pille3003@@fhaun.de> in
1970 ~/.gnus:
1971
1972 1754
1973@example 1755@example
1974(defun my-archive-article (&optional n) 1756(defun my-archive-article (&optional n)
@@ -1987,624 +1769,531 @@ more then one article."
1987 (replace-regexp-in-string "^.*:" "" gnus-newsgroup-name))))) 1769 (replace-regexp-in-string "^.*:" "" gnus-newsgroup-name)))))
1988 (gnus-summary-copy-article n archive-name))) 1770 (gnus-summary-copy-article n archive-name)))
1989@end example 1771@end example
1990
1991@noindent 1772@noindent
1992 You can now say @samp{M-x
1993 my-archive-article} in summary buffer to
1994 archive the article under the cursor in a nnml
1995 group. (Change nnml to your preferred back end)
1996
1997 1773
1998 Of course you can also make sure the cache is enabled by saying 1774You can now say @samp{M-x
1999 1775my-archive-article} in summary buffer to
1776archive the article under the cursor in a nnml
1777group. (Change nnml to your preferred back end)
1778
1779Of course you can also make sure the cache is enabled by saying
2000 1780
2001@example 1781@example
2002(setq gnus-use-cache t) 1782(setq gnus-use-cache t)
2003@end example 1783@end example
2004
2005@noindent 1784@noindent
2006 then you only have to set either the tick or the dormant
2007 mark for articles you want to keep, setting the read
2008 mark will remove them from cache.
2009
2010@ifnottex
2011@node [6.3], [6.4], [6.2], FAQ 6 - Old messages
2012@end ifnottex
2013@subsubheading Question 6.3:
2014
2015 How to search for a specific message?
2016
2017
2018Answer:
2019
2020 There are several ways for this, too. For a posting from
2021 a Usenet group the easiest solution is probably to ask
2022 @uref{http://groups.google.com,groups.google.com},
2023 if you found the posting there, tell Google to display
2024 the raw message, look for the message-id, and say
2025 @samp{M-^ the@@message.id RET} in a
2026 summary buffer.
2027 Since Gnus 5.10 there's also a Gnus interface for
2028 groups.google.com which you can call with
2029 @samp{G W}) in group buffer.
2030
2031
2032 Another idea which works for both mail and news groups
2033 is to enter the group where the message you are
2034 searching is and use the standard Emacs search
2035 @samp{C-s}, it's smart enough to look at
2036 articles in collapsed threads, too. If you want to
2037 search bodies, too try @samp{M-s}
2038 instead. Further on there are the
2039 gnus-summary-limit-to-foo functions, which can help you,
2040 too.
2041
2042 1785
2043 Of course you can also use grep to search through your 1786then you only have to set either the tick or the dormant
2044 local mail, but this is both slow for big archives and 1787mark for articles you want to keep, setting the read
2045 inconvenient since you are not displaying the found mail 1788mark will remove them from cache.
2046 in Gnus. Here comes nnir into action. Nnir is a front end 1789
2047 to search engines like swish-e or swish++ and 1790@node [6.3]
2048 others. You index your mail with one of those search 1791@subsubheading Question 6.3
2049 engines and with the help of nnir you can search trough 1792
2050 the indexed mail and generate a temporary group with all 1793How to search for a specific message?
2051 messages which met your search criteria. If this sound 1794
2052 cool to you get nnir.el from the contrib directory of the Gnus 1795@subsubheading Answer
2053 distribution or 1796
2054 @uref{http://quimby.gnus.org/cgi-bin/cvsweb.cgi/~checkout~/gnus/contrib/nnir.el?rev=HEAD&content-type=text/plain} 1797There are several ways for this, too. For a posting from
2055 Instructions on how to use it are at the top of the file. 1798a Usenet group the easiest solution is probably to ask
2056 1799@uref{http://groups.google.com, groups.google.com},
2057@ifnottex 1800if you found the posting there, tell Google to display
2058@node [6.4], [6.5], [6.3], FAQ 6 - Old messages 1801the raw message, look for the message-id, and say
2059@end ifnottex 1802@samp{M-^ the@@message.id RET} in a
2060@subsubheading Question 6.4: 1803summary buffer.
2061 1804Since Gnus 5.10 there's also a Gnus interface for
2062 How to get rid of old unwanted mail? 1805groups.google.com which you can call with
2063 1806@samp{G W}) in group buffer.
2064 1807
2065Answer: 1808Another idea which works for both mail and news groups
2066 1809is to enter the group where the message you are
2067 You can of course just mark the mail you don't need 1810searching is and use the standard Emacs search
2068 anymore by saying @samp{#} with point 1811@samp{C-s}, it's smart enough to look at
2069 over the mail and then say @samp{B DEL} 1812articles in collapsed threads, too. If you want to
2070 to get rid of them forever. You could also instead of 1813search bodies, too try @samp{M-s}
2071 actually deleting them, send them to a junk-group by 1814instead. Further on there are the
2072 saying @samp{B m nnml:trash-bin} which 1815gnus-summary-limit-to-foo functions, which can help you,
2073 you clear from time to time, but both are not the intended 1816too.
2074 way in Gnus. 1817
2075 1818Of course you can also use grep to search through your
2076 1819local mail, but this is both slow for big archives and
2077 In Gnus, we let mail expire like news expires on a news 1820inconvenient since you are not displaying the found mail
2078 server. That means you tell Gnus the message is 1821in Gnus. Here comes nnir into action. Nnir is a front end
2079 expirable (you tell Gnus "I don't need this mail 1822to search engines like swish-e or swish++ and
2080 anymore") by saying @samp{E} with point 1823others. You index your mail with one of those search
2081 over the mail in summary buffer. Now when you leave the 1824engines and with the help of nnir you can search trough
2082 group, Gnus looks at all messages which you marked as 1825the indexed mail and generate a temporary group with all
2083 expirable before and if they are old enough (default is 1826messages which met your search criteria. If this sound
2084 older than a week) they are deleted. 1827cool to you get nnir.el from
2085 1828@uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/}
2086@ifnottex 1829or @uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}.
2087@node [6.5], [6.6], [6.4], FAQ 6 - Old messages 1830Instructions on how to use it are at the top of the file.
2088@end ifnottex 1831
2089@subsubheading Question 6.5: 1832@node [6.4]
2090 1833@subsubheading Question 6.4
2091 I want that all read messages are expired (at least in 1834
2092 some groups). How to do it? 1835How to get rid of old unwanted mail?
2093 1836
2094 1837@subsubheading Answer
2095Answer: 1838
2096 1839You can of course just mark the mail you don't need
2097 If you want all read messages to be expired (e.g. in 1840anymore by saying @samp{#} with point
2098 mailing lists where there's an online archive), you've 1841over the mail and then say @samp{B DEL}
2099 got two choices: auto-expire and 1842to get rid of them forever. You could also instead of
2100 total-expire. Auto-expire means, that every article 1843actually deleting them, send them to a junk-group by
2101 which has no marks set and is selected for reading is 1844saying @samp{B m nnml:trash-bin} which
2102 marked as expirable, Gnus hits @samp{E} 1845you clear from time to time, but both are not the intended
2103 for you every time you read a message. Total-expire 1846way in Gnus.
2104 follows a slightly different approach, here all article 1847
2105 where the read mark is set are expirable. 1848In Gnus, we let mail expire like news expires on a news
2106 1849server. That means you tell Gnus the message is
2107 1850expirable (you tell Gnus "I don't need this mail
2108 To activate auto-expire, include auto-expire in the 1851anymore") by saying @samp{E} with point
2109 Group parameters for the group. (Hit @samp{G 1852over the mail in summary buffer. Now when you leave the
2110 c} in summary buffer with point over the 1853group, Gnus looks at all messages which you marked as
2111 group to change group parameters). For total-expire add 1854expirable before and if they are old enough (default is
2112 total-expire to the group-parameters. 1855older than a week) they are deleted.
2113 1856
2114 1857@node [6.5]
2115 Which method you choose is merely a matter of taste: 1858@subsubheading Question 6.5
2116 Auto-expire is faster, but it doesn't play together with 1859
2117 Adaptive Scoring, so if you want to use this feature, 1860I want that all read messages are expired (at least in
2118 you should use total-expire. 1861some groups). How to do it?
2119 1862
2120 1863@subsubheading Answer
2121 If you want a message to be excluded from expiration in 1864
2122 a group where total or auto expire is active, set either 1865If you want all read messages to be expired (e.g. in
2123 tick (hit @samp{u}) or dormant mark (hit 1866mailing lists where there's an online archive), you've
2124 @samp{u}), when you use auto-expire, you 1867got two choices: auto-expire and
2125 can also set the read mark (hit 1868total-expire. Auto-expire means, that every article
2126 @samp{d}). 1869which has no marks set and is selected for reading is
2127 1870marked as expirable, Gnus hits @samp{E}
2128@ifnottex 1871for you every time you read a message. Total-expire
2129@node [6.6], , [6.5], FAQ 6 - Old messages 1872follows a slightly different approach, here all article
2130@end ifnottex 1873where the read mark is set are expirable.
2131@subsubheading Question 6.6: 1874
2132 1875To activate auto-expire, include auto-expire in the
2133 I don't want expiration to delete my mails but to move them 1876Group parameters for the group. (Hit @samp{G
2134 to another group. 1877c} in summary buffer with point over the
2135 1878group to change group parameters). For total-expire add
2136 1879total-expire to the group-parameters.
2137Answer: 1880
2138 1881Which method you choose is merely a matter of taste:
2139 Say something like this in ~/.gnus: 1882Auto-expire is faster, but it doesn't play together with
2140 1883Adaptive Scoring, so if you want to use this feature,
1884you should use total-expire.
1885
1886If you want a message to be excluded from expiration in
1887a group where total or auto expire is active, set either
1888tick (hit @samp{u}) or dormant mark (hit
1889@samp{u}), when you use auto-expire, you
1890can also set the read mark (hit
1891@samp{d}).
1892
1893@node [6.6]
1894@subsubheading Question 6.6
1895
1896I don't want expiration to delete my mails but to move them
1897to another group.
1898
1899@subsubheading Answer
1900
1901Say something like this in ~/.gnus.el:
2141 1902
2142@example 1903@example
2143(setq nnmail-expiry-target "nnml:expired") 1904(setq nnmail-expiry-target "nnml:expired")
2144@end example 1905@end example
2145
2146@noindent 1906@noindent
2147 (If you want to change the value of nnmail-expiry-target
2148 on a per group basis see the question "How can I disable
2149 threading in some (e.g. mail-) groups, or set other
2150 variables specific for some groups?")
2151
2152 1907
2153@ifnottex 1908(If you want to change the value of nnmail-expiry-target
2154@node FAQ 7 - Gnus in a dial-up environment, FAQ 8 - Getting help, FAQ 6 - Old messages, Frequently Asked Questions 1909on a per group basis see the question "How can I disable
2155@end ifnottex 1910threading in some (e.g. mail-) groups, or set other
1911variables specific for some groups?")
1912
1913@node FAQ 7 - Gnus in a dial-up environment
2156@subsection Gnus in a dial-up environment 1914@subsection Gnus in a dial-up environment
2157 1915
2158@menu 1916@menu
2159* [7.1]:: I don't have a permanent connection to the net, how can I 1917* [7.1]:: I don't have a permanent connection to the net, how can I
2160 minimize the time I've got to be connected? 1918 minimize the time I've got to be connected?
2161* [7.2]:: So what was this thing about the Agent? 1919* [7.2]:: So what was this thing about the Agent?
2162* [7.3]:: I want to store article bodies on disk, too. How to do it? 1920* [7.3]:: I want to store article bodies on disk, too. How to do it?
2163* [7.4]:: How to tell Gnus not to try to send mails / postings while 1921* [7.4]:: How to tell Gnus not to try to send mails / postings while
2164 I'm offline? 1922 I'm offline?
2165@end menu 1923@end menu
2166 1924
2167 1925@node [7.1]
2168@ifnottex 1926@subsubheading Question 7.1
2169@node [7.1], [7.2], FAQ 7 - Gnus in a dial-up environment, FAQ 7 - Gnus in a dial-up environment 1927
2170@end ifnottex 1928I don't have a permanent connection to the net, how can
2171@subsubheading Question 7.1: 1929I minimize the time I've got to be connected?
2172 1930
2173 I don't have a permanent connection to the net, how can 1931@subsubheading Answer
2174 I minimize the time I've got to be connected? 1932
2175 1933You've got basically two options: Either you use the
2176 1934Gnus Agent (see below) for this, or you can install
2177Answer: 1935programs which fetch your news and mail to your local
2178 1936disk and Gnus reads the stuff from your local
2179 You've got basically two options: Either you use the 1937machine.
2180 Gnus Agent (see below) for this, or you can install 1938
2181 programs which fetch your news and mail to your local 1939If you want to follow the second approach, you need a
2182 disk and Gnus reads the stuff from your local 1940program which fetches news and offers them to Gnus, a
2183 machine. 1941program which does the same for mail and a program which
2184 1942receives the mail you write from Gnus and sends them
2185 1943when you're online.
2186 If you want to follow the second approach, you need a 1944
2187 program which fetches news and offers them to Gnus, a 1945Let's talk about Unix systems first: For the news part,
2188 program which does the same for mail and a program which 1946the easiest solution is a small nntp server like
2189 receives the mail you write from Gnus and sends them 1947@uref{http://www.leafnode.org/, Leafnode} or
2190 when you're online. 1948@uref{http://infa.abo.fi/~patrik/sn/, sn},
2191 1949of course you can also install a full featured news
2192 1950server like
2193Let's talk about Unix systems first: For the news part, the easiest 1951@uref{http://www.isc.org/products/INN/, inn}.
2194solution is a small nntp server like 1952Then you want to fetch your Mail, popular choices
2195@uref{http://www.leafnode.org/,Leafnode} or 1953are @uref{http://www.catb.org/~esr/fetchmail/, fetchmail}
2196@uref{http://infa.abo.fi/~patrik/sn/,sn}, of course you can also 1954and @uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/, getmail}.
2197install a full featured news server like 1955You should tell those to write the mail to your disk and
2198@uref{http://www.isc.org/products/INN/,inn}. 1956Gnus to read it from there. Last but not least the mail
2199 1957sending part: This can be done with every MTA like
2200Then you want to fetch your Mail, popular choices are 1958@uref{http://www.sendmail.org/, sendmail},
2201@itemize @bullet 1959@uref{http://www.qmail.org/, postfix},
2202@item 1960@uref{http://www.exim.org/, exim} or
2203@uref{http://www.catb.org/~esr/fetchmail/,fetchmail} and 1961@uref{http://www.qmail.org/, qmail}.
2204@item 1962
2205@uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/,getmail}. 1963On windows boxes I'd vote for
2206@end itemize 1964@uref{http://www.tglsoft.de/, Hamster},
2207You should tell those to write the mail to your disk and Gnus to read 1965it's a small freeware, open-source program which fetches
2208it from there. Last but not least the mail sending part: This can be 1966your mail and news from remote servers and offers them
2209done with every MTA like @uref{http://www.sendmail.org/,sendmail}, 1967to Gnus (or any other mail and/or news reader) via nntp
2210@uref{http://www.qmail.org/,postfix}, @uref{http://www.exim.org/,exim} 1968respectively POP3 or IMAP. It also includes a smtp
2211or @uref{http://www.qmail.org/,qmail}. 1969server for receiving mails from Gnus.
2212 1970
2213 1971@node [7.2]
2214 On windows boxes I'd vote for 1972@subsubheading Question 7.2
2215 @uref{http://www.tglsoft.de/,Hamster}, 1973
2216 it's a small freeware, open-source program which fetches 1974So what was this thing about the Agent?
2217 your mail and news from remote servers and offers them 1975
2218 to Gnus (or any other mail and/or news reader) via nntp 1976@subsubheading Answer
2219 respectively POP3 or IMAP. It also includes a smtp 1977
2220 server for receiving mails from Gnus. 1978The Gnus agent is part of Gnus, it allows you to fetch
2221 1979mail and news and store them on disk for reading them
2222@ifnottex 1980later when you're offline. It kind of mimics offline
2223@node [7.2], [7.3], [7.1], FAQ 7 - Gnus in a dial-up environment 1981newsreaders like e.g. Forte Agent. If you want to use
2224@end ifnottex 1982the Agent place the following in ~/.gnus.el if you are
2225@subsubheading Question 7.2: 1983still using 5.8.8 or 5.9 (it's the default since 5.10):
2226
2227 So what was this thing about the Agent?
2228
2229
2230Answer:
2231
2232 The Gnus agent is part of Gnus, it allows you to fetch
2233 mail and news and store them on disk for reading them
2234 later when you're offline. It kind of mimics offline
2235 newsreaders like e.g. Forte Agent. If you want to use
2236 the Agent place the following in ~/.gnus if you are
2237 still using 5.8.8 or 5.9 (it's the default since 5.10):
2238
2239 1984
2240@example 1985@example
2241(setq gnus-agent t) 1986(setq gnus-agent t)
2242@end example 1987@end example
2243 1988@noindent
2244 1989
2245 Now you've got to select the servers whose groups can be 1990Now you've got to select the servers whose groups can be
2246 stored locally. To do this, open the server buffer 1991stored locally. To do this, open the server buffer
2247 (that is press @samp{^} while in the 1992(that is press @samp{^} while in the
2248 group buffer). Now select a server by moving point to 1993group buffer). Now select a server by moving point to
2249 the line naming that server. Finally, agentize the 1994the line naming that server. Finally, agentize the
2250 server by typing @samp{J a}. If you 1995server by typing @samp{J a}. If you
2251 make a mistake, or change your mind, you can undo this 1996make a mistake, or change your mind, you can undo this
2252 action by typing @samp{J r}. When 1997action by typing @samp{J r}. When
2253 you're done, type 'q' to return to the group buffer. 1998you're done, type 'q' to return to the group buffer.
2254 Now the next time you enter a group on a agentized 1999Now the next time you enter a group on a agentized
2255 server, the headers will be stored on disk and read from 2000server, the headers will be stored on disk and read from
2256 there the next time you enter the group. 2001there the next time you enter the group.
2257 2002
2258@ifnottex 2003@node [7.3]
2259@node [7.3], [7.4], [7.2], FAQ 7 - Gnus in a dial-up environment 2004@subsubheading Question 7.3
2260@end ifnottex 2005
2261@subsubheading Question 7.3: 2006I want to store article bodies on disk, too. How to do it?
2007
2008@subsubheading Answer
2009
2010You can tell the agent to automatically fetch the bodies
2011of articles which fulfill certain predicates, this is
2012done in a special buffer which can be reached by
2013saying @samp{J c} in group
2014buffer. Please refer to the documentation for
2015information which predicates are possible and how
2016exactly to do it.
2017
2018Further on you can tell the agent manually which
2019articles to store on disk. There are two ways to do
2020this: Number one: In the summary buffer, process mark a
2021set of articles that shall be stored in the agent by
2022saying @samp{#} with point over the
2023article and then type @samp{J s}. The
2024other possibility is to set, again in the summary
2025buffer, downloadable (%) marks for the articles you
2026want by typing @samp{@@} with point over
2027the article and then typing @samp{J u}.
2028What's the difference? Well, process marks are erased as
2029soon as you exit the summary buffer while downloadable
2030marks are permanent. You can actually set downloadable
2031marks in several groups then use fetch session ('J s' in
2032the GROUP buffer) to fetch all of those articles. The
2033only downside is that fetch session also fetches all of
2034the headers for every selected group on an agentized
2035server. Depending on the volume of headers, the initial
2036fetch session could take hours.
2037
2038@node [7.4]
2039@subsubheading Question 7.4
2040
2041How to tell Gnus not to try to send mails / postings
2042while I'm offline?
2043
2044@subsubheading Answer
2045
2046All you've got to do is to tell Gnus when you are online
2047(plugged) and when you are offline (unplugged), the rest
2048works automatically. You can toggle plugged/unplugged
2049state by saying @samp{J j} in group
2050buffer. To start Gnus unplugged say @samp{M-x
2051gnus-unplugged} instead of
2052@samp{M-x gnus}. Note that for this to
2053work, the agent must be active.
2054
2055@node FAQ 8 - Getting help
2056@subsection Getting help
2262 2057
2263 I want to store article bodies on disk, too. How to do it? 2058@menu
2264 2059* [8.1]:: How to find information and help inside Emacs?
2060* [8.2]:: I can't find anything in the Gnus manual about X (e.g.
2061 attachments, PGP, MIME...), is it not documented?
2062* [8.3]:: Which websites should I know?
2063* [8.4]:: Which mailing lists and newsgroups are there?
2064* [8.5]:: Where to report bugs?
2065* [8.6]:: I need real-time help, where to find it?
2066@end menu
2265 2067
2266Answer: 2068@node [8.1]
2069@subsubheading Question 8.1
2267 2070
2268 You can tell the agent to automatically fetch the bodies 2071How to find information and help inside Emacs?
2269 of articles which fulfill certain predicates, this is
2270 done in a special buffer which can be reached by
2271 saying @samp{J c} in group
2272 buffer. Please refer to the documentation for
2273 information which predicates are possible and how
2274 exactly to do it.
2275
2276 2072
2277 Further on you can tell the agent manually which 2073@subsubheading Answer
2278 articles to store on disk. There are two ways to do
2279 this: Number one: In the summary buffer, process mark a
2280 set of articles that shall be stored in the agent by
2281 saying @samp{#} with point over the
2282 article and then type @samp{J s}. The
2283 other possibility is to set, again in the summary
2284 buffer, downloadable (%) marks for the articles you
2285 want by typing @samp{@@} with point over
2286 the article and then typing @samp{J u}.
2287 What's the difference? Well, process marks are erased as
2288 soon as you exit the summary buffer while downloadable
2289 marks are permanent. You can actually set downloadable
2290 marks in several groups then use fetch session ('J s' in
2291 the GROUP buffer) to fetch all of those articles. The
2292 only downside is that fetch session also fetches all of
2293 the headers for every selected group on an agentized
2294 server. Depending on the volume of headers, the initial
2295 fetch session could take hours.
2296
2297@ifnottex
2298@node [7.4], , [7.3], FAQ 7 - Gnus in a dial-up environment
2299@end ifnottex
2300@subsubheading Question 7.4:
2301 2074
2302 How to tell Gnus not to try to send mails / postings 2075The first stop should be the Gnus manual (Say
2303 while I'm offline? 2076@samp{C-h i d m Gnus RET} to start the
2304 2077Gnus manual, then walk through the menus or do a
2078full-text search with @samp{s}). Then
2079there are the general Emacs help commands starting with
2080C-h, type @samp{C-h ? ?} to get a list
2081of all available help commands and their meaning. Finally
2082@samp{M-x apropos-command} lets you
2083search through all available functions and @samp{M-x
2084apropos} searches the bound variables.
2305 2085
2306Answer: 2086@node [8.2]
2087@subsubheading Question 8.2
2307 2088
2308 All you've got to do is to tell Gnus when you are online 2089I can't find anything in the Gnus manual about X
2309 (plugged) and when you are offline (unplugged), the rest 2090(e.g. attachments, PGP, MIME...), is it not documented?
2310 works automatically. You can toggle plugged/unplugged
2311 state by saying @samp{J j} in group
2312 buffer. To start Gnus unplugged say @samp{M-x
2313 gnus-unplugged} instead of
2314 @samp{M-x gnus}. Note that for this to
2315 work, the agent must be active.
2316
2317 2091
2318@ifnottex 2092@subsubheading Answer
2319@node FAQ 8 - Getting help, FAQ 9 - Tuning Gnus, FAQ 7 - Gnus in a dial-up environment, Frequently Asked Questions
2320@end ifnottex
2321@subsection Getting help
2322 2093
2323@menu 2094There's not only the Gnus manual but also the manuals
2324* [8.1]:: How to find information and help inside Emacs? 2095for message, emacs-mime, sieve and pgg. Those packages
2325* [8.2]:: I can't find anything in the Gnus manual about X 2096are distributed with Gnus and used by Gnus but aren't
2326 (e.g. attachments, PGP, MIME...), is it not documented? 2097really part of core Gnus, so they are documented in
2327* [8.3]:: Which websites should I know? 2098different info files, you should have a look in those
2328* [8.4]:: Which mailing lists and newsgroups are there? 2099manuals, too.
2329* [8.5]:: Where to report bugs?
2330* [8.6]:: I need real-time help, where to find it?
2331@end menu
2332 2100
2333@ifnottex 2101@node [8.3]
2334@node [8.1], [8.2], FAQ 8 - Getting help, FAQ 8 - Getting help 2102@subsubheading Question 8.3
2335@end ifnottex
2336@subsubheading Question 8.1:
2337 2103
2338 How to find information and help inside Emacs? 2104Which websites should I know?
2339
2340 2105
2341Answer: 2106@subsubheading Answer
2342
2343 The first stop should be the Gnus manual (Say
2344 @samp{C-h i d m Gnus RET} to start the
2345 Gnus manual, then walk through the menus or do a
2346 full-text search with @samp{s}). Then
2347 there are the general Emacs help commands starting with
2348 C-h, type @samp{C-h ? ?} to get a list
2349 of all available help commands and their meaning. Finally
2350 @samp{M-x apropos-command} lets you
2351 search through all available functions and @samp{M-x
2352 apropos} searches the bound variables.
2353
2354@ifnottex
2355@node [8.2], [8.3], [8.1], FAQ 8 - Getting help
2356@end ifnottex
2357@subsubheading Question 8.2:
2358 2107
2359 I can't find anything in the Gnus manual about X 2108The two most important ones are the
2360 (e.g. attachments, PGP, MIME...), is it not documented? 2109@uref{http://www.gnus.org, official Gnus website}.
2361 2110and it's sister site
2111@uref{http://my.gnus.org, my.gnus.org (MGO)},
2112hosting an archive of lisp snippets, howtos, a (not
2113really finished) tutorial and this FAQ.
2362 2114
2363Answer: 2115Tell me about other sites which are interesting.
2364 2116
2365 There's not only the Gnus manual but also the manuals 2117@node [8.4]
2366 for message, emacs-mime, sieve and pgg. Those packages 2118@subsubheading Question 8.4
2367 are distributed with Gnus and used by Gnus but aren't
2368 really part of core Gnus, so they are documented in
2369 different info files, you should have a look in those
2370 manuals, too.
2371
2372@ifnottex
2373@node [8.3], [8.4], [8.2], FAQ 8 - Getting help
2374@end ifnottex
2375@subsubheading Question 8.3:
2376 2119
2377 Which websites should I know? 2120Which mailing lists and newsgroups are there?
2378
2379 2121
2380Answer: 2122@subsubheading Answer
2381 2123
2382 The two most important ones are the 2124There's the newsgroup gnu.emacs.gnus (pull it from
2383 @uref{http://www.gnus.org,official Gnus website}. 2125e.g. news.gnus.org) which deals with general questions and the
2384 and it's sister site 2126ding mailing list (ding@@gnus.org) dealing with development of
2385 @uref{http://my.gnus.org,my.gnus.org (MGO)}, 2127Gnus. You can read the ding list via NNTP, too under the name
2386 hosting an archive of lisp snippets, howtos, a (not 2128gmane.emacs.gnus.general from news.gmane.org.
2387 really finished) tutorial and this FAQ.
2388
2389 2129
2390 Tell me about other sites which are interesting. 2130If you want to stay in the big8,
2391 2131news.software.newssreaders is also read by some Gnus
2392@ifnottex 2132users (but chances for qualified help are much better in
2393@node [8.4], [8.5], [8.3], FAQ 8 - Getting help 2133the above groups) and if you speak German, there's
2394@end ifnottex 2134de.comm.software.gnus.
2395@subsubheading Question 8.4:
2396 2135
2397 Which mailing lists and newsgroups are there? 2136@node [8.5]
2398 2137@subsubheading Question 8.5
2399 2138
2400Answer: 2139Where to report bugs?
2401 2140
2402 There's the newsgroup gnu.emacs.gnus (pull it from 2141@subsubheading Answer
2403 e.g. news.gnus.org) which deals with general questions
2404 and the ding mailing list (ding@@gnus.org) dealing with
2405 development of Gnus. You can read the ding list via
2406 NNTP, too under the name gnus.ding from news.gnus.org.
2407
2408 2142
2409 If you want to stay in the big8, 2143Say @samp{M-x gnus-bug}, this will start
2410 news.software.newssreaders is also read by some Gnus 2144a message to the
2411 users (but chances for qualified help are much better in 2145@email{bugs@@gnus.org, gnus bug mailing list}
2412 the above groups) and if you speak German, there's 2146including information about your environment which make
2413 de.comm.software.gnus. 2147it easier to help you.
2414
2415@ifnottex
2416@node [8.5], [8.6], [8.4], FAQ 8 - Getting help
2417@end ifnottex
2418@subsubheading Question 8.5:
2419 2148
2420 Where to report bugs? 2149@node [8.6]
2421 2150@subsubheading Question 8.6
2422 2151
2423Answer: 2152I need real-time help, where to find it?
2424 2153
2425Say @samp{M-x gnus-bug}, this will start a message to the 2154@subsubheading Answer
2426@email{bugs@@gnus.org,gnus bug mailing list} including information
2427about your environment which make it easier to help you.
2428
2429@ifnottex
2430@node [8.6], , [8.5], FAQ 8 - Getting help
2431@end ifnottex
2432@subsubheading Question 8.6:
2433 2155
2434 I need real-time help, where to find it? 2156Point your IRC client to irc.my.gnus.org channel
2435 2157#mygnus. Don't be afraid if people there speak German,
2436 2158they are willing and capable of switching to
2437Answer: 2159English when people from outside Germany enter.
2438
2439 Point your IRC client to irc.my.gnus.org channel
2440 #mygnus. Don't be afraid if people there speak German,
2441 they are willing and capable of switching to
2442 English when people from outside Germany enter.
2443
2444 2160
2445@ifnottex 2161@node FAQ 9 - Tuning Gnus
2446@node FAQ 9 - Tuning Gnus, FAQ - Glossary, FAQ 8 - Getting help, Frequently Asked Questions
2447@end ifnottex
2448@subsection Tuning Gnus 2162@subsection Tuning Gnus
2449 2163
2450@menu 2164@menu
2451* [9.1]:: Starting Gnus is really slow, how to speed it up? 2165* [9.1]:: Starting Gnus is really slow, how to speed it up?
2452* [9.2]:: How to speed up the process of entering a group? 2166* [9.2]:: How to speed up the process of entering a group?
2453* [9.3]:: Sending mail becomes slower and slower, what's up? 2167* [9.3]:: Sending mail becomes slower and slower, what's up?
2454@end menu 2168@end menu
2455 2169
2456@ifnottex 2170@node [9.1]
2457@node [9.1], [9.2], FAQ 9 - Tuning Gnus, FAQ 9 - Tuning Gnus 2171@subsubheading Question 9.1
2458@end ifnottex
2459@subsubheading Question 9.1:
2460 2172
2461 Starting Gnus is really slow, how to speed it up? 2173Starting Gnus is really slow, how to speed it up?
2462
2463 2174
2464Answer: 2175@subsubheading Answer
2465 2176
2466 The reason for this could be the way Gnus reads it's 2177The reason for this could be the way Gnus reads it's
2467 active file, see the node "The Active File" in the Gnus 2178active file, see the node "The Active File" in the Gnus
2468 manual for things you might try to speed the process up. 2179manual for things you might try to speed the process up.
2469 An other idea would be to byte compile your ~/.gnus (say 2180An other idea would be to byte compile your ~/.gnus.el (say
2470 @samp{M-x byte-compile-file RET ~/.gnus 2181@samp{M-x byte-compile-file RET ~/.gnus.el
2471 RET} to do it). Finally, if you have require 2182RET} to do it). Finally, if you have require
2472 statements in your .gnus, you could replace them with 2183statements in your .gnus, you could replace them with
2473 eval-after-load, which loads the stuff not at startup 2184eval-after-load, which loads the stuff not at startup
2474 time, but when it's needed. Say you've got this in your 2185time, but when it's needed. Say you've got this in your
2475 ~/.gnus: 2186~/.gnus.el:
2476
2477 2187
2478@example 2188@example
2479(require 'message) 2189(require 'message)
2480(add-to-list 'message-syntax-checks '(sender . disabled)) 2190(add-to-list 'message-syntax-checks '(sender . disabled))
2481@end example 2191@end example
2482
2483@noindent 2192@noindent
2484 then as soon as you start Gnus, message.el is loaded. If 2193
2485 you replace it with 2194then as soon as you start Gnus, message.el is loaded. If
2486 2195you replace it with
2487 2196
2488@example 2197@example
2489(eval-after-load "message" 2198(eval-after-load "message"
2490 '(add-to-list 'message-syntax-checks '(sender . disabled))) 2199 '(add-to-list 'message-syntax-checks '(sender . disabled)))
2491@end example 2200@end example
2492
2493@noindent 2201@noindent
2494 it's loaded when it's needed.
2495
2496@ifnottex
2497@node [9.2], [9.3], [9.1], FAQ 9 - Tuning Gnus
2498@end ifnottex
2499@subsubheading Question 9.2:
2500 2202
2501 How to speed up the process of entering a group? 2203it's loaded when it's needed.
2502
2503 2204
2504Answer: 2205@node [9.2]
2206@subsubheading Question 9.2
2505 2207
2506 A speed killer is setting the variable 2208How to speed up the process of entering a group?
2507 gnus-fetch-old-headers to anything different from nil, 2209
2508 so don't do this if speed is an issue. To speed up 2210@subsubheading Answer
2509 building of summary say 2211
2510 2212A speed killer is setting the variable
2213gnus-fetch-old-headers to anything different from nil,
2214so don't do this if speed is an issue. To speed up
2215building of summary say
2511 2216
2512@example 2217@example
2513(gnus-compile) 2218(gnus-compile)
2514@end example 2219@end example
2515
2516@noindent 2220@noindent
2517 at the bottom of your ~/.gnus, this will make gnus 2221
2518 byte-compile things like 2222at the bottom of your ~/.gnus.el, this will make gnus
2519 gnus-summary-line-format. 2223byte-compile things like
2520 then you could increase the value of gc-cons-threshold 2224gnus-summary-line-format.
2521 by saying something like 2225then you could increase the value of gc-cons-threshold
2522 2226by saying something like
2523 2227
2524@example 2228@example
2525(setq gc-cons-threshold 3500000) 2229(setq gc-cons-threshold 3500000)
2526@end example 2230@end example
2527
2528@noindent 2231@noindent
2529 in ~/.emacs. If you don't care about width of CJK 2232
2530 characters or use Gnus 5.10 or younger together with a 2233in ~/.emacs. If you don't care about width of CJK
2531 recent GNU Emacs, you should say 2234characters or use Gnus 5.10 or younger together with a
2532 2235recent GNU Emacs, you should say
2533 2236
2534@example 2237@example
2535(setq gnus-use-correct-string-widths nil) 2238(setq gnus-use-correct-string-widths nil)
2536@end example 2239@end example
2537
2538
2539@noindent 2240@noindent
2540 in ~/.gnus (thanks to Jesper harder for the last
2541 two suggestions). Finally if you are still using 5.8.8
2542 or 5.9 and experience speed problems with summary
2543 buffer generation, you definitely should update to
2544 5.10 since there quite some work on improving it has
2545 been done.
2546 2241
2547@ifnottex 2242in ~/.gnus.el (thanks to Jesper harder for the last
2548@node [9.3], , [9.2], FAQ 9 - Tuning Gnus 2243two suggestions). Finally if you are still using 5.8.8
2549@end ifnottex 2244or 5.9 and experience speed problems with summary
2550@subsubheading Question 9.3: 2245buffer generation, you definitely should update to
22465.10 since there quite some work on improving it has
2247been done.
2551 2248
2552 Sending mail becomes slower and slower, what's up? 2249@node [9.3]
2553 2250@subsubheading Question 9.3
2554 2251
2555Answer: 2252Sending mail becomes slower and slower, what's up?
2556 2253
2557 The reason could be that you told Gnus to archive the 2254@subsubheading Answer
2558 messages you wrote by setting
2559 gnus-message-archive-group. Try to use a nnml group
2560 instead of an archive group, this should bring you back
2561 to normal speed.
2562
2563 2255
2564@ifnottex 2256The reason could be that you told Gnus to archive the
2565@node FAQ - Glossary, , FAQ 9 - Tuning Gnus, Frequently Asked Questions 2257messages you wrote by setting
2566@end ifnottex 2258gnus-message-archive-group. Try to use a nnml group
2259instead of an archive group, this should bring you back
2260to normal speed.
2261
2262@node FAQ - Glossary
2567@subsection Glossary 2263@subsection Glossary
2568 2264
2569@table @dfn 2265@table @dfn
2570 2266
2571@item ~/.gnus 2267@item ~/.gnus.el
2572 When the term ~/.gnus is used it just means your Gnus 2268When the term ~/.gnus.el is used it just means your Gnus
2573 configuration file. You might as well call it ~/.gnus.el or 2269configuration file. You might as well call it ~/.gnus or
2574 specify another name. 2270specify another name.
2575
2576 2271
2577@item Back End 2272@item Back End
2578 In Gnus terminology a back end is a virtual server, a layer 2273In Gnus terminology a back end is a virtual server, a layer
2579 between core Gnus and the real NNTP-, POP3-, IMAP- or 2274between core Gnus and the real NNTP-, POP3-, IMAP- or
2580 whatever-server which offers Gnus a standardized interface 2275whatever-server which offers Gnus a standardized interface
2581 to functions like "get message", "get Headers" etc. 2276to functions like "get message", "get Headers" etc.
2582
2583 2277
2584@item Emacs 2278@item Emacs
2585 When the term Emacs is used in this FAQ, it means either GNU 2279When the term Emacs is used in this FAQ, it means either GNU
2586 Emacs or XEmacs. 2280Emacs or XEmacs.
2587
2588 2281
2589@item Message 2282@item Message
2590 In this FAQ message means a either a mail or a posting to a 2283In this FAQ message means a either a mail or a posting to a
2591 Usenet Newsgroup or to some other fancy back end, no matter 2284Usenet Newsgroup or to some other fancy back end, no matter
2592 of which kind it is. 2285of which kind it is.
2593
2594 2286
2595@item MUA 2287@item MUA
2596 MUA is an acronym for Mail User Agent, it's the program you 2288MUA is an acronym for Mail User Agent, it's the program you
2597 use to read and write e-mails. 2289use to read and write e-mails.
2598
2599 2290
2600@item NUA 2291@item NUA
2601 NUA is an acronym for News User Agent, it's the program you 2292NUA is an acronym for News User Agent, it's the program you
2602 use to read and write Usenet news. 2293use to read and write Usenet news.
2603
2604@end table
2605 2294
2606@c @bye 2295@end table
2607 2296
2608@ignore 2297@ignore
2609 arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8 2298arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8
2610@end ignore 2299@end ignore
diff --git a/man/gnus.texi b/man/gnus.texi
index 3a98f64baa1..c670da11b22 100644
--- a/man/gnus.texi
+++ b/man/gnus.texi
@@ -8,7 +8,7 @@
8 8
9@copying 9@copying
10Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 10Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2001,
112002, 2003, 2004 112002, 2003, 2004, 2005
12Free Software Foundation, Inc. 12Free Software Foundation, Inc.
13 13
14@quotation 14@quotation
@@ -18594,7 +18594,7 @@ that most will look for it here, this variable tells the summary
18594buffer how to maneuver around undownloaded (only headers stored in the 18594buffer how to maneuver around undownloaded (only headers stored in the
18595agent) and unfetched (neither article nor headers stored) articles. 18595agent) and unfetched (neither article nor headers stored) articles.
18596 18596
18597The legal values are @code{nil} (maneuver to any article), 18597The valid values are @code{nil} (maneuver to any article),
18598@code{undownloaded} (maneuvering while unplugged ignores articles that 18598@code{undownloaded} (maneuvering while unplugged ignores articles that
18599have not been fetched), @code{always-undownloaded} (maneuvering always 18599have not been fetched), @code{always-undownloaded} (maneuvering always
18600ignores articles that have not been fetched), @code{unfetched} 18600ignores articles that have not been fetched), @code{unfetched}
diff --git a/man/help.texi b/man/help.texi
index 8f7eed4915c..29c06b499df 100644
--- a/man/help.texi
+++ b/man/help.texi
@@ -172,6 +172,9 @@ documented (@code{Info-goto-emacs-key-command-node}).
172@item C-h S @var{symbol} @key{RET} 172@item C-h S @var{symbol} @key{RET}
173Display the Info documentation on symbol @var{symbol} according to the 173Display the Info documentation on symbol @var{symbol} according to the
174programming language you are editing (@code{info-lookup-symbol}). 174programming language you are editing (@code{info-lookup-symbol}).
175@item C-h .
176Display a help message associated with special text areas, such as
177links in @samp{*Help*} buffers (@code{display-local-help}).
175@end table 178@end table
176 179
177@node Key Help 180@node Key Help
@@ -277,13 +280,14 @@ example, it would say that you can invoke @code{find-file} by typing
277normally checks only commands (interactive functions); if you specify a 280normally checks only commands (interactive functions); if you specify a
278prefix argument, it checks noninteractive functions as well. 281prefix argument, it checks noninteractive functions as well.
279 282
280 Because @kbd{C-h a} looks only for commands whose names contain the 283 Because @kbd{C-h a} looks only for commands matching the string you
281string you specify, you must use ingenuity in choosing the string. If 284specify, you may not find what you want on the first try. In that
282you are looking for commands for killing backwards and @kbd{C-h a 285case, don't just give up. You can give Apropos a list of words to
283kill-backwards @key{RET}} doesn't reveal any, don't give up. Try just 286search for. When more than one word is specified, at least two of
284@kbd{kill}, or just @kbd{backwards}, or just @kbd{back}. Be 287those words must be present for an item to match. If you are looking
285persistent. Also note that you can use a regular expression as the 288for commands to kill a chunk of text before point, try @kbd{C-h a kill
286argument, for more flexibility (@pxref{Regexps}). 289back behind before @key{RET}}. For even greater flexibility, you can
290also supply a regular expression to Apropos (@pxref{Regexps}).
287 291
288 Here is a set of arguments to give to @kbd{C-h a} that covers many 292 Here is a set of arguments to give to @kbd{C-h a} that covers many
289classes of Emacs commands, since there are strong conventions for naming 293classes of Emacs commands, since there are strong conventions for naming
@@ -327,6 +331,13 @@ check them.
327 If the variable @code{apropos-do-all} is non-@code{nil}, the commands 331 If the variable @code{apropos-do-all} is non-@code{nil}, the commands
328above all behave as if they had been given a prefix argument. 332above all behave as if they had been given a prefix argument.
329 333
334@vindex apropos-sort-by-scores
335@cindex apropos search results, order by score
336 By default, Apropos lists the search results in alphabetical order.
337If the variable @code{apropos-sort-by-scores} is non-@code{nil},
338Apropos tries to guess the relevance of each result, and displays the
339most relevant ones first.
340
330 If you want more information about a function definition, variable or 341 If you want more information about a function definition, variable or
331symbol property listed in the Apropos buffer, you can click on it with 342symbol property listed in the Apropos buffer, you can click on it with
332@kbd{Mouse-1} or @kbd{Mouse-2}, or move there and type @key{RET}. 343@kbd{Mouse-1} or @kbd{Mouse-2}, or move there and type @key{RET}.
@@ -590,10 +601,20 @@ Emacs (@code{describe-no-warranty}).
590@cindex balloon help 601@cindex balloon help
591 When a region of text is ``active,'' so that you can select it with 602 When a region of text is ``active,'' so that you can select it with
592the mouse or a key like @kbd{RET}, it often has associated help text. 603the mouse or a key like @kbd{RET}, it often has associated help text.
593Areas of the mode line are examples. This help will normally be 604Areas of the mode line are examples. On most window systems, the help
594shown in the echo area when you move point into the active text. In 605text is displayed as a ``tooltip'' (sometimes known as ``balloon
595a window system you can display the help text as a ``tooltip'' 606help''). @xref{Tooltips}. Otherwise, it is shown in the echo area
596(sometimes known as ``balloon help''). @xref{Tooltips}. 607when you move point into the active text.
608
609@kindex C-h .
610@findex display-local-help
611@vindex help-at-pt-display-when-idle
612 You can also access text region help info using the keyboard. The
613command @kbd{C-h .} (@code{display-local-help}) displays any help text
614associated with the text at point, using the echo area. If you want
615help text to be displayed automatically whenever it is available at
616point, set the variable @code{help-at-pt-display-when-idle} to
617@code{t}.
597 618
598@ignore 619@ignore
599 arch-tag: 6f33ab62-bc75-4367-8057-fd67cc15c3a1 620 arch-tag: 6f33ab62-bc75-4367-8057-fd67cc15c3a1
diff --git a/man/idlwave.texi b/man/idlwave.texi
index 42b3bea4034..8226c0ac63f 100644
--- a/man/idlwave.texi
+++ b/man/idlwave.texi
@@ -14,12 +14,11 @@
14@set IDLVERSION 6.1 14@set IDLVERSION 6.1
15@set NSYSROUTINES 1850 15@set NSYSROUTINES 1850
16@set NSYSKEYWORDS 7685 16@set NSYSKEYWORDS 7685
17@set DATE November, 2004 17@set DATE March, 2005
18@set AUTHOR J.D. Smith & Carsten Dominik 18@set AUTHOR J.D. Smith & Carsten Dominik
19@set AUTHOR-EMAIL jdsmith@@as.arizona.edu 19@set AUTHOR-EMAIL jdsmith@@as.arizona.edu
20@set MAINTAINER J.D. Smith 20@set MAINTAINER J.D. Smith
21@set MAINTAINER-EMAIL jdsmith@@as.arizona.edu 21@set MAINTAINER-EMAIL jdsmith@@as.arizona.edu
22@set IDLWAVE-HOMEPAGE http://idlwave.org/
23@c %**end of header 22@c %**end of header
24@finalout 23@finalout
25 24
@@ -30,7 +29,7 @@ Emacs, and interacting with an IDL shell run as a subprocess.
30This is edition @value{EDITION} of the IDLWAVE User Manual for IDLWAVE 29This is edition @value{EDITION} of the IDLWAVE User Manual for IDLWAVE
31@value{VERSION} 30@value{VERSION}
32 31
33Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004 Free Software 32Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
34Foundation, Inc. 33Foundation, Inc.
35 34
36Permission is granted to copy, distribute and/or modify this document 35Permission is granted to copy, distribute and/or modify this document
@@ -61,7 +60,7 @@ license to the document, as described in section 6 of the license.
61This is edition @value{EDITION} of the @cite{IDLWAVE User Manual} for 60This is edition @value{EDITION} of the @cite{IDLWAVE User Manual} for
62IDLWAVE version @value{VERSION}, @value{DATE}. 61IDLWAVE version @value{VERSION}, @value{DATE}.
63@sp 2 62@sp 2
64Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004 Free Software 63Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software
65Foundation, Inc. 64Foundation, Inc.
66@sp 2 65@sp 2
67@cindex Copyright, of IDLWAVE 66@cindex Copyright, of IDLWAVE
@@ -101,7 +100,6 @@ Interactive Data Language (IDL), and running IDL as an inferior shell.
101* Getting Started:: Tutorial 100* Getting Started:: Tutorial
102* The IDLWAVE Major Mode:: The mode for editing IDL programs 101* The IDLWAVE Major Mode:: The mode for editing IDL programs
103* The IDLWAVE Shell:: The mode for running IDL as an inferior program 102* The IDLWAVE Shell:: The mode for running IDL as an inferior program
104* Installation:: How to Install or Upgrade
105* Acknowledgements:: Who did what 103* Acknowledgements:: Who did what
106* Sources of Routine Info:: How does IDLWAVE know about routine XYZ 104* Sources of Routine Info:: How does IDLWAVE know about routine XYZ
107* HTML Help Browser Tips:: 105* HTML Help Browser Tips::
@@ -180,11 +178,6 @@ Debugging IDL Programs
180* Walking the Calling Stack:: 178* Walking the Calling Stack::
181* Electric Debug Mode:: 179* Electric Debug Mode::
182 180
183Installation
184
185* Installing IDLWAVE:: How to install the distribution
186* Installing Online Help:: Where to get the additional files needed
187
188Sources of Routine Info 181Sources of Routine Info
189 182
190* Routine Definitions:: Where IDL Routines are defined. 183* Routine Definitions:: Where IDL Routines are defined.
@@ -204,8 +197,6 @@ Catalogs
204@node Introduction, IDLWAVE in a Nutshell, Top, Top 197@node Introduction, IDLWAVE in a Nutshell, Top, Top
205@chapter Introduction 198@chapter Introduction
206@cindex Introduction 199@cindex Introduction
207@cindex CORBA (Common Object Request Broker Architecture)
208@cindex Interface Definition Language
209@cindex Interactive Data Language 200@cindex Interactive Data Language
210@cindex cc-mode.el 201@cindex cc-mode.el
211@cindex @file{idl.el} 202@cindex @file{idl.el}
@@ -213,14 +204,13 @@ Catalogs
213@cindex Feature overview 204@cindex Feature overview
214 205
215IDLWAVE is a package which supports editing source files written in 206IDLWAVE is a package which supports editing source files written in
216the Interactive Data Language (IDL@footnote{IDL is a registered 207the Interactive Data Language, and running
217trademark of Research Systems, Inc., a Kodak Company}), and running
218IDL as an inferior shell@footnote{Note that this package has nothing 208IDL as an inferior shell@footnote{Note that this package has nothing
219to do with the Interface Definition Language, part of the Common 209to do with the Interface Definition Language, part of the Common
220Object Request Broker Architecture (CORBA)}@footnote{IDLWAVE can also 210Object Request Broker Architecture (CORBA)}@footnote{IDLWAVE can also
221be used for editing source files for the related WAVE/CL language, but 211be used for editing source files for the related WAVE/CL language, but
222with only limited support.}. It is a feature-rich replacement for the 212with only limited support.}. It is a feature-rich replacement for the
223IDLDE development environment bundled with IDL, and uses the full 213IDLDE development environment included with IDL, and uses the full
224power of Emacs to make editing and running IDL programs easier, 214power of Emacs to make editing and running IDL programs easier,
225quicker, and more structured. 215quicker, and more structured.
226 216
@@ -421,11 +411,10 @@ be discovered by reading the entire manual, or hovering over the
421shoulder of your nearest IDLWAVE guru for a few days. 411shoulder of your nearest IDLWAVE guru for a few days.
422 412
423It is assumed that you have access to Emacs or XEmacs with the full 413It is assumed that you have access to Emacs or XEmacs with the full
424IDLWAVE package including online help (@pxref{Installation}). We also 414IDLWAVE package including online help. We also assume that you are
425assume that you are familiar with Emacs and can read the nomenclature of 415familiar with Emacs and can read the nomenclature of key presses in
426key presses in Emacs (in particular, @kbd{C} stands for @key{CONTROL} 416Emacs (in particular, @kbd{C} stands for @key{CONTROL} and @kbd{M} for
427and @kbd{M} for @key{META} (often the @key{ALT} key carries this 417@key{META} (often the @key{ALT} key carries this functionality)).
428functionality)).
429 418
430Open a new source file by typing: 419Open a new source file by typing:
431 420
@@ -612,9 +601,8 @@ restart Emacs.
612 601
613You likely have your own indentation preferences for IDL code. For 602You likely have your own indentation preferences for IDL code. For
614example, some like to indent the main block of an IDL program from the 603example, some like to indent the main block of an IDL program from the
615margin, different from the conventions used by RSI, and use only 3 604margin and use only 3 spaces as indentation between @code{BEGIN} and
616spaces as indentation between @code{BEGIN} and @code{END}. Try the 605@code{END}. Try the following lines in @file{.emacs}:
617following lines in @file{.emacs}:
618 606
619@lisp 607@lisp
620(setq idlwave-main-block-indent 2) 608(setq idlwave-main-block-indent 2)
@@ -1279,19 +1267,18 @@ Maximum number of source files displayed in the Routine Info window.
1279@cindex Online Help, Installation 1267@cindex Online Help, Installation
1280@cindex Speed, of online help 1268@cindex Speed, of online help
1281 1269
1282For IDL system routines, RSI provides extensive documentation. 1270IDLWAVE can display help from an HTML version of the IDL documentation
1283IDLWAVE can access an HTML version of this documentation very quickly 1271if it is available. This is @emph{much} faster than using the IDL
1284and accurately. This is @emph{much} faster than using the IDL online 1272online help application, because IDLWAVE usually gets you to the right
1285help application, because IDLWAVE usually gets you to the right place 1273place in the documentation directly --- e.g. a specific keyword of a
1286in the documentation directly --- e.g. a specific keyword of a routine 1274routine --- without any additional browsing and scrolling. There are
1287--- without any additional browsing and scrolling. For this online 1275a variety of options for displaying the HTML help: see below. Help
1288help to work, an HTML version of the IDL documentation, which is not 1276for routines without HTML documentation is also available, using the
1289part of the standalone IDLWAVE distribution, is required. The 1277routine documentation header and/or source.
1290necessary files can be downloaded from @uref{@value{IDLWAVE-HOMEPAGE}, 1278
1291the maintainers webpage}. There are a variety of options for 1279To make this feature work, you should set
1292displaying the HTML help: see below. Help for routines without HTML 1280@code{idlwave-html-help-location} to the directory name of the
1293documentation is also available, using the routine documentation 1281directory where the IDL help files are installed.
1294header and/or source.
1295 1282
1296@kindex M-? 1283@kindex M-?
1297In any IDL program (or, as with most IDLWAVE commands, in the IDL 1284In any IDL program (or, as with most IDLWAVE commands, in the IDL
@@ -1376,19 +1363,19 @@ sent to. This function is used to set the variable
1376Customize this variable to see what choices of browsers your system 1363Customize this variable to see what choices of browsers your system
1377offers. 1364offers.
1378 1365
1379Certain browsers like @code{w3} (bundled with many versions of Emacs) 1366Certain browsers like @code{w3} and @code{w3m}
1380and @code{w3m} (@uref{http://emacs-w3m.namazu.org/}, the author's help 1367(@uref{http://emacs-w3m.namazu.org/}, the author's help browser of
1381browser of choice) are run within Emacs, and use Emacs buffers to 1368choice) are run within Emacs, and use Emacs buffers to display the
1382display the HTML help. This can be convenient, especially on small 1369HTML help. This can be convenient, especially on small displays, and
1383displays, and images can even be displayed in-line on new Emacs 1370images can even be displayed in-line on new Emacs versions. However,
1384versions. However, better formatting results are often achieved with 1371better formatting results are often achieved with external browsers,
1385external browsers, like Mozilla. IDLWAVE assumes any browser function 1372like Mozilla. IDLWAVE assumes any browser function containing "w3" is
1386containing "w3" is displayed in a local buffer. If you are using 1373displayed in a local buffer. If you are using another Emacs-local
1387another Emacs-local browser for which this is not true, set the 1374browser for which this is not true, set the variable
1388variable @code{idlwave-help-browser-is-local}. 1375@code{idlwave-help-browser-is-local}.
1389 1376
1390@emph{N.B. For Windows users}: IDLWAVE can bring up RSI help directly 1377@emph{N.B. For Windows users}: IDLWAVE can bring up help directly
1391in the Microsoft HTMLHelp documentation supplied with IDL: no 1378from the Microsoft HTMLHelp documentation supplied with IDL: no
1392additional help files are needed. Be sure to set 1379additional help files are needed. Be sure to set
1393@code{idlwave-system-directory} and the help file will be found 1380@code{idlwave-system-directory} and the help file will be found
1394automatically (or, alternatively, specify its location directly with 1381automatically (or, alternatively, specify its location directly with
@@ -2217,7 +2204,7 @@ case of routines, keywords, classes, and methods as they are completed, see
2217 2204
2218@defopt idlwave-abbrev-change-case (@code{nil}) 2205@defopt idlwave-abbrev-change-case (@code{nil})
2219Non-@code{nil} means all abbrevs will be forced to either upper or lower 2206Non-@code{nil} means all abbrevs will be forced to either upper or lower
2220case. Legal values are @code{nil}, @code{t}, and @code{down}. 2207case. Valid values are @code{nil}, @code{t}, and @code{down}.
2221@end defopt 2208@end defopt
2222 2209
2223@defopt idlwave-reserved-word-upcase (@code{nil}) 2210@defopt idlwave-reserved-word-upcase (@code{nil})
@@ -2343,7 +2330,7 @@ Normal hook. Executed when @file{idlwave.el} is loaded.
2343 2330
2344 2331
2345 2332
2346@node The IDLWAVE Shell, Installation, The IDLWAVE Major Mode, Top 2333@node The IDLWAVE Shell, Acknowledgements, The IDLWAVE Major Mode, Top
2347@chapter The IDLWAVE Shell 2334@chapter The IDLWAVE Shell
2348@cindex IDLWAVE shell 2335@cindex IDLWAVE shell
2349@cindex Major mode, @code{idlwave-shell-mode} 2336@cindex Major mode, @code{idlwave-shell-mode}
@@ -2842,7 +2829,7 @@ provides faster access (@pxref{Electric Debug Mode}).
2842 2829
2843@defopt idlwave-shell-mark-breakpoints (@code{t}) 2830@defopt idlwave-shell-mark-breakpoints (@code{t})
2844Non-@code{nil} means mark breakpoints in the source file buffers. The 2831Non-@code{nil} means mark breakpoints in the source file buffers. The
2845value indicates the preferred method. Legal values are @code{nil}, 2832value indicates the preferred method. Valid values are @code{nil},
2846@code{t}, @code{face}, and @code{glyph}. 2833@code{t}, @code{face}, and @code{glyph}.
2847@end defopt 2834@end defopt
2848 2835
@@ -2879,7 +2866,7 @@ been set (or you give two prefix arguments), the last command on the
2879 2866
2880@defopt idlwave-shell-mark-stop-line (@code{t}) 2867@defopt idlwave-shell-mark-stop-line (@code{t})
2881Non-@code{nil} means mark the source code line where IDL is currently 2868Non-@code{nil} means mark the source code line where IDL is currently
2882stopped. The value specifies the preferred method. Legal values are 2869stopped. The value specifies the preferred method. Valid values are
2883@code{nil}, @code{t}, @code{arrow}, and @code{face}. 2870@code{nil}, @code{t}, @code{arrow}, and @code{face}.
2884@end defopt 2871@end defopt
2885 2872
@@ -3209,59 +3196,7 @@ examine command strings to send, after all instances of @code{___}
3209@end defopt 3196@end defopt
3210 3197
3211 3198
3212@node Installation, Acknowledgements, The IDLWAVE Shell, Top 3199@node Acknowledgements, Sources of Routine Info, The IDLWAVE Shell, Top
3213@chapter Installation
3214@cindex Installation
3215
3216@menu
3217* Installing IDLWAVE:: How to install the distribution
3218* Installing Online Help:: Where to get the additional files needed
3219@end menu
3220
3221@node Installing IDLWAVE, Installing Online Help, Installation, Installation
3222@section Installing IDLWAVE
3223
3224@cindex FTP site
3225@cindex URL, homepage for IDLWAVE
3226@cindex Homepage for IDLWAVE
3227@cindex IDLWAVE, homepage
3228@cindex XEmacs package IDLWAVE
3229@cindex Emacs, distributed with IDLWAVE
3230@cindex Copyright, of IDL manual
3231IDLWAVE is part of Emacs 21.1 and later. It is also an XEmacs package
3232and can be installed from
3233@uref{ftp://ftp.xemacs.org/pub/xemacs/packages/,the XEmacs ftp site}
3234with the normal package management system on XEmacs 21. These
3235pre-installed versions should work out-of-the-box. However, the HTML
3236files required for online HTML help are not distributed with
3237XEmacs/Emacs and have to be installed separately@footnote{Due to
3238copyright reasons, the HTML version of the IDL manual cannot be
3239distributed under the GPL.} (@pxref{Installing Online Help}).
3240
3241You can also download IDLWAVE and install it yourself from
3242@uref{@value{IDLWAVE-HOMEPAGE}, the maintainers webpage}. Follow the
3243instructions in the INSTALL file.
3244
3245@node Installing Online Help, , Installing IDLWAVE, Installation
3246@section Installing Online Help
3247@cindex Installing online help
3248@cindex Online Help, Installation
3249
3250If you want to use the online help display, an additional set of files
3251(HTML versions of the IDL documentation) must be installed. These
3252files can also be downloaded from @uref{@value{IDLWAVE-HOMEPAGE}, the
3253maintainers webpage}. You need to place the files somewhere on your
3254system and tell IDLWAVE where they are with
3255
3256@lisp
3257(setq idlwave-html-help-location "/path/to/help/dir/") ;e.g. /usr/local/etc
3258@end lisp
3259
3260Note that the help package only changes with new versions of the IDL
3261documentation, and need not be updated unless your version of IDL
3262changes.
3263
3264@node Acknowledgements, Sources of Routine Info, Installation, Top
3265@chapter Acknowledgements 3200@chapter Acknowledgements
3266@cindex Acknowledgements 3201@cindex Acknowledgements
3267@cindex Maintainer, of IDLWAVE 3202@cindex Maintainer, of IDLWAVE
@@ -3731,10 +3666,7 @@ IDLWAVE derives its knowledge about system routines from the IDL
3731manuals. The file @file{idlw-rinfo.el} contains the routine information 3666manuals. The file @file{idlw-rinfo.el} contains the routine information
3732for the IDL system routines, and links to relevant sections of the HTML 3667for the IDL system routines, and links to relevant sections of the HTML
3733documentation. The Online Help feature of IDLWAVE requires HTML 3668documentation. The Online Help feature of IDLWAVE requires HTML
3734versions of the IDL manuals to be available; the HTML documentation is 3669versions of the IDL manuals to be available.
3735not distributed with IDLWAVE by default, but must be downloaded
3736separately from the @uref{@value{IDLWAVE-HOMEPAGE}, the maintainers
3737webpage}.
3738 3670
3739The HTML files and related images can be produced from the 3671The HTML files and related images can be produced from the
3740@file{idl.chm} HTMLHelp file distributed with IDL using the free 3672@file{idl.chm} HTMLHelp file distributed with IDL using the free
@@ -3755,22 +3687,19 @@ the online HTML help available with IDLWAVE (starting with version
37555.0). Since IDLWAVE runs on a many different system types, a single 36875.0). Since IDLWAVE runs on a many different system types, a single
3756browser configuration is not possible, but choices abound. 3688browser configuration is not possible, but choices abound.
3757 3689
3758On many systems, the default browser configured in 3690Unfortunately, the HTML manuals decompiled from the original
3759@code{browse-url-browser-function}, and hence inherited by default by 3691source contain formatting structures which Netscape 4.x does not
3760@code{idlwave-help-browser-function}, is Netscape. Unfortunately, the 3692handle well, though they are still readable. A much better choice is
3761HTML manuals decompiled from the original RSI source contain 3693Mozilla, or one of the Mozilla-derived browsers such as
3762formatting structures which Netscape 4.x does not handle well, though 3694@uref{http://galeon.sourceforge.net/,Galeon} (GNU/Linux),
3763they are still readable. A much better choice is Mozilla, or one of
3764the Mozilla-derived browsers such as
3765@uref{http://galeon.sourceforge.net/,Galeon} (Linux),
3766@uref{http://www.mozilla.org/projects/camino/,Camino} (MacOSX), or 3695@uref{http://www.mozilla.org/projects/camino/,Camino} (MacOSX), or
3767@uref{http://www.mozilla.org/projects/firebird/,Firebird} (all 3696@uref{http://www.mozilla.org/projects/firebird/,Firebird} (all
3768platforms). Newer versions of Emacs provide a browser-function choice 3697platforms). Newer versions of Emacs provide a browser-function choice
3769@code{browse-url-gnome-moz} which uses the Gnome-configured browser. 3698@code{browse-url-gnome-moz} which uses the Gnome-configured browser.
3770 3699
3771Note that the HTML files decompiled from RSI Microsoft Help sources 3700Note that the HTML files decompiled from Microsoft Help sources
3772contain specific references to the @samp{Symbol} font, which by default 3701contain specific references to the @samp{Symbol} font, which by default
3773is not permitted in normal encodings (it's technically illegal). Though 3702is not permitted in normal encodings (it's invalid, technically). Though
3774it only impacts a few symbols, you can trick Mozilla-based browsers into 3703it only impacts a few symbols, you can trick Mozilla-based browsers into
3775recognizing @samp{Symbol} by following the directions 3704recognizing @samp{Symbol} by following the directions
3776@uref{http://hutchinson.belmont.ma.us/tth/Xfonts.html, here}. With this 3705@uref{http://hutchinson.belmont.ma.us/tth/Xfonts.html, here}. With this
@@ -3995,12 +3924,9 @@ IDLWAVE was developed on a UNIX system. However, thanks to the
3995portability of Emacs, much of IDLWAVE does also work under different 3924portability of Emacs, much of IDLWAVE does also work under different
3996operating systems like Windows (with NTEmacs or NTXEmacs) or MacOS. 3925operating systems like Windows (with NTEmacs or NTXEmacs) or MacOS.
3997 3926
3998The only real problem is that RSI does not provide a command-line 3927The only real problem is that there is no command-line
3999version of IDL for Windows or MacOS(<=9) with which IDLWAVE can 3928version of IDL for Windows or MacOS(<=9) with which IDLWAVE can
4000interact@footnote{Call your RSI representative and complain --- it 3929interact. As a result, the IDLWAVE Shell
4001should be trivial for them to provide one. And if enough people ask for
4002it, maybe they will. The new MacOSX version of IDL @emph{does} have a
4003shell and works well with IDLWAVE.}. As a result, the IDLWAVE Shell
4004does not work and you have to rely on IDLDE to run and debug your 3930does not work and you have to rely on IDLDE to run and debug your
4005programs. However, editing IDL source files with Emacs/IDLWAVE works 3931programs. However, editing IDL source files with Emacs/IDLWAVE works
4006with all bells and whistles, including routine info, completion and fast 3932with all bells and whistles, including routine info, completion and fast
@@ -4018,7 +3944,7 @@ system. I am assuming that IDLWAVE has been installed in
4018;; the X/Emacs installation) 3944;; the X/Emacs installation)
4019(setq load-path (cons "c:/program files/IDLWAVE" load-path)) 3945(setq load-path (cons "c:/program files/IDLWAVE" load-path))
4020 3946
4021;; The location of the IDL library files, both from RSI and your own. 3947;; The location of the IDL library files, both standard and your own.
4022;; note that the initial "+" expands the path recursively 3948;; note that the initial "+" expands the path recursively
4023(setq idlwave-library-path 3949(setq idlwave-library-path
4024 '("+c:/RSI/IDL55/lib/" "+c:/user/me/idllibs" )) 3950 '("+c:/RSI/IDL55/lib/" "+c:/user/me/idllibs" ))
@@ -4113,9 +4039,7 @@ in compiled lisp files. Presumably, you kept the original .elc files in
4113place, and this is the source of the error. If you recompile (or just 4039place, and this is the source of the error. If you recompile (or just
4114"make; make install") from source, it should resolve this problem. 4040"make; make install") from source, it should resolve this problem.
4115Another option is to recompile the @file{idlw*.el} files by hand using 4041Another option is to recompile the @file{idlw*.el} files by hand using
4116@kbd{M-x byte-compile-file}. Why not take the opportunity to grab the 4042@kbd{M-x byte-compile-file}.
4117latest IDLWAVE version at @uref{@value{IDLWAVE-HOMEPAGE}, the
4118maintainers webpage}
4119 4043
4120@item @strong{@kbd{M-@key{TAB}} doesn't complete words, it switches 4044@item @strong{@kbd{M-@key{TAB}} doesn't complete words, it switches
4121windows on my desktop.} 4045windows on my desktop.}
@@ -4214,7 +4138,7 @@ method, and the most recent information will be available to all users.
4214@item @strong{All the Greek-font characters in the HTML help are 4138@item @strong{All the Greek-font characters in the HTML help are
4215displayed as Latin characters!} 4139displayed as Latin characters!}
4216 4140
4217Unfortunately, the HTMLHelp files RSI provides attempt to switch to 4141Unfortunately, the HTMLHelp files attempt to switch to
4218@samp{Symbol} font to display Greek characters, which is not really an 4142@samp{Symbol} font to display Greek characters, which is not really an
4219permitted method for doing this in HTML. There is a "workaround" for 4143permitted method for doing this in HTML. There is a "workaround" for
4220many browsers: @xref{HTML Help Browser Tips}. 4144many browsers: @xref{HTML Help Browser Tips}.
diff --git a/man/message.texi b/man/message.texi
index 5e488b0e7cf..8a10ea2445d 100644
--- a/man/message.texi
+++ b/man/message.texi
@@ -8,7 +8,7 @@
8@copying 8@copying
9This file documents Message, the Emacs message composition mode. 9This file documents Message, the Emacs message composition mode.
10 10
11Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 11Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
12Free Software Foundation, Inc. 12Free Software Foundation, Inc.
13 13
14@quotation 14@quotation
diff --git a/man/misc.texi b/man/misc.texi
index 5ef15d45d87..f1e05cae89c 100644
--- a/man/misc.texi
+++ b/man/misc.texi
@@ -1,5 +1,5 @@
1@c This is part of the Emacs manual. 1@c This is part of the Emacs manual.
2@c Copyright (C) 1985, 86, 87, 93, 94, 95, 97, 2000, 2001, 2004 2@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, 2004
3@c Free Software Foundation, Inc. 3@c Free Software Foundation, Inc.
4@c See file emacs.texi for copying conditions. 4@c See file emacs.texi for copying conditions.
5@iftex 5@iftex
@@ -1247,6 +1247,14 @@ kills it if the file name matches the regular expression
1247 If you set the variable @code{server-window} to a window or a frame, 1247 If you set the variable @code{server-window} to a window or a frame,
1248@kbd{C-x #} displays the server buffer in that window or in that frame. 1248@kbd{C-x #} displays the server buffer in that window or in that frame.
1249 1249
1250@vindex server-name
1251 You can run multiple Emacs servers on the same machine by giving
1252each one a unique ``server name'', using the variable
1253@code{server-name}. For example, @kbd{M-x set-variable @key{RET}
1254server-name @key{RET} foo @key{RET}} sets the server name to
1255@samp{foo}. The @code{emacsclient} program can visit a server by name
1256using the @samp{-s} option. @xref{Invoking emacsclient}.
1257
1250 While @code{mail} or another application is waiting for 1258 While @code{mail} or another application is waiting for
1251@code{emacsclient} to finish, @code{emacsclient} does not read terminal 1259@code{emacsclient} to finish, @code{emacsclient} does not read terminal
1252input. So the terminal that @code{mail} was using is effectively 1260input. So the terminal that @code{mail} was using is effectively
@@ -1329,6 +1337,9 @@ open the given files with the option @samp{--display=@var{DISPLAY}}.
1329This can be used typically when connecting from home to an Emacs 1337This can be used typically when connecting from home to an Emacs
1330server running on your machine at your workplace. 1338server running on your machine at your workplace.
1331 1339
1340If there is more than one Emacs server running, you can specify a
1341server name with the option @samp{-s @var{name}}.
1342
1332You can also use @code{emacsclient} to execute any piece of Emacs Lisp 1343You can also use @code{emacsclient} to execute any piece of Emacs Lisp
1333code, using the option @samp{--eval}. When this option is given, the 1344code, using the option @samp{--eval}. When this option is given, the
1334rest of the arguments is not taken as a list of files to visit but as 1345rest of the arguments is not taken as a list of files to visit but as
@@ -1341,7 +1352,7 @@ a list of expressions to evaluate.
1341 The Emacs commands for making hardcopy let you print either an entire 1352 The Emacs commands for making hardcopy let you print either an entire
1342buffer or just part of one, either with or without page headers. 1353buffer or just part of one, either with or without page headers.
1343See also the hardcopy commands of Dired (@pxref{Misc File Ops}) 1354See also the hardcopy commands of Dired (@pxref{Misc File Ops})
1344and the diary (@pxref{Diary Commands}). 1355and the diary (@pxref{Displaying the Diary}).
1345 1356
1346@table @kbd 1357@table @kbd
1347@item M-x print-buffer 1358@item M-x print-buffer
diff --git a/man/mule.texi b/man/mule.texi
index be71bd64402..c085839cbd8 100644
--- a/man/mule.texi
+++ b/man/mule.texi
@@ -428,6 +428,9 @@ is the command @kbd{C-\} (@code{toggle-input-method}) used twice.
428because it stops waiting for more characters to combine, and starts 428because it stops waiting for more characters to combine, and starts
429searching for what you have already entered. 429searching for what you have already entered.
430 430
431 To find out how to input the character after point using the current
432input method, type @kbd{C-u C-x =}. @xref{Position Info}.
433
431@vindex input-method-verbose-flag 434@vindex input-method-verbose-flag
432@vindex input-method-highlight-flag 435@vindex input-method-highlight-flag
433 The variables @code{input-method-highlight-flag} and 436 The variables @code{input-method-highlight-flag} and
@@ -928,6 +931,9 @@ files.
928@item C-x @key{RET} X @var{coding} @key{RET} 931@item C-x @key{RET} X @var{coding} @key{RET}
929Use coding system @var{coding} for transferring @emph{one} 932Use coding system @var{coding} for transferring @emph{one}
930selection---the next one---to or from the window system. 933selection---the next one---to or from the window system.
934
935@item M-x recode-region
936Convert the region from a previous coding system to a new one.
931@end table 937@end table
932 938
933@kindex C-x RET f 939@kindex C-x RET f
@@ -1056,6 +1062,12 @@ corresponding buffer.
1056 The default for translation of process input and output depends on the 1062 The default for translation of process input and output depends on the
1057current language environment. 1063current language environment.
1058 1064
1065@findex recode-region
1066 If a piece of text has already been inserted into a buffer using the
1067wrong coding system, you can decode it again using @kbd{M-x
1068recode-region}. This prompts you for the old coding system and the
1069desired coding system, and acts on the text in the region.
1070
1059@vindex file-name-coding-system 1071@vindex file-name-coding-system
1060@cindex file names with non-@acronym{ASCII} characters 1072@cindex file names with non-@acronym{ASCII} characters
1061@findex set-file-name-coding-system 1073@findex set-file-name-coding-system
@@ -1084,6 +1096,12 @@ these buffers under the visited file name, saving may use the wrong file
1084name, or it may get an error. If such a problem happens, use @kbd{C-x 1096name, or it may get an error. If such a problem happens, use @kbd{C-x
1085C-w} to specify a new file name for that buffer. 1097C-w} to specify a new file name for that buffer.
1086 1098
1099@findex recode-file-name
1100 If a mistake occurs when encoding a file name, use the command
1101command @kbd{M-x recode-file-name} to change the file name's coding
1102system. This prompts for an existing file name, its old coding
1103system, and the coding system to which you wish to convert.
1104
1087@vindex locale-coding-system 1105@vindex locale-coding-system
1088@cindex decoding non-@acronym{ASCII} keyboard input on X 1106@cindex decoding non-@acronym{ASCII} keyboard input on X
1089 The variable @code{locale-coding-system} specifies a coding system 1107 The variable @code{locale-coding-system} specifies a coding system
@@ -1333,62 +1351,52 @@ inclusive) are displayed as octal escapes. You can change this for
1333non-standard ``extended'' versions of ISO-8859 character sets by using the 1351non-standard ``extended'' versions of ISO-8859 character sets by using the
1334function @code{standard-display-8bit} in the @code{disp-table} library. 1352function @code{standard-display-8bit} in the @code{disp-table} library.
1335 1353
1336 There are several ways you can input single-byte non-@acronym{ASCII} 1354 There are two ways to input single-byte non-@acronym{ASCII}
1337characters: 1355characters:
1338 1356
1339@itemize @bullet 1357@itemize @bullet
1340@cindex 8-bit input 1358@cindex 8-bit input
1341@item 1359@item
1360You can use an input method for the selected language environment.
1361@xref{Input Methods}. When you use an input method in a unibyte buffer,
1362the non-@acronym{ASCII} character you specify with it is converted to unibyte.
1363
1364@item
1342If your keyboard can generate character codes 128 (decimal) and up, 1365If your keyboard can generate character codes 128 (decimal) and up,
1343representing non-@acronym{ASCII} characters, you can type those character codes 1366representing non-@acronym{ASCII} characters, you can type those character codes
1344directly. 1367directly.
1345 1368
1346On a windowing terminal, you should not need to do anything special to 1369On a window system, you should not need to do anything special to use
1347use these keys; they should simply work. On a text-only terminal, you 1370these keys; they should simply work. On a text-only terminal, you
1348should use the command @code{M-x set-keyboard-coding-system} or the 1371should use the command @code{M-x set-keyboard-coding-system} or the
1349variable @code{keyboard-coding-system} to specify which coding 1372variable @code{keyboard-coding-system} to specify which coding system
1350system your keyboard uses (@pxref{Specify Coding}). Enabling this 1373your keyboard uses (@pxref{Specify Coding}). Enabling this feature
1351feature will probably require you to use @kbd{ESC} to type Meta 1374will probably require you to use @kbd{ESC} to type Meta characters;
1352characters; however, on a console terminal or in @code{xterm}, you can 1375however, on a console terminal or in @code{xterm}, you can arrange for
1353arrange for Meta to be converted to @kbd{ESC} and still be able type 1376Meta to be converted to @kbd{ESC} and still be able type 8-bit
13548-bit characters present directly on the keyboard or using 1377characters present directly on the keyboard or using @kbd{Compose} or
1355@kbd{Compose} or @kbd{AltGr} keys. @xref{User Input}. 1378@kbd{AltGr} keys. @xref{User Input}.
1356
1357@item
1358You can use an input method for the selected language environment.
1359@xref{Input Methods}. When you use an input method in a unibyte buffer,
1360the non-@acronym{ASCII} character you specify with it is converted to unibyte.
1361 1379
1362@kindex C-x 8 1380@kindex C-x 8
1363@cindex @code{iso-transl} library 1381@cindex @code{iso-transl} library
1364@cindex compose character 1382@cindex compose character
1365@cindex dead character 1383@cindex dead character
1366@item 1384@item
1367For Latin-1 only, you can use the 1385For Latin-1 only, you can use the key @kbd{C-x 8} as a ``compose
1368key @kbd{C-x 8} as a ``compose character'' prefix for entry of 1386character'' prefix for entry of non-@acronym{ASCII} Latin-1 printing
1369non-@acronym{ASCII} Latin-1 printing characters. @kbd{C-x 8} is good for 1387characters. @kbd{C-x 8} is good for insertion (in the minibuffer as
1370insertion (in the minibuffer as well as other buffers), for searching, 1388well as other buffers), for searching, and in any other context where
1371and in any other context where a key sequence is allowed. 1389a key sequence is allowed.
1372 1390
1373@kbd{C-x 8} works by loading the @code{iso-transl} library. Once that 1391@kbd{C-x 8} works by loading the @code{iso-transl} library. Once that
1374library is loaded, the @key{ALT} modifier key, if you have one, serves 1392library is loaded, the @key{ALT} modifier key, if the keyboard has
1375the same purpose as @kbd{C-x 8}; use @key{ALT} together with an accent 1393one, serves the same purpose as @kbd{C-x 8}: use @key{ALT} together
1376character to modify the following letter. In addition, if you have keys 1394with an accent character to modify the following letter. In addition,
1377for the Latin-1 ``dead accent characters,'' they too are defined to 1395if the keyboard has keys for the Latin-1 ``dead accent characters,''
1378compose with the following character, once @code{iso-transl} is loaded. 1396they too are defined to compose with the following character, once
1379Use @kbd{C-x 8 C-h} to list the available translations as mnemonic 1397@code{iso-transl} is loaded.
1380command names. 1398
1381 1399Use @kbd{C-x 8 C-h} to list all the available @kbd{C-x 8} translations.
1382@item
1383@cindex @code{iso-acc} library
1384@cindex ISO Accents mode
1385@findex iso-accents-mode
1386@cindex Latin-1, Latin-2 and Latin-3 input mode
1387For Latin-1, Latin-2 and Latin-3, @kbd{M-x iso-accents-mode} enables
1388a minor mode that works much like the @code{latin-1-prefix} input
1389method, but does not depend on having the input methods installed. This
1390mode is buffer-local. It can be customized for various languages with
1391@kbd{M-x iso-accents-customize}.
1392@end itemize 1400@end itemize
1393 1401
1394@node Charsets 1402@node Charsets
diff --git a/man/org.texi b/man/org.texi
index d461e9c1020..d1a388f958a 100644
--- a/man/org.texi
+++ b/man/org.texi
@@ -3,8 +3,8 @@
3@setfilename ../info/org 3@setfilename ../info/org
4@settitle Org Mode Manual 4@settitle Org Mode Manual
5 5
6@set VERSION 3.04 6@set VERSION 3.05
7@set DATE December 2004 7@set DATE April 2005
8 8
9@dircategory Emacs 9@dircategory Emacs
10@direntry 10@direntry
@@ -34,7 +34,7 @@
34@copying 34@copying
35This manual is for Org-mode (version @value{VERSION}). 35This manual is for Org-mode (version @value{VERSION}).
36 36
37Copyright @copyright{} 2004 Free Software Foundation 37Copyright @copyright{} 2004, 2005 Free Software Foundation
38 38
39@quotation 39@quotation
40Permission is granted to copy, distribute and/or modify this document 40Permission is granted to copy, distribute and/or modify this document
@@ -184,7 +184,8 @@ top of outline-mode, which makes it possible to keep the content of
184large files well structured. Visibility cycling and structure editing 184large files well structured. Visibility cycling and structure editing
185help to work with the tree. Tables are easily created with a built-in 185help to work with the tree. Tables are easily created with a built-in
186table editor. Org-mode supports ToDo items, deadlines, time stamps, 186table editor. Org-mode supports ToDo items, deadlines, time stamps,
187and scheduling. It dynamically compiles entries into an agenda. 187and scheduling. It dynamically compiles entries into an agenda that
188utilizes and smoothly integrates much of the Emacs calendar and diary.
188Plain text URL-like links connect to websites, emails, usenet 189Plain text URL-like links connect to websites, emails, usenet
189messages, BBDB entries, and any files related to the projects. For 190messages, BBDB entries, and any files related to the projects. For
190printing and sharing of notes, an Org-mode file can be exported as a 191printing and sharing of notes, an Org-mode file can be exported as a
@@ -203,15 +204,14 @@ different levels and in different ways, for example
203@r{@bullet{} as a full agenda and planner with deadlines and work scheduling} 204@r{@bullet{} as a full agenda and planner with deadlines and work scheduling}
204@end example 205@end example
205 206
206The Org-mode table editor can be used integrated into any major mode 207The Org-mode table editor can be integrated into any major mode by
207by activating the minor Ortbl-mode. 208activating the minor Orgtbl-mode.
208 209
209There is a website for Org-mode which provides links to the newest 210There is a website for Org-mode which provides links to the newest
210version of Org-mode, as well as additional information, screen shots 211version of Org-mode, as well as additional information, screen shots
211and example files. This page is located at 212and example files. This page is located at
212@uref{http://www.astro.uva.nl/~dominik/Tools/org/}. 213@uref{http://www.astro.uva.nl/~dominik/Tools/org/}.
213 214
214
215@page 215@page
216 216
217@node Installation, , Summary, Introduction 217@node Installation, , Summary, Introduction
@@ -352,6 +352,18 @@ Note that inside tables, @kbd{S-@key{TAB}} jumps to the previous field.
352Show all. 352Show all.
353@end table 353@end table
354 354
355When Emacs firsts visits a Org-mode file, the global state is set to
356OVERVIEW, i.e. only the top level headlines are visible. This can be
357configured through the variable @code{org-startup-folded}, or on a
358per-file basis by adding one of the following lines anywhere in the
359buffer:
360
361@example
362#+STARTUP: fold
363#+STARTUP: nofold
364@end example
365
366
355@node Motion, Structure editing, Visibility cycling, Document Structure 367@node Motion, Structure editing, Visibility cycling, Document Structure
356@section Motion 368@section Motion
357@cindex motion, between headlines 369@cindex motion, between headlines
@@ -473,6 +485,17 @@ the match.
473Other commands are using this feature as well. For example @kbd{C-c 485Other commands are using this feature as well. For example @kbd{C-c
474C-v} creates a sparse TODO tree (@pxref{TODO basics}). 486C-v} creates a sparse TODO tree (@pxref{TODO basics}).
475 487
488@kindex C-c C-x v
489@cindex printing sparse trees
490@cindex visible text, printing
491To print a sparse tree, you can use the Emacs command
492@code{ps-print-buffer-with-faces} which does not print invisible parts
493of the document @footnote{this does not work under XEmacs, because
494XEmacs uses selective display for outlining, not text properties}.
495Or you can use the command @kbd{C-c C-x v} to copy the visible part of
496the document to another file (extension @file{.txt}) which then can be
497printed in any desired way.
498
476@node TODO items, Tables, Document Structure, Top 499@node TODO items, Tables, Document Structure, Top
477@chapter TODO items 500@chapter TODO items
478@cindex TODO items 501@cindex TODO items
@@ -611,7 +634,7 @@ persons.
611@end lisp 634@end lisp
612 635
613In this case, different keywords do not indicate a sequence, but 636In this case, different keywords do not indicate a sequence, but
614rather different levels. This changes the behavior of the command 637rather different types. This changes the behavior of the command
615@kbd{C-c C-t} slightly. When used several times in succession, it 638@kbd{C-c C-t} slightly. When used several times in succession, it
616will still cycle through all names. But when when you return to the 639will still cycle through all names. But when when you return to the
617item after some time and execute @kbd{C-c C-t} again, it will switch 640item after some time and execute @kbd{C-c C-t} again, it will switch
@@ -745,11 +768,6 @@ Re-align the table and move down to next row. Creates a new row if
745necessary. At the beginning or end of a line, @key{RET} still does 768necessary. At the beginning or end of a line, @key{RET} still does
746NEWLINE, so it can be used to split a table. 769NEWLINE, so it can be used to split a table.
747 770
748@kindex S-@key{RET}
749@item S-@key{RET}
750Copy from first non-empty
751 field above current field.
752
753@tsubheading{Column and row editing} 771@tsubheading{Column and row editing}
754@kindex M-@key{left} 772@kindex M-@key{left}
755@kindex M-@key{right} 773@kindex M-@key{right}
@@ -796,7 +814,7 @@ Copy an rectangular region from a table to a special clipboard, and
796blank all fields in the rectangle. 814blank all fields in the rectangle.
797@kindex C-c C-h C-y 815@kindex C-c C-h C-y
798@item C-c C-h C-y 816@item C-c C-h C-y
799Paste a rectangluar region into a table. 817Paste a rectangular region into a table.
800The upper right corner ends up in the current field. All involved fields 818The upper right corner ends up in the current field. All involved fields
801will be overwritten. If the rectangle does not fit into the present table, 819will be overwritten. If the rectangle does not fit into the present table,
802the table is enlarged as needed. The process ignores horizontal separator 820the table is enlarged as needed. The process ignores horizontal separator
@@ -828,6 +846,14 @@ Sum the numbers in the current column, or in the rectangle defined by
828the active region. The result is displayed in the echo area and can 846the active region. The result is displayed in the echo area and can
829be inserted with @kbd{C-y}. 847be inserted with @kbd{C-y}.
830 848
849@kindex S-@key{RET}
850@item S-@key{RET}
851When current field is empty, copy from first non-empty field above.
852When not empty, copy current field down to next row and move cursor
853along with it. Depending on the variable
854@code{org-table-copy-increment}, integer field values will be
855incremented during copy.
856
831@cindex formula, in tables 857@cindex formula, in tables
832@cindex calculations, in tables 858@cindex calculations, in tables
833@kindex C-c = 859@kindex C-c =
@@ -1063,7 +1089,7 @@ text has a headline, i.e. a first line that starts with a @samp{*}.
1063If not, a headline is constructed from the current date and some 1089If not, a headline is constructed from the current date and some
1064additional data. If the variable @code{org-adapt-indentation} is 1090additional data. If the variable @code{org-adapt-indentation} is
1065non-nil, the entire text is also indented so that it starts in the 1091non-nil, the entire text is also indented so that it starts in the
1066same column as the headline (after the asterixes). 1092same column as the headline (after the asterisks).
1067 1093
1068@node Timestamps, Timeline and Agenda, Hyperlinks, Top 1094@node Timestamps, Timeline and Agenda, Hyperlinks, Top
1069@chapter Timestamps 1095@chapter Timestamps
@@ -1404,11 +1430,12 @@ Sorting can be customized using the variable
1404@node Agenda commands, Calendar/Diary integration, Agenda (multiple files), Timeline and Agenda 1430@node Agenda commands, Calendar/Diary integration, Agenda (multiple files), Timeline and Agenda
1405@section Commands in the agenda buffer 1431@section Commands in the agenda buffer
1406 1432
1407Entries in the agenda buffer are linked back to the org file. You are 1433Entries in the agenda buffer are linked back to the org file or diary
1408not allowed to edit the agenda buffer itself, but commands are provided 1434file where they originate. You are not allowed to edit the agenda
1409to edit the org-files ``remotely'' from the agenda buffer. In this 1435buffer itself, but commands are provided to show and jump to the
1410way, all information is stored only once, and you don't risk that your 1436original entry location, and to edit the org-files ``remotely'' from
1411agenda and note files diverge. 1437the agenda buffer. In this way, all information is stored only once,
1438and you don't risk that your agenda and note files diverge.
1412 1439
1413Some commands can be executed with mouse clicks on agenda lines. For 1440Some commands can be executed with mouse clicks on agenda lines. For
1414the other commands, the cursor needs to be in the desired line. Most 1441the other commands, the cursor needs to be in the desired line. Most
@@ -1468,7 +1495,7 @@ S-@key{right}.
1468Display the following @code{org-agenda-ndays} days. For example, if 1495Display the following @code{org-agenda-ndays} days. For example, if
1469the display covers a week, switch to the following week. With prefix 1496the display covers a week, switch to the following week. With prefix
1470arg, go forward that many times @code{org-agenda-ndays} days. Not 1497arg, go forward that many times @code{org-agenda-ndays} days. Not
1471available in timlines. 1498available in timelines.
1472 1499
1473@kindex @key{left} 1500@kindex @key{left}
1474@item @key{left} 1501@item @key{left}
@@ -1536,6 +1563,29 @@ Insert a new entry into the diary. Prompts for the type of entry
1536entry in the diary, just like @kbd{i d} etc. would do in the calendar. 1563entry in the diary, just like @kbd{i d} etc. would do in the calendar.
1537The date is taken from the cursor position. 1564The date is taken from the cursor position.
1538 1565
1566@tsubheading{Calendar commands}
1567@kindex c
1568@item c
1569Open the Emacs calendar and move to the date at the agenda cursor.
1570
1571@kindex C
1572@item C
1573Convert the date at cursor into many other cultural and historic
1574calendars.
1575
1576@kindex M
1577@item M
1578Show the phases of the moon for three month around current date.
1579
1580@kindex S
1581@item S
1582Show sunrise and sunset times. The location must be set with calendar
1583variables, see documentation of the Emacs calendar.
1584
1585@kindex H
1586@item H
1587Show holidays for three month around the cursor date.
1588
1539@tsubheading{Quit and Exit} 1589@tsubheading{Quit and Exit}
1540@kindex q 1590@kindex q
1541@item q 1591@item q
@@ -1564,8 +1614,9 @@ Org-mode. It can be very useful to combine output from Org-mode with
1564the diary. 1614the diary.
1565 1615
1566The interaction between Org-mode and diary works both ways: You can 1616The interaction between Org-mode and diary works both ways: You can
1567list entries from the diary in the Org-mode agenda, or you can display 1617list entries from the diary in the Org-mode agenda, from which many
1568entries from the org agenda in the Emacs diary. 1618calendar and diary commands are directly accessible. Or you can
1619display entries from the org agenda in the Emacs diary.
1569 1620
1570@menu 1621@menu
1571* Diary to agenda:: Agenda incorporates the diary 1622* Diary to agenda:: Agenda incorporates the diary
@@ -1584,7 +1635,15 @@ agenda, you only need to customize the variable
1584@end lisp 1635@end lisp
1585@noindent 1636@noindent
1586 1637
1587@noindent After that, everything will happen automatically. 1638@noindent After that, everything will happen automatically. All diary
1639entries including holidays, anniversaries etc will be included in the
1640agenda buffer created by Org-mode. @key{SPC}, @key{TAB}, and
1641@key{RET} can be used from the agenda buffer to jump to the diary
1642file, in order to edit existing diary entries. Also the @kbd{i}
1643command to insert new entries for the current date works in the agenda
1644buffer, as well as the commands @kbd{S}, @kbd{M}, and @kbd{C} to
1645display Sunrise/Sunset times, show lunar phases and to convert to
1646other calendars, respectively.
1588 1647
1589@node Agenda to diary, , Diary to agenda, Calendar/Diary integration 1648@node Agenda to diary, , Diary to agenda, Calendar/Diary integration
1590@subsection Including the agenda into the diary 1649@subsection Including the agenda into the diary
diff --git a/man/programs.texi b/man/programs.texi
index 353cb85aa60..98e60d0385c 100644
--- a/man/programs.texi
+++ b/man/programs.texi
@@ -1,5 +1,6 @@
1@c This is part of the Emacs manual. 1@c This is part of the Emacs manual.
2@c Copyright (C) 1985,86,87,93,94,95,97,99,00,2001 Free Software Foundation, Inc. 2@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000,
3@c 2001, 2005 Free Software Foundation, Inc.
3@c See file emacs.texi for copying conditions. 4@c See file emacs.texi for copying conditions.
4@node Programs, Building, Text, Top 5@node Programs, Building, Text, Top
5@chapter Editing Programs 6@chapter Editing Programs
@@ -80,17 +81,19 @@ and you can select it by typing @kbd{M-x @var{l}-mode @key{RET}}.
80@cindex Shell-script mode 81@cindex Shell-script mode
81@cindex Delphi mode 82@cindex Delphi mode
82@cindex PostScript mode 83@cindex PostScript mode
84@cindex Conf mode
85@cindex DNS mode
83 The existing programming language major modes include Lisp, Scheme (a 86 The existing programming language major modes include Lisp, Scheme (a
84variant of Lisp) and the Scheme-based DSSSL expression language, Ada, 87variant of Lisp) and the Scheme-based DSSSL expression language, Ada,
85ASM, AWK, C, C++, Delphi (Object Pascal), Fortran (free format and fixed 88ASM, AWK, C, C++, Delphi (Object Pascal), Fortran (free format and fixed
86format), Icon, IDL (CORBA), IDLWAVE, Java, Metafont (@TeX{}'s 89format), Icon, IDL (CORBA), IDLWAVE, Java, Metafont (@TeX{}'s
87companion for font creation), Modula2, Objective-C, Octave, Pascal, 90companion for font creation), Modula2, Objective-C, Octave, Pascal,
88Perl, Pike, PostScript, Prolog, Python, Simula, Tcl, and VHDL. There is 91Perl, Pike, PostScript, Prolog, Python, Simula, Tcl, and VHDL. An
89also a major mode for makefiles, called Makefile mode. An alternative 92alternative mode for Perl is called CPerl mode. Modes are available for
90mode for Perl is called CPerl mode. Modes are available for the 93the scripting languages of the common GNU and Unix shells, VMS DCL, and
91scripting languages of the common GNU and Unix shells, VMS DCL, and
92MS-DOS/MS-Windows @samp{BAT} files. There are also major modes for 94MS-DOS/MS-Windows @samp{BAT} files. There are also major modes for
93editing various sorts of configuration files. 95editing makefiles, DNS master files, and various sorts of configuration
96files.
94 97
95@kindex DEL @r{(programming modes)} 98@kindex DEL @r{(programming modes)}
96@findex c-electric-backspace 99@findex c-electric-backspace
@@ -1801,11 +1804,11 @@ names.
1801@cindex Fortran mode 1804@cindex Fortran mode
1802@cindex mode, Fortran 1805@cindex mode, Fortran
1803 1806
1804 Fortran mode provides special motion commands for Fortran statements and 1807 Fortran mode provides special motion commands for Fortran statements
1805subprograms, and indentation commands that understand Fortran conventions 1808and subprograms, and indentation commands that understand Fortran
1806of nesting, line numbers and continuation statements. Fortran mode has 1809conventions of nesting, line numbers and continuation statements.
1807its own Auto Fill mode that breaks long lines into proper Fortran 1810Fortran mode has support for Auto Fill mode that breaks long lines into
1808continuation lines. 1811proper Fortran continuation lines.
1809 1812
1810 Special commands for comments are provided because Fortran comments 1813 Special commands for comments are provided because Fortran comments
1811are unlike those of other languages. Built-in abbrevs optionally save 1814are unlike those of other languages. Built-in abbrevs optionally save
@@ -1817,18 +1820,18 @@ runs the hook @code{fortran-mode-hook} (@pxref{Hooks}).
1817@cindex Fortran77 and Fortran90 1820@cindex Fortran77 and Fortran90
1818@findex f90-mode 1821@findex f90-mode
1819@findex fortran-mode 1822@findex fortran-mode
1820 Fortran mode is meant for editing Fortran77 ``fixed format'' source 1823 Fortran mode is meant for editing Fortran77 ``fixed format'' (and also
1821code. For editing the modern Fortran90 ``free format'' source code, 1824``tab format'') source code. For editing the modern Fortran90 or
1822use F90 mode (@code{f90-mode}). Emacs normally uses Fortran mode for 1825Fortran95 ``free format'' source code, use F90 mode (@code{f90-mode}).
1823files with extension @samp{.f}, @samp{.F} or @samp{.for}, and F90 mode 1826Emacs normally uses Fortran mode for files with extension @samp{.f},
1824for the extension @samp{.f90}. GNU Fortran supports both kinds of 1827@samp{.F} or @samp{.for}, and F90 mode for the extension @samp{.f90} and
1825format. 1828@samp{.f95}. GNU Fortran supports both kinds of format.
1826 1829
1827@menu 1830@menu
1828* Motion: Fortran Motion. Moving point by statements or subprograms. 1831* Motion: Fortran Motion. Moving point by statements or subprograms.
1829* Indent: Fortran Indent. Indentation commands for Fortran. 1832* Indent: Fortran Indent. Indentation commands for Fortran.
1830* Comments: Fortran Comments. Inserting and aligning comments. 1833* Comments: Fortran Comments. Inserting and aligning comments.
1831* Autofill: Fortran Autofill. Auto fill minor mode for Fortran. 1834* Autofill: Fortran Autofill. Auto fill support for Fortran.
1832* Columns: Fortran Columns. Measuring columns for valid Fortran. 1835* Columns: Fortran Columns. Measuring columns for valid Fortran.
1833* Abbrev: Fortran Abbrev. Built-in abbrevs for Fortran keywords. 1836* Abbrev: Fortran Abbrev. Built-in abbrevs for Fortran keywords.
1834@end menu 1837@end menu
@@ -1837,8 +1840,9 @@ format.
1837@subsection Motion Commands 1840@subsection Motion Commands
1838 1841
1839 In addition to the normal commands for moving by and operating on 1842 In addition to the normal commands for moving by and operating on
1840``defuns'' (Fortran subprograms---functions and subroutines), Fortran 1843``defuns'' (Fortran subprograms---functions and subroutines, as well as
1841mode provides special commands to move by statements. 1844modules for F90 mode), Fortran mode provides special commands to move by
1845statements and other program units.
1842 1846
1843@table @kbd 1847@table @kbd
1844@kindex C-c C-n @r{(Fortran mode)} 1848@kindex C-c C-n @r{(Fortran mode)}
@@ -1873,21 +1877,24 @@ Move point backward to the previous code block
1873(@code{f90-previous-block}). This is like @code{f90-next-block}, but 1877(@code{f90-previous-block}). This is like @code{f90-next-block}, but
1874moves backwards. 1878moves backwards.
1875 1879
1876@kindex C-M-n @r{(F90 mode)} 1880@kindex C-M-n @r{(Fortran mode)}
1881@findex fortran-end-of-block
1877@findex f90-end-of-block 1882@findex f90-end-of-block
1878@item C-M-n 1883@item C-M-n
1879Move to the end of the current code block (@code{f90-end-of-block}). 1884Move to the end of the current code block
1880This is for F90 mode only. With a numeric agument, move forward that 1885(@code{fortran-end-of-block}/@code{f90-end-of-block}). With a numeric
1881number of blocks. This command checks for consistency of block types 1886agument, move forward that number of blocks. The mark is set before
1882and labels (if present), but it does not check the outermost block 1887moving point. The F90 mode version of this command checks for
1883since that may be incomplete. The mark is set before moving point. 1888consistency of block types and labels (if present), but it does not
1884 1889check the outermost block since that may be incomplete.
1885@kindex C-M-p @r{(F90 mode)} 1890
1891@kindex C-M-p @r{(Fortran mode)}
1892@findex fortran-beginning-of-block
1886@findex f90-beginning-of-block 1893@findex f90-beginning-of-block
1887@item C-M-p 1894@item C-M-p
1888Move to the start of the current code block 1895Move to the start of the current code block
1889(@code{f90-beginning-of-block}). This is like @code{f90-end-of-block}, 1896(@code{fortran-beginning-of-block}/@code{f90-beginning-of-block}). This
1890but moves backwards. 1897is like @code{fortran-end-of-block}, but moves backwards.
1891@end table 1898@end table
1892 1899
1893@node Fortran Indent 1900@node Fortran Indent
@@ -1896,7 +1903,7 @@ but moves backwards.
1896 Special commands and features are needed for indenting Fortran code in 1903 Special commands and features are needed for indenting Fortran code in
1897order to make sure various syntactic entities (line numbers, comment line 1904order to make sure various syntactic entities (line numbers, comment line
1898indicators and continuation line flags) appear in the columns that are 1905indicators and continuation line flags) appear in the columns that are
1899required for standard Fortran. 1906required for standard, fixed (or tab) format Fortran.
1900 1907
1901@menu 1908@menu
1902* Commands: ForIndent Commands. Commands for indenting and filling Fortran. 1909* Commands: ForIndent Commands. Commands for indenting and filling Fortran.
@@ -1911,7 +1918,7 @@ required for standard Fortran.
1911 1918
1912@table @kbd 1919@table @kbd
1913@item C-M-j 1920@item C-M-j
1914Break the current line and set up a continuation line 1921Break the current line at point and set up a continuation line
1915(@code{fortran-split-line}). 1922(@code{fortran-split-line}).
1916@item M-^ 1923@item M-^
1917Join this line to the previous line (@code{fortran-join-line}). 1924Join this line to the previous line (@code{fortran-join-line}).
@@ -1953,30 +1960,39 @@ point is in. This removes any excess statement continuations.
1953@cindex Fortran continuation lines 1960@cindex Fortran continuation lines
1954 1961
1955@vindex fortran-continuation-string 1962@vindex fortran-continuation-string
1956 Most modern Fortran compilers allow two ways of writing continuation 1963 Most Fortran77 compilers allow two ways of writing continuation lines.
1957lines. If the first non-space character on a line is in column 5, then 1964If the first non-space character on a line is in column 5, then that
1958that line is a continuation of the previous line. We call this 1965line is a continuation of the previous line. We call this @dfn{fixed
1959@dfn{fixed format}. (In GNU Emacs we always count columns from 0.) The 1966format}. (In GNU Emacs we always count columns from 0; but note that
1960variable @code{fortran-continuation-string} specifies what character to 1967the Fortran standard counts from 1.) The variable
1961put on column 5. A line that starts with a tab character followed by 1968@code{fortran-continuation-string} specifies what character to put in
1962any digit except @samp{0} is also a continuation line. We call this 1969column 5. A line that starts with a tab character followed by any digit
1963style of continuation @dfn{tab format}. 1970except @samp{0} is also a continuation line. We call this style of
1971continuation @dfn{tab format}. (Fortran90 introduced ``free format'',
1972with another style of continuation lines).
1964 1973
1965@vindex indent-tabs-mode @r{(Fortran mode)} 1974@vindex indent-tabs-mode @r{(Fortran mode)}
1966 Fortran mode can make either style of continuation line, but you 1975@vindex fortran-analyze-depth
1967must specify which one you prefer. The value of the variable 1976@vindex fortran-tab-mode-default
1968@code{indent-tabs-mode} controls the choice: @code{nil} for fixed 1977 Fortran mode can use either style of continuation line. When you
1969format, and non-@code{nil} for tab format. You can tell which style 1978enter Fortran mode, it tries to deduce the proper continuation style
1970is presently in effect by the presence or absence of the string 1979automatically from the buffer contents. It does this by scanning up to
1971@samp{Tab} in the mode line. 1980@code{fortran-analyze-depth} (default 100) lines from the start of the
1972 1981buffer. The first line that begins with either a tab character or six
1973 If the text on a line starts with the conventional Fortran 1982spaces determines the choice. If the scan fails (for example, if the
1974continuation marker @samp{$}, or if it begins with any non-whitespace 1983buffer is new and therefore empty), the value of
1975character in column 5, Fortran mode treats it as a continuation line. 1984@code{fortran-tab-mode-default} (@code{nil} for fixed format, and
1976When you indent a continuation line with @key{TAB}, it converts the line 1985non-@code{nil} for tab format) is used. @samp{/t} in the mode line
1977to the current continuation style. When you split a Fortran statement 1986indicates tab format is selected. Fortran mode sets the value of
1978with @kbd{C-M-j}, the continuation marker on the newline is created 1987@code{indent-tabs-mode} accordingly (@pxref{Just Spaces}).
1979according to the continuation style. 1988
1989 If the text on a line starts with the Fortran continuation marker
1990@samp{$}, or if it begins with any non-whitespace character in column
19915, Fortran mode treats it as a continuation line. When you indent a
1992continuation line with @key{TAB}, it converts the line to the current
1993continuation style. When you split a Fortran statement with
1994@kbd{C-M-j}, the continuation marker on the newline is created according
1995to the continuation style.
1980 1996
1981 The setting of continuation style affects several other aspects of 1997 The setting of continuation style affects several other aspects of
1982editing in Fortran mode. In fixed format mode, the minimum column 1998editing in Fortran mode. In fixed format mode, the minimum column
@@ -1986,17 +2002,6 @@ space character for whitespace. In tab format mode, the minimum
1986column number for the statement body is 8, and the whitespace before 2002column number for the statement body is 8, and the whitespace before
1987column 8 must always consist of one tab character. 2003column 8 must always consist of one tab character.
1988 2004
1989@vindex fortran-tab-mode-default
1990@vindex fortran-analyze-depth
1991 When you enter Fortran mode for an existing file, it tries to deduce the
1992proper continuation style automatically from the file contents. The first
1993line that begins with either a tab character or six spaces determines the
1994choice. The variable @code{fortran-analyze-depth} specifies how many lines
1995to consider (at the beginning of the file); if none of those lines
1996indicates a style, then the variable @code{fortran-tab-mode-default}
1997specifies the style. If it is @code{nil}, that specifies fixed format, and
1998non-@code{nil} specifies tab format.
1999
2000@node ForIndent Num 2005@node ForIndent Num
2001@subsubsection Line Numbers 2006@subsubsection Line Numbers
2002 2007
@@ -2007,9 +2012,11 @@ through 4. (Columns always count from 0 in GNU Emacs.)
2007@vindex fortran-line-number-indent 2012@vindex fortran-line-number-indent
2008 Line numbers of four digits or less are normally indented one space. 2013 Line numbers of four digits or less are normally indented one space.
2009The variable @code{fortran-line-number-indent} controls this; it 2014The variable @code{fortran-line-number-indent} controls this; it
2010specifies the maximum indentation a line number can have. Line numbers 2015specifies the maximum indentation a line number can have. The default
2011are right-justified to end in column 4 unless that would require more 2016value of the variable is 1. Fortran mode tries to prevent line number
2012than this maximum indentation. The default value of the variable is 1. 2017digits passing column 4, reducing the indentation below the specified
2018maximum if necessary. If @code{fortran-line-number-indent} has the
2019value 5, line numbers are right-justified to end in column 4.
2013 2020
2014@vindex fortran-electric-line-number 2021@vindex fortran-electric-line-number
2015 Simply inserting a line number is enough to indent it according to 2022 Simply inserting a line number is enough to indent it according to
@@ -2062,54 +2069,59 @@ followed.
2062Extra indentation within each level of @samp{do} statement (default 3). 2069Extra indentation within each level of @samp{do} statement (default 3).
2063 2070
2064@item fortran-if-indent 2071@item fortran-if-indent
2065Extra indentation within each level of @samp{if} statement (default 3). 2072Extra indentation within each level of @samp{if}, @samp{select case}, or
2066This value is also used for extra indentation within each level of the 2073@samp{where} statements (default 3).
2067Fortran 90 @samp{where} statement.
2068 2074
2069@item fortran-structure-indent 2075@item fortran-structure-indent
2070Extra indentation within each level of @samp{structure}, @samp{union}, or 2076Extra indentation within each level of @samp{structure}, @samp{union},
2071@samp{map} statements (default 3). 2077@samp{map}, or @samp{interface} statements (default 3).
2072 2078
2073@item fortran-continuation-indent 2079@item fortran-continuation-indent
2074Extra indentation for bodies of continuation lines (default 5). 2080Extra indentation for bodies of continuation lines (default 5).
2075 2081
2076@item fortran-check-all-num-for-matching-do 2082@item fortran-check-all-num-for-matching-do
2077If this is @code{nil}, indentation assumes that each @samp{do} statement 2083In Fortran77, a numbered @samp{do} statement is ended by any statement
2078ends on a @samp{continue} statement. Therefore, when computing 2084with a matching line number. It is common (but not compulsory) to use a
2079indentation for a statement other than @samp{continue}, it can save time 2085@samp{continue} statement for this purpose. If this variable has a
2080by not checking for a @samp{do} statement ending there. If this is 2086non-@code{nil} value, indenting any numbered statement must check for a
2081non-@code{nil}, indenting any numbered statement must check for a 2087@samp{do} that ends there. If you always end @samp{do} statements with
2082@samp{do} that ends there. The default is @code{nil}. 2088a @samp{continue} line (or if you use the more modern @samp{enddo}),
2089then you can speed up indentation by setting this variable to
2090@code{nil}. The default is @code{nil}.
2083 2091
2084@item fortran-blink-matching-if 2092@item fortran-blink-matching-if
2085If this is @code{t}, indenting an @samp{endif} statement moves the 2093If this is @code{t}, indenting an @samp{endif} (or @samp{enddo}
2086cursor momentarily to the matching @samp{if} statement to show where it 2094statement moves the cursor momentarily to the matching @samp{if} (or
2087is. The default is @code{nil}. 2095@samp{do}) statement to show where it is. The default is @code{nil}.
2088 2096
2089@item fortran-minimum-statement-indent-fixed 2097@item fortran-minimum-statement-indent-fixed
2090Minimum indentation for fortran statements when using fixed format 2098Minimum indentation for Fortran statements when using fixed format
2091continuation line style. Statement bodies are never indented less than 2099continuation line style. Statement bodies are never indented less than
2092this much. The default is 6. 2100this much. The default is 6.
2093 2101
2094@item fortran-minimum-statement-indent-tab 2102@item fortran-minimum-statement-indent-tab
2095Minimum indentation for fortran statements for tab format continuation line 2103Minimum indentation for Fortran statements for tab format continuation line
2096style. Statement bodies are never indented less than this much. The 2104style. Statement bodies are never indented less than this much. The
2097default is 8. 2105default is 8.
2098@end table 2106@end table
2099 2107
2108The variables controlling the indentation of comments are described in
2109the following section.
2110
2100@node Fortran Comments 2111@node Fortran Comments
2101@subsection Fortran Comments 2112@subsection Fortran Comments
2102 2113
2103 The usual Emacs comment commands assume that a comment can follow a line 2114 The usual Emacs comment commands assume that a comment can follow a
2104of code. In Fortran, the standard comment syntax requires an entire line 2115line of code. In Fortran77, the standard comment syntax requires an
2105to be just a comment. Therefore, Fortran mode replaces the standard Emacs 2116entire line to be just a comment. Therefore, Fortran mode replaces the
2106comment commands and defines some new variables. 2117standard Emacs comment commands and defines some new variables.
2107 2118
2119@vindex fortran-comment-line-start
2108 Fortran mode can also handle the Fortran90 comment syntax where comments 2120 Fortran mode can also handle the Fortran90 comment syntax where comments
2109start with @samp{!} and can follow other text. Because only some Fortran77 2121start with @samp{!} and can follow other text. Because only some Fortran77
2110compilers accept this syntax, Fortran mode will not insert such comments 2122compilers accept this syntax, Fortran mode will not insert such comments
2111unless you have said in advance to do so. To do this, set the variable 2123unless you have said in advance to do so. To do this, set the variable
2112@code{comment-start} to @samp{"!"} (@pxref{Variables}). 2124@code{fortran-comment-line-start} to @samp{"!"}.
2113 2125
2114@table @kbd 2126@table @kbd
2115@item M-; 2127@item M-;
@@ -2123,6 +2135,7 @@ Turn all lines of the region into comments, or (with argument) turn them back
2123into real code (@code{fortran-comment-region}). 2135into real code (@code{fortran-comment-region}).
2124@end table 2136@end table
2125 2137
2138@findex fortran-indent-comment
2126 @kbd{M-;} in Fortran mode is redefined as the command 2139 @kbd{M-;} in Fortran mode is redefined as the command
2127@code{fortran-indent-comment}. Like the usual @kbd{M-;} command, this 2140@code{fortran-indent-comment}. Like the usual @kbd{M-;} command, this
2128recognizes any kind of existing comment and aligns its text appropriately; 2141recognizes any kind of existing comment and aligns its text appropriately;
@@ -2178,14 +2191,6 @@ never be indented at all, no matter what the value of
2178lines are directives. Matching lines are never indented, and receive 2191lines are directives. Matching lines are never indented, and receive
2179distinctive font-locking. 2192distinctive font-locking.
2180 2193
2181@vindex comment-line-start
2182@vindex comment-line-start-skip
2183 Fortran mode introduces two variables @code{comment-line-start} and
2184@code{comment-line-start-skip}, which play for full-line comments the same
2185roles played by @code{comment-start} and @code{comment-start-skip} for
2186ordinary text-following comments. Normally these are set properly by
2187Fortran mode, so you do not need to change them.
2188
2189 The normal Emacs comment command @kbd{C-x ;} has not been redefined. If 2194 The normal Emacs comment command @kbd{C-x ;} has not been redefined. If
2190you use @samp{!} comments, this command can be used with them. Otherwise 2195you use @samp{!} comments, this command can be used with them. Otherwise
2191it is useless in Fortran mode. 2196it is useless in Fortran mode.
@@ -2204,34 +2209,28 @@ of the name never conflict because in Lisp and in Emacs it is always
2204clear from the context which one is meant. 2209clear from the context which one is meant.
2205 2210
2206@node Fortran Autofill 2211@node Fortran Autofill
2207@subsection Fortran Auto Fill Mode 2212@subsection Auto Fill in Fortran Mode
2208 2213
2209 Fortran Auto Fill mode is a minor mode which automatically splits 2214 Fortran mode has specialized support for Auto Fill mode, which is a
2210Fortran statements as you insert them when they become too wide. 2215minor mode that automatically splits statements as you insert them when
2211Splitting a statement involves making continuation lines using 2216they become too wide. Splitting a statement involves making
2212@code{fortran-continuation-string} (@pxref{ForIndent Cont}). This 2217continuation lines using @code{fortran-continuation-string}
2213splitting happens when you type @key{SPC}, @key{RET}, or @key{TAB}, and 2218(@pxref{ForIndent Cont}). This splitting happens when you type
2214also in the Fortran indentation commands. 2219@key{SPC}, @key{RET}, or @key{TAB}, and also in the Fortran indentation
2215 2220commands. You activate Auto Fill in Fortran mode in the normal way
2216@findex fortran-auto-fill-mode 2221(@pxref{Auto Fill}).
2217 @kbd{M-x fortran-auto-fill-mode} toggles Fortran Auto Fill mode,
2218which is a variant of normal Auto Fill mode (@pxref{Filling}) designed
2219for Fortran programs. Fortran Auto Fill mode is a buffer-local minor
2220mode (@pxref{Minor Modes}). When Fortran Auto Fill mode is in effect,
2221the word @samp{Fill} appears in the mode line inside the parentheses.
2222 2222
2223@vindex fortran-break-before-delimiters 2223@vindex fortran-break-before-delimiters
2224 Fortran Auto Fill mode breaks lines at spaces or delimiters when the 2224 Auto Fill breaks lines at spaces or delimiters when the lines get
2225lines get longer than the desired width (the value of @code{fill-column}). 2225longer than the desired width (the value of @code{fill-column}). The
2226The delimiters that Fortran Auto Fill mode may break at are @samp{,}, 2226delimiters (besides whitespace) that Auto Fill can break at are
2227@samp{'}, @samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, and @samp{)}. 2227@samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, @samp{<}, @samp{>},
2228The line break comes after the delimiter if the variable 2228and @samp{,}. The line break comes after the delimiter if the
2229@code{fortran-break-before-delimiters} is @code{nil}. Otherwise (and by 2229variable @code{fortran-break-before-delimiters} is @code{nil}.
2230default), the break comes before the delimiter. 2230Otherwise (and by default), the break comes before the delimiter.
2231 2231
2232 To enable this mode permanently, add a hook function to 2232 To enable Auto Fill in all Fortran buffers, add
2233@code{fortran-mode-hook} to execute @code{(fortran-auto-fill-mode 1)}. 2233@code{turn-on-auto-fill} to @code{fortran-mode-hook}. @xref{Hooks}.
2234@xref{Hooks}.
2235 2234
2236@node Fortran Columns 2235@node Fortran Columns
2237@subsection Checking Columns in Fortran 2236@subsection Checking Columns in Fortran
@@ -2280,7 +2279,7 @@ display.
2280@findex fortran-window-create-momentarily 2279@findex fortran-window-create-momentarily
2281 @kbd{C-c C-w} (@code{fortran-window-create-momentarily}) temporarily 2280 @kbd{C-c C-w} (@code{fortran-window-create-momentarily}) temporarily
2282splits the current window horizontally, making a window 72 columns 2281splits the current window horizontally, making a window 72 columns
2283wide, so you can see which lines that is too long. Type a space to 2282wide, so you can see any lines that are too long. Type a space to
2284restore the normal width. 2283restore the normal width.
2285 2284
2286@kindex C-u C-c C-w @r{(Fortran mode)} 2285@kindex C-u C-c C-w @r{(Fortran mode)}
diff --git a/man/reftex.texi b/man/reftex.texi
index 7de16dcb0e1..0d3c5bdc32e 100644
--- a/man/reftex.texi
+++ b/man/reftex.texi
@@ -9,7 +9,7 @@
9@c Version and Contact Info 9@c Version and Contact Info
10@set VERSION 4.24 10@set VERSION 4.24
11@set EDITION 4.24 11@set EDITION 4.24
12@set DATE August 2004 12@set DATE March 2005
13@set AUCTEXSITE @uref{http://www.nongnu.org/auctex/,AUCTeX distribution site} 13@set AUCTEXSITE @uref{http://www.nongnu.org/auctex/,AUCTeX distribution site}
14@set MAINTAINERSITE @uref{http://www.astro.uva.nl/~dominik/Tools/,maintainers webpage} 14@set MAINTAINERSITE @uref{http://www.astro.uva.nl/~dominik/Tools/,maintainers webpage}
15@set MAINTAINER Carsten Dominik 15@set MAINTAINER Carsten Dominik
@@ -25,7 +25,8 @@ citations and indices for LaTeX documents with Emacs.
25This is edition @value{EDITION} of the @b{Ref@TeX{}} User Manual for 25This is edition @value{EDITION} of the @b{Ref@TeX{}} User Manual for
26@b{Ref@TeX{}} @value{VERSION} 26@b{Ref@TeX{}} @value{VERSION}
27 27
28Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. 28Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2005
29Free Software Foundation, Inc.
29 30
30@quotation 31@quotation
31Permission is granted to copy, distribute and/or modify this document 32Permission is granted to copy, distribute and/or modify this document
@@ -734,9 +735,9 @@ indicating the type of the label and a unique mark. @b{Ref@TeX{}} has
734A label can be derived from context. This means, @b{Ref@TeX{}} takes 735A label can be derived from context. This means, @b{Ref@TeX{}} takes
735the context of the label definition and constructs a label from 736the context of the label definition and constructs a label from
736that@footnote{Note that the context may contain constructs which are 737that@footnote{Note that the context may contain constructs which are
737illegal in labels. @b{Ref@TeX{}} will therefore strip the accent from 738invalid in labels. @b{Ref@TeX{}} will therefore strip the accent from
738accented Latin-1 characters and remove everything else which is not 739accented Latin-1 characters and remove everything else which is not
739legal in labels. This mechanism is safe, but may not be satisfactory 740valid in labels. This mechanism is safe, but may not be satisfactory
740for non-western languages. Check the following variables if you need to 741for non-western languages. Check the following variables if you need to
741change things: @code{reftex-translate-to-ascii-function}, 742change things: @code{reftex-translate-to-ascii-function},
742@code{reftex-derive-label-parameters}, @code{reftex-label-illegal-re}, 743@code{reftex-derive-label-parameters}, @code{reftex-label-illegal-re},
@@ -2832,7 +2833,7 @@ to be changed for other languages. See the variables
2832@vindex reftex-translate-to-ascii-function 2833@vindex reftex-translate-to-ascii-function
2833@vindex reftex-label-illegal-re 2834@vindex reftex-label-illegal-re
2834Also, when a label is derived from context, @b{Ref@TeX{}} clears the 2835Also, when a label is derived from context, @b{Ref@TeX{}} clears the
2835context string from non-ASCII characters in order to make a legal label. 2836context string from non-ASCII characters in order to make a valid label.
2836If there should ever be a version of @TeX{} which allows extended 2837If there should ever be a version of @TeX{} which allows extended
2837characters @emph{in labels}, then we will have to look at the 2838characters @emph{in labels}, then we will have to look at the
2838variables @code{reftex-translate-to-ascii-function} and 2839variables @code{reftex-translate-to-ascii-function} and
@@ -4119,7 +4120,7 @@ Flags governing label insertion. The value has the form
4119 4120
4120If @var{derive}is @code{t}, @b{Ref@TeX{}} will try to derive a sensible 4121If @var{derive}is @code{t}, @b{Ref@TeX{}} will try to derive a sensible
4121label from context. A section label for example will be derived from 4122label from context. A section label for example will be derived from
4122the section heading. The conversion of the context to a legal label is 4123the section heading. The conversion of the context to a valid label is
4123governed by the specifications given in 4124governed by the specifications given in
4124@code{reftex-derive-label-parameters}. If @var{derive} is @code{nil}, 4125@code{reftex-derive-label-parameters}. If @var{derive} is @code{nil},
4125the default label will consist of the prefix and a unique number, like 4126the default label will consist of the prefix and a unique number, like
@@ -4165,7 +4166,7 @@ buffer.
4165@end deffn 4166@end deffn
4166 4167
4167@deffn Hook reftex-string-to-label-function 4168@deffn Hook reftex-string-to-label-function
4168Function to turn an arbitrary string into a legal label. 4169Function to turn an arbitrary string into a valid label.
4169@b{Ref@TeX{}}'s default function uses the variable 4170@b{Ref@TeX{}}'s default function uses the variable
4170@code{reftex-derive-label-parameters}. 4171@code{reftex-derive-label-parameters}.
4171@end deffn 4172@end deffn
@@ -4173,7 +4174,7 @@ Function to turn an arbitrary string into a legal label.
4173@deffn Hook reftex-translate-to-ascii-function 4174@deffn Hook reftex-translate-to-ascii-function
4174Filter function which will process a context string before it is used to 4175Filter function which will process a context string before it is used to
4175derive a label from it. The intended application is to convert ISO or 4176derive a label from it. The intended application is to convert ISO or
4176Mule characters into something legal in labels. The default function 4177Mule characters into something valid in labels. The default function
4177@code{reftex-latin1-to-ascii} removes the accents from Latin-1 4178@code{reftex-latin1-to-ascii} removes the accents from Latin-1
4178characters. X-Symbol (>=2.6) sets this variable to the much more 4179characters. X-Symbol (>=2.6) sets this variable to the much more
4179general @code{x-symbol-translate-to-ascii}. 4180general @code{x-symbol-translate-to-ascii}.
@@ -4187,9 +4188,9 @@ list of the following items:
4187Number of words to use. 4188Number of words to use.
4188@item @var{maxchar} 4189@item @var{maxchar}
4189Maximum number of characters in a label string. 4190Maximum number of characters in a label string.
4190@item @var{illegal} 4191@item @var{invalid}
4191@code{nil}: Throw away any words containing characters illegal in labels.@* 4192@code{nil}: Throw away any words containing characters invalid in labels.@*
4192@code{t}: Throw away only the illegal characters, not the whole word. 4193@code{t}: Throw away only the invalid characters, not the whole word.
4193@item @var{abbrev} 4194@item @var{abbrev}
4194@code{nil}: Never abbreviate words.@* 4195@code{nil}: Never abbreviate words.@*
4195@code{t}: Always abbreviate words (see @code{reftex-abbrev-parameters}).@* 4196@code{t}: Always abbreviate words (see @code{reftex-abbrev-parameters}).@*
@@ -4204,7 +4205,7 @@ List of words which should not be part of labels.
4204@end defopt 4205@end defopt
4205 4206
4206@defopt reftex-label-illegal-re 4207@defopt reftex-label-illegal-re
4207Regexp matching characters not legal in labels. 4208Regexp matching characters not valid in labels.
4208@end defopt 4209@end defopt
4209 4210
4210@defopt reftex-abbrev-parameters 4211@defopt reftex-abbrev-parameters
@@ -4557,7 +4558,7 @@ indexing from the phrase buffer.
4557 4558
4558The final entry may also be a symbol. It must have an association in 4559The final entry may also be a symbol. It must have an association in
4559the variable @code{reftex-index-macros-builtin} to specify the main 4560the variable @code{reftex-index-macros-builtin} to specify the main
4560indexing package you are using. Legal values are currently 4561indexing package you are using. Valid values are currently
4561@example 4562@example
4562default @r{The LaTeX default - unnecessary to specify this one} 4563default @r{The LaTeX default - unnecessary to specify this one}
4563multind @r{The multind.sty package} 4564multind @r{The multind.sty package}
@@ -4589,7 +4590,7 @@ Default index tag. When working with multiple indexes, RefTeX queries
4589for an index tag when creating index entries or displaying a specific 4590for an index tag when creating index entries or displaying a specific
4590index. This variable controls the default offered for these queries. 4591index. This variable controls the default offered for these queries.
4591The default can be selected with @key{RET} during selection or 4592The default can be selected with @key{RET} during selection or
4592completion. Legal values of this variable are: 4593completion. Valid values of this variable are:
4593@example 4594@example
4594nil @r{Do not provide a default index} 4595nil @r{Do not provide a default index}
4595"tag" @r{The default index tag given as a string, e.g. "idx"} 4596"tag" @r{The default index tag given as a string, e.g. "idx"}
@@ -4829,9 +4830,9 @@ This is a list of items, each item is like:
4829@example 4830@example
4830@var{type}: @r{File type like @code{"bib"} or @code{"tex"}.} 4831@var{type}: @r{File type like @code{"bib"} or @code{"tex"}.}
4831@var{def-ext}: @r{The default extension for that file type, like @code{".tex"} or @code{".bib"}.} 4832@var{def-ext}: @r{The default extension for that file type, like @code{".tex"} or @code{".bib"}.}
4832@var{other-ext}: @r{Any number of other legal extensions for this file type.} 4833@var{other-ext}: @r{Any number of other valid extensions for this file type.}
4833@end example 4834@end example
4834When a files is searched and it does not have any of the legal extensions, 4835When a files is searched and it does not have any of the valid extensions,
4835we try the default extension first, and then the naked file name. 4836we try the default extension first, and then the naked file name.
4836@end defopt 4837@end defopt
4837 4838
@@ -5456,7 +5457,7 @@ lowercase labels (default @code{t}).
5456All @file{.rel} files have a final newline to avoid queries. 5457All @file{.rel} files have a final newline to avoid queries.
5457@item 5458@item
5458Single byte representations of accented European letters (ISO-8859-1) 5459Single byte representations of accented European letters (ISO-8859-1)
5459are now legal in labels. 5460are now valid in labels.
5460@end itemize 5461@end itemize
5461 5462
5462@noindent @b{Version 3.33} 5463@noindent @b{Version 3.33}
diff --git a/man/text.texi b/man/text.texi
index 327a03116f8..958e18db8d5 100644
--- a/man/text.texi
+++ b/man/text.texi
@@ -403,13 +403,13 @@ Text}).
403* Fill Prefix:: Filling paragraphs that are indented 403* Fill Prefix:: Filling paragraphs that are indented
404 or in a comment, etc. 404 or in a comment, etc.
405* Adaptive Fill:: How Emacs can determine the fill prefix automatically. 405* Adaptive Fill:: How Emacs can determine the fill prefix automatically.
406* Longlines:: Editing text with very long lines.
406@end menu 407@end menu
407 408
408@node Auto Fill 409@node Auto Fill
409@subsection Auto Fill Mode 410@subsection Auto Fill Mode
410@cindex Auto Fill mode 411@cindex Auto Fill mode
411@cindex mode, Auto Fill 412@cindex mode, Auto Fill
412@cindex word wrap
413 413
414 @dfn{Auto Fill} mode is a minor mode in which lines are broken 414 @dfn{Auto Fill} mode is a minor mode in which lines are broken
415automatically when they become too wide. Breaking happens only when 415automatically when they become too wide. Breaking happens only when
@@ -474,16 +474,19 @@ you type or modify them in other ways. It provides an effect similar
474to typical word processor behavior. This works by running a 474to typical word processor behavior. This works by running a
475paragraph-filling command at suitable times. 475paragraph-filling command at suitable times.
476 476
477 When you are typing text, only characters which normally trigger
478auto filling, like the space character, will trigger refilling. This
479is to avoid making it too slow. Apart from self-inserting characters,
480other commands which modify the text cause refilling.
481
482 The current implementation is preliminary and probably not robust.
483We expect to improve on it.
484
485 To toggle the use of Refill mode in the current buffer, type 477 To toggle the use of Refill mode in the current buffer, type
486@kbd{M-x refill-mode}. 478@kbd{M-x refill-mode}. When you are typing text, only characters
479which normally trigger auto filling, like the space character, will
480trigger refilling. This is to avoid making it too slow. Apart from
481self-inserting characters, other commands which modify the text cause
482refilling.
483
484 The current implementation is preliminary and not robust. You can
485get better ``line wrapping'' behavior using Longlines mode.
486@xref{Longlines}. However, Longlines mode has an important
487side-effect: the newlines that it inserts for you are not saved to
488disk, so the files that you make with Longlines mode will appear to be
489completely unfilled if you edit them without Longlines mode.
487 490
488@node Fill Commands 491@node Fill Commands
489@subsection Explicit Fill Commands 492@subsection Explicit Fill Commands
@@ -745,6 +748,56 @@ line, and it should return the appropriate fill prefix based on that
745line. If it returns @code{nil}, that means it sees no fill prefix in 748line. If it returns @code{nil}, that means it sees no fill prefix in
746that line. 749that line.
747 750
751@node Longlines
752@subsection Long Lines Mode
753@cindex refilling text, word processor style
754@cindex modes, Long Lines
755@cindex word wrap
756@cindex Long Lines minor mode
757
758 Long Lines mode is a minor mode for @dfn{word wrapping}; it lets you
759edit ``unfilled'' text files, which Emacs would normally display as a
760bunch of extremely long lines. Many text editors, such as those built
761into many web browsers, normally do word wrapping.
762
763@findex longlines-mode
764 To enable Long Lines mode, type @kbd{M-x longlines-mode}. If the
765text is full of long lines, this will ``wrap'' them
766immediately---i.e., break up to fit in the window. As you edit the
767text, Long Lines mode automatically re-wraps lines by inserting or
768deleting @dfn{soft newlines} as necessary (@pxref{Hard and Soft
769Newlines}.) These soft newlines won't show up when you save the
770buffer into a file, or when you copy the text into the kill ring,
771clipboard, or a register.
772
773@findex longlines-auto-wrap
774 Word wrapping is @emph{not} the same as ordinary filling
775(@pxref{Fill Commands}). It does not contract multiple spaces into a
776single space, recognize fill prefixes (@pxref{Fill Prefix}), or
777perform adaptive filling (@pxref{Adaptive Fill}). The reason for this
778is that a wrapped line is still, conceptually, a single line. Each
779soft newline is equivalent to exactly one space in that long line, and
780vice versa. However, you can still call filling functions such as
781@kbd{M-q}, and these will work as expected, inserting soft newlines
782that won't show up on disk or when the text is copied. You can even
783rely entirely on the normal fill commands by turning off automatic
784line wrapping, with @kbd{C-u M-x longlines-auto-wrap}. To turn
785automatic line wrapping back on, type @kbd{M-x longlines-auto-wrap}.
786
787@findex longlines-show-hard-newlines
788 Whenever you type @kbd{RET}, you are inserting a hard newline. If
789you want to see where all the hard newlines are, type @kbd{M-x
790longlines-show-hard-newlines}. This will mark each hard newline with
791a special symbol. The same command with a prefix argument turns this
792display off.
793
794 Long Lines mode does not change normal text files that are already
795filled, since the existing newlines are considered hard newlines.
796Before Long Lines can do anything, you need to transform each
797paragraph into a long line. One way is to set @code{fill-column} to a
798large number (e.g., @kbd{C-u 9999 C-x f}), re-fill all the paragraphs,
799and then set @code{fill-column} back to its original value.
800
748@node Case 801@node Case
749@section Case Conversion Commands 802@section Case Conversion Commands
750@cindex case conversion 803@cindex case conversion
@@ -1053,30 +1106,35 @@ Most of them fall into pairs of opposites. They are not undoable; instead,
1053you can undo right past them. Making lines visible or invisible is simply 1106you can undo right past them. Making lines visible or invisible is simply
1054not recorded by the undo mechanism. 1107not recorded by the undo mechanism.
1055 1108
1109 Many of these commands act on the ``current'' heading line. If
1110point is on a heading line, that is the current heading line; if point
1111is on a body line, the current heading line is the nearest preceding
1112header line.
1113
1056@table @kbd 1114@table @kbd
1057@item C-c C-t 1115@item C-c C-c
1058Make all body lines in the buffer invisible (@code{hide-body}). 1116Make the current heading line's body invisible (@code{hide-entry}).
1059@item C-c C-a 1117@item C-c C-e
1060Make all lines in the buffer visible (@code{show-all}). 1118Make the current heading line's body visible (@code{show-entry}).
1061@item C-c C-d 1119@item C-c C-d
1062Make everything under this heading invisible, not including this 1120Make everything under the current heading invisible, not including the
1063heading itself (@code{hide-subtree}). 1121heading itself (@code{hide-subtree}).
1064@item C-c C-s 1122@item C-c C-s
1065Make everything under this heading visible, including body, 1123Make everything under the current heading visible, including body,
1066subheadings, and their bodies (@code{show-subtree}). 1124subheadings, and their bodies (@code{show-subtree}).
1067@item C-c C-l 1125@item C-c C-l
1068Make the body of this heading line, and of all its subheadings, 1126Make the body of the current heading line, and of all its subheadings,
1069invisible (@code{hide-leaves}). 1127invisible (@code{hide-leaves}).
1070@item C-c C-k 1128@item C-c C-k
1071Make all subheadings of this heading line, at all levels, visible 1129Make all subheadings of the current heading line, at all levels,
1072(@code{show-branches}). 1130visible (@code{show-branches}).
1073@item C-c C-i 1131@item C-c C-i
1074Make immediate subheadings (one level down) of this heading line 1132Make immediate subheadings (one level down) of the current heading
1075visible (@code{show-children}). 1133line visible (@code{show-children}).
1076@item C-c C-c 1134@item C-c C-t
1077Make this heading line's body invisible (@code{hide-entry}). 1135Make all body lines in the buffer invisible (@code{hide-body}).
1078@item C-c C-e 1136@item C-c C-a
1079Make this heading line's body visible (@code{show-entry}). 1137Make all lines in the buffer visible (@code{show-all}).
1080@item C-c C-q 1138@item C-c C-q
1081Hide everything except the top @var{n} levels of heading lines 1139Hide everything except the top @var{n} levels of heading lines
1082(@code{hide-sublevels}). 1140(@code{hide-sublevels}).
@@ -1091,22 +1149,21 @@ the headings leading up from there to the top level of the outline
1091@kindex C-c C-c @r{(Outline mode)} 1149@kindex C-c C-c @r{(Outline mode)}
1092@kindex C-c C-e @r{(Outline mode)} 1150@kindex C-c C-e @r{(Outline mode)}
1093 Two commands that are exact opposites are @kbd{C-c C-c} 1151 Two commands that are exact opposites are @kbd{C-c C-c}
1094(@code{hide-entry}) and @kbd{C-c C-e} (@code{show-entry}). They are 1152(@code{hide-entry}) and @kbd{C-c C-e} (@code{show-entry}). They apply
1095used with point on a heading line, and apply only to the body lines of 1153to the body lines directly following the current heading line.
1096that heading. Subheadings and their bodies are not affected. 1154Subheadings and their bodies are not affected.
1097 1155
1098@findex hide-subtree 1156@findex hide-subtree
1099@findex show-subtree 1157@findex show-subtree
1100@kindex C-c C-s @r{(Outline mode)} 1158@kindex C-c C-s @r{(Outline mode)}
1101@kindex C-c C-d @r{(Outline mode)} 1159@kindex C-c C-d @r{(Outline mode)}
1102@cindex subtree (Outline mode) 1160@cindex subtree (Outline mode)
1103 Two more powerful opposites are @kbd{C-c C-d} (@code{hide-subtree}) and 1161 Two more powerful opposites are @kbd{C-c C-d} (@code{hide-subtree})
1104@kbd{C-c C-s} (@code{show-subtree}). Both expect to be used when point is 1162and @kbd{C-c C-s} (@code{show-subtree}). Both apply to the current
1105on a heading line, and both apply to all the lines of that heading's 1163heading line's @dfn{subtree}: its body, all its subheadings, both
1106@dfn{subtree}: its body, all its subheadings, both direct and indirect, and 1164direct and indirect, and all of their bodies. In other words, the
1107all of their bodies. In other words, the subtree contains everything 1165subtree contains everything following the current heading line, up to
1108following this heading line, up to and not including the next heading of 1166and not including the next heading of the same or higher rank.@refill
1109the same or higher rank.@refill
1110 1167
1111@findex hide-leaves 1168@findex hide-leaves
1112@findex show-branches 1169@findex show-branches
@@ -1131,9 +1188,12 @@ they were invisible.@refill
1131@kindex C-c C-a @r{(Outline mode)} 1188@kindex C-c C-a @r{(Outline mode)}
1132 Two commands have a blanket effect on the whole file. @kbd{C-c C-t} 1189 Two commands have a blanket effect on the whole file. @kbd{C-c C-t}
1133(@code{hide-body}) makes all body lines invisible, so that you see just 1190(@code{hide-body}) makes all body lines invisible, so that you see just
1134the outline structure. @kbd{C-c C-a} (@code{show-all}) makes all lines 1191the outline structure (as a special exception, it will not hide lines
1135visible. These commands can be thought of as a pair of opposites even 1192at the top of the file, preceding the first header line, even though
1136though @kbd{C-c C-a} applies to more than just body lines. 1193these are technically body lines). @kbd{C-c C-a} (@code{show-all})
1194makes all lines visible. These commands can be thought of as a pair
1195of opposites even though @kbd{C-c C-a} applies to more than just body
1196lines.
1137 1197
1138@findex hide-sublevels 1198@findex hide-sublevels
1139@kindex C-c C-q @r{(Outline mode)} 1199@kindex C-c C-q @r{(Outline mode)}
@@ -1284,39 +1344,45 @@ automatically by putting this in your @file{.emacs} file:
1284@cindex @TeX{} mode 1344@cindex @TeX{} mode
1285@cindex La@TeX{} mode 1345@cindex La@TeX{} mode
1286@cindex Sli@TeX{} mode 1346@cindex Sli@TeX{} mode
1347@cindex Doc@TeX{} mode
1287@cindex mode, @TeX{} 1348@cindex mode, @TeX{}
1288@cindex mode, La@TeX{} 1349@cindex mode, La@TeX{}
1289@cindex mode, Sli@TeX{} 1350@cindex mode, Sli@TeX{}
1351@cindex mode, Doc@TeX{}
1290@findex tex-mode 1352@findex tex-mode
1291@findex plain-tex-mode 1353@findex plain-tex-mode
1292@findex latex-mode 1354@findex latex-mode
1293@findex slitex-mode 1355@findex slitex-mode
1356@findex doctex-mode
1294 1357
1295 @TeX{} is a powerful text formatter written by Donald Knuth; it is also 1358 @TeX{} is a powerful text formatter written by Donald Knuth; it is also
1296free, like GNU Emacs. La@TeX{} is a simplified input format for @TeX{}, 1359free, like GNU Emacs. La@TeX{} is a simplified input format for @TeX{},
1297implemented by @TeX{} macros; it comes with @TeX{}. Sli@TeX{} is a special 1360implemented by @TeX{} macros; it comes with @TeX{}. Sli@TeX{} is a special
1298form of La@TeX{}.@footnote{Sli@TeX{} is obsoleted by the @samp{slides} 1361form of La@TeX{}.@footnote{Sli@TeX{} is obsoleted by the @samp{slides}
1299document class in recent La@TeX{} versions.} 1362document class in recent La@TeX{} versions.} Doc@TeX{} (@file{.dtx})
1363is a special file format in which the La@TeX{} sources are written,
1364combining sources with documentation.
1300 1365
1301 Emacs has a special @TeX{} mode for editing @TeX{} input files. 1366 Emacs has a special @TeX{} mode for editing @TeX{} input files.
1302It provides facilities for checking the balance of delimiters and for 1367It provides facilities for checking the balance of delimiters and for
1303invoking @TeX{} on all or part of the file. 1368invoking @TeX{} on all or part of the file.
1304 1369
1305@vindex tex-default-mode 1370@vindex tex-default-mode
1306 @TeX{} mode has three variants, Plain @TeX{} mode, La@TeX{} mode, and 1371 @TeX{} mode has four variants: Plain @TeX{} mode, La@TeX{} mode,
1307Sli@TeX{} mode (these three distinct major modes differ only slightly). 1372Sli@TeX{} mode, and Doc@TeX{} mode (these distinct major modes differ
1308They are designed for editing the three different formats. The command 1373only slightly). They are designed for editing the four different
1309@kbd{M-x tex-mode} looks at the contents of the buffer to determine 1374formats. The command @kbd{M-x tex-mode} looks at the contents of the
1310whether the contents appear to be either La@TeX{} input or Sli@TeX{} 1375buffer to determine whether the contents appear to be either La@TeX{}
1311input; if so, it selects the appropriate mode. If the file contents do 1376input, Sli@TeX{}, or Doc@TeX{} input; if so, it selects the
1312not appear to be La@TeX{} or Sli@TeX{}, it selects Plain @TeX{} mode. 1377appropriate mode. If the file contents do not appear to be La@TeX{},
1313If the contents are insufficient to determine this, the variable 1378Sli@TeX{} or Doc@TeX{}, it selects Plain @TeX{} mode. If the contents
1379are insufficient to determine this, the variable
1314@code{tex-default-mode} controls which mode is used. 1380@code{tex-default-mode} controls which mode is used.
1315 1381
1316 When @kbd{M-x tex-mode} does not guess right, you can use the commands 1382 When @kbd{M-x tex-mode} does not guess right, you can use the commands
1317@kbd{M-x plain-tex-mode}, @kbd{M-x latex-mode}, and @kbd{M-x 1383@kbd{M-x plain-tex-mode}, @kbd{M-x latex-mode}, @kbd{M-x slitex-mode},
1318slitex-mode} to select explicitly the particular variants of @TeX{} 1384and @kbd{doctex-mode} to select explicitly the particular variants of
1319mode. 1385@TeX{} mode.
1320 1386
1321@menu 1387@menu
1322* Editing: TeX Editing. Special commands for editing in TeX mode. 1388* Editing: TeX Editing. Special commands for editing in TeX mode.
diff --git a/man/xresources.texi b/man/xresources.texi
index b1b7d230660..aaf7262d060 100644
--- a/man/xresources.texi
+++ b/man/xresources.texi
@@ -7,10 +7,14 @@
7 You can customize some X-related aspects of Emacs behavior using X 7 You can customize some X-related aspects of Emacs behavior using X
8resources, as is usual for programs that use X. On MS-Windows, you 8resources, as is usual for programs that use X. On MS-Windows, you
9can customize some of the same aspects using the system registry. 9can customize some of the same aspects using the system registry.
10@xref{MS-Windows Registry}. X resources are the only way to customize 10@xref{MS-Windows Registry}.
11tooltip windows and LessTif menus, since the libraries that implement 11
12them don't provide for customization through Emacs. This appendix 12 When Emacs is built using an `X toolkit', such as Lucid or LessTif,
13describes the X resources that Emacs recognizes and how to use them. 13you need to use X resources to customize the appearance of the
14widgets, including the menu-bar, scroll-bar, and dialog boxes. This
15is because the libraries that implement these don't provide for
16customization through Emacs. GTK+ widgets use a separate system of
17`GTK resources', which we will also describe.
14 18
15@menu 19@menu
16* Resources:: Using X resources with Emacs (in general). 20* Resources:: Using X resources with Emacs (in general).
@@ -48,7 +52,8 @@ Registry, under the key @samp{HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs}
48and then under the key @samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}. 52and then under the key @samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}.
49The menu and scrollbars are native widgets on MS-Windows, so they are 53The menu and scrollbars are native widgets on MS-Windows, so they are
50only customizable via the system-wide settings in the Display Control 54only customizable via the system-wide settings in the Display Control
51Panel. 55Panel. You can also set resources using the @samp{-xrm} command line
56option (see below.)
52 57
53 Programs define named resources with particular meanings. They also 58 Programs define named resources with particular meanings. They also
54define how to group resources into named classes. For instance, in 59define how to group resources into named classes. For instance, in
@@ -58,6 +63,11 @@ of the external border. Both of these resources are part of the
58@samp{BorderWidth} class. Case distinctions are significant in these 63@samp{BorderWidth} class. Case distinctions are significant in these
59names. 64names.
60 65
66 Every resource definition is associated with a specific program
67name---the name of the executable file that you ran. For Emacs, that
68is normally @samp{emacs}. To specify a definition for all instances
69of Emacs, regardless of their names, use @samp{Emacs}.
70
61 In @file{~/.Xdefaults}, you can specify a value for a single resource 71 In @file{~/.Xdefaults}, you can specify a value for a single resource
62on one line, like this: 72on one line, like this:
63 73
@@ -86,11 +96,8 @@ emacs.borderWidth: 4
86 96
87 The order in which the lines appear in the file does not matter. 97 The order in which the lines appear in the file does not matter.
88Also, command-line options always override the X resources file. 98Also, command-line options always override the X resources file.
89 99Here is a list of X command-line options and their corresponding
90 The string @samp{emacs} in the examples above is also a resource 100resource names.
91name. It actually represents the name of the executable file that you
92invoke to run Emacs. If Emacs is installed under a different name, it
93looks for resources under that name instead of @samp{emacs}.
94 101
95@table @samp 102@table @samp
96@item -name @var{name} 103@item -name @var{name}
@@ -272,6 +279,17 @@ especially slow X client/server links.
272@item @code{verticalScrollBars} (class @code{ScrollBars}) 279@item @code{verticalScrollBars} (class @code{ScrollBars})
273Give frames scroll bars if @samp{on}; don't have scroll bars if 280Give frames scroll bars if @samp{on}; don't have scroll bars if
274@samp{off}. 281@samp{off}.
282
283@item @code{visualClass} (class @code{VisualClass})
284Specify the ``visual'' that X should use. This tells X how to handle
285colors.
286
287The value should start with one of @samp{TrueColor},
288@samp{PseudoColor}, @samp{DirectColor}, @samp{StaticColor},
289@samp{GrayScale}, and @samp{StaticGray}, followed by
290@samp{-@var{depth}}, where @var{depth} is the number of color planes.
291Most terminals only allow a few ``visuals,'' and the @samp{dpyinfo}
292program outputs information saying which ones.
275@end table 293@end table
276 294
277@node Face Resources 295@node Face Resources
@@ -552,31 +570,32 @@ The color for the border shadow, on the top and the left.
552@cindex @file{~/.gtkrc-2.0} file 570@cindex @file{~/.gtkrc-2.0} file
553@cindex @file{~/.emacs.d/gtkrc} file 571@cindex @file{~/.emacs.d/gtkrc} file
554 572
555 If the Emacs installed at your site was built to use the GTK widget set, 573 If Emacs was built to use the GTK widget set, then the menu bar,
556then the menu bar, scroll bar and the dialogs can be customized with 574scroll bar and the dialogs are customized with the standard GTK
557the standard GTK @file{~/.gtkrc-2.0} file or with the Emacs specific 575customization file, @file{~/.gtkrc-2.0}, or with the Emacs specific
558@file{~/.emacs.d/gtkrc} file; note that these files are only for 576file @file{~/.emacs.d/gtkrc}. We recommend that you use
559customizing specific GTK widget features. To customize Emacs font, 577@file{~/.emacs.d/gtkrc} for customizations, since @file{~/.gtkrc-2.0}
560background, faces etc., use the normal X resources, see @ref{Resources}. 578seems to be ignored when running GConf with GNOME. These files apply
579only to GTK widget features. To customize Emacs font, background,
580faces, etc., use the normal X resources (@pxref{Resources}).
561 581
562 Some GTK themes override these mechanisms, which means that using 582 Some GTK themes override these mechanisms, which means that using
563these mechanisms will not work to customize them. We recommend that 583these mechanisms will not work to customize them.
564you use @file{~/.emacs.d/gtkrc} for customizations, since
565@file{~/.gtkrc-2.0} seems to be ignored when running GConf with GNOME.
566 584
567 In these files you first defines a style and then how to apply that style 585 In these files you first define a style and say what it means; then
568to widgets (@pxref{GTK widget names}). Here is an example of how to 586you specify to apply the style to various widget types (@pxref{GTK
569change the font for Emacs menus: 587widget names}). Here is an example of how to change the font for
588Emacs menus:
570 589
571@smallexample 590@smallexample
572# This is a comment. 591# @r{Define the style @samp{metafont}.}
573style "menufont" 592style "menufont"
574@{ 593@{
575 font_name = "helvetica bold 14" # This is a Pango font name 594 font_name = "helvetica bold 14" # This is a Pango font name
576@} 595@}
577 596
597# @r{Specify that widget type @samp{*emacs-menuitem*} uses @samp{metafont}.}
578widget "*emacs-menuitem*" style "menufont" 598widget "*emacs-menuitem*" style "menufont"
579
580@end smallexample 599@end smallexample
581 600
582 Here is a more elaborate example, showing how to change the parts of 601 Here is a more elaborate example, showing how to change the parts of
@@ -585,72 +604,74 @@ the scroll bar:
585@smallexample 604@smallexample
586style "scroll" 605style "scroll"
587@{ 606@{
588 fg[NORMAL] = "red"@ @ @ @ @ # The arrow color. 607 fg[NORMAL] = "red"@ @ @ @ @ # @r{The arrow color.}
589 bg[NORMAL] = "yellow"@ @ # The thumb and background around the arrow. 608 bg[NORMAL] = "yellow"@ @ # @r{The thumb and background around the arrow.}
590 bg[ACTIVE] = "blue"@ @ @ @ # The trough color. 609 bg[ACTIVE] = "blue"@ @ @ @ # @r{The trough color.}
591 bg[PRELIGHT] = "white"@ # The thumb color when the mouse is over it. 610 bg[PRELIGHT] = "white"@ # @r{The thumb color when the mouse is over it.}
592@} 611@}
593 612
594widget "*verticalScrollBar*" style "scroll" 613widget "*verticalScrollBar*" style "scroll"
595@end smallexample 614@end smallexample
596 615
597 There are some things you can set without using any style or widget name, 616 There are also parameters that affect GTK as a whole. For example,
598which affect GTK as a whole. Most of these are poorly documented, but can 617the property @code{gtk-font-name} sets the default font for GTK. You
599be found in the `Properties' section of the documentation page for 618must use Pango font names (@pxref{GTK styles}). A GTK resources file
600@code{GtkSetting}, in the GTK document references below. 619that just sets a default font looks like this:
601
602One property of interest is @code{gtk-font-name} which sets the default
603font for GTK; you must use Pango font names (@pxref{GTK styles}). A
604@file{~/.gtkrc-2.0} file that just sets a default font looks like this:
605 620
606@smallexample 621@smallexample
607gtk-font-name = "courier 12" 622gtk-font-name = "courier 12"
608@end smallexample 623@end smallexample
609 624
610 625 The GTK resources file is fully described in the GTK API document.
611 If GTK at your site is installed under @var{prefix}, 626This can be found in
612the resource file syntax is fully described in the GTK API 627@file{@var{prefix}/share/gtk-doc/html/gtk/gtk-resource-files.html},
613document 628where @file{prefix} is the directory in which the GTK libraries were
614@file{@var{prefix}/share/gtk-doc/html/gtk/gtk-resource-files.html}. 629installed (usually @file{/usr} or @file{/usr/local}). You can also
615@var{prefix} is usually @file{/usr} or @file{/usr/local}. 630find the document online, at
616You can find the same document online at
617@uref{http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html}. 631@uref{http://developer.gnome.org/doc/API/2.0/gtk/gtk-Resource-Files.html}.
618 632
619
620@menu 633@menu
621* GTK widget names:: How widgets in GTK are named in general. 634* GTK widget names:: How widgets in GTK are named in general.
622* GTK names in Emacs:: GTK widget names in Emacs. 635* GTK Names in Emacs:: GTK widget names in Emacs.
623* GTK styles:: What can be customized in a GTK widget. 636* GTK styles:: What can be customized in a GTK widget.
624@end menu 637@end menu
625 638
626
627@node GTK widget names 639@node GTK widget names
628@appendixsubsec GTK widget names 640@appendixsubsec GTK widget names
629@cindex GTK widget names 641@cindex GTK widget names
630 642
631 Widgets are specified by widget class or by widget name. 643 A GTK widget is specified by its @dfn{widget class} and
632The widget class is the type of the widget, for example @code{GtkMenuBar}. 644@dfn{widget name}. The widget class is the type of the widget: for
633The widget name is the name given to a specific widget within a program. 645example, @code{GtkMenuBar}. The widget name is the name given to a
634A widget always have a class but it is not mandatory to give a name to 646specific widget. A widget always has a class, but need not have a
635a widget. Absolute names are sequences of widget names or 647name.
636widget classes, corresponding to hierarchies of widgets embedded within
637other widgets. For example, if a @code{GtkWindow} contains a @code{GtkVBox}
638which in turn contains a @code{GtkMenuBar}, the absolute class name
639is @code{GtkWindow.GtkVBox.GtkMenuBar}.
640 648
641@noindent 649 @dfn{Absolute names} are sequences of widget names or widget
642If the widgets are named ``top'', ``box'' and ``menubar'', the absolute 650classes, corresponding to hierarchies of widgets embedded within
643widget name is @code{top.box.menubar}, 651other widgets. For example, if a @code{GtkWindow} named @code{top}
652contains a @code{GtkVBox} named @code{box}, which in turn contains
653a @code{GtkMenuBar} called @code{menubar}, the absolute class name
654of the menu-bar widget is @code{GtkWindow.GtkVBox.GtkMenuBar}, and
655its absolute widget name is @code{top.box.menubar}.
644 656
645 When assigning a style to a widget, you can use the absolute class 657 When assigning a style to a widget, you can use the absolute class
646name or the absolute widget name. 658name or the absolute widget name.
647There are two commands: @code{widget_class} will assign a style to 659
648widgets, matching only against the absolute class name. 660 There are two commands to specify changes for widgets:
649The command @code{widget} will match the absolute widget name, 661
650but if there is no name for a widget in the hierarchy, the class is matched. 662@table @asis
651These commands require the absolute name and the style name to be 663@item @code{widget_class}
652within double quotes. These commands are written at the top level in a 664specifies a style for widgets based on the absolute class name.
653@file{~/.gtkrc-2.0} file, like this: 665
666@item @code{widget}
667specifies a style for widgets based on the absolute class name,
668or just the class.
669@end table
670
671@noindent
672You must specify the class and the style in double-quotes, and put
673these commands at the top level in the GTK customization file, like
674this:
654 675
655@smallexample 676@smallexample
656style "menufont" 677style "menufont"
@@ -662,18 +683,17 @@ widget "top.box.menubar" style "menufont"
662widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "menufont" 683widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "menufont"
663@end smallexample 684@end smallexample
664 685
665 686 Matching of absolute names uses shell wildcard syntax: @samp{*}
666 Matching of absolute names is done with shell ``glob'' syntax, that is 687matches zero or more characters and @samp{?} matches one character.
667@samp{*} matches zero or more characters and @samp{?} matches one character. 688This example assigns @code{base_style} to all widgets:
668So the following would assign @code{base_style} to all widgets:
669 689
670@smallexample 690@smallexample
671widget "*" style "base_style" 691widget "*" style "base_style"
672@end smallexample 692@end smallexample
673 693
674 Given the absolute class name @code{GtkWindow.GtkVBox.GtkMenuBar} 694 Given the absolute class name @code{GtkWindow.GtkVBox.GtkMenuBar}
675and the corresponding absolute widget name @code{top.box.menubar}, 695and the corresponding absolute widget name @code{top.box.menubar}, all
676the following all assign @code{my_style} to the menu bar: 696these examples specify @code{my_style} for the menu bar:
677 697
678@smallexample 698@smallexample
679widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "my_style" 699widget_class "GtkWindow.GtkVBox.GtkMenuBar" style "my_style"
@@ -685,17 +705,17 @@ widget "*menubar" style "my_style"
685widget "*menu*" style "my_style" 705widget "*menu*" style "my_style"
686@end smallexample 706@end smallexample
687 707
688@node GTK names in Emacs 708@node GTK Names in Emacs
689@appendixsubsec GTK names in Emacs 709@appendixsubsec GTK Widget Names in Emacs
690@cindex GTK widget names 710@cindex GTK widget names
691@cindex GTK widget classes 711@cindex GTK widget classes
692 712
693 In Emacs the top level widget for a frame is a @code{GtkWindow} that 713 In Emacs, the top level widget for a frame is a @code{GtkWindow}
694contains a @code{GtkVBox}. The @code{GtkVBox} contains the 714that contains a @code{GtkVBox}. The @code{GtkVBox} contains the
695@code{GtkMenuBar} and a @code{GtkFixed} widget. 715@code{GtkMenuBar} and a @code{GtkFixed} widget. The vertical scroll
696The vertical scroll bars, @code{GtkVScrollbar}, 716bars, @code{GtkVScrollbar}, are contained in the @code{GtkFixed}
697are contained in the @code{GtkFixed} widget. 717widget. The text you write in Emacs is drawn in the @code{GtkFixed}
698The text you write in Emacs is drawn in the @code{GtkFixed} widget. 718widget.
699 719
700 Dialogs in Emacs are @code{GtkDialog} widgets. The file dialog is a 720 Dialogs in Emacs are @code{GtkDialog} widgets. The file dialog is a
701@code{GtkFileSelection} widget. 721@code{GtkFileSelection} widget.
@@ -759,14 +779,14 @@ widget "*emacs-filedialog* style "my_file_style"
759widget "*emacs-menuitem* style "my_menu_style" 779widget "*emacs-menuitem* style "my_menu_style"
760@end smallexample 780@end smallexample
761 781
762 An alternative is to put customization into @file{~/.emacs.d/gtkrc}. 782 If you specify a customization in @file{~/.emacs.d/gtkrc}, then it
763This file is only read by Emacs, so anything in @file{~/.emacs.d/gtkrc} 783automatically applies only to Emacs, since other programs don't read
764affects Emacs but leaves other applications unaffected. 784that file. For example, the drop down menu in the file dialog can not
765For example, the drop down menu in the file dialog can not 785be customized by any absolute widget name, only by an absolute class
766be customized by any absolute widget name, only by an absolute 786name. This is because the widgets in the drop down menu do not
767class name. This is so because the widgets in the drop down menu does not 787have names and the menu is not contained in the Emacs GtkWindow. To
768have names and the menu is not contained in the Emacs GtkWindow. 788have all menus in Emacs look the same, use this in
769To have all menus in Emacs look the same, use this in @file{~/.emacs.d/gtkrc}: 789@file{~/.emacs.d/gtkrc}:
770 790
771@smallexample 791@smallexample
772widget_class "*Menu*" style "my_menu_style" 792widget_class "*Menu*" style "my_menu_style"
@@ -777,16 +797,16 @@ widget_class "*Menu*" style "my_menu_style"
777@cindex GTK styles 797@cindex GTK styles
778 798
779 In a GTK style you specify the appearance widgets shall have. You 799 In a GTK style you specify the appearance widgets shall have. You
780can specify foreground and background color, background pixmap and font. 800can specify foreground and background color, background pixmap and
781The edit widget (where you edit the text) in Emacs is a GTK widget, 801font. The edit widget (where you edit the text) in Emacs is a GTK
782but trying to specify a style for the edit widget will have no effect. 802widget, but trying to specify a style for the edit widget will have no
783This is so that Emacs compiled for GTK is compatible with Emacs compiled 803effect. This is so that Emacs compiled for GTK is compatible with
784for other X toolkits. The settings for foreground, background and font 804Emacs compiled for other X toolkits. The settings for foreground,
785for the edit widget is taken from the X resources; @pxref{Resources}. 805background and font for the edit widget is taken from the X resources;
786Here is an example of two style declarations, ``default'' and ``ruler'': 806@pxref{Resources}. Here is an example of two style declarations,
807@samp{default} and @samp{ruler}:
787 808
788@smallexample 809@smallexample
789
790pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps" 810pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"
791 811
792style "default" 812style "default"
@@ -821,12 +841,13 @@ style "ruler" = "default"
821 841
822@end smallexample 842@end smallexample
823 843
824 The style ``ruler'' inherits from ``default''. This way you can build 844 The style @samp{ruler} inherits from @samp{default}. This way you can build
825on existing styles. The syntax for fonts and colors is described below. 845on existing styles. The syntax for fonts and colors is described below.
826 846
827 As this example shows, it is possible to specify several values 847 As this example shows, it is possible to specify several values for
828for foreground and background depending on which state the widget has. 848foreground and background depending on the widget's @dfn{state}. The
829The possible states are 849possible states are:
850
830@table @code 851@table @code
831@item NORMAL 852@item NORMAL
832This is the default state for widgets. 853This is the default state for widgets.
@@ -846,71 +867,73 @@ be selected text or items selected in a list.
846There is no place in Emacs where this setting has any effect. 867There is no place in Emacs where this setting has any effect.
847@item INSENSITIVE 868@item INSENSITIVE
848This is the state for widgets that are visible, but they can not be 869This is the state for widgets that are visible, but they can not be
849manipulated like they normally can. For example, buttons that can't be 870manipulated in the usual way---for example, buttons that can't be
850pressed and menu items that can't be selected. 871pressed, and disabled menu items. To display disabled menu items in
851Text for menu items that are not available can be set to yellow with 872yellow, use @code{fg[INSENSITIVE] = "yellow"}.
852@code{fg[INSENSITIVE] = "yellow"}.
853@end table 873@end table
854 874
855Here are the things that can go in a style declaration: 875 Here are the things that can go in a style declaration:
856 876
857@table @code 877@table @code
858@item bg[@var{state}] = @var{color} 878@item bg[@var{state}] = @var{color}
859This is the background color widgets use. This background is not used for 879This specifies the background color for the widget. Note that
860editable text, use @code{base} for that. 880editable text doesn't use @code{bg}; it uses @code{base} instead.
861 881
862@item base[@var{state}] = @var{color} 882@item base[@var{state}] = @var{color}
863This is the background color for editable text. 883This specifies the background color for editable text. In Emacs, this
864In Emacs, this color is used for the background of the text fields in the 884color is used for the background of the text fields in the file
865file dialog. 885dialog.
866 886
867@item bg_pixmap[@var{state}] = "@var{pixmap}" 887@item bg_pixmap[@var{state}] = "@var{pixmap}"
868You can specify a pixmap to be used instead of the background color. 888This specifies an image background (instead of a background color).
869@var{pixmap} is a file name. GTK can use a number of file formats, 889@var{pixmap} should be the image file name. GTK can use a number of
870including XPM, XBM, GIF, JPEG and PNG. If you want a widget to use the same 890image file formats, including XPM, XBM, GIF, JPEG and PNG. If you
871pixmap as its parent, use @samp{<parent>}. If you don't want any 891want a widget to use the same image as its parent, use
872pixmap use @samp{<none>}. Using @samp{<none>} can be useful 892@samp{<parent>}. If you don't want any image, use @samp{<none>}.
873if your style inherits a style that does specify a pixmap. 893@samp{<none>} is the way to cancel a background image inherited from a
874 894parent style.
875 GTK looks for the pixmap in directories specified in @code{pixmap_path}. 895
876It is not possible to refer to a file by its absolute path name. 896You can't specify the file by its absolute file name. GTK looks for
877@code{pixmap_path} is a colon-separated list of directories within double 897the pixmap file in directories specified in @code{pixmap_path}.
878quotes, specified at the top level in a @file{gtkrc} file (i.e. not inside 898@code{pixmap_path} is a colon-separated list of directories within
879a style definition; see example above): 899double quotes, specified at the top level in a @file{gtkrc} file
900(i.e. not inside a style definition; see example above):
880 901
881@smallexample 902@smallexample
882pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps" 903pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"
883@end smallexample 904@end smallexample
884 905
885@item fg[@var{state}] = @var{color} 906@item fg[@var{state}] = @var{color}
886This is the foreground color widgets use. This is the color 907This specifies the foreground color for widgets to use. It is the
887of text in menus and buttons. It is also the color for the arrows in the 908color of text in menus and buttons, and the color for the arrows in
888scroll bar. For editable text, use @code{text}. 909the scroll bar. For editable text, use @code{text}.
889 910
890@item text[@var{state}] = @var{color} 911@item text[@var{state}] = @var{color}
891This is the color for editable text. In Emacs, this color is used for the 912This is the color for editable text. In Emacs, this color is used for the
892text fields in the file dialog. 913text fields in the file dialog.
893 914
894@item font_name = "@var{font}" 915@item font_name = "@var{font}"
895This is the font a widget shall use. @var{font} is a Pango font name, 916This specifies the the font for text in the widget. @var{font} is a
896for example ``Sans Italic 10'', ``Helvetica Bold 12'', ``Courier 14'', 917Pango font name, for example @samp{Sans Italic 10}, @samp{Helvetica
897``Times 18''. See below for exact syntax. The names are case insensitive. 918Bold 12}, @samp{Courier 14}, @samp{Times 18}. See below for exact
919syntax. The names are case insensitive.
898@end table 920@end table
899 921
900 Colors are specified in three ways, a name, a hexadecimal form or 922 There are three ways to specify a color: by name, in hexadecimal
901an RGB triplet. 923form, and with an RGB triplet.
902 924
903@noindent 925@noindent
904A color name is written within double quotes, for example @code{"red"}. 926A color name is written within double quotes, for example @code{"red"}.
905 927
906@noindent 928@noindent
907A hexadecimal form is written within double quotes. There are four forms, 929Hexadecimal form is the same as in X:
908@code{#rrrrggggbbbb}, @code{#rrrgggbbb}, 930@code{#@var{rrrr}@var{gggg}@var{bbbb}}, where all three color specs
909@code{#rrggbb}, or @code{#rgb}. In each of these r, g and b are hex digits. 931must have the same number of hex digits (1, 2, 3 or 4).
910 932
911@noindent 933@noindent
912An RGB triplet looks like @code{@{ r, g, b @}}, where r, g and b are either 934An RGB triplet looks like @code{@{ @var{r}, @var{g}, @var{b} @}},
913integers in the range 0-65535 or floats in the range 0.0-1.0. 935where @var{r}, @var{g} and @var{b} are either integers in the range
9360-65535 or floats in the range 0.0-1.0.
914 937
915 Pango font names have the form ``@var{family-list} @var{style-options} 938 Pango font names have the form ``@var{family-list} @var{style-options}
916@var{size}''. 939@var{size}''.
@@ -935,8 +958,9 @@ these is @code{normal}.
935 958
936@noindent 959@noindent
937A `style' corresponds to the fourth part of an X font name. In X font 960A `style' corresponds to the fourth part of an X font name. In X font
938names it is the character ``r'', ``i'' or ``o''; in Pango font names the 961names it is the character @samp{r}, @samp{i} or @samp{o}; in Pango
939corresponding values are @code{normal}, @code{italic}, or @code{oblique}. 962font names the corresponding values are @code{normal}, @code{italic},
963or @code{oblique}.
940 964
941@noindent 965@noindent
942A `variant' is either @code{normal} or @code{small-caps}. 966A `variant' is either @code{normal} or @code{small-caps}.
diff --git a/src/ChangeLog b/src/ChangeLog
index 54b54b95f27..c3f13e624a8 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,54 @@
12005-03-30 Kim F. Storm <storm@cua.dk>
2
3 * xdisp.c (display_line): Allow multiple overlay arrows in window.
4
52005-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
6
7 * fileio.c (Fexpand_file_name): Use IS_DEVICE_SEP.
8 (file_name_absolute_p): New fun, extracted from Ffile_name_absolute_p.
9 (Ffile_name_absolute_p): Use it.
10 (search_embedded_absfilename): New fun, extracted from
11 Fsubstitute_in_file_name. Use file_name_absolute_p.
12 Free the pw data after use.
13 (Fsubstitute_in_file_name): Use it.
14 After cutting a prefix, re-check file-name-handler.
15
162005-03-26 Lennart Borgman <lennart.borgman.073@student.lu.se>
17
18 * w32term.h (x_output): add focus_state.
19
20 * w32term.c (x_focus_changed, w32_detect_focus_change): New functions.
21 (w32_read_socket) [WM_SETFOCUS]: Call w32_detect_focus_change.
22
232005-03-25 Stefan Monnier <monnier@iro.umontreal.ca>
24
25 * minibuf.c (Fminibuffer_complete_and_exit, Fself_insert_and_exit):
26 Use Fexit_minibuffer.
27 (Fexit_minibuffer): Mark it as no-return, deactivate the mark.
28
292005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
30
31 * dired.c (Ffile_attributes): Add a missing gcpro.
32
33 * alloc.c (make_number): The arg can be bigger than `int'.
34 * lisp.h (make_number): Make prototype more precise.
35
36 * process.c, dired.c (Vfile_name_coding_system)
37 (Vdefault_file_name_coding_system):
38 * callproc.c (Vdoc_file_name, Vfile_name_coding_system)
39 (Vdefault_file_name_coding_system): Remove unused declarations.
40
412005-03-24 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
42
43 * xmenu.c (create_and_show_popup_menu): Just remove menu and return
44 if it failed to pop up (Gnome "show pointer on ctrl" option makes
45 menus fail to pop up).
46
472005-03-24 Stefan Monnier <monnier@iro.umontreal.ca>
48
49 * xdisp.c (get_next_display_element): Also use `\ ' & `\-' for latin-9.
50 Just prepend a backslash without replacing the NBSP by an SPC.
51
12005-03-22 Kim F. Storm <storm@cua.dk> 522005-03-22 Kim F. Storm <storm@cua.dk>
2 53
3 * xfaces.c (lookup_derived_face): Add arg SIGNAL_P. 54 * xfaces.c (lookup_derived_face): Add arg SIGNAL_P.
@@ -17,7 +68,7 @@
172005-03-22 David Kastrup <dak@gnu.org> 682005-03-22 David Kastrup <dak@gnu.org>
18 69
19 * textprop.c (Fnext_char_property_change) 70 * textprop.c (Fnext_char_property_change)
20 (Fprevious_char_property_change): allow marker as limit. 71 (Fprevious_char_property_change): Allow marker as limit.
21 (Fnext_single_char_property_change) 72 (Fnext_single_char_property_change)
22 (Fprevious_single_char_property_change): Check that limit is a 73 (Fprevious_single_char_property_change): Check that limit is a
23 number in strings. 74 number in strings.
@@ -51,8 +102,7 @@
51 102
522005-03-17 Kenichi Handa <handa@m17n.org> 1032005-03-17 Kenichi Handa <handa@m17n.org>
53 104
54 * coding.c (syms_of_coding): Docstring of coding-category-list 105 * coding.c (syms_of_coding): Docstring of coding-category-list fixed.
55 fixed.
56 106
572005-03-17 Stefan Monnier <monnier@iro.umontreal.ca> 1072005-03-17 Stefan Monnier <monnier@iro.umontreal.ca>
58 108
diff --git a/src/alloc.c b/src/alloc.c
index 70cf2d7b70e..aacce3041d5 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -1502,7 +1502,7 @@ mark_interval_tree (tree)
1502#ifndef make_number 1502#ifndef make_number
1503Lisp_Object 1503Lisp_Object
1504make_number (n) 1504make_number (n)
1505 int n; 1505 EMACS_INT n;
1506{ 1506{
1507 Lisp_Object obj; 1507 Lisp_Object obj;
1508 obj.s.val = n; 1508 obj.s.val = n;
diff --git a/src/callproc.c b/src/callproc.c
index 623509ce199..c410b5a121b 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -1,6 +1,6 @@
1/* Synchronous subprocess invocation for GNU Emacs. 1/* Synchronous subprocess invocation for GNU Emacs.
2 Copyright (C) 1985,86,87,88,93,94,95,99, 2000,01,02,03,04 2 Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1999, 2000, 2001,
3 Free Software Foundation, Inc. 3 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 4
5This file is part of GNU Emacs. 5This file is part of GNU Emacs.
6 6
@@ -130,10 +130,6 @@ int synch_process_termsig;
130/* If synch_process_death is zero, 130/* If synch_process_death is zero,
131 this is exit code of synchronous subprocess. */ 131 this is exit code of synchronous subprocess. */
132int synch_process_retcode; 132int synch_process_retcode;
133
134extern Lisp_Object Vdoc_file_name;
135
136extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system;
137 133
138/* Clean up when exiting Fcall_process. 134/* Clean up when exiting Fcall_process.
139 On MSDOS, delete the temporary file on any kind of termination. 135 On MSDOS, delete the temporary file on any kind of termination.
diff --git a/src/coding.c b/src/coding.c
index c36060cad44..6fcb031b432 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -9357,8 +9357,7 @@ associated with each coding-category one by one in this order. When
9357one algorithm agrees with a byte sequence of source text, the coding 9357one algorithm agrees with a byte sequence of source text, the coding
9358system bound to the corresponding coding-category is selected. 9358system bound to the corresponding coding-category is selected.
9359 9359
9360When you modify this variable, `update-coding-systems-internal' must 9360Don't modify this variable directly, but use `set-coding-category'. */);
9361be called. */);
9362 { 9361 {
9363 int i; 9362 int i;
9364 9363
diff --git a/src/dired.c b/src/dired.c
index 71597ebc9ea..032040222da 100644
--- a/src/dired.c
+++ b/src/dired.c
@@ -1,5 +1,5 @@
1/* Lisp functions for making directory listings. 1/* Lisp functions for making directory listings.
2 Copyright (C) 1985, 1986, 1993, 1994, 1999, 2000, 2001, 2004 2 Copyright (C) 1985, 1986, 1993, 1994, 1999, 2000, 2001, 2004, 2005
3 Free Software Foundation, Inc. 3 Free Software Foundation, Inc.
4 4
5This file is part of GNU Emacs. 5This file is part of GNU Emacs.
@@ -115,7 +115,6 @@ extern void filemodestring P_ ((struct stat *, char *));
115 115
116extern int completion_ignore_case; 116extern int completion_ignore_case;
117extern Lisp_Object Vcompletion_regexp_list; 117extern Lisp_Object Vcompletion_regexp_list;
118extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system;
119 118
120Lisp_Object Vcompletion_ignored_extensions; 119Lisp_Object Vcompletion_ignored_extensions;
121Lisp_Object Qcompletion_ignore_case; 120Lisp_Object Qcompletion_ignore_case;
@@ -908,6 +907,7 @@ Elements of the attribute list are:
908#endif 907#endif
909 char modes[10]; 908 char modes[10];
910 Lisp_Object handler; 909 Lisp_Object handler;
910 struct gcpro gcpro1;
911 911
912 filename = Fexpand_file_name (filename, Qnil); 912 filename = Fexpand_file_name (filename, Qnil);
913 913
@@ -923,7 +923,9 @@ Elements of the attribute list are:
923 return call3 (handler, Qfile_attributes, filename, id_format); 923 return call3 (handler, Qfile_attributes, filename, id_format);
924 } 924 }
925 925
926 GCPRO1 (filename);
926 encoded = ENCODE_FILE (filename); 927 encoded = ENCODE_FILE (filename);
928 UNGCPRO;
927 929
928 if (lstat (SDATA (encoded), &s) < 0) 930 if (lstat (SDATA (encoded), &s) < 0)
929 return Qnil; 931 return Qnil;
diff --git a/src/editfns.c b/src/editfns.c
index 59e57565d49..1cbd28dd109 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1,6 +1,6 @@
1/* Lisp functions pertaining to editing. 1/* Lisp functions pertaining to editing.
2 Copyright (C) 1985,86,87,89,93,94,95,96,97,98,1999,2000,01,02,03,2004 2 Copyright (C) 1985, 1986, 1987, 1989, 1993, 1994, 1995, 1996, 1997, 1998,
3 Free Software Foundation, Inc. 3 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 4
5This file is part of GNU Emacs. 5This file is part of GNU Emacs.
6 6
diff --git a/src/fileio.c b/src/fileio.c
index bd61d3847c5..9b3360a7fa8 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -1018,7 +1018,7 @@ probably use `make-temp-file' instead, except in three circumstances:
1018DEFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, 1018DEFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0,
1019 doc: /* Convert filename NAME to absolute, and canonicalize it. 1019 doc: /* Convert filename NAME to absolute, and canonicalize it.
1020Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative 1020Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative
1021 (does not start with slash); if DEFAULT-DIRECTORY is nil or missing, 1021\(does not start with slash); if DEFAULT-DIRECTORY is nil or missing,
1022the current buffer's value of default-directory is used. 1022the current buffer's value of default-directory is used.
1023File name components that are `.' are removed, and 1023File name components that are `.' are removed, and
1024so are file name components followed by `..', along with the `..' itself; 1024so are file name components followed by `..', along with the `..' itself;
@@ -1468,7 +1468,7 @@ See also the function `substitute-in-file-name'. */)
1468 indirectly by prepending newdir to nm if necessary, and using 1468 indirectly by prepending newdir to nm if necessary, and using
1469 cwd (or the wd of newdir's drive) as the new newdir. */ 1469 cwd (or the wd of newdir's drive) as the new newdir. */
1470 1470
1471 if (IS_DRIVE (newdir[0]) && newdir[1] == ':') 1471 if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1]))
1472 { 1472 {
1473 drive = newdir[0]; 1473 drive = newdir[0];
1474 newdir += 2; 1474 newdir += 2;
@@ -1491,7 +1491,7 @@ See also the function `substitute-in-file-name'. */)
1491 } 1491 }
1492 1492
1493 /* Strip off drive name from prefix, if present. */ 1493 /* Strip off drive name from prefix, if present. */
1494 if (IS_DRIVE (newdir[0]) && newdir[1] == ':') 1494 if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1]))
1495 { 1495 {
1496 drive = newdir[0]; 1496 drive = newdir[0];
1497 newdir += 2; 1497 newdir += 2;
@@ -1725,7 +1725,7 @@ See also the function `substitute-in-file-name'. */)
1725DEAFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, 1725DEAFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0,
1726 "Convert FILENAME to absolute, and canonicalize it.\n\ 1726 "Convert FILENAME to absolute, and canonicalize it.\n\
1727Second arg DEFAULT is directory to start with if FILENAME is relative\n\ 1727Second arg DEFAULT is directory to start with if FILENAME is relative\n\
1728 (does not start with slash); if DEFAULT is nil or missing,\n\ 1728\(does not start with slash); if DEFAULT is nil or missing,\n\
1729the current buffer's value of default-directory is used.\n\ 1729the current buffer's value of default-directory is used.\n\
1730Filenames containing `.' or `..' as components are simplified;\n\ 1730Filenames containing `.' or `..' as components are simplified;\n\
1731initial `~/' expands to your home directory.\n\ 1731initial `~/' expands to your home directory.\n\
@@ -2044,6 +2044,75 @@ See also the function `substitute-in-file-name'.")
2044} 2044}
2045#endif 2045#endif
2046 2046
2047/* If /~ or // appears, discard everything through first slash. */
2048static int
2049file_name_absolute_p (filename)
2050 const unsigned char *filename;
2051{
2052 return
2053 (IS_DIRECTORY_SEP (*filename) || *filename == '~'
2054#ifdef VMS
2055 /* ??? This criterion is probably wrong for '<'. */
2056 || index (filename, ':') || index (filename, '<')
2057 || (*filename == '[' && (filename[1] != '-'
2058 || (filename[2] != '.' && filename[2] != ']'))
2059 && filename[1] != '.')
2060#endif /* VMS */
2061#ifdef DOS_NT
2062 || (IS_DRIVE (*filename) && IS_DEVICE_SEP (filename[1])
2063 && IS_DIRECTORY_SEP (filename[2]))
2064#endif
2065 );
2066}
2067
2068static unsigned char *
2069search_embedded_absfilename (nm, endp)
2070 unsigned char *nm, *endp;
2071{
2072 unsigned char *p, *s;
2073
2074 for (p = nm + 1; p < endp; p++)
2075 {
2076 if ((0
2077#ifdef VMS
2078 || p[-1] == ':' || p[-1] == ']' || p[-1] == '>'
2079#endif /* VMS */
2080 || IS_DIRECTORY_SEP (p[-1]))
2081 && file_name_absolute_p (p)
2082#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN)
2083 /* // at start of file name is meaningful in Apollo,
2084 WindowsNT and Cygwin systems. */
2085 && !(IS_DIRECTORY_SEP (p[0]) && p - 1 == nm)
2086#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */
2087 )
2088 {
2089 for (s = p; *s && (!IS_DIRECTORY_SEP (*s)
2090#ifdef VMS
2091 && *s != ':'
2092#endif /* VMS */
2093 ); s++);
2094 if (p[0] == '~' && s > p + 1) /* we've got "/~something/" */
2095 {
2096 unsigned char *o = alloca (s - p + 1);
2097 struct passwd *pw;
2098 bcopy (p, o, s - p);
2099 o [s - p] = 0;
2100
2101 /* If we have ~user and `user' exists, discard
2102 everything up to ~. But if `user' does not exist, leave
2103 ~user alone, it might be a literal file name. */
2104 if ((pw = getpwnam (o + 1)))
2105 return p;
2106 else
2107 xfree (pw);
2108 }
2109 else
2110 return p;
2111 }
2112 }
2113 return NULL;
2114}
2115
2047DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name, 2116DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name,
2048 Ssubstitute_in_file_name, 1, 1, 0, 2117 Ssubstitute_in_file_name, 1, 1, 0,
2049 doc: /* Substitute environment variables referred to in FILENAME. 2118 doc: /* Substitute environment variables referred to in FILENAME.
@@ -2065,7 +2134,6 @@ duplicates what `expand-file-name' does. */)
2065 int total = 0; 2134 int total = 0;
2066 int substituted = 0; 2135 int substituted = 0;
2067 unsigned char *xnm; 2136 unsigned char *xnm;
2068 struct passwd *pw;
2069 Lisp_Object handler; 2137 Lisp_Object handler;
2070 2138
2071 CHECK_STRING (filename); 2139 CHECK_STRING (filename);
@@ -2085,61 +2153,17 @@ duplicates what `expand-file-name' does. */)
2085 endp = nm + SBYTES (filename); 2153 endp = nm + SBYTES (filename);
2086 2154
2087 /* If /~ or // appears, discard everything through first slash. */ 2155 /* If /~ or // appears, discard everything through first slash. */
2088 2156 p = search_embedded_absfilename (nm, endp);
2089 for (p = nm; p != endp; p++) 2157 if (p)
2090 { 2158 /* Start over with the new string, so we check the file-name-handler
2091 if ((p[0] == '~' 2159 again. Important with filenames like "/home/foo//:/hello///there"
2092#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) 2160 which whould substitute to "/:/hello///there" rather than "/there". */
2093 /* // at start of file name is meaningful in Apollo, 2161 return Fsubstitute_in_file_name
2094 WindowsNT and Cygwin systems. */ 2162 (make_specified_string (p, -1, endp - p,
2095 || (IS_DIRECTORY_SEP (p[0]) && p - 1 != nm) 2163 STRING_MULTIBYTE (filename)));
2096#else /* not (APOLLO || WINDOWSNT || CYGWIN) */
2097 || IS_DIRECTORY_SEP (p[0])
2098#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */
2099 )
2100 && p != nm
2101 && (0
2102#ifdef VMS
2103 || p[-1] == ':' || p[-1] == ']' || p[-1] == '>'
2104#endif /* VMS */
2105 || IS_DIRECTORY_SEP (p[-1])))
2106 {
2107 for (s = p; *s && (!IS_DIRECTORY_SEP (*s)
2108#ifdef VMS
2109 && *s != ':'
2110#endif /* VMS */
2111 ); s++);
2112 if (p[0] == '~' && s > p + 1) /* we've got "/~something/" */
2113 {
2114 o = (unsigned char *) alloca (s - p + 1);
2115 bcopy ((char *) p, o, s - p);
2116 o [s - p] = 0;
2117
2118 pw = (struct passwd *) getpwnam (o + 1);
2119 }
2120 /* If we have ~/ or ~user and `user' exists, discard
2121 everything up to ~. But if `user' does not exist, leave
2122 ~user alone, it might be a literal file name. */
2123 if (IS_DIRECTORY_SEP (p[0]) || s == p + 1 || pw)
2124 {
2125 nm = p;
2126 substituted = 1;
2127 }
2128 }
2129#ifdef DOS_NT
2130 /* see comment in expand-file-name about drive specifiers */
2131 else if (IS_DRIVE (p[0]) && p[1] == ':'
2132 && p > nm && IS_DIRECTORY_SEP (p[-1]))
2133 {
2134 nm = p;
2135 substituted = 1;
2136 }
2137#endif /* DOS_NT */
2138 }
2139 2164
2140#ifdef VMS 2165#ifdef VMS
2141 return make_specified_string (nm, -1, strlen (nm), 2166 return filename;
2142 STRING_MULTIBYTE (filename));
2143#else 2167#else
2144 2168
2145 /* See if any variables are substituted into the string 2169 /* See if any variables are substituted into the string
@@ -2266,22 +2290,11 @@ duplicates what `expand-file-name' does. */)
2266 *x = 0; 2290 *x = 0;
2267 2291
2268 /* If /~ or // appears, discard everything through first slash. */ 2292 /* If /~ or // appears, discard everything through first slash. */
2269 2293 while ((p = search_embedded_absfilename (xnm, x)))
2270 for (p = xnm; p != x; p++) 2294 /* This time we do not start over because we've already expanded envvars
2271 if ((p[0] == '~' 2295 and replaced $$ with $. Maybe we should start over as well, but we'd
2272#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) 2296 need to quote some $ to $$ first. */
2273 || (IS_DIRECTORY_SEP (p[0]) && p - 1 != xnm) 2297 xnm = p;
2274#else /* not (APOLLO || WINDOWSNT || CYGWIN) */
2275 || IS_DIRECTORY_SEP (p[0])
2276#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */
2277 )
2278 && p != xnm && IS_DIRECTORY_SEP (p[-1]))
2279 xnm = p;
2280#ifdef DOS_NT
2281 else if (IS_DRIVE (p[0]) && p[1] == ':'
2282 && p > xnm && IS_DIRECTORY_SEP (p[-1]))
2283 xnm = p;
2284#endif
2285 2298
2286 return make_specified_string (xnm, -1, x - xnm, STRING_MULTIBYTE (filename)); 2299 return make_specified_string (xnm, -1, x - xnm, STRING_MULTIBYTE (filename));
2287 2300
@@ -2964,24 +2977,8 @@ On Unix, this is a name starting with a `/' or a `~'. */)
2964 (filename) 2977 (filename)
2965 Lisp_Object filename; 2978 Lisp_Object filename;
2966{ 2979{
2967 const unsigned char *ptr;
2968
2969 CHECK_STRING (filename); 2980 CHECK_STRING (filename);
2970 ptr = SDATA (filename); 2981 return file_name_absolute_p (SDATA (filename)) ? Qt : Qnil;
2971 if (IS_DIRECTORY_SEP (*ptr) || *ptr == '~'
2972#ifdef VMS
2973/* ??? This criterion is probably wrong for '<'. */
2974 || index (ptr, ':') || index (ptr, '<')
2975 || (*ptr == '[' && (ptr[1] != '-' || (ptr[2] != '.' && ptr[2] != ']'))
2976 && ptr[1] != '.')
2977#endif /* VMS */
2978#ifdef DOS_NT
2979 || (IS_DRIVE (*ptr) && ptr[1] == ':' && IS_DIRECTORY_SEP (ptr[2]))
2980#endif
2981 )
2982 return Qt;
2983 else
2984 return Qnil;
2985} 2982}
2986 2983
2987/* Return nonzero if file FILENAME exists and can be executed. */ 2984/* Return nonzero if file FILENAME exists and can be executed. */
diff --git a/src/lisp.h b/src/lisp.h
index 2da2fe6c7dd..160a5cb398b 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1,6 +1,6 @@
1/* Fundamental definitions for GNU Emacs Lisp interpreter. 1/* Fundamental definitions for GNU Emacs Lisp interpreter.
2 Copyright (C) 1985,86,87,93,94,95,97,98,1999,2000,01,02,03,2004 2 Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1998, 1999, 2000,
3 Free Software Foundation, Inc. 3 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 4
5This file is part of GNU Emacs. 5This file is part of GNU Emacs.
6 6
@@ -452,7 +452,7 @@ enum pvec_type
452#define make_number(N) \ 452#define make_number(N) \
453 (__extension__ ({ Lisp_Object _l; _l.s.val = (N); _l.s.type = Lisp_Int; _l; })) 453 (__extension__ ({ Lisp_Object _l; _l.s.val = (N); _l.s.type = Lisp_Int; _l; }))
454#else 454#else
455extern Lisp_Object make_number (); 455extern Lisp_Object make_number P_ ((EMACS_INT));
456#endif 456#endif
457 457
458#define EQ(x, y) ((x).s.val == (y).s.val && (x).s.type == (y).s.type) 458#define EQ(x, y) ((x).s.val == (y).s.val && (x).s.type == (y).s.type)
diff --git a/src/minibuf.c b/src/minibuf.c
index 329070c5cb3..538fd0b8dac 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -1,5 +1,5 @@
1/* Minibuffer input and completion. 1/* Minibuffer input and completion.
2 Copyright (C) 1985,86,93,94,95,96,97,98,99,2000,01,03,04 2 Copyright (C) 1985,86,93,94,95,96,97,98,99,2000,01,03,04,05
3 Free Software Foundation, Inc. 3 Free Software Foundation, Inc.
4 4
5This file is part of GNU Emacs. 5This file is part of GNU Emacs.
@@ -2080,6 +2080,8 @@ complete_and_exit_2 (ignore)
2080 return make_number (1); 2080 return make_number (1);
2081} 2081}
2082 2082
2083EXFUN (Fexit_minibuffer, 0) NO_RETURN;
2084
2083DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit, 2085DEFUN ("minibuffer-complete-and-exit", Fminibuffer_complete_and_exit,
2084 Sminibuffer_complete_and_exit, 0, 0, "", 2086 Sminibuffer_complete_and_exit, 0, 0, "",
2085 doc: /* If the minibuffer contents is a valid completion then exit. 2087 doc: /* If the minibuffer contents is a valid completion then exit.
@@ -2142,7 +2144,7 @@ a repetition of this command will exit. */)
2142 return Qnil; 2144 return Qnil;
2143 } 2145 }
2144 exit: 2146 exit:
2145 return Fthrow (Qexit, Qnil); 2147 return Fexit_minibuffer ();
2146 /* NOTREACHED */ 2148 /* NOTREACHED */
2147} 2149}
2148 2150
@@ -2539,14 +2541,21 @@ DEFUN ("self-insert-and-exit", Fself_insert_and_exit, Sself_insert_and_exit, 0,
2539 else 2541 else
2540 bitch_at_user (); 2542 bitch_at_user ();
2541 2543
2542 return Fthrow (Qexit, Qnil); 2544 return Fexit_minibuffer ();
2543} 2545}
2544 2546
2545DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "", 2547DEFUN ("exit-minibuffer", Fexit_minibuffer, Sexit_minibuffer, 0, 0, "",
2546 doc: /* Terminate this minibuffer argument. */) 2548 doc: /* Terminate this minibuffer argument. */)
2547 () 2549 ()
2548{ 2550{
2549 return Fthrow (Qexit, Qnil); 2551 /* If the command that uses this has made modifications in the minibuffer,
2552 we don't want them to cause deactivation of the mark in the original
2553 buffer.
2554 A better solution would be to make deactivate-mark buffer-local
2555 (or to turn it into a list of buffers, ...), but in the mean time,
2556 this should do the trick in most cases. */
2557 Vdeactivate_mark = Qnil;
2558 Fthrow (Qexit, Qnil);
2550} 2559}
2551 2560
2552DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0, 2561DEFUN ("minibuffer-depth", Fminibuffer_depth, Sminibuffer_depth, 0, 0, 0,
diff --git a/src/process.c b/src/process.c
index 8ce21f3e8ee..26d40c26cd5 100644
--- a/src/process.c
+++ b/src/process.c
@@ -1,6 +1,6 @@
1/* Asynchronous subprocess control for GNU Emacs. 1/* Asynchronous subprocess control for GNU Emacs.
2 Copyright (C) 1985, 86, 87, 88, 93, 94, 95, 96, 98, 1999, 2 Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 1996, 1998, 1999,
3 2001, 2002, 2003, 2004 Free Software Foundation, Inc. 3 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4 4
5This file is part of GNU Emacs. 5This file is part of GNU Emacs.
6 6
@@ -376,8 +376,6 @@ extern int timers_run;
376/* Maximum number of bytes to send to a pty without an eof. */ 376/* Maximum number of bytes to send to a pty without an eof. */
377static int pty_max_bytes; 377static int pty_max_bytes;
378 378
379extern Lisp_Object Vfile_name_coding_system, Vdefault_file_name_coding_system;
380
381#ifdef HAVE_PTYS 379#ifdef HAVE_PTYS
382#ifdef HAVE_PTY_H 380#ifdef HAVE_PTY_H
383#include <pty.h> 381#include <pty.h>
diff --git a/src/w32term.c b/src/w32term.c
index 151afb7e841..51f001bfd45 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -282,6 +282,10 @@ static void frame_highlight P_ ((struct frame *));
282static void frame_unhighlight P_ ((struct frame *)); 282static void frame_unhighlight P_ ((struct frame *));
283static void x_new_focus_frame P_ ((struct w32_display_info *, 283static void x_new_focus_frame P_ ((struct w32_display_info *,
284 struct frame *)); 284 struct frame *));
285static void x_focus_changed P_ ((int, int, struct w32_display_info *,
286 struct frame *, struct input_event *));
287static void w32_detect_focus_change P_ ((struct w32_display_info *,
288 W32Msg *, struct input_event *));
285static void w32_frame_rehighlight P_ ((struct frame *)); 289static void w32_frame_rehighlight P_ ((struct frame *));
286static void x_frame_rehighlight P_ ((struct w32_display_info *)); 290static void x_frame_rehighlight P_ ((struct w32_display_info *));
287static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *)); 291static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *));
@@ -2967,6 +2971,81 @@ x_new_focus_frame (dpyinfo, frame)
2967 x_frame_rehighlight (dpyinfo); 2971 x_frame_rehighlight (dpyinfo);
2968} 2972}
2969 2973
2974
2975/* Handle FocusIn and FocusOut state changes for FRAME.
2976 If FRAME has focus and there exists more than one frame, puts
2977 a FOCUS_IN_EVENT into *BUFP. */
2978
2979static void
2980x_focus_changed (type, state, dpyinfo, frame, bufp)
2981 int type;
2982 int state;
2983 struct w32_display_info *dpyinfo;
2984 struct frame *frame;
2985 struct input_event *bufp;
2986{
2987 if (type == WM_SETFOCUS)
2988 {
2989 if (dpyinfo->w32_focus_event_frame != frame)
2990 {
2991 x_new_focus_frame (dpyinfo, frame);
2992 dpyinfo->w32_focus_event_frame = frame;
2993
2994 /* Don't stop displaying the initial startup message
2995 for a switch-frame event we don't need. */
2996 if (GC_NILP (Vterminal_frame)
2997 && GC_CONSP (Vframe_list)
2998 && !GC_NILP (XCDR (Vframe_list)))
2999 {
3000 bufp->kind = FOCUS_IN_EVENT;
3001 XSETFRAME (bufp->frame_or_window, frame);
3002 }
3003 }
3004
3005 frame->output_data.x->focus_state |= state;
3006
3007 /* TODO: IME focus? */
3008 }
3009 else if (type == WM_KILLFOCUS)
3010 {
3011 frame->output_data.x->focus_state &= ~state;
3012
3013 if (dpyinfo->w32_focus_event_frame == frame)
3014 {
3015 dpyinfo->w32_focus_event_frame = 0;
3016 x_new_focus_frame (dpyinfo, 0);
3017 }
3018
3019 /* TODO: IME focus? */
3020 }
3021}
3022
3023
3024/* The focus may have changed. Figure out if it is a real focus change,
3025 by checking both FocusIn/Out and Enter/LeaveNotify events.
3026
3027 Returns FOCUS_IN_EVENT event in *BUFP. */
3028
3029static void
3030w32_detect_focus_change (dpyinfo, event, bufp)
3031 struct w32_display_info *dpyinfo;
3032 W32Msg *event;
3033 struct input_event *bufp;
3034{
3035 struct frame *frame;
3036
3037 frame = x_any_window_to_frame (dpyinfo, event->msg.hwnd);
3038 if (! frame)
3039 return;
3040
3041 /* On w32, this is only called from focus events, so no switch needed. */
3042 x_focus_changed (event->msg.message,
3043 (event->msg.message == WM_KILLFOCUS ?
3044 FOCUS_IMPLICIT : FOCUS_EXPLICIT),
3045 dpyinfo, frame, bufp);
3046}
3047
3048
2970/* Handle an event saying the mouse has moved out of an Emacs frame. */ 3049/* Handle an event saying the mouse has moved out of an Emacs frame. */
2971 3050
2972void 3051void
@@ -4811,27 +4890,13 @@ w32_read_socket (sd, expected, hold_quit)
4811 break; 4890 break;
4812 4891
4813 case WM_SETFOCUS: 4892 case WM_SETFOCUS:
4814 /* TODO: Port this change: 4893 w32_detect_focus_change (dpyinfo, &msg, &inev);
4815 2002-06-28 Jan D. <jan.h.d@swipnet.se>
4816 * xterm.h (struct x_output): Add focus_state.
4817 * xterm.c (x_focus_changed): New function.
4818 (x_detect_focus_change): New function.
4819 (XTread_socket): Call x_detect_focus_change for FocusIn/FocusOut
4820 EnterNotify and LeaveNotify to track X focus changes.
4821 */
4822 f = x_any_window_to_frame (dpyinfo, msg.msg.hwnd);
4823
4824 dpyinfo->w32_focus_event_frame = f;
4825
4826 if (f)
4827 x_new_focus_frame (dpyinfo, f);
4828 4894
4829 dpyinfo->grabbed = 0; 4895 dpyinfo->grabbed = 0;
4830 check_visibility = 1; 4896 check_visibility = 1;
4831 break; 4897 break;
4832 4898
4833 case WM_KILLFOCUS: 4899 case WM_KILLFOCUS:
4834 /* TODO: some of this belongs in MOUSE_LEAVE */
4835 f = x_top_window_to_frame (dpyinfo, msg.msg.hwnd); 4900 f = x_top_window_to_frame (dpyinfo, msg.msg.hwnd);
4836 4901
4837 if (f) 4902 if (f)
diff --git a/src/w32term.h b/src/w32term.h
index a25a3b49782..61c7c5b6115 100644
--- a/src/w32term.h
+++ b/src/w32term.h
@@ -278,8 +278,25 @@ struct x_output
278{ 278{
279 PIX_TYPE background_pixel; 279 PIX_TYPE background_pixel;
280 PIX_TYPE foreground_pixel; 280 PIX_TYPE foreground_pixel;
281
282 /* Keep track of focus. May be EXPLICIT if we received a FocusIn for this
283 frame, or IMPLICIT if we received an EnterNotify.
284 FocusOut and LeaveNotify clears EXPLICIT/IMPLICIT. */
285 int focus_state;
286
281}; 287};
282 288
289enum
290{
291 /* Values for focus_state, used as bit mask.
292 EXPLICIT means we received a FocusIn for the frame and know it has
293 the focus. IMPLICIT means we recevied an EnterNotify and the frame
294 may have the focus if no window manager is running.
295 FocusOut and LeaveNotify clears EXPLICIT/IMPLICIT. */
296 FOCUS_NONE = 0,
297 FOCUS_IMPLICIT = 1,
298 FOCUS_EXPLICIT = 2
299};
283 300
284struct w32_output 301struct w32_output
285{ 302{
diff --git a/src/xdisp.c b/src/xdisp.c
index 60ac47b0ec5..0b46eaf8621 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -463,7 +463,7 @@ static Lisp_Object Vwindow_size_change_functions;
463 463
464Lisp_Object Qmenu_bar_update_hook, Vmenu_bar_update_hook; 464Lisp_Object Qmenu_bar_update_hook, Vmenu_bar_update_hook;
465 465
466/* Nonzero if overlay arrow has been displayed once in this window. */ 466/* Nonzero if an overlay arrow has been displayed in this window. */
467 467
468static int overlay_arrow_seen; 468static int overlay_arrow_seen;
469 469
@@ -15362,10 +15362,9 @@ display_line (it)
15362 mark this glyph row as the one containing the overlay arrow. 15362 mark this glyph row as the one containing the overlay arrow.
15363 This is clearly a mess with variable size fonts. It would be 15363 This is clearly a mess with variable size fonts. It would be
15364 better to let it be displayed like cursors under X. */ 15364 better to let it be displayed like cursors under X. */
15365 if (! overlay_arrow_seen 15365 if ((overlay_arrow_string
15366 && (overlay_arrow_string 15366 = overlay_arrow_at_row (it, row, &overlay_arrow_bitmap),
15367 = overlay_arrow_at_row (it, row, &overlay_arrow_bitmap), 15367 !NILP (overlay_arrow_string)))
15368 !NILP (overlay_arrow_string)))
15369 { 15368 {
15370 /* Overlay arrow in window redisplay is a fringe bitmap. */ 15369 /* Overlay arrow in window redisplay is a fringe bitmap. */
15371 if (STRINGP (overlay_arrow_string)) 15370 if (STRINGP (overlay_arrow_string))
diff --git a/src/xmenu.c b/src/xmenu.c
index c8747689c1e..e369d04743c 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -2490,11 +2490,14 @@ create_and_show_popup_menu (f, first_wv, x, y, for_click)
2490 2490
2491 record_unwind_protect (pop_down_menu, make_save_value (menu, 0)); 2491 record_unwind_protect (pop_down_menu, make_save_value (menu, 0));
2492 2492
2493 /* Set this to one. popup_widget_loop increases it by one, so it becomes 2493 if (GTK_WIDGET_MAPPED (menu))
2494 two. show_help_echo uses this to detect popup menus. */ 2494 {
2495 popup_activated_flag = 1; 2495 /* Set this to one. popup_widget_loop increases it by one, so it becomes
2496 /* Process events that apply to the menu. */ 2496 two. show_help_echo uses this to detect popup menus. */
2497 popup_widget_loop (1, menu); 2497 popup_activated_flag = 1;
2498 /* Process events that apply to the menu. */
2499 popup_widget_loop (1, menu);
2500 }
2498 2501
2499 unbind_to (specpdl_count, Qnil); 2502 unbind_to (specpdl_count, Qnil);
2500 2503