aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaroly Lorentey2005-04-04 16:43:15 +0000
committerKaroly Lorentey2005-04-04 16:43:15 +0000
commitee00ea6e18c2aeae86e262fae703f67f4705032a (patch)
tree9e7fc6bfb33de2b2f861589a2f7674ad35de85a8
parent4a932511428a2b61ec51deebd6e16ec1efbda800 (diff)
parent8c6ef2ca34c444c1dea1f11b999b4b2ec16cdea3 (diff)
downloademacs-ee00ea6e18c2aeae86e262fae703f67f4705032a.tar.gz
emacs-ee00ea6e18c2aeae86e262fae703f67f4705032a.zip
Merged from miles@gnu.org--gnu-2005 (patch 45-55, 214-231)
Patches applied: * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-214 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-215 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-216 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-217 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-218 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-219 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-220 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-221 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-222 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-223 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-224 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-225 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-226 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-227 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-228 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-229 Update from CVS * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-230 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-231 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-45 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-46 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-47 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-48 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-49 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-50 Update from CVS: texi Makefile.in CVS keyw cruft * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-51 Update from CVS: ChangeLog tweaks * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-52 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-53 Merge from emacs--cvs-trunk--0 * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-54 Update from CVS * miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-55 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-324
-rw-r--r--admin/ChangeLog13
-rw-r--r--admin/FOR-RELEASE47
-rw-r--r--etc/ChangeLog45
-rw-r--r--etc/NEWS75
-rw-r--r--etc/TUTORIAL2
-rw-r--r--etc/TUTORIAL.bg300
-rw-r--r--etc/TUTORIAL.cn2
-rw-r--r--etc/TUTORIAL.cs1
-rw-r--r--etc/TUTORIAL.es5
-rw-r--r--etc/TUTORIAL.ja2
-rw-r--r--etc/TUTORIAL.ko1
-rw-r--r--etc/TUTORIAL.nl2
-rw-r--r--etc/TUTORIAL.pl2
-rw-r--r--etc/TUTORIAL.pt_BR10
-rw-r--r--etc/TUTORIAL.ro1
-rw-r--r--etc/TUTORIAL.ru2
-rw-r--r--etc/TUTORIAL.sk1
-rw-r--r--etc/TUTORIAL.sv211
-rw-r--r--etc/TUTORIAL.th1
-rw-r--r--etc/TUTORIAL.zh2
-rw-r--r--etc/gnus-logo.eps1055
-rw-r--r--etc/gnus-refcard.tex1427
-rw-r--r--lisp/ChangeLog509
-rw-r--r--lisp/add-log.el14
-rw-r--r--lisp/autorevert.el6
-rw-r--r--lisp/battery.el2
-rw-r--r--lisp/bookmark.el12
-rw-r--r--lisp/calc/calc-embed.el56
-rw-r--r--lisp/calc/calc-graph.el14
-rw-r--r--lisp/calc/calc-help.el10
-rw-r--r--lisp/calc/calc-lang.el12
-rw-r--r--lisp/calc/calc.el123
-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-persia.el4
-rw-r--r--lisp/calendar/cal-x.el13
-rw-r--r--lisp/calendar/calendar.el8
-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/calendar/time-date.el4
-rw-r--r--lisp/complete.el5
-rw-r--r--lisp/desktop.el6
-rw-r--r--lisp/diff-mode.el10
-rw-r--r--lisp/dired.el2
-rw-r--r--lisp/ediff-hook.el16
-rw-r--r--lisp/emacs-lisp/autoload.el2
-rw-r--r--lisp/emacs-lisp/debug.el100
-rw-r--r--lisp/emacs-lisp/easy-mmode.el16
-rw-r--r--lisp/emacs-lisp/eldoc.el5
-rw-r--r--lisp/emulation/cua-base.el3
-rw-r--r--lisp/files.el43
-rw-r--r--lisp/filesets.el70
-rw-r--r--lisp/font-core.el2
-rw-r--r--lisp/font-lock.el2
-rw-r--r--lisp/generic-x.el99
-rw-r--r--lisp/generic.el74
-rw-r--r--lisp/gnus/ChangeLog112
-rw-r--r--lisp/gnus/gnus-group.el6
-rw-r--r--lisp/gnus/gnus-srvr.el19
-rw-r--r--lisp/gnus/gnus-sum.el2
-rw-r--r--lisp/gnus/message.el3
-rw-r--r--lisp/gnus/mm-util.el30
-rw-r--r--lisp/gnus/rfc2047.el641
-rw-r--r--lisp/hl-line.el4
-rw-r--r--lisp/ido.el30
-rw-r--r--lisp/iimage.el9
-rw-r--r--lisp/info.el8
-rw-r--r--lisp/international/characters.el4
-rw-r--r--lisp/international/encoded-kb.el2
-rw-r--r--lisp/international/mule-cmds.el3
-rw-r--r--lisp/international/mule-util.el1
-rw-r--r--lisp/international/mule.el1
-rw-r--r--lisp/kmacro.el11
-rw-r--r--lisp/language/thai-util.el51
-rw-r--r--lisp/language/thai-word.el54
-rw-r--r--lisp/language/thai.el7
-rw-r--r--lisp/longlines.el393
-rw-r--r--lisp/mail/rmail.el49
-rw-r--r--lisp/mail/supercite.el17
-rw-r--r--lisp/master.el24
-rw-r--r--lisp/menu-bar.el18
-rw-r--r--lisp/mouse.el28
-rw-r--r--lisp/msb.el6
-rw-r--r--lisp/obsolete/iso-acc.el (renamed from lisp/international/iso-acc.el)5
-rw-r--r--lisp/pcvs.el128
-rw-r--r--lisp/progmodes/compile.el9
-rw-r--r--lisp/progmodes/cwarn.el4
-rw-r--r--lisp/progmodes/f90.el29
-rw-r--r--lisp/progmodes/flymake.el4
-rw-r--r--lisp/progmodes/fortran.el183
-rw-r--r--lisp/progmodes/glasses.el4
-rw-r--r--lisp/progmodes/gud.el22
-rw-r--r--lisp/progmodes/hideif.el4
-rw-r--r--lisp/progmodes/python.el44
-rw-r--r--lisp/progmodes/scheme.el4
-rw-r--r--lisp/progmodes/tcl.el10
-rw-r--r--lisp/progmodes/which-func.el7
-rw-r--r--lisp/ps-mule.el39
-rw-r--r--lisp/ps-print.el21
-rw-r--r--lisp/register.el6
-rw-r--r--lisp/reveal.el5
-rw-r--r--lisp/simple.el64
-rw-r--r--lisp/smerge-mode.el4
-rw-r--r--lisp/startup.el31
-rw-r--r--lisp/textmodes/bibtex.el123
-rw-r--r--lisp/textmodes/enriched.el4
-rw-r--r--lisp/textmodes/fill.el13
-rw-r--r--lisp/textmodes/org.el453
-rw-r--r--lisp/textmodes/refill.el4
-rw-r--r--lisp/textmodes/sgml-mode.el2
-rw-r--r--lisp/textmodes/tex-mode.el13
-rw-r--r--lisp/tooltip.el24
-rw-r--r--lisp/url/ChangeLog4
-rw-r--r--lisp/url/url-handlers.el4
-rw-r--r--lisp/url/vc-dav.el8
-rw-r--r--lisp/vc-hooks.el4
-rw-r--r--lisp/vc.el8
-rw-r--r--lisp/wdired.el3
-rw-r--r--lisp/window.el21
-rw-r--r--lisp/xt-mouse.el7
-rw-r--r--lispref/ChangeLog37
-rw-r--r--lispref/anti.texi4
-rw-r--r--lispref/hooks.texi204
-rw-r--r--lispref/keymaps.texi10
-rw-r--r--lispref/modes.texi2
-rw-r--r--lispref/nonascii.texi21
-rw-r--r--lispref/text.texi35
-rw-r--r--lispref/tips.texi7
-rw-r--r--lwlib/ChangeLog13
-rw-r--r--lwlib/xlwmenu.c132
-rw-r--r--lwlib/xlwmenuP.h8
-rw-r--r--man/ChangeLog137
-rw-r--r--man/basic.texi63
-rw-r--r--man/building.texi26
-rw-r--r--man/calc.texi652
-rw-r--r--man/calendar.texi47
-rw-r--r--man/cmdargs.texi5
-rw-r--r--man/commands.texi4
-rw-r--r--man/custom.texi21
-rw-r--r--man/dired.texi34
-rw-r--r--man/emacs-mime.texi33
-rw-r--r--man/emacs.texi11
-rw-r--r--man/files.texi108
-rw-r--r--man/gnus-faq.texi3521
-rw-r--r--man/maintaining.texi21
-rw-r--r--man/message.texi2
-rw-r--r--man/misc.texi8
-rw-r--r--man/mule.texi39
-rw-r--r--man/org.texi107
-rw-r--r--man/programs.texi247
-rw-r--r--man/text.texi73
-rw-r--r--man/xresources.texi9
-rw-r--r--src/ChangeLog77
-rw-r--r--src/alloc.c8
-rw-r--r--src/casetab.c7
-rw-r--r--src/coding.c2
-rw-r--r--src/editfns.c9
-rw-r--r--src/eval.c7
-rw-r--r--src/fileio.c179
-rw-r--r--src/keyboard.c14
-rw-r--r--src/lisp.h3
-rw-r--r--src/ralloc.c5
-rw-r--r--src/search.c223
-rw-r--r--src/xdisp.c9
-rw-r--r--src/xterm.c29
173 files changed, 9539 insertions, 4031 deletions
diff --git a/admin/ChangeLog b/admin/ChangeLog
index efcd9b2d5e5..c3c65379a16 100644
--- a/admin/ChangeLog
+++ b/admin/ChangeLog
@@ -1,3 +1,16 @@
12005-03-30 Marcelo Toledo <marcelo@marcelotoledo.org>
2
3 * FOR-RELEASE (Documentation): Added check the Emacs Tutorial. The
4 first line of every tutorial must begin with a sentence saying
5 "Emacs Tutorial" in the respective language. This should be
6 followed by "See end for copying conditions", likewise in the
7 respective language.
8
92005-03-29 Luc Teirlinck <teirllm@auburn.edu>
10
11 * FOR-RELEASE (TO BE DONE SHORTLY BEFORE RELEASE): New section.
12 Add `undo-ask-before-discard' to it.
13
12005-03-02 Miles Bader <miles@gnu.org> 142005-03-02 Miles Bader <miles@gnu.org>
2 15
3 * quick-install-emacs: Only use the mkdir --verbose option if the 16 * quick-install-emacs: Only use the mkdir --verbose option if the
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE
index e182242276b..ff6b4c7e73e 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* 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.
@@ -18,6 +23,8 @@ See msg from rms to emacs-devel on 21 Dec.
18 23
19* FATAL ERRORS 24* FATAL ERRORS
20 25
26** Make unexec handle memory mapping policy of the latest versions of Linux.
27
21** Investigate reported crashes in compact_small_strings. 28** Investigate reported crashes in compact_small_strings.
22 29
23** Investigate reported crashes related to using an 30** Investigate reported crashes related to using an
@@ -145,7 +152,7 @@ man/basic.texi "Luc Teirlinck" Chong Yidong
145man/buffers.texi "Luc Teirlinck" Chong Yidong 152man/buffers.texi "Luc Teirlinck" Chong Yidong
146man/building.texi "Ted Zlatanov" <tzz@lifelogs.com> 153man/building.texi "Ted Zlatanov" <tzz@lifelogs.com>
147man/calendar.texi joakim@verona.se Chong Yidong 154man/calendar.texi joakim@verona.se Chong Yidong
148man/cmdargs.texi Chong Yidong 155man/cmdargs.texi Chong Yidong "Luc Teirlinck"
149man/commands.texi "Luc Teirlinck" Chong Yidong 156man/commands.texi "Luc Teirlinck" Chong Yidong
150man/custom.texi Chong Yidong 157man/custom.texi Chong Yidong
151man/dired.texi Chong Yidong joakim@verona.se 158man/dired.texi Chong Yidong joakim@verona.se
@@ -211,7 +218,7 @@ lispref/frames.texi "Luc Teirlinck" Chong Yidong
211lispref/functions.texi "Luc Teirlinck" Chong Yidong 218lispref/functions.texi "Luc Teirlinck" Chong Yidong
212lispref/hash.texi "Luc Teirlinck" Chong Yidong 219lispref/hash.texi "Luc Teirlinck" Chong Yidong
213lispref/help.texi "Luc Teirlinck" Chong Yidong 220lispref/help.texi "Luc Teirlinck" Chong Yidong
214lispref/hooks.texi 221lispref/hooks.texi Lute Kamstra
215lispref/internals.texi "Luc Teirlinck" Chong Yidong 222lispref/internals.texi "Luc Teirlinck" Chong Yidong
216lispref/intro.texi "Luc Teirlinck" 223lispref/intro.texi "Luc Teirlinck"
217lispref/keymaps.texi "Luc Teirlinck" Chong Yidong 224lispref/keymaps.texi "Luc Teirlinck" Chong Yidong
@@ -240,6 +247,42 @@ lispref/tips.texi "Luc Teirlinck" Chong Yidong
240lispref/variables.texi "Luc Teirlinck" Chong Yidong 247lispref/variables.texi "Luc Teirlinck" Chong Yidong
241lispref/windows.texi "Luc Teirlinck" Chong Yidong 248lispref/windows.texi "Luc Teirlinck" Chong Yidong
242 249
250** Check the Emacs Tutorial.
251
252The first line of every tutorial must begin with a sentence saying
253"Emacs Tutorial" in the respective language. This should be followed
254by "See end for copying conditions", likewise in the respective
255language.
256
257After each file name, on the same line or the following line, come the
258names of the people who have checked it.
259
260
261SECTION READERS
262----------------------------------
263etc/TUTORIAL rms
264etc/TUTORIAL.bg Ognyan Kulev <ogi@fmi.uni-sofia.bg>
265etc/TUTORIAL.cn
266etc/TUTORIAL.cs
267etc/TUTORIAL.de
268etc/TUTORIAL.es Marcelo Toledo
269etc/TUTORIAL.fr
270etc/TUTORIAL.it
271etc/TUTORIAL.ja
272etc/TUTORIAL.ko
273etc/TUTORIAL.nl Lute Kamstra
274etc/TUTORIAL.pl
275etc/TUTORIAL.pt_BR Marcelo Toledo
276etc/TUTORIAL.ro
277etc/TUTORIAL.ru
278etc/TUTORIAL.sk
279etc/TUTORIAL.sl
280etc/TUTORIAL.sv Mats Lidell <matsl@contactor.se>
281etc/TUTORIAL.th
282etc/TUTORIAL.zh
283
284
285
243 286
244Local variables: 287Local variables:
245mode: outline 288mode: outline
diff --git a/etc/ChangeLog b/etc/ChangeLog
index 5632e1aaf12..71ec47c3d96 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,48 @@
12005-04-04 Thien-Thi Nguyen <ttn@gnu.org>
2
3 * TUTORIAL.ja: Update text before first period.
4 Reported by Kenichi Handa.
5
62005-04-02 Richard M. Stallman <rms@gnu.org>
7
8 * TUTORIAL.ja, TUTORIAL.cn, TUTORIAL.ru, TUTORIAL.zh: Remove the
9 old intro line that apparently was a longer version of "Emacs
10 tutorial".
11
12 * TUTORIAL.es: Clean up line breaks.
13
142005-04-01 Marcelo Toledo <marcelo@marcelotoledo.org>
15
16 * TUTORIAL.pt_BR, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de,
17 * TUTORIAL.es, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja, TUTORIAL.ko,
18 * TUTORIAL.pl, TUTORIAL.pt_BR, TUTORIAL.ro, TUTORIAL.ru,
19 * TUTORIAL.sk, TUTORIAL.sl, TUTORIAL.th, TUTORIAL.zh: Fix title
20 line.
21
22 * TUTORIAL.bg: Fix title line; Applied TUTORIAL changes in
23 2005-02-08T14:20:54Z!lute@gnu.org, "Emacs" is not transliterated to cyrillic anymore;
24 Minor fixes; by Ognyan Kulev <ogi@fmi.uni-sofia.bg>.
25
26 * TUTORIAL.sv: Sync some other changes with the TUTORIAL version
27 2005-04-01T00:31:25Z!rms@gnu.org by Mats Lidell <matsl@contactor.se>.
28
292005-04-01 Lute Kamstra <lute@gnu.org>
30
31 * TUTORIAL.nl: Fix title line.
32
332005-03-30 Thien-Thi Nguyen <ttn@gnu.org>
34
35 * TUTORIAL: Add title line.
36 * TUTORIAL.bg, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de,
37 * TUTORIAL.es, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja,
38 * TUTORIAL.ko, TUTORIAL.nl, TUTORIAL.pl, TUTORIAL.pt_BR,
39 * TUTORIAL.ro, TUTORIAL.ru, TUTORIAL.sk, TUTORIAL.sl
40 * TUTORIAL.sv, TUTORIAL.th, TUTORIAL.zh: Likewise.
41
422005-03-29 Reiner Steib <Reiner.Steib@gmx.de>
43
44 * gnus-refcard.tex, gnus-logo.eps: New files.
45
12005-03-23 David Ponce <david@dponce.com> 462005-03-23 David Ponce <david@dponce.com>
2 47
3 * NEWS: Mention recentf-keep. 48 * NEWS: Mention recentf-keep.
diff --git a/etc/NEWS b/etc/NEWS
index 19f10bee98a..08792d1b940 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -107,6 +107,20 @@ types any more. Add -DUSE_LISP_UNION_TYPE if you want union types.
107 107
108* Changes in Emacs 22.1 108* Changes in Emacs 22.1
109 109
110** Improved Thai support. A new minor mode `thai-word-mode' (which is
111automatically activated if you select Thai as a language
112environment) changes key bindings of most word-oriented commands to
113versions which recognize Thai words. Affected commands are
114 M-f (forward-word)
115 M-b (backward-word)
116 M-d (kill-word)
117 M-DEL (backward-kill-word)
118 M-t (transpose-words)
119 M-q (fill-paragraph)
120
121** iso-acc.el is now obsolete. Use one of the latin input methods instead.
122
123---
110** Languange environment and various default coding systems are setup 124** Languange environment and various default coding systems are setup
111more correctly according to the current locale name. If the locale 125more correctly according to the current locale name. If the locale
112name doesn't specify a charset, the default is what glibc defines. 126name doesn't specify a charset, the default is what glibc defines.
@@ -254,7 +268,10 @@ in the region, rather than on all complete lines in the region.
254for matching the beginning and end of a symbol. A symbol is a 268for matching the beginning and end of a symbol. A symbol is a
255non-empty sequence of either word or symbol constituent characters, as 269non-empty sequence of either word or symbol constituent characters, as
256specified by the syntax table. 270specified by the syntax table.
271---
272*** rx.el has new corresponding `symbol-end' and `symbol-start' elements.
257 273
274+++
258** Passing resources on the command line now works on MS Windows. 275** Passing resources on the command line now works on MS Windows.
259You can use --xrm to pass resource settings to Emacs, overriding any 276You can use --xrm to pass resource settings to Emacs, overriding any
260existing values. For example: 277existing values. For example:
@@ -837,6 +854,7 @@ possible matches.
837the current Info node name into the kill ring. With a zero prefix 854the current Info node name into the kill ring. With a zero prefix
838arg, puts the node name inside the `info' function call. 855arg, puts the node name inside the `info' function call.
839 856
857---
840*** New face `info-xref-visited' distinguishes visited nodes from unvisited 858*** New face `info-xref-visited' distinguishes visited nodes from unvisited
841and a new option `Info-fontify-visited-nodes' to control this. 859and a new option `Info-fontify-visited-nodes' to control this.
842 860
@@ -848,6 +866,7 @@ references and following them calls `browse-url'.
848If you prefer the old behavior, you can set the new user option 866If you prefer the old behavior, you can set the new user option
849`Info-hide-note-references' to nil. 867`Info-hide-note-references' to nil.
850 868
869---
851*** Images in Info pages are supported. 870*** Images in Info pages are supported.
852Info pages show embedded images, in Emacs frames with image support. 871Info pages show embedded images, in Emacs frames with image support.
853Info documentation that includes images, processed with makeinfo 872Info documentation that includes images, processed with makeinfo
@@ -934,6 +953,7 @@ horizontal scroll bars in a frame or window.
934+++ 953+++
935** Under X, mouse-wheel-mode is turned on by default. 954** Under X, mouse-wheel-mode is turned on by default.
936 955
956+++
937** The X resource useXIM can be used to turn off use of XIM, which may 957** The X resource useXIM can be used to turn off use of XIM, which may
938speed up Emacs with slow networking to the X server. 958speed up Emacs with slow networking to the X server.
939 959
@@ -999,6 +1019,7 @@ You can now put the init files .emacs and .emacs_SHELL under
999 instead. The updated skeleton-insert docstring explains these new 1019 instead. The updated skeleton-insert docstring explains these new
1000 features along with other details of skeleton construction. 1020 features along with other details of skeleton construction.
1001 1021
1022---
1002** MH-E changes. 1023** MH-E changes.
1003 1024
1004Upgraded to MH-E version 7.82. There have been major changes since 1025Upgraded to MH-E version 7.82. There have been major changes since
@@ -1232,6 +1253,7 @@ when Emacs visits them.
1232default, all trivial operations involving whole lines are performed 1253default, all trivial operations involving whole lines are performed
1233automatically. The game uses faces for better visual feedback. 1254automatically. The game uses faces for better visual feedback.
1234 1255
1256---
1235** The new variable `x-select-request-type' controls how Emacs 1257** The new variable `x-select-request-type' controls how Emacs
1236requests X selection. The default value is nil, which means that 1258requests X selection. The default value is nil, which means that
1237Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING, 1259Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING,
@@ -2237,17 +2259,23 @@ from the file name or buffer contents.
2237--- 2259---
2238** Perl mode has a new variable `perl-indent-continued-arguments'. 2260** Perl mode has a new variable `perl-indent-continued-arguments'.
2239 2261
2262---
2263** Fortran mode does more font-locking by default. Use level 3
2264highlighting for the old default.
2265
2240+++ 2266+++
2241** Fortran mode has a new variable `fortran-directive-re'. 2267** Fortran mode has a new variable `fortran-directive-re'.
2242Adapt this to match the format of any compiler directives you use. 2268Adapt this to match the format of any compiler directives you use.
2243Lines that match are never indented, and are given distinctive font-locking. 2269Lines that match are never indented, and are given distinctive font-locking.
2244 2270
2245+++ 2271+++
2246** F90 mode has new navigation commands `f90-end-of-block', 2272** F90 mode and Fortran mode have new navigation commands
2247`f90-beginning-of-block', `f90-next-block', `f90-previous-block'. 2273`f90-end-of-block', `f90-beginning-of-block', `f90-next-block',
2274`f90-previous-block', `fortran-end-of-block',
2275`fortran-beginning-of-block'.
2248 2276
2249--- 2277---
2250** F90 mode now has support for hs-minor-mode (hideshow). 2278** F90 mode and Fortran mode have support for hs-minor-mode (hideshow).
2251It cannot deal with every code format, but ought to handle a sizeable 2279It cannot deal with every code format, but ought to handle a sizeable
2252majority. 2280majority.
2253 2281
@@ -2407,6 +2435,7 @@ used to effect hiding for hideshow minor mode. Integration with isearch
2407handles the overlay property `display' specially, preserving it during 2435handles the overlay property `display' specially, preserving it during
2408temporary overlay showing in the course of an isearch operation. 2436temporary overlay showing in the course of an isearch operation.
2409 2437
2438+++
2410** New command `recode-region' decodes the region again by a specified 2439** New command `recode-region' decodes the region again by a specified
2411coding system. 2440coding system.
2412 2441
@@ -2414,6 +2443,17 @@ coding system.
2414* New modes and packages in Emacs 22.1 2443* New modes and packages in Emacs 22.1
2415 2444
2416+++ 2445+++
2446** The new package longlines.el provides a minor mode for editing text
2447files composed of long lines, based on the `use-hard-newlines'
2448mechanism. The long lines are broken up by inserting soft newlines,
2449which are automatically removed when saving the file to disk or
2450copying into the kill ring, clipboard, etc. By default, Longlines
2451mode inserts soft newlines automatically during editing, a behavior
2452referred to as "soft word wrap" in other text editors. This is
2453similar to Refill mode, but more reliable. To turn the word wrap
2454feature off, set `longlines-auto-wrap' to nil.
2455
2456+++
2417** The new package conf-mode.el handles thousands of configuration files, with 2457** The new package conf-mode.el handles thousands of configuration files, with
2418varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value, 2458varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value,
2419var : value, var value or keyword var value) and sections ([section] or 2459var : value, var value or keyword var value) and sections ([section] or
@@ -2421,10 +2461,12 @@ section { }). Many files under /etc/, or with suffixes like .cf through
2421.config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are 2461.config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are
2422recognized. 2462recognized.
2423 2463
2464+++
2424** The new package dns-mode.el add syntax highlight of DNS master files. 2465** The new package dns-mode.el add syntax highlight of DNS master files.
2425The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used 2466The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used
2426to increment the SOA serial. 2467to increment the SOA serial.
2427 2468
2469+++
2428** The new package flymake.el does on-the-fly syntax checking of program 2470** The new package flymake.el does on-the-fly syntax checking of program
2429source files. See the Flymake's Info manual for more details. 2471source files. See the Flymake's Info manual for more details.
2430 2472
@@ -2432,9 +2474,11 @@ source files. See the Flymake's Info manual for more details.
2432of hierarchical data as an outline. For example, the tree-widget is 2474of hierarchical data as an outline. For example, the tree-widget is
2433well suited to display a hierarchy of directories and files. 2475well suited to display a hierarchy of directories and files.
2434 2476
2477+++
2435** The wdired.el package allows you to use normal editing commands on Dired 2478** The wdired.el package allows you to use normal editing commands on Dired
2436buffers to change filenames, permissions, etc... 2479buffers to change filenames, permissions, etc...
2437 2480
2481+++
2438** The thumbs.el package allows you to preview image files as thumbnails 2482** The thumbs.el package allows you to preview image files as thumbnails
2439and can be invoked from a Dired buffer. 2483and can be invoked from a Dired buffer.
2440 2484
@@ -2447,6 +2491,7 @@ and can be invoked from a Dired buffer.
2447** The new global minor mode `size-indication-mode' (off by default) 2491** The new global minor mode `size-indication-mode' (off by default)
2448shows the size of accessible part of the buffer on the mode line. 2492shows the size of accessible part of the buffer on the mode line.
2449 2493
2494---
2450** GDB-Script-mode is used for files like .gdbinit. 2495** GDB-Script-mode is used for files like .gdbinit.
2451 2496
2452--- 2497---
@@ -2502,6 +2547,7 @@ versions of cua.el and cua-mode.el. To ensure proper operation, you
2502must remove older versions of cua.el or cua-mode.el as well as the 2547must remove older versions of cua.el or cua-mode.el as well as the
2503loading and customization of those packages from the .emacs file. 2548loading and customization of those packages from the .emacs file.
2504 2549
2550+++
2505** The new keypad setup package provides several common bindings for 2551** The new keypad setup package provides several common bindings for
2506the numeric keypad which is available on most keyboards. The numeric 2552the numeric keypad which is available on most keyboards. The numeric
2507keypad typically has the digits 0 to 9, a decimal point, keys marked 2553keypad typically has the digits 0 to 9, a decimal point, keys marked
@@ -2629,6 +2675,7 @@ There is also Global Reveal mode which affects all buffers.
2629** The new package ibuffer provides a powerful, completely 2675** The new package ibuffer provides a powerful, completely
2630customizable replacement for buff-menu.el. 2676customizable replacement for buff-menu.el.
2631 2677
2678+++
2632** The new package table.el implements editable, WYSIWYG, embedded 2679** The new package table.el implements editable, WYSIWYG, embedded
2633`text tables' in Emacs buffers. It simulates the effect of putting 2680`text tables' in Emacs buffers. It simulates the effect of putting
2634these tables in a special major mode. The package emulates WYSIWYG 2681these tables in a special major mode. The package emulates WYSIWYG
@@ -2651,17 +2698,20 @@ mode-lines in inverse-video.
2651--- 2698---
2652** cplus-md.el has been removed to avoid problems with Custom. 2699** cplus-md.el has been removed to avoid problems with Custom.
2653 2700
2701+++
2654** New package benchmark.el contains simple support for convenient 2702** New package benchmark.el contains simple support for convenient
2655timing measurements of code (including the garbage collection component). 2703timing measurements of code (including the garbage collection component).
2656 2704
2657--- 2705---
2658** The new Lisp library fringe.el controls the appearance of fringes. 2706** The new Lisp library fringe.el controls the appearance of fringes.
2659 2707
2708---
2660** `cfengine-mode' is a major mode for editing GNU Cfengine 2709** `cfengine-mode' is a major mode for editing GNU Cfengine
2661configuration files. 2710configuration files.
2662 2711
2663* Incompatible Lisp Changes in Emacs 22.1 2712* Incompatible Lisp Changes in Emacs 22.1
2664 2713
2714+++
2665** The new interactive-specification `G' reads a file name 2715** The new interactive-specification `G' reads a file name
2666much like `F', but if the input is a directory name (even defaulted), 2716much like `F', but if the input is a directory name (even defaulted),
2667it returns just the directory name. 2717it returns just the directory name.
@@ -2679,6 +2729,21 @@ the command `undefined'. (In earlier Emacs versions, it used
2679 2729
2680* Lisp Changes in Emacs 22.1 2730* Lisp Changes in Emacs 22.1
2681 2731
2732---
2733** easy-mmode-define-global-mode has been renamed to
2734define-global-minor-mode. The old name remains as an alias.
2735
2736+++
2737** The new function `filter-buffer-substring' extracts a buffer
2738substring, passes it through a set of filter functions, and returns
2739the filtered substring. It is used instead of `buffer-substring' or
2740`delete-and-extract-region' when copying text into a user-accessible
2741data structure, like the kill-ring, X clipboard, or a register. The
2742list of filter function is specified by the new variable
2743`buffer-substring-filters'. For example, Longlines mode uses
2744`buffer-substring-filters' to remove soft newlines from the copied
2745text.
2746
2682+++ 2747+++
2683** An element of buffer-undo-list can now have the form (apply FUNNAME 2748** An element of buffer-undo-list can now have the form (apply FUNNAME
2684. ARGS), where FUNNAME is a symbol other than t or nil. That stands 2749. ARGS), where FUNNAME is a symbol other than t or nil. That stands
@@ -3201,6 +3266,7 @@ contents are detected automatically. However, certain implicit
3201changes to mode lines, header lines, or display properties may require 3266changes to mode lines, header lines, or display properties may require
3202forcing an explicit window update. 3267forcing an explicit window update.
3203 3268
3269---
3204** New function `redirect-debugging-output' can be used to redirect 3270** New function `redirect-debugging-output' can be used to redirect
3205debugging output on the stderr file handle to a file. 3271debugging output on the stderr file handle to a file.
3206 3272
@@ -4401,6 +4467,7 @@ formerly used for that purpose is now an alias for locale-coding-system.
4401display a prompt but don't use the minibuffer, now display the prompt 4467display a prompt but don't use the minibuffer, now display the prompt
4402using the text properties (esp. the face) of the prompt string. 4468using the text properties (esp. the face) of the prompt string.
4403 4469
4470---
4404** New function x-send-client-message sends a client message when 4471** New function x-send-client-message sends a client message when
4405running under X. 4472running under X.
4406 4473
@@ -4410,6 +4477,7 @@ all overlays in the buffer by just calling (remove-overlay).
4410 4477
4411** New packages: 4478** New packages:
4412 4479
4480+++
4413*** The new package gdb-ui.el provides an enhanced graphical interface to 4481*** The new package gdb-ui.el provides an enhanced graphical interface to
4414GDB. You can interact with GDB through the GUD buffer in the usual way, but 4482GDB. You can interact with GDB through the GUD buffer in the usual way, but
4415there are also further buffers which control the execution and describe the 4483there are also further buffers which control the execution and describe the
@@ -4426,6 +4494,7 @@ current syntactic context (as returned by parse-partial-sexp).
4426binary data structures, such as network packets, to and from Lisp 4494binary data structures, such as network packets, to and from Lisp
4427data structures. 4495data structures.
4428 4496
4497---
4429*** The TCL package tcl-mode.el was replaced by tcl.el. 4498*** The TCL package tcl-mode.el was replaced by tcl.el.
4430This was actually done in Emacs-21.1, and was not documented. 4499This was actually done in Emacs-21.1, and was not documented.
4431 4500
diff --git a/etc/TUTORIAL b/etc/TUTORIAL
index b5632ae707b..48fa02f93d9 100644
--- a/etc/TUTORIAL
+++ b/etc/TUTORIAL
@@ -1,4 +1,4 @@
1You are looking at the Emacs tutorial. See end for copying conditions. 1Emacs tutorial. See end for copying conditions.
2Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation. 2Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation.
3 3
4Emacs commands generally involve the CONTROL key (sometimes labeled 4Emacs commands generally involve the CONTROL key (sometimes labeled
diff --git a/etc/TUTORIAL.bg b/etc/TUTORIAL.bg
index 8bd4b2a19ad..239d3d58c19 100644
--- a/etc/TUTORIAL.bg
+++ b/etc/TUTORIAL.bg
@@ -1,7 +1,7 @@
1Âèå ãëåäàòå âúâåäåíèåòî íà Åìàêñ. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà. 1Âúâåäåíèå â Emacs. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà.
2Copyright (c) 1985, 1996, 1998, 2001, 2002, 2003 Free Software Foundation. 2Copyright (c) 1985,1996,1998,2001,2002,2003,2005 Free Software Foundation.
3 3
4Êîìàíäèòå íà Åìàêñ íàé-÷åñòî âêëþ÷âàò êëàâèøèòå CONTROL (ïîíÿêîãà 4Êîìàíäèòå íà Emacs íàé-÷åñòî âêëþ÷âàò êëàâèøèòå CONTROL (ïîíÿêîãà
5îòáåëÿçâàí ñ CTRL èëè CTL) è META (ïîíÿêîãà îòáåëÿçâàí ñ EDIT èëè 5îòáåëÿçâàí ñ CTRL èëè CTL) è META (ïîíÿêîãà îòáåëÿçâàí ñ EDIT èëè
6ALT). Âìåñòî äà ñå èçïèñâàò ñ ïúëíî èìå âñåêè ïúò, íèå ùå èçïîëçâàìå 6ALT). Âìåñòî äà ñå èçïèñâàò ñ ïúëíî èìå âñåêè ïúò, íèå ùå èçïîëçâàìå
7ñëåäíèòå ñúêðàùåíèÿ: 7ñëåäíèòå ñúêðàùåíèÿ:
@@ -15,7 +15,7 @@ ALT). Âìåñòî äà ñå èçïèñâàò ñ ïúëíî èìå âñåêè ïúò, íèå ùå èçïîëçâàìå
15 êëàâèøà ESC è ñëåä òîâà âúâåäåòå <çíàê>. Íèå 15 êëàâèøà ESC è ñëåä òîâà âúâåäåòå <çíàê>. Íèå
16 çàïèñâàìå <ESC>, çà äà îòáåëåæèì êëàâèøà ESC. 16 çàïèñâàìå <ESC>, çà äà îòáåëåæèì êëàâèøà ESC.
17 17
18Âàæíà áåëåæêà: â êðàÿ íà Åìàêñ ñåñèÿòà âúâåäåòå äâàòà çíàêà C-x C-c. 18Âàæíà áåëåæêà: â êðàÿ íà Emacs ñåñèÿòà âúâåäåòå äâàòà çíàêà C-x C-c.
19Çíàöèòå ">>" îòëÿâî âè äàâàò óêàçàíèå äà èçïúëíèòå êîìàíäà. Íàïðèìåð: 19Çíàöèòå ">>" îòëÿâî âè äàâàò óêàçàíèå äà èçïúëíèòå êîìàíäà. Íàïðèìåð:
20<<Blank lines inserted here by startup of help-with-tutorial>> 20<<Blank lines inserted here by startup of help-with-tutorial>>
21>> Ñåãà âúâåäåòå C-v (Ïîêàæè ñëåäâàùèÿ åêðàí), çà äà ñå ïðèäâèæèòå êúì 21>> Ñåãà âúâåäåòå C-v (Ïîêàæè ñëåäâàùèÿ åêðàí), çà äà ñå ïðèäâèæèòå êúì
@@ -93,7 +93,7 @@ Next (ñëåäâàù), B çà Backward (íàçàä) è F çà Forward (íàïðåä). Âèå ùå
93 93
94Âñåêè ðåä îò òåêñò çàâúðøâà ñúñ çíàê çà íîâ ðåä, êîéòî ñëóæè çà 94Âñåêè ðåä îò òåêñò çàâúðøâà ñúñ çíàê çà íîâ ðåä, êîéòî ñëóæè çà
95îòäåëÿíåòî íà ðåäà îò ñëåäâàùèÿ ðåä. Ïîñëåäíèÿò ðåä âúâ âàøèÿ ôàéë 95îòäåëÿíåòî íà ðåäà îò ñëåäâàùèÿ ðåä. Ïîñëåäíèÿò ðåä âúâ âàøèÿ ôàéë
96òðÿáâà äà èìà çíàê çà íîâ ðåä â êðàÿ (íî Åìàêñ íå èçèñêâà òàêúâ, 96òðÿáâà äà èìà çíàê çà íîâ ðåä â êðàÿ (íî Emacs íå èçèñêâà òàêúâ,
97êîãàòî ïðî÷èòà ôàéëà). 97êîãàòî ïðî÷èòà ôàéëà).
98 98
99>> Îïèòàéòå C-b â íà÷àëîòî íà ðåä. Òîâà òðÿáâà äà âè ïðèäâèæè â êðàÿ 99>> Îïèòàéòå C-b â íà÷àëîòî íà ðåä. Òîâà òðÿáâà äà âè ïðèäâèæè â êðàÿ
@@ -109,7 +109,7 @@ C-f ìîæå äà ïðèäâèæâà ïðåç çíàê çà íîâ ðåä òî÷íî êàêòî C-b.
109 109
110Êîãàòî ñå ïðèäâèæâàòå ñëåä ãîðíèÿ èëè äîëíèÿ êðàé íà åêðàíà, òåêñòúò 110Êîãàòî ñå ïðèäâèæâàòå ñëåä ãîðíèÿ èëè äîëíèÿ êðàé íà åêðàíà, òåêñòúò
111îòâúä êðàÿ ñå èçìåñòâà êúì åêðàíà. Òîâà ñå íàðè÷à "ñêðîëèðàíå". Òî 111îòâúä êðàÿ ñå èçìåñòâà êúì åêðàíà. Òîâà ñå íàðè÷à "ñêðîëèðàíå". Òî
112ïîçâîëÿâà íà Åìàêñ äà ïðèäâèæâà êóðñîðà êúì çàäàäåíîòî ìÿñòî â òåêñòà, 112ïîçâîëÿâà íà Emacs äà ïðèäâèæâà êóðñîðà êúì çàäàäåíîòî ìÿñòî â òåêñòà,
113áåç äà ãî èçêàðâà èçâúí åêðàíà. 113áåç äà ãî èçêàðâà èçâúí åêðàíà.
114 114
115>> Îïèòàéòå ñå äà ïðèäâèæèòå êóðñîðà ñëåä äîëíèÿ êðàé íà åêðàíà ñ C-n 115>> Îïèòàéòå ñå äà ïðèäâèæèòå êóðñîðà ñëåä äîëíèÿ êðàé íà åêðàíà ñ C-n
@@ -192,7 +192,7 @@ Shift áèõòå âúâåëè M-çàïåòàÿ.
192Âèå ìîæåòå ñúùî äà ñå ïðèäâèæâàòå ñ êëàâèøèòå-ñòðåëêè, àêî âàøèÿò 192Âèå ìîæåòå ñúùî äà ñå ïðèäâèæâàòå ñ êëàâèøèòå-ñòðåëêè, àêî âàøèÿò
193òåðìèíàë èìà òàêèâà. Íèå ïðåïîðú÷âàìå äà íàó÷èòå C-b, C-f, C-n è C-p 193òåðìèíàë èìà òàêèâà. Íèå ïðåïîðú÷âàìå äà íàó÷èòå C-b, C-f, C-n è C-p
194ïî òðè ïðè÷èíè. Ïúðâî, òå ðàáîòÿò íà âñè÷êè âèäîâå òåðìèíàëè. Âòîðî, 194ïî òðè ïðè÷èíè. Ïúðâî, òå ðàáîòÿò íà âñè÷êè âèäîâå òåðìèíàëè. Âòîðî,
195âåäíúæ ñëåä êàòî äîáèåòå ïðàêòèêà â èçïîëçâàíåòî íà Åìàêñ, ùå 195âåäíúæ ñëåä êàòî äîáèåòå ïðàêòèêà â èçïîëçâàíåòî íà Emacs, ùå
196îòêðèåòå, ÷å âúâåæäàíåòî íà òåçè Control-çíàöè å ïî-áúðçî îò 196îòêðèåòå, ÷å âúâåæäàíåòî íà òåçè Control-çíàöè å ïî-áúðçî îò
197âúâåæäàíåòî íà êëàâèøèòå ñòðåëêè, çàùîòî íå òðÿáâà äà ïðåìåñòâàòå 197âúâåæäàíåòî íà êëàâèøèòå ñòðåëêè, çàùîòî íå òðÿáâà äà ïðåìåñòâàòå
198ðúêàòà ñè äàëå÷ îò îáëàñòòà íà êëàâèøèòå ñ áóêâè. Òðåòî, âåäíúæ ñëåä 198ðúêàòà ñè äàëå÷ îò îáëàñòòà íà êëàâèøèòå ñ áóêâè. Òðåòî, âåäíúæ ñëåä
@@ -200,7 +200,7 @@ Shift áèõòå âúâåëè M-çàïåòàÿ.
200ìîæåòå ñúùî òàêà ëåñíî äà íàó÷èòå ïî-íàïðåäíàëèòå êîìàíäè çà äâèæåíèå 200ìîæåòå ñúùî òàêà ëåñíî äà íàó÷èòå ïî-íàïðåäíàëèòå êîìàíäè çà äâèæåíèå
201íà êóðñîðà. 201íà êóðñîðà.
202 202
203Ïîâå÷åòî Åìàêñ êîìàíäè ïðèåìàò ÷èñëîâ àðãóìåíò; çà ïîâå÷åòî îò òÿõ òîé 203Ïîâå÷åòî Emacs êîìàíäè ïðèåìàò ÷èñëîâ àðãóìåíò; çà ïîâå÷åòî îò òÿõ òîé
204ñëóæè êàòî áðîÿ÷ íà ïîâòîðåíèÿ. Íà÷èíúò, ïî êîéòî äàâàòå ÷èñëîâ 204ñëóæè êàòî áðîÿ÷ íà ïîâòîðåíèÿ. Íà÷èíúò, ïî êîéòî äàâàòå ÷èñëîâ
205áðîÿ÷, å ñ âúâåæäàíå íà C-u, ïîñëåäâàíî îò âúâåæäàíå íà öèôðèòå, è 205áðîÿ÷, å ñ âúâåæäàíå íà C-u, ïîñëåäâàíî îò âúâåæäàíå íà öèôðèòå, è
206âñè÷êî òîâà ïðåäè âúâåæäàíå íà ñàìàòà êîìàíäà. Àêî èìàòå êëàâèø META 206âñè÷êî òîâà ïðåäè âúâåæäàíå íà ñàìàòà êîìàíäà. Àêî èìàòå êëàâèø META
@@ -232,7 +232,7 @@ C-v è M-v ñà äðóã âèä èçêëþ÷åíèå. Êîãàòî èì å äàäåí àðãóìåíò, òå
232 232
233Àêî èçïîëçâàòå ãðàôè÷åí èíòåðôåéñ, êàòî X11 èëè MS-Windows, áè 233Àêî èçïîëçâàòå ãðàôè÷åí èíòåðôåéñ, êàòî X11 èëè MS-Windows, áè
234òðÿáâàëî äà èìà òúíêà ïðàâîúãúëíà îáëàñò, íàðå÷åíà ïëúçãà÷ (scroll 234òðÿáâàëî äà èìà òúíêà ïðàâîúãúëíà îáëàñò, íàðå÷åíà ïëúçãà÷ (scroll
235bar), â ëÿâàòà ñòðàíà íà ïðîçîðåöà íà Åìàêñ. Âèå ìîæåòå äà ñêðîëèðàòå 235bar), â ëÿâàòà ñòðàíà íà ïðîçîðåöà íà Emacs. Âèå ìîæåòå äà ñêðîëèðàòå
236òåêñòà, ùðàêàéêè ñ ìèøêàòà â ïëúçãà÷à. 236òåêñòà, ùðàêàéêè ñ ìèøêàòà â ïëúçãà÷à.
237 237
238>> Îïèòàéòå äà íàòèñíåòå ñðåäíèÿ áóòîí íà âúðõà íà îñâåòåíàòà îáëàñò 238>> Îïèòàéòå äà íàòèñíåòå ñðåäíèÿ áóòîí íà âúðõà íà îñâåòåíàòà îáëàñò
@@ -244,10 +244,10 @@ bar), â ëÿâàòà ñòðàíà íà ïðîçîðåöà íà Åìàêñ. Âèå ìîæåòå äà ñêðîëèðàòå
244 íàãîðå è íàäîëó, êàòî äâèæèòå ìèøêàòà. 244 íàãîðå è íàäîëó, êàòî äâèæèòå ìèøêàòà.
245 245
246 246
247* ÊÎÃÀÒÎ ÅÌÀÊÑ Å ÁËÎÊÈÐÀË 247* ÊÎÃÀÒÎ EMACS Å ÁËÎÊÈÐÀË
248------------------------- 248-------------------------
249 249
250Àêî Åìàêñ ñïðå äà îòãîâàðÿ íà âàøèòå êîìàíäè, âèå ìîæåòå äà ãî ñïðåòå 250Àêî Emacs ñïðå äà îòãîâàðÿ íà âàøèòå êîìàíäè, âèå ìîæåòå äà ãî ñïðåòå
251áåçîïàñíî, êàòî âúâåäåòå C-g. Ìîæå äà èçïîëçâàòå C-g, çà äà ñïðåòå 251áåçîïàñíî, êàòî âúâåäåòå C-g. Ìîæå äà èçïîëçâàòå C-g, çà äà ñïðåòå
252êîìàíäà, êîÿòî ñå èçïúëíÿâà òâúðäå äúëãî. 252êîìàíäà, êîÿòî ñå èçïúëíÿâà òâúðäå äúëãî.
253 253
@@ -264,15 +264,15 @@ bar), â ëÿâàòà ñòðàíà íà ïðîçîðåöà íà Åìàêñ. Âèå ìîæåòå äà ñêðîëèðàòå
264* ÇÀÁÐÀÍÅÍÈ ÊÎÌÀÍÄÈ 264* ÇÀÁÐÀÍÅÍÈ ÊÎÌÀÍÄÈ
265------------------- 265-------------------
266 266
267Íÿêîè êîìàíäè íà Åìàêñ ñà "çàáðàíåíè", òàêà ÷å íà÷èíàåùèòå ïîòðåáèòåëè 267Íÿêîè êîìàíäè íà Emacs ñà "çàáðàíåíè", òàêà ÷å íà÷èíàåùèòå ïîòðåáèòåëè
268äà íå ìîãàò äà ãè óïîòðåáÿò ïî ïîãðåøêà. 268äà íå ìîãàò äà ãè óïîòðåáÿò ïî ïîãðåøêà.
269 269
270Àêî âúâåäåòå íÿêîÿ îò çàáðàíåíèòå êîìàíäè, Åìàêñ èçâåæäà ñúîáùåíèå, 270Àêî âúâåäåòå íÿêîÿ îò çàáðàíåíèòå êîìàíäè, Emacs èçâåæäà ñúîáùåíèå,
271êàçâàéêè êàêâà å áèëà êîìàíäàòà è ïèòàéêè âè äàëè èñêàòå äà ïðîäúëæèòå 271êàçâàéêè êàêâà å áèëà êîìàíäàòà è ïèòàéêè âè äàëè èñêàòå äà ïðîäúëæèòå
272íàïðåä è äà èçïúëíèòå êîìàíäàòà. 272íàïðåä è äà èçïúëíèòå êîìàíäàòà.
273 273
274Àêî íàèñòèíà èñêàòå äà èçïðîáâàòå êîìàíäàòà, âúâåäåòå êëàâèøà èíòåðâàë 274Àêî íàèñòèíà èñêàòå äà èçïðîáâàòå êîìàíäàòà, âúâåäåòå <SPC> (êëàâèøà
275â îòãîâîð íà âúïðîñà. Îáèêíîâåíî àêî íå èñêàòå äà èçïúëíèòå 275èíòåðâàë) â îòãîâîð íà âúïðîñà. Îáèêíîâåíî àêî íå èñêàòå äà èçïúëíèòå
276çàáðàíåíàòà êîìàíäà, îòãîâàðÿòå íà âúïðîñà ñ "n". 276çàáðàíåíàòà êîìàíäà, îòãîâàðÿòå íà âúïðîñà ñ "n".
277 277
278>> Âúâåäåòå C-x C-l (êîÿòî å çàáðàíåíà êîìàíäà), è ñëåä òîâà âúâåäåòå 278>> Âúâåäåòå C-x C-l (êîÿòî å çàáðàíåíà êîìàíäà), è ñëåä òîâà âúâåäåòå
@@ -282,7 +282,7 @@ bar), â ëÿâàòà ñòðàíà íà ïðîçîðåöà íà Åìàêñ. Âèå ìîæåòå äà ñêðîëèðàòå
282* ÏÐÎÇÎÐÖÈ 282* ÏÐÎÇÎÐÖÈ
283---------- 283----------
284 284
285Åìàêñ ìîæå äà óïðàâëÿâà íÿêîëêî ïðîçîðåöà, âñåêè èçâåæäàéêè ñâîé 285Emacs ìîæå äà óïðàâëÿâà íÿêîëêî ïðîçîðåöà, âñåêè èçâåæäàéêè ñâîé
286ñîáñòâåí òåêñò. Íèå ùå îáÿñíèì ïî-êúñíî êàê äà èçïîëçâàòå íÿêîëêî 286ñîáñòâåí òåêñò. Íèå ùå îáÿñíèì ïî-êúñíî êàê äà èçïîëçâàòå íÿêîëêî
287ïðîçîðåöà. Òî÷íî ñåãà íèå èñêàìå äà îáÿñíèì êàê äà ñå îòúðâåòå îò 287ïðîçîðåöà. Òî÷íî ñåãà íèå èñêàìå äà îáÿñíèì êàê äà ñå îòúðâåòå îò
288äîïúëíèòåëíè ïðîçîðöè è äà ñå âúðíåòå êúì îñíîâíîòî ðåäàêòèðàíå ñ åäèí 288äîïúëíèòåëíè ïðîçîðöè è äà ñå âúðíåòå êúì îñíîâíîòî ðåäàêòèðàíå ñ åäèí
@@ -312,13 +312,13 @@ bar), â ëÿâàòà ñòðàíà íà ïðîçîðåöà íà Åìàêñ. Âèå ìîæåòå äà ñêðîëèðàòå
312---------------------- 312----------------------
313 313
314Àêî èñêàòå äà âìúêíåòå òåêñò, ïðîñòî ãî âúâåäåòå. Çíàöèòå, êîèòî 314Àêî èñêàòå äà âìúêíåòå òåêñò, ïðîñòî ãî âúâåäåòå. Çíàöèòå, êîèòî
315ìîãàò äà ñå âèæäàò, êàòî À, 7, * è ò.í., ñå âúçïðèåìàò îò Åìàêñ êàòî 315ìîãàò äà ñå âèæäàò, êàòî À, 7, * è ò.í., ñå âúçïðèåìàò îò Emacs êàòî
316òåêñò è ñå âìúêâàò âåäíàãà. Âúâåäåòå <Return> (êëàâèøúò çà âðúùàíå â 316òåêñò è ñå âìúêâàò âåäíàãà. Âúâåäåòå <Return> (êëàâèøúò çà âðúùàíå â
317íà÷àëîòî íà ðåäà), çà äà âìúêíåòå çíàê çà íîâ ðåä. 317íà÷àëîòî íà ðåäà), çà äà âìúêíåòå çíàê çà íîâ ðåä.
318 318
319Ìîæå äà èçòðèåòå ïîñëåäíèÿ çíàê, êîéòî ñòå âúâåëè, ñ âúâåæäàíå íà 319Ìîæå äà èçòðèåòå ïîñëåäíèÿ çíàê, êîéòî ñòå âúâåëè, ñ âúâåæäàíå íà
320<Delback>. <Delback> å êëàâèø îò êëàâèàòóðàòà -- ñúùèÿò, êîéòî 320<Delback>. <Delback> å êëàâèø îò êëàâèàòóðàòà -- ñúùèÿò, êîéòî
321îáèêíîâåíî èçïîëçâàòå èçâúí Åìàêñ, çà äà èçòðèåòå ïîñëåäíèÿ âúâåäåí îò 321îáèêíîâåíî èçïîëçâàòå èçâúí Emacs, çà äà èçòðèåòå ïîñëåäíèÿ âúâåäåí îò
322âàñ çíàê. Îáèêíîâåíî å ãîëÿì êëàâèø, íà íÿêîëêî ðåäà ðàçñòîÿíèå îò 322âàñ çíàê. Îáèêíîâåíî å ãîëÿì êëàâèø, íà íÿêîëêî ðåäà ðàçñòîÿíèå îò
323êëàâèøà <Return>, è îáèêíîâåíî å îòáåëÿçàí ñ "Delete", "Del" èëè 323êëàâèøà <Return>, è îáèêíîâåíî å îòáåëÿçàí ñ "Delete", "Del" èëè
324"Backspace". 324"Backspace".
@@ -358,24 +358,24 @@ bar), â ëÿâàòà ñòðàíà íà ïðîçîðåöà íà Åìàêñ. Âèå ìîæåòå äà ñêðîëèðàòå
358>> Âúâåäåòå <Return>, çà äà âìúêíåòå íàíîâî çíàêà çà íîâ ðåä, êîéòî 358>> Âúâåäåòå <Return>, çà äà âìúêíåòå íàíîâî çíàêà çà íîâ ðåä, êîéòî
359 èçòðèõòå. 359 èçòðèõòå.
360 360
361Çàïîìíåòå, ÷å íà ïîâå÷åòî êîìàíäè íà Åìàêñ ìîæå äà áúäå çàäàäåí áðîÿ÷ 361Çàïîìíåòå, ÷å íà ïîâå÷åòî êîìàíäè íà Emacs ìîæå äà áúäå çàäàäåí áðîÿ÷
362íà ïîâòîðåíèÿòà; òîâà âêëþ÷âà âìúêâàíåòî íà òåêñòîâè çíàöè. 362íà ïîâòîðåíèÿòà; òîâà âêëþ÷âà âìúêâàíåòî íà òåêñòîâè çíàöè.
363Ïîâòàðÿíåòî íà òåêñòîâ çíàê ãî âìúêâà íÿêîëêî ïúòè. 363Ïîâòàðÿíåòî íà òåêñòîâ çíàê ãî âìúêâà íÿêîëêî ïúòè.
364 364
365>> Îïèòàéòå òîâà ñåãà -- âúâåäåòå C-u 8 *, çà äà âìúêíåòå ********. 365>> Îïèòàéòå òîâà ñåãà -- âúâåäåòå C-u 8 *, çà äà âìúêíåòå ********.
366 366
367Ñåãà âèå ñòå íàó÷èëè íàé-îñíîâíèòå íà÷èíè çà âúâåæäàíå íà íåùî â Åìàêñ 367Ñåãà âèå ñòå íàó÷èëè íàé-îñíîâíèòå íà÷èíè çà âúâåæäàíå íà íåùî â Emacs
368è ïîïðàâÿíå íà ãðåøêè. Ìîæåòå ñúùî òàêà äà èçòðèâàòå äóìè èëè ðåäîâå. 368è ïîïðàâÿíå íà ãðåøêè. Ìîæåòå ñúùî òàêà äà èçòðèâàòå äóìè èëè ðåäîâå.
369Åòî îáîáùåíèå íà èçòðèâàùèòå äåéñòâèÿ: 369Åòî îáîáùåíèå íà èçòðèâàùèòå äåéñòâèÿ:
370 370
371 <Delback> èçòðèâàíå íà çíàêà òî÷íî ïðåäè êóðñîðà 371 <Delback> Èçòðèâàíå íà çíàêà òî÷íî ïðåäè êóðñîðà
372 C-d èçòðèâàíå íà çíàêà òî÷íî ñëåä êóðñîðà 372 C-d Èçòðèâàíå íà çíàêà òî÷íî ñëåä êóðñîðà
373 373
374 M-<Delback> èçòðèâàíå íà äóìàòà íåïîñðåäñòâåíî ïðåäè êóðñîðà 374 M-<Delback> Èçòðèâàíå íà äóìàòà íåïîñðåäñòâåíî ïðåäè êóðñîðà
375 M-d èçòðèâàíå íà äóìàòà ñëåä êóðñîðà 375 M-d Èçòðèâàíå íà äóìàòà ñëåä êóðñîðà
376 376
377 C-k èçòðèâàíå îò ìÿñòîòî íà êóðñîðà äî êðàÿ íà ðåäà 377 C-k Èçòðèâàíå îò ìÿñòîòî íà êóðñîðà äî êðàÿ íà ðåäà
378 M-k èçòðèâàíå äî êðàÿ íà òåêóùîòî èçðå÷åíèå 378 M-k Èçòðèâàíå äî êðàÿ íà òåêóùîòî èçðå÷åíèå
379 379
380Çàáåëåæåòå, ÷å <Delback> è C-d, ñðàâíåíè ñ M-<Delback> è M-d, 380Çàáåëåæåòå, ÷å <Delback> è C-d, ñðàâíåíè ñ M-<Delback> è M-d,
381ðàçøèðÿâàò ïîäîáèåòî, çàïî÷íàòî îò C-f è M-f (äîáðå, <Delback> íå å 381ðàçøèðÿâàò ïîäîáèåòî, çàïî÷íàòî îò C-f è M-f (äîáðå, <Delback> íå å
@@ -385,12 +385,12 @@ M-k ñà ïîäîáíè íà C-e è M-e â ñìèñúë, ÷å åäíèòå ñà çà ðåäîâå, à
385 385
386Ìîæåòå ñúùî äà ïðåìàõíåòå âñÿêà ÷àñò îò áóôåðà ñ åäèí óíèâåðñàëåí 386Ìîæåòå ñúùî äà ïðåìàõíåòå âñÿêà ÷àñò îò áóôåðà ñ åäèí óíèâåðñàëåí
387íà÷èí. Ïðèäâèæåòå ñå äî åäèíèÿ êðàé íà ÷àñòòà è âúâåäåòå C-@ èëè 387íà÷èí. Ïðèäâèæåòå ñå äî åäèíèÿ êðàé íà ÷àñòòà è âúâåäåòå C-@ èëè
388C-èíòåðâàë (êîåòî è äà å îò äâåòå). Ïðèäâèæåòå ñå äî äðóãèÿ êðàé íà 388C-<SPC> (êîåòî è äà å îò äâåòå). (<SPC> å êëàâèøúò èíòåðâàë.)
389÷àñòòà è âúâåäåòå C-w. Òîâà ùå èçðåæå öåëèÿ òåêñò ìåæäó òåçè äâà 389Ïðèäâèæåòå ñå äî äðóãèÿ êðàé íà ÷àñòòà è âúâåäåòå C-w. Òîâà ùå èçðåæå
390êðàÿ. 390öåëèÿ òåêñò ìåæäó òåçè äâà êðàÿ.
391 391
392>> Ïðèäâèæåòå êóðñîðà äî çíàêà "Ì" â íà÷àëîòî íà ïðåäèøíèÿ àáçàö. 392>> Ïðèäâèæåòå êóðñîðà äî çíàêà "Ì" â íà÷àëîòî íà ïðåäèøíèÿ àáçàö.
393>> Âúâåäåòå C-èíòåðâàë. Åìàêñ òðÿáâà äà èçâåäå ñúîáùåíèå "Mark set" â 393>> Âúâåäåòå C-<SPC>. Emacs òðÿáâà äà èçâåäå ñúîáùåíèå "Mark set" â
394 äîëíèÿ êðàé íà åêðàíà. 394 äîëíèÿ êðàé íà åêðàíà.
395>> Ïðèäâèæåòå êóðñîðà äî áóêâàòà "ð" â "êðàé" íà âòîðèÿ ðåä îò àáçàöà. 395>> Ïðèäâèæåòå êóðñîðà äî áóêâàòà "ð" â "êðàé" íà âòîðèÿ ðåä îò àáçàöà.
396>> Âúâåäåòå C-w. Òîâà ùå èçðåæå òåêñòà, çàïî÷âàù îò "Ì" è çàâúðøâàù 396>> Âúâåäåòå C-w. Òîâà ùå èçðåæå òåêñòà, çàïî÷âàù îò "Ì" è çàâúðøâàù
@@ -420,9 +420,9 @@ C-k îáðàáîòâà ÷èñëîâèòå àðãóìåíòè ïî ñïåöèàëåí íà÷èí: ïðåìàõâàò ñå
420Âðúùàíåòî îáðàòíî íà òåêñò ñå íàðè÷à "âìúêâàíå". (Ìèñëåòå çà íåãî 420Âðúùàíåòî îáðàòíî íà òåêñò ñå íàðè÷à "âìúêâàíå". (Ìèñëåòå çà íåãî
421êàòî çà èçâàæäàíå îáðàòíî, èëè äðúïâàíå îáðàòíî, íà òåêñò, êîéòî å áèë 421êàòî çà èçâàæäàíå îáðàòíî, èëè äðúïâàíå îáðàòíî, íà òåêñò, êîéòî å áèë
422èçðÿçàí.) Ìîæåòå äà âìúêâàòå èçðÿçàíèÿ òåêñò èëè íà ñúùîòî ìÿñòî, 422èçðÿçàí.) Ìîæåòå äà âìúêâàòå èçðÿçàíèÿ òåêñò èëè íà ñúùîòî ìÿñòî,
423îòêúäåòî å áèë ïðåìàõíàò, èëè íà äðóãî ìÿñòî â áóôåðà, äàæå è â 423îòêúäåòî å áèë ïðåìàõíàò, èëè íà äðóãî ìÿñòî â ðåäàêòèðàíèÿ òåêñò,
424ðàçëè÷åí ôàéë. Ìîæåòå äà âìúêâàòå åäèí è ñúù òåêñò íÿêîëêî ïúòè; òîâà 424äàæå è â ðàçëè÷åí ôàéë. Ìîæåòå äà âìúêâàòå åäèí è ñúù òåêñò íÿêîëêî
425ïðàâè íÿêîëêî êîïèÿ îò íåãî. 425ïúòè; òîâà ïðàâè íÿêîëêî êîïèÿ îò íåãî.
426 426
427Êîìàíäàòà çà âìúêâàíå å C-y. Òÿ âìúêâà íàíîâî ïîñëåäíèÿ èçðÿçàí òåêñò 427Êîìàíäàòà çà âìúêâàíå å C-y. Òÿ âìúêâà íàíîâî ïîñëåäíèÿ èçðÿçàí òåêñò
428â òåêóùîòî ìÿñòî íà êóðñîðà. 428â òåêóùîòî ìÿñòî íà êóðñîðà.
@@ -501,25 +501,25 @@ C_- å, ÷å íà íÿêîè êëàâèàòóðè íå å î÷åâèäíî êàê òðÿáâà äà ñå âúâåäå.
501--------- 501---------
502 502
503Çà äà íàïðàâèòå òåêñòà, êîéòî ðåäàêòèðàòå, ïîñòîÿíåí, òðÿáâà äà ãî 503Çà äà íàïðàâèòå òåêñòà, êîéòî ðåäàêòèðàòå, ïîñòîÿíåí, òðÿáâà äà ãî
504ñëîæèòå âúâ ôàéë.  ïðîòèâåí ñëó÷àé òîé ùå èç÷åçíå, êîãàòî Åìàêñ 504ñëîæèòå âúâ ôàéë.  ïðîòèâåí ñëó÷àé òîé ùå èç÷åçíå, êîãàòî Emacs
505ïðèêëþ÷è. Çà äà ñëîæèòå âàøèÿ òåêñò âúâ ôàéë, òðÿáâà äà "íàìåðèòå" 505ïðèêëþ÷è. Çà äà ñëîæèòå âàøèÿ òåêñò âúâ ôàéë, òðÿáâà äà "íàìåðèòå"
506ôàéëà ïðåäè äà âúâåæäàòå òåêñò. (Òîâà ñúùî ñå íàðè÷à "ïîñåùàâàíå" íà 506ôàéëà ïðåäè äà âúâåæäàòå òåêñò. (Òîâà ñúùî ñå íàðè÷à "ïîñåùàâàíå" íà
507ôàéëà.) 507ôàéëà.)
508 508
509Íàìèðàíå íà ôàéë îçíà÷àâà, ÷å âèæäàòå ñúäúðæàíèåòî ìó â Åìàêñ.  509Íàìèðàíå íà ôàéë îçíà÷àâà, ÷å âèæäàòå ñúäúðæàíèåòî ìó â Emacs. Â
510ìíîãî ñëó÷àè òîâà å êàòî äà ðåäàêòèðàòå ñàìèÿ ôàéë. Îáà÷å ïðîìåíèòå, 510ìíîãî ñëó÷àè òîâà å êàòî äà ðåäàêòèðàòå ñàìèÿ ôàéë. Îáà÷å ïðîìåíèòå,
511êîèòî ïðàâèòå, èçïîëçâàéêè Åìàêñ, íå îñòàâàò ïîñòîÿííè, äîêàòî íå 511êîèòî ïðàâèòå, èçïîëçâàéêè Emacs, íå îñòàâàò ïîñòîÿííè, äîêàòî íå
512"çàïèøåòå" ôàéëà. Òîâà å òàêà, çà äà ñå ïðåäîòâðàòè îñòàâÿíåòî íà 512"çàïèøåòå" ôàéëà. Òîâà å òàêà, çà äà ñå ïðåäîòâðàòè îñòàâÿíåòî íà
513ïîëóïðîìåíåí ôàéë â ñèñòåìàòà, êîãàòî íå èñêàòå òîâà. Äîðè êîãàòî 513ïîëóïðîìåíåí ôàéë â ñèñòåìàòà, êîãàòî íå èñêàòå òîâà. Äîðè êîãàòî
514çàïèñâàòå, Åìàêñ îñòàâÿ íà÷àëíèÿ ôàéë ïîä ïðîìåíåíî èìå, â ñëó÷àé, ÷å 514çàïèñâàòå, Emacs îñòàâÿ íà÷àëíèÿ ôàéë ïîä ïðîìåíåíî èìå, â ñëó÷àé, ÷å
515ïî-êúñíî ðåøèòå, ÷å âàøèòå ïðîìåíè ñà áèëè ãðåøêà. 515ïî-êúñíî ðåøèòå, ÷å âàøèòå ïðîìåíè ñà áèëè ãðåøêà.
516 516
517Àêî ïîãëåäíåòå â äúíîòî íà åêðàíà, ùå âèäèòå ðåä, êîéòî çàïî÷âà è 517Àêî ïîãëåäíåòå â äúíîòî íà åêðàíà, ùå âèäèòå ðåä, êîéòî çàïî÷âà è
518çàâúðøâà ñ òèðåòà è çàïî÷âà ñ "-R:-- TUTORIAL.bg" èëè íåùî ïîäîáíî. 518çàâúðøâà ñ òèðåòà è çàïî÷âà ñ "-R:-- TUTORIAL.bg" èëè íåùî ïîäîáíî.
519Òàçè ÷àñò îò åêðàíà ïîêàçâà èìåòî íà ôàéëà, êîéòî ñòå ïîñåòèëè. Òî÷íî 519Òàçè ÷àñò îò åêðàíà ïîêàçâà èìåòî íà ôàéëà, êîéòî ñòå ïîñåòèëè. Òî÷íî
520ñåãà âèå ñòå ïîñåòèëè ôàéë, íàðå÷åí "TUTORIAL.bg", êîéòî å âàøåòî 520ñåãà âèå ñòå ïîñåòèëè ôàéë, íàðå÷åí "TUTORIAL.bg", êîéòî å âàøåòî
521ëè÷íî êîïèå-÷åðíîâà íà Åìàêñ âúâåäåíèåòî. Êîãàòî íàìåðèòå ôàéë â 521ëè÷íî êîïèå-÷åðíîâà íà Emacs âúâåäåíèåòî. Êîãàòî íàìåðèòå ôàéë â
522Åìàêñ, èìåòî íà òîçè ôàéë ùå ñå ïîÿâè íà ñúùîòî ìÿñòî. 522Emacs, èìåòî íà òîçè ôàéë ùå ñå ïîÿâè íà ñúùîòî ìÿñòî.
523 523
524Îñîáåíîñò íà êîìàíäàòà çà íàìèðàíå íà ôàéë å, ÷å òðÿáâà äà êàæåòå 524Îñîáåíîñò íà êîìàíäàòà çà íàìèðàíå íà ôàéë å, ÷å òðÿáâà äà êàæåòå
525èìåòî íà ôàéëà, êîéòî èñêàòå. Íèå ãî íàðè÷àìå "÷åòåíå íà àðãóìåíò îò 525èìåòî íà ôàéëà, êîéòî èñêàòå. Íèå ãî íàðè÷àìå "÷åòåíå íà àðãóìåíò îò
@@ -528,10 +528,10 @@ C_- å, ÷å íà íÿêîè êëàâèàòóðè íå å î÷åâèäíî êàê òðÿáâà äà ñå âúâåäå.
528 528
529 C-x C-f Íàìèðàíå íà ôàéë 529 C-x C-f Íàìèðàíå íà ôàéë
530 530
531Åìàêñ âè ïîäêàíÿ äà âúâåäåòå èìåòî íà ôàéëà. Èìåòî íà ôàéëà, êîåòî 531Emacs âè ïîäêàíÿ äà âúâåäåòå èìåòî íà ôàéëà. Èìåòî íà ôàéëà, êîåòî
532íàïèøåòå, ñå ïîÿâÿâà â äúíîòî íà åêðàíà. Ðåäúò â äúíîòî íà åêðàíà ñå 532íàïèøåòå, ñå ïîÿâÿâà â äúíîòî íà åêðàíà. Ðåäúò â äúíîòî íà åêðàíà ñå
533íàðè÷à ìèíèáóôåð, êîãàòî ñå èçïîëçâà çà òîçè âèä âõîä. Ìîæåòå äà 533íàðè÷à ìèíèáóôåð, êîãàòî ñå èçïîëçâà çà òîçè âèä âõîä. Ìîæåòå äà
534èçïîëçâàòå îáèêíîâåíèòå êîìàíäè çà ðåäàêòèðàíå íà Åìàêñ, çà äà 534èçïîëçâàòå îáèêíîâåíèòå êîìàíäè çà ðåäàêòèðàíå íà Emacs, çà äà
535ðåäàêòèðàòå èìåòî íà ôàéëà. 535ðåäàêòèðàòå èìåòî íà ôàéëà.
536 536
537Êîãàòî âúâåæäàòå èìåòî íà ôàéëà (èëè êàêúâòî è äà å âõîä â 537Êîãàòî âúâåæäàòå èìåòî íà ôàéëà (èëè êàêúâòî è äà å âõîä â
@@ -552,12 +552,12 @@ C_- å, ÷å íà íÿêîè êëàâèàòóðè íå å î÷åâèäíî êàê òðÿáâà äà ñå âúâåäå.
552 552
553 C-x C-s Çàïàçâàíå íà ôàéëà 553 C-x C-s Çàïàçâàíå íà ôàéëà
554 554
555Òîâà êîïèðà òåêñòà îò Åìàêñ âúâ ôàéëà. Ïúðâèÿ ïúò, êîãàòî òîâà ñå 555Òîâà êîïèðà òåêñòà îò Emacs âúâ ôàéëà. Ïúðâèÿ ïúò, êîãàòî òîâà ñå
556íàïðàâè, Åìàêñ ïðåèìåíóâà íà÷àëíèÿ ôàéë ñ íîâî èìå, òàêà ÷å òîé äà íå 556íàïðàâè, Emacs ïðåèìåíóâà íà÷àëíèÿ ôàéë ñ íîâî èìå, òàêà ÷å òîé äà íå
557ñå èçãóáè. Íîâîòî èìå ñå ïîñòðîÿâà ñ äîáàâÿíå íà "~" â êðàÿ íà èìåòî 557ñå èçãóáè. Íîâîòî èìå ñå ïîñòðîÿâà ñ äîáàâÿíå íà "~" â êðàÿ íà èìåòî
558íà íà÷àëíèÿ ôàéë. 558íà íà÷àëíèÿ ôàéë.
559 559
560Êîãàòî çàïàçâàíåòî å ñâúðøèëî, Åìàêñ èçâåæäà èìåòî íà ôàéëà, êîéòî å 560Êîãàòî çàïàçâàíåòî å ñâúðøèëî, Emacs èçâåæäà èìåòî íà ôàéëà, êîéòî å
561áèë çàïèñàí. Òðÿáâà äà çàïèñâàòå äîñòàòú÷íî ÷åñòî, òàêà ÷å äà íå 561áèë çàïèñàí. Òðÿáâà äà çàïèñâàòå äîñòàòú÷íî ÷åñòî, òàêà ÷å äà íå
562èçãóáèòå ìíîãî ðàáîòà, àêî ñèñòåìàòà ñå ñðèíå ïî íÿêàêâà ïðè÷èíà. 562èçãóáèòå ìíîãî ðàáîòà, àêî ñèñòåìàòà ñå ñðèíå ïî íÿêàêâà ïðè÷èíà.
563 563
@@ -565,19 +565,19 @@ C_- å, ÷å íà íÿêîè êëàâèàòóðè íå å î÷åâèäíî êàê òðÿáâà äà ñå âúâåäå.
565 Òîâà òðÿáâà äà èçâåäå "Wrote ...TUTORIAL.bg" â äúíîòî íà åêðàíà. 565 Òîâà òðÿáâà äà èçâåäå "Wrote ...TUTORIAL.bg" â äúíîòî íà åêðàíà.
566 566
567ÇÀÁÅËÅÆÊÀ: Íà íÿêîè ñèñòåìè âúâåæäàíåòî íà C-x C-s ùå çàìðúçè åêðàíà è 567ÇÀÁÅËÅÆÊÀ: Íà íÿêîè ñèñòåìè âúâåæäàíåòî íà C-x C-s ùå çàìðúçè åêðàíà è
568âèå íÿìà äà âèæäàòå ïîâå÷å èçõîä îò Åìàêñ. Òîâà ïîêàçâà, ÷å åäíà 568âèå íÿìà äà âèæäàòå ïîâå÷å èçõîä îò Emacs. Òîâà ïîêàçâà, ÷å åäíà
569"ñïîñîáíîñò" íà îïåðàöèîííàòà ñèñòåìà, íàðè÷àíà "óïðàâëåíèå íà ïîòîêà" 569"ñïîñîáíîñò" íà îïåðàöèîííàòà ñèñòåìà, íàðè÷àíà "óïðàâëåíèå íà ïîòîêà"
570(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà êúì Åìàêñ. Çà äà 570(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà êúì Emacs. Çà äà
571ðàçìðàçèòå åêðàíà, âúâåäåòå C-q. Òîãàâà âèæòå ñåêöèÿòà "Ñïîíòàííî 571ðàçìðàçèòå åêðàíà, âúâåäåòå C-q. Òîãàâà âèæòå ñåêöèÿòà "Ñïîíòàííî
572âêëþ÷âàíå íà ïîñòúïêîâî òúðñåíå" (Spontaneous Entry to Incremental 572âêëþ÷âàíå íà ïîñòúïêîâî òúðñåíå" (Spontaneous Entry to Incremental
573Search) â ðúêîâîäñòâîòî íà Åìàêñ çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè 573Search) â ðúêîâîäñòâîòî íà Emacs çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè
574"ñïîñîáíîñò". 574"ñïîñîáíîñò".
575 575
576Ìîæå äà íàìåðèòå ñúùåñòâóâàù ôàéë, äà ãî ðàçãëåäàòå è äà ãî 576Ìîæå äà íàìåðèòå ñúùåñòâóâàù ôàéë, äà ãî ðàçãëåäàòå è äà ãî
577ðåäàêòèðàòå. Ìîæåòå ñúùî äà íàìåðèòå ôàéë, êîéòî íå ñúùåñòâóâà. Òîâà 577ðåäàêòèðàòå. Ìîæåòå ñúùî äà íàìåðèòå ôàéë, êîéòî íå ñúùåñòâóâà. Òîâà
578å íà÷èíúò çà ñúçäàâàíå íà íîâè ôàéëîâå â Åìàêñ: íàìèðàòå ôàéëà, êîéòî 578å íà÷èíúò çà ñúçäàâàíå íà íîâè ôàéëîâå â Emacs: íàìèðàòå ôàéëà, êîéòî
579ùå áúäå â íà÷àëîòî ïðàçåí, è òîãàâà çàïî÷âàòå âìúêâàíåòî íà òåêñòà çà 579ùå áúäå â íà÷àëîòî ïðàçåí, è òîãàâà çàïî÷âàòå âìúêâàíåòî íà òåêñòà çà
580ôàéëà. Êîãàòî ãîâîðèòå çà "çàïèñâàíå" íà ôàéë, Åìàêñ âñúùíîñò ùå 580ôàéëà. Êîãàòî ãîâîðèòå çà "çàïèñâàíå" íà ôàéë, Emacs âñúùíîñò ùå
581ñúçäàäå ôàéëà ñ òåêñòà, êîéòî ñòå âúâåëè. Îòòàì íàòàòúê ìîæå äà 581ñúçäàäå ôàéëà ñ òåêñòà, êîéòî ñòå âúâåëè. Îòòàì íàòàòúê ìîæå äà
582ñ÷èòàòå, ÷å ðåäàêòèðàòå âå÷å ñúùåñòâóâàù ôàéë. 582ñ÷èòàòå, ÷å ðåäàêòèðàòå âå÷å ñúùåñòâóâàù ôàéë.
583 583
@@ -585,9 +585,9 @@ Search) â ðúêîâîäñòâîòî íà Åìàêñ çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè
585* ÁÓÔÅÐÈ 585* ÁÓÔÅÐÈ
586-------- 586--------
587 587
588Àêî íàìåðèòå âòîðè ôàéë ñ C-x C-f, ïúðâèÿò ôàéë îñòàâà â Åìàêñ. 588Àêî íàìåðèòå âòîðè ôàéë ñ C-x C-f, ïúðâèÿò ôàéë îñòàâà â Emacs.
589Ìîæåòå äà ïðåâêëþ÷èòå îáðàòíî êúì íåãî, êàòî ãî íàìåðèòå ïàê ñ C-x 589Ìîæåòå äà ïðåâêëþ÷èòå îáðàòíî êúì íåãî, êàòî ãî íàìåðèòå ïàê ñ C-x
590C-f. Ïî òîçè íà÷èí ìîæå äà ïîëó÷èòå äîñòà íà áðîé ôàéëîâå â Åìàêñ. 590C-f. Ïî òîçè íà÷èí ìîæå äà ïîëó÷èòå äîñòà íà áðîé ôàéëîâå â Emacs.
591 591
592>> Ñúçäàéòå ôàéë ñ èìå "foo", âúâåæäàéêè C-x C-f foo <Return>. 592>> Ñúçäàéòå ôàéë ñ èìå "foo", âúâåæäàéêè C-x C-f foo <Return>.
593 Âìúêíåòå ìàëêî òåêñò, ðåäàêòèðàéòå ãî è çàïàçåòå "foo" ñ âúâåæäàíå 593 Âìúêíåòå ìàëêî òåêñò, ðåäàêòèðàéòå ãî è çàïàçåòå "foo" ñ âúâåæäàíå
@@ -595,16 +595,16 @@ C-f. Ïî òîçè íà÷èí ìîæå äà ïîëó÷èòå äîñòà íà áðîé ôàéëîâå â Åìàêñ.
595 Íàêðàÿ âúâåäåòå C-x C-f TUTORIAL.bg <Return>, çà äà ñå âúðíåòå 595 Íàêðàÿ âúâåäåòå C-x C-f TUTORIAL.bg <Return>, çà äà ñå âúðíåòå
596 îáðàòíî âúâ âúâåäåíèåòî. 596 îáðàòíî âúâ âúâåäåíèåòî.
597 597
598Åìàêñ çàïàçâà òåêñòà íà âñåêè ôàéë â îáåêò, íàðè÷àí "áóôåð". 598Emacs çàïàçâà òåêñòà íà âñåêè ôàéë â îáåêò, íàðè÷àí "áóôåð".
599Íàìèðàíåòî íà ôàéë ïðàâè íîâ áóôåð â Åìàêñ. Çà äà âèäèòå ñïèñúê íà 599Íàìèðàíåòî íà ôàéë ïðàâè íîâ áóôåð â Emacs. Çà äà âèäèòå ñïèñúê íà
600áóôåðèòå, êîèòî â ìîìåíòà ñúùåñòâóâàò âúâ âàøèÿ Åìàêñ, âúâåäåòå 600áóôåðèòå, êîèòî â ìîìåíòà ñúùåñòâóâàò âúâ âàøèÿ Emacs, âúâåäåòå
601 601
602 C-x C-b Ïîêàçâàíå íà áóôåðèòå 602 C-x C-b Ïîêàçâàíå íà áóôåðèòå
603 603
604>> Îïèòàéòå C-x C-b ñåãà. 604>> Îïèòàéòå C-x C-b ñåãà.
605 605
606Âèæòå êàê âñåêè áóôåð èìà èìå, à ïîíÿêîãà è èìå íà ôàéë çà ôàéëà, 606Âèæòå êàê âñåêè áóôåð èìà èìå, à ïîíÿêîãà è èìå íà ôàéë çà ôàéëà,
607÷èåòî ñúäúðæàíèå äúðæè. ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â Åìàêñ ïðîçîðåö, 607÷èåòî ñúäúðæàíèå äúðæè. ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â Emacs ïðîçîðåö,
608å âèíàãè ÷àñò îò íÿêàêúâ áóôåð. 608å âèíàãè ÷àñò îò íÿêàêúâ áóôåð.
609 609
610>> Âúâåäåòå C-x 1, çà äà ìàõíåòå ñïèñúêà ñ áóôåðèòå. 610>> Âúâåäåòå C-x 1, çà äà ìàõíåòå ñïèñúêà ñ áóôåðèòå.
@@ -626,13 +626,13 @@ C-f. Ïî òîçè íà÷èí ìîæå äà ïîëó÷èòå äîñòà íà áðîé ôàéëîâå â Åìàêñ.
626Ñïèñúêúò ñ áóôåðèòå, êîéòî ïðàâèòå ñ C-x C-b, âèíàãè âè ïîêàçâà èìåòî 626Ñïèñúêúò ñ áóôåðèòå, êîéòî ïðàâèòå ñ C-x C-b, âèíàãè âè ïîêàçâà èìåòî
627íà âñåêè áóôåð. 627íà âñåêè áóôåð.
628 628
629ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â Åìàêñ ïðîçîðåö, å âèíàãè ÷àñò îò íÿêàêúâ 629ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â Emacs ïðîçîðåö, å âèíàãè ÷àñò îò íÿêàêúâ
630áóôåð. Íÿêîè áóôåðè íå ñúîòâåòñòâàò íà ôàéëîâå. Íàïðèìåð áóôåðúò, 630áóôåð. Íÿêîè áóôåðè íå ñúîòâåòñòâàò íà ôàéëîâå. Íàïðèìåð áóôåðúò,
631èìåíóâàí "*Buffer List*", íå ñúîòâåòñòâà íà ôàéë. Òîâà å áóôåðúò, 631èìåíóâàí "*Buffer List*", íå ñúîòâåòñòâà íà ôàéë. Òîâà å áóôåðúò,
632êîéòî ñúäúðæà ñïèñúêà ñ áóôåðèòå, êîèòî ñòå íàïðàâèëè ñ C-x C-b. 632êîéòî ñúäúðæà ñïèñúêà ñ áóôåðèòå, êîèòî ñòå íàïðàâèëè ñ C-x C-b.
633Áóôåðúò, èìåíóâàí "*Messages*", ñúùî íå ñúîòâåòñòâà íà ôàéë; òîé 633Áóôåðúò, èìåíóâàí "*Messages*", ñúùî íå ñúîòâåòñòâà íà ôàéë; òîé
634ñúäúðæà ñúîáùåíèÿòà, êîèòî ñå ïîÿâÿâàò â äúíîòî íà åêðàíà ïî âðåìå íà 634ñúäúðæà ñúîáùåíèÿòà, êîèòî ñå ïîÿâÿâàò â äúíîòî íà åêðàíà ïî âðåìå íà
635Åìàêñ ñåñèÿòà. 635Emacs ñåñèÿòà.
636 636
637>> Âúâåäåòå C-x b *Messages* <Return>, çà äà âèäèòå áóôåðà ñúñ 637>> Âúâåäåòå C-x b *Messages* <Return>, çà äà âèäèòå áóôåðà ñúñ
638 ñúîáùåíèÿòà. Ñëåä òîâà âúâåäåòå C-x C-b TUTORIAL <Return>, çà äà 638 ñúîáùåíèÿòà. Ñëåä òîâà âúâåäåòå C-x C-b TUTORIAL <Return>, çà äà
@@ -640,7 +640,7 @@ C-f. Ïî òîçè íà÷èí ìîæå äà ïîëó÷èòå äîñòà íà áðîé ôàéëîâå â Åìàêñ.
640 640
641Àêî íàïðàâèòå ïðîìåíè â òåêñòà íà åäèí ôàéë è òîãàâà íàìåðèòå äðóã 641Àêî íàïðàâèòå ïðîìåíè â òåêñòà íà åäèí ôàéë è òîãàâà íàìåðèòå äðóã
642ôàéë, òîâà íÿìà äà çàïèøå ïúðâèÿ ôàéë. Íåãîâèòå ïðîìåíè îñòàâàò âúòðå 642ôàéë, òîâà íÿìà äà çàïèøå ïúðâèÿ ôàéë. Íåãîâèòå ïðîìåíè îñòàâàò âúòðå
643â Åìàêñ, â áóôåðà íà ôàéëà. Ñúçäàâàíåòî èëè ðåäàêòèðàíåòî íà áóôåðà 643â Emacs, â áóôåðà íà ôàéëà. Ñúçäàâàíåòî èëè ðåäàêòèðàíåòî íà áóôåðà
644íà âòîðèÿ ôàéë íÿìà åôåêò âúðõó áóôåðà íà ïúðâèÿ ôàéë. Òîâà å ìíîãî 644íà âòîðèÿ ôàéë íÿìà åôåêò âúðõó áóôåðà íà ïúðâèÿ ôàéë. Òîâà å ìíîãî
645ïîëåçíî, íî ñúùî îçíà÷àâà, ÷å ñå íóæäàåòå îò óäîáåí íà÷èí äà çàïàçèòå 645ïîëåçíî, íî ñúùî îçíà÷àâà, ÷å ñå íóæäàåòå îò óäîáåí íà÷èí äà çàïàçèòå
646áóôåðà íà ïúðâèÿ ôàéë. Ùå å íåóäîáíî äà ïðåâêëþ÷èòå îáðàòíî ñ C-x 646áóôåðà íà ïúðâèÿ ôàéë. Ùå å íåóäîáíî äà ïðåâêëþ÷èòå îáðàòíî ñ C-x
@@ -659,8 +659,8 @@ C-x s ïèòà çà âñåêè áóôåð, êîéòî ñúäúðæà ïðîìåíè, êîèòî íå ñòå
659* ÐÀÇØÈÐßÂÀÍÅ ÍÀ ÍÀÁÎÐÀ ÊÎÌÀÍÄÈ 659* ÐÀÇØÈÐßÂÀÍÅ ÍÀ ÍÀÁÎÐÀ ÊÎÌÀÍÄÈ
660------------------------------- 660-------------------------------
661 661
662Èìà ìíîãî, ìíîãî ïîâå÷å êîìàíäè íà Åìàêñ, îòêîëêîòî ìîãàò äà ñå ñëîæàò 662Èìà ìíîãî, ìíîãî ïîâå÷å êîìàíäè íà Emacs, îòêîëêîòî ìîãàò äà ñå ñëîæàò
663íà âñè÷êè êîíòðîëíè è ìåòà çíàöè. Åìàêñ çàîáèêàëÿ òîâà ñ X (eXtended) 663íà âñè÷êè êîíòðîëíè è ìåòà çíàöè. Emacs çàîáèêàëÿ òîâà ñ X (eXtended)
664êîìàíäàòà. Òîâà ñòàâà ïî äâà íà÷èíà: 664êîìàíäàòà. Òîâà ñòàâà ïî äâà íà÷èíà:
665 665
666 C-x Çíàêîâî ðàçøèðÿâàíå. Ïîñëåäâàíî îò åäèí çíàê. 666 C-x Çíàêîâî ðàçøèðÿâàíå. Ïîñëåäâàíî îò åäèí çíàê.
@@ -668,49 +668,49 @@ C-x s ïèòà çà âñåêè áóôåð, êîéòî ñúäúðæà ïðîìåíè, êîèòî íå ñòå
668 èìå. 668 èìå.
669 669
670Òåçè êîìàíäè ñà îáùî âçåòî ïîëåçíè, íî ïî-ìàëêî, îòêîëêîòî êîìàíäèòå, 670Òåçè êîìàíäè ñà îáùî âçåòî ïîëåçíè, íî ïî-ìàëêî, îòêîëêîòî êîìàíäèòå,
671êîèòî äîñåãà ñòå íàó÷èëè. Âå÷å âèäÿõòå äâå îò òÿõ: êîìàíäèòå âúðõó 671êîèòî äîñåãà ñòå íàó÷èëè. Âå÷å âèäÿõòå íÿêîëêî îò òÿõ: íàïðèìåð
672ôàéëîâå C-x C-f çà íàìèðàíå (Find) è C-x C-s çà çàïàçâàíå (Save). 672êîìàíäèòå âúðõó ôàéëîâå C-x C-f çà íàìèðàíå (Find) è C-x C-s çà
673Äðóã ïðèìåð å êîìàíäàòà çà êðàé íà Åìàêñ ñåñèÿòà -- òîâà å êîìàíäàòà 673çàïàçâàíå (Save). Äðóã ïðèìåð å êîìàíäàòà çà êðàé íà Emacs ñåñèÿòà --
674C-x C-c. (Íå ñå áåçïîêîéòå, ÷å ìîæå äà èçãóáèòå âñè÷êè ïðîìåíè, êîèòî 674òîâà å êîìàíäàòà C-x C-c. (Íå ñå áåçïîêîéòå, ÷å ìîæå äà èçãóáèòå
675ñòå íàïðàâèëè; C-x C-c ïðåäëàãà äà çàïàçè âñåêè ïðîìåíåí ôàéë, ïðåäè 675âñè÷êè ïðîìåíè, êîèòî ñòå íàïðàâèëè; C-x C-c ïðåäëàãà äà çàïàçè âñåêè
676äà ïðåìàõíå Åìàêñ.) 676ïðîìåíåí ôàéë, ïðåäè äà ïðåìàõíå Emacs.)
677 677
678C-z å êîìàíäàòà çà èçëèçàíå îò Åìàêñ *âðåìåííî* -- òàêà ÷å äà ìîæåòå 678C-z å êîìàíäàòà çà èçëèçàíå îò Emacs *âðåìåííî* -- òàêà ÷å äà ìîæåòå
679äà ñå âúðíåòå êúì ñúùàòà Åìàêñ ñåñèÿ ïî-êúñíî. 679äà ñå âúðíåòå êúì ñúùàòà Emacs ñåñèÿ ïî-êúñíî.
680 680
681Íà ñèñòåìè, êîèòî ïîçâîëÿâàò òîâà, C-z "èçîñòàâÿ" (suspend) Åìàêñ, 681Íà ñèñòåìè, êîèòî ïîçâîëÿâàò òîâà, C-z "èçîñòàâÿ" (suspend) Emacs,
682ò.å. âðúùà êúì îáâèâêàòà, íî íå ðàçðóøàâà Åìàêñ.  ïîâå÷åòî îáâèâêè 682ò.å. âðúùà êúì îáâèâêàòà, íî íå ðàçðóøàâà Emacs.  ïîâå÷åòî îáâèâêè
683ìîæåòå äà ïðîäúëæèòå Åìàêñ ñåñèÿòà ñ êîìàíäàòà "fg" èëè ñ "%emacs". 683ìîæåòå äà ïðîäúëæèòå Emacs ñåñèÿòà ñ êîìàíäàòà "fg" èëè ñ "%emacs".
684 684
685Íà ñèñòåìè, êîèòî íå ïîçâîëÿâàò èçîñòàâÿíå, C-z ñúçäàâà íîâà 685Íà ñèñòåìè, êîèòî íå ïîçâîëÿâàò èçîñòàâÿíå, C-z ñúçäàâà íîâà
686ïîäîáâèâêà, êîÿòî âúðâè ïîä Åìàêñ, çà äà âè äàäå øàíñ äà ñòàðòèðàòå 686ïîäîáâèâêà, êîÿòî âúðâè ïîä Emacs, çà äà âè äàäå øàíñ äà ñòàðòèðàòå
687äðóãè ïðîãðàìè è äà ñå âúðíåòå êúì Åìàêñ ñëåä òîâà; òîâà íå å èñòèíñêî 687äðóãè ïðîãðàìè è äà ñå âúðíåòå êúì Emacs ñëåä òîâà; òîâà íå å èñòèíñêî
688"èçëèçàíå" îò Åìàêñ.  òîçè ñëó÷àé êîìàíäàòà íà îáâèâêàòà "exit" å 688"èçëèçàíå" îò Emacs.  òîçè ñëó÷àé êîìàíäàòà íà îáâèâêàòà "exit" å
689îáèêíîâåíèÿò íà÷èí äà ñå âúðíåòå îáðàòíî êúì Åìàêñ îò ïîäîáâèâêàòà. 689îáèêíîâåíèÿò íà÷èí äà ñå âúðíåòå îáðàòíî êúì Emacs îò ïîäîáâèâêàòà.
690 690
691Ìîìåíòúò äà èçïîëçâàòå C-x C-c å, êîãàòî èñêàòå äà èçëåçåòå îò 691Ìîìåíòúò äà èçïîëçâàòå C-x C-c å, êîãàòî èñêàòå äà èçëåçåòå îò
692ñèñòåìàòà. Òîâà å è ïðàâèëíàòà êîìàíäà çà èçëèçàíå, êîãàòî Åìàêñ å 692ñèñòåìàòà. Òîâà å è ïðàâèëíàòà êîìàíäà çà èçëèçàíå, êîãàòî Emacs å
693èçâèêàí îò ïîùåíñêà ïðîãðàìà èëè äðóãè ñòðàíè÷íè ïðîãðàìè, òúé êàòî òå 693èçâèêàí îò ïîùåíñêà ïðîãðàìà èëè äðóãè ñòðàíè÷íè ïðîãðàìè, òúé êàòî òå
694ìîæå è äà íå çíàÿò êàê äà ñå ñïðàâÿò ñ èçîñòàâÿíåòî íà Åìàêñ. Ïðè 694ìîæå è äà íå çíàÿò êàê äà ñå ñïðàâÿò ñ èçîñòàâÿíåòî íà Emacs. Ïðè
695îáèêíîâåíè îáñòîÿòåëñòâà, îáà÷å, àêî íå ñòå òðúãíàëè äà èçëèçàòå îò 695îáèêíîâåíè îáñòîÿòåëñòâà, îáà÷å, àêî íå ñòå òðúãíàëè äà èçëèçàòå îò
696ñèñòåìàòà, ïî-äîáðå å äà èçîñòàâèòå Åìàêñ ñ C-z, âìåñòî äà èçëèçàòå îò 696ñèñòåìàòà, ïî-äîáðå å äà èçîñòàâèòå Emacs ñ C-z, âìåñòî äà èçëèçàòå îò
697Åìàêñ. 697Emacs.
698 698
699Èìà ìíîãî êîìàíäè C-x. Åòî ñïèñúê íà òåçè, êîèòî ñòå íàó÷èëè: 699Èìà ìíîãî êîìàíäè C-x. Åòî ñïèñúê íà òåçè, êîèòî ñòå íàó÷èëè:
700 700
701 C-x C-f Íàìèðàíå íà ôàéë. 701 C-x C-f Íàìèðàíå íà ôàéë
702 C-x C-s Çàïàçâàíå íà ôàéë. 702 C-x C-s Çàïàçâàíå íà ôàéë
703 C-x C-b Ñïèñúê íà áóôåðèòå. 703 C-x C-b Ñïèñúê íà áóôåðèòå
704 C-x C-c Èçëèçàíå îò Åìàêñ. 704 C-x C-c Èçëèçàíå îò Emacs
705 C-x 1 Èçòðèâàíå íà âñè÷êè ïðîçîðöè îñâåí åäèí. 705 C-x 1 Èçòðèâàíå íà âñè÷êè ïðîçîðöè, îñâåí åäèí
706 C-x u Îòìÿíà. 706 C-x u Îòìÿíà
707 707
708Èìåíóâàíèòå ðàçøèðåíè êîìàíäè ñà êîìàíäè, êîèòî ñå èçïîëçâàò äàæå îùå 708Èìåíóâàíèòå ðàçøèðåíè êîìàíäè ñà êîìàíäè, êîèòî ñå èçïîëçâàò äàæå îùå
709ïî-ðÿäêî, èëè êîìàíäè, êîèòî ñå èçïîëçâàò ñàìî â îïðåäåëåíè ðåæèìè. 709ïî-ðÿäêî, èëè êîìàíäè, êîèòî ñå èçïîëçâàò ñàìî â îïðåäåëåíè ðåæèìè.
710Ïðèìåð å êîìàíäàòà replace-string, êîÿòî çàìåíÿ ãëîáàëíî åäèí íèç ñ 710Ïðèìåð å êîìàíäàòà replace-string, êîÿòî çàìåíÿ ãëîáàëíî åäèí íèç ñ
711äðóã. Êîãàòî âúâåäåòå M-x, Åìàêñ âè ïîäñêàçâà â äúíîòî íà åêðàíà ñ 711äðóã. Êîãàòî âúâåäåòå M-x, Emacs âè ïîäñêàçâà â äúíîòî íà åêðàíà ñ
712M-x è âèå òðÿáâà äà âúâåäåòå èìåòî íà êîìàíäàòà, â òîçè ñëó÷àé 712M-x è âèå òðÿáâà äà âúâåäåòå èìåòî íà êîìàíäàòà, â òîçè ñëó÷àé
713"replace-string". Ïðîñòî âúâåäåòå "repl s<TAB>" è Åìàêñ ùå çàâúðøè 713"replace-string". Ïðîñòî âúâåäåòå "repl s<TAB>" è Emacs ùå çàâúðøè
714èìåòî. (<TAB> å êëàâèøúò Tab, îáèêíîâåíî íàìèðàù ñå íàä êëàâèøà 714èìåòî. (<TAB> å êëàâèøúò Tab, îáèêíîâåíî íàìèðàù ñå íàä êëàâèøà
715CapsLock èëè êëàâèøà Shift áëèçî äî ëåâèÿ êðàé íà êëàâèàòóðàòà.) 715CapsLock èëè êëàâèøà Shift áëèçî äî ëåâèÿ êðàé íà êëàâèàòóðàòà.)
716Çàâúðøåòå èìåòî íà êîìàíäàòà ñ <Return>. 716Çàâúðøåòå èìåòî íà êîìàíäàòà ñ <Return>.
@@ -734,11 +734,11 @@ CapsLock èëè êëàâèøà Shift áëèçî äî ëåâèÿ êðàé íà êëàâèàòóðàòà.)
734 734
735Êîãàòî ñòå íàïðàâèëè ïðîìåíè âúâ ôàéë, íî îùå íå ñòå ãî çàïàçèëè, òå 735Êîãàòî ñòå íàïðàâèëè ïðîìåíè âúâ ôàéë, íî îùå íå ñòå ãî çàïàçèëè, òå
736ìîãàò äà áúäàò çàãóáåíè, àêî êîìïþòúðúò âíåçàïíî ñå èçêëþ÷è. Çà äà âè 736ìîãàò äà áúäàò çàãóáåíè, àêî êîìïþòúðúò âíåçàïíî ñå èçêëþ÷è. Çà äà âè
737ïðåäïàçè îò òàêèâà ñèòóàöèè, Åìàêñ ïåðèîäè÷íî çàïàçâà "àâòîìàòè÷íî 737ïðåäïàçè îò òàêèâà ñèòóàöèè, Emacs ïåðèîäè÷íî çàïàçâà "àâòîìàòè÷íî
738çàïàçâàí" ôàéë çà âñåêè ôàéë, êîéòî ðåäàêòèðàòå. Èìåòî íà àâòîìàòè÷íî 738çàïàçâàí" ôàéë çà âñåêè ôàéë, êîéòî ðåäàêòèðàòå. Èìåòî íà àâòîìàòè÷íî
739çàïàçâàíèÿ ôàéë èìà # â íà÷àëîòî è â êðàÿ; íàïðèìåð, àêî âàøèÿò ôàéë å 739çàïàçâàíèÿ ôàéë èìà # â íà÷àëîòî è â êðàÿ; íàïðèìåð, àêî âàøèÿò ôàéë å
740ñ èìå "hello.c", èìåòî íà íåãîâèÿ àâòîìàòè÷íî çàïàçâàí ôàéë ùå áúäå 740ñ èìå "hello.c", èìåòî íà íåãîâèÿ àâòîìàòè÷íî çàïàçâàí ôàéë ùå áúäå
741"#hello.c#". Êîãàòî çàïàçâàòå ôàéë ïî îáèêíîâåíèÿ íà÷èí, Åìàêñ 741"#hello.c#". Êîãàòî çàïàçâàòå ôàéë ïî îáèêíîâåíèÿ íà÷èí, Emacs
742èçòðèâà íåãîâèÿ àâòîìàòè÷íî çàïèñâàí ôàéë. 742èçòðèâà íåãîâèÿ àâòîìàòè÷íî çàïèñâàí ôàéë.
743 743
744Àêî êîìïþòúðúò çàâèñíå, ìîæå äà âúçñòàíîâèòå âàøàòà àâòîìàòè÷íî 744Àêî êîìïþòúðúò çàâèñíå, ìîæå äà âúçñòàíîâèòå âàøàòà àâòîìàòè÷íî
@@ -752,7 +752,7 @@ M-x recover file<Return>. Êîãàòî êîìàíäàòà èçèñêà ïîòâúðæäåíèå,
752* ÅÕÎ ÎÁËÀÑÒÒÀ 752* ÅÕÎ ÎÁËÀÑÒÒÀ
753-------------- 753--------------
754 754
755Àêî Åìàêñ âèäè, ÷å âúâåæäàòå ìíîãîçíàêîâè êîìàíäè áàâíî, ùå âè ãè 755Àêî Emacs âèäè, ÷å âúâåæäàòå ìíîãîçíàêîâè êîìàíäè áàâíî, ùå âè ãè
756ïîêàæå â äúíîòî íà åêðàíà, â îáëàñò, íàðè÷àíà "åõî îáëàñò". Åõî 756ïîêàæå â äúíîòî íà åêðàíà, â îáëàñò, íàðè÷àíà "åõî îáëàñò". Åõî
757îáëàñòòà îáõâàùà ïîñëåäíèÿ ðåä îò åêðàíà. 757îáëàñòòà îáõâàùà ïîñëåäíèÿ ðåä îò åêðàíà.
758 758
@@ -763,18 +763,18 @@ M-x recover file<Return>. Êîãàòî êîìàíäàòà èçèñêà ïîòâúðæäåíèå,
763Ðåäúò òî÷íî íàä åõî îáëàñòòà ñå íàðè÷à "ðåä íà ðåæèìà" (mode line). 763Ðåäúò òî÷íî íàä åõî îáëàñòòà ñå íàðè÷à "ðåä íà ðåæèìà" (mode line).
764Òîé ïîêàçâà íåùî êàòî: 764Òîé ïîêàçâà íåùî êàòî:
765 765
766-R:** TUTORIAL.bg (Fundamental)--L670--58%---------------- 766-D:** TUTORIAL.bg 63% L749 (Fundamental)---------------------
767 767
768Òîçè ðåä äàâà ïîëåçíà èíôîðìàöèÿ çà ñúñòîÿíèåòî íà Åìàêñ è òåêñòà, 768Òîçè ðåä äàâà ïîëåçíà èíôîðìàöèÿ çà ñúñòîÿíèåòî íà Emacs è òåêñòà,
769êîéòî ðåäàêòèðàòå. 769êîéòî ðåäàêòèðàòå.
770 770
771Âå÷å çíàåòå êàêâî îçíà÷àâà èìåòî íà ôàéëà -- òîâà å ôàéëúò, êîéòî ñòå 771Âå÷å çíàåòå êàêâî îçíà÷àâà èìåòî íà ôàéëà -- òîâà å ôàéëúò, êîéòî ñòå
772íàìåðèëè. -NN%-- ïîêàçâà âàøàòà òåêóùà ïîçèöèÿ â òåêñòà; òîâà 772íàìåðèëè. NN% ïîêàçâà âàøàòà òåêóùà ïîçèöèÿ â òåêñòà; òîâà îçíà÷àâà,
773îçíà÷àâà, ÷å NN ïðîöåíòà îò òåêñòà å íàä âúðõà íà åêðàíà. Àêî 773÷å NN ïðîöåíòà îò òåêñòà å íàä âúðõà íà åêðàíà. Àêî íà÷àëîòî íà ôàéëà
774íà÷àëîòî íà ôàéëà å íà åêðàíà, ùå ñå ïîêàçâà --Top-- (âðúõ) âìåñòî 774å íà åêðàíà, ùå ñå ïîêàçâà --Top-- (âðúõ) âìåñòî --00%--. Àêî êðàÿò
775--00%--. Àêî êðàÿ íà ôàéëà å íà åêðàíà, ùå ñå ïîêàçâà --Bot-- (äúíî). 775íà ôàéëà å íà åêðàíà, ùå ñå ïîêàçâà --Bot-- (äúíî). Àêî ãëåäàòå
776Àêî ãëåäàòå òåêñò, êîéòî å òîëêîâà ìàëúê, ÷å ñå ïîêàçâà èçöÿëî íà 776òåêñò, êîéòî å òîëêîâà ìàëúê, ÷å ñå ïîêàçâà èçöÿëî íà åêðàíà, ðåäúò íà
777åêðàíà, ðåäúò íà ðåæèìà ùå èçâåäå --All--. 777ðåæèìà ùå èçâåäå --All--.
778 778
779Çíàêúò L è öèôðèòå ïîêàçâàò ìÿñòîòî ïî äðóã íà÷èí: òîâà å íîìåðúò íà 779Çíàêúò L è öèôðèòå ïîêàçâàò ìÿñòîòî ïî äðóã íà÷èí: òîâà å íîìåðúò íà
780òåêóùèÿ ðåä íà òî÷êàòà. 780òåêóùèÿ ðåä íà òî÷êàòà.
@@ -788,7 +788,7 @@ M-x recover file<Return>. Êîãàòî êîìàíäàòà èçèñêà ïîòâúðæäåíèå,
788Fundamental (Îñíîâåí), êîéòî èçïîëçâàòå â ìîìåíòà. Òîâà å ïðèìåð çà 788Fundamental (Îñíîâåí), êîéòî èçïîëçâàòå â ìîìåíòà. Òîâà å ïðèìåð çà
789"ãëàâåí ðåæèì" (major mode). 789"ãëàâåí ðåæèì" (major mode).
790 790
791Åìàêñ èìà ìíîãî ãëàâíè ðåæèìè. Íÿêîè îò òÿõ ñà ïðåäâèäåíè çà 791Emacs èìà ìíîãî ãëàâíè ðåæèìè. Íÿêîè îò òÿõ ñà ïðåäâèäåíè çà
792ðåäàêòèðàíå íà ðàçëè÷íè åçèöè è/èëè âèäîâå òåêñò, êàòî íàïðèìåð ðåæèì 792ðåäàêòèðàíå íà ðàçëè÷íè åçèöè è/èëè âèäîâå òåêñò, êàòî íàïðèìåð ðåæèì
793Ëèñï, ðåæèì Òåêñò è äðóãè. Âúâ âñåêè åäèí ìîìåíò îò âðåìå òî÷íî åäèí 793Ëèñï, ðåæèì Òåêñò è äðóãè. Âúâ âñåêè åäèí ìîìåíò îò âðåìå òî÷íî åäèí
794ãëàâåí ðåæèì å àêòèâåí è íåãîâîòî èìå ìîæå âèíàãè äà áúäå íàìåðåíî â 794ãëàâåí ðåæèì å àêòèâåí è íåãîâîòî èìå ìîæå âèíàãè äà áúäå íàìåðåíî â
@@ -807,7 +807,7 @@ Fundamental (Îñíîâåí), êîéòî èçïîëçâàòå â ìîìåíòà. Òîâà å ïðèìåð çà
807 807
808>> Âúâåäåòå M-x text mode<Return>. 808>> Âúâåäåòå M-x text mode<Return>.
809 809
810Íå ñå áåçïîêîéòå, íèêîÿ îò Åìàêñ êîìàíäèòå, êîèòî ñòå íàó÷èëè, íÿìà äà 810Íå ñå áåçïîêîéòå, íèêîÿ îò Emacs êîìàíäèòå, êîèòî ñòå íàó÷èëè, íÿìà äà
811ñå ïðîìåíè ïî íÿêàêúâ ñúùåñòâåí íà÷èí. Íî ìîæå äà çàáåëåæèòå, ÷å M-f 811ñå ïðîìåíè ïî íÿêàêúâ ñúùåñòâåí íà÷èí. Íî ìîæå äà çàáåëåæèòå, ÷å M-f
812è M-b ñåãà âúçïðèåìàò àïîñòðîôèòå (') êàòî ÷àñò îò äóìèòå. Ïðåäè 812è M-b ñåãà âúçïðèåìàò àïîñòðîôèòå (') êàòî ÷àñò îò äóìèòå. Ïðåäè
813òîâà, â îñíîâíèÿ ðåæèì (Fundamental), M-f è M-b ñå âúçïðèåìàõà êàòî 813òîâà, â îñíîâíèÿ ðåæèì (Fundamental), M-f è M-b ñå âúçïðèåìàõà êàòî
@@ -836,7 +836,7 @@ m.
836 836
837Åäèí ãëàâåí ðåæèì, êîéòî å ìíîãî ïîëåçåí, îñîáåíî çà ðåäàêòèðàíå íà 837Åäèí ãëàâåí ðåæèì, êîéòî å ìíîãî ïîëåçåí, îñîáåíî çà ðåäàêòèðàíå íà
838òåêñò íà åñòåñòâåí åçèê, å ðåæèìúò íà àâòîìàòè÷íî çàïúëâàíå (Auto Fill 838òåêñò íà åñòåñòâåí åçèê, å ðåæèìúò íà àâòîìàòè÷íî çàïúëâàíå (Auto Fill
839mode). Êîãàòî òîçè ðåæèì å âêëþ÷åí, Åìàêñ àâòîìàòè÷íî ðàçäåëÿ ðåäà 839mode). Êîãàòî òîçè ðåæèì å âêëþ÷åí, Emacs àâòîìàòè÷íî ðàçäåëÿ ðåäà
840ïðè ìÿñòîòî ìåæäó äóìèòå, êîãàòî âìúêâàòå òåêñò è íàïðàâèòå ðåä, êîéòî 840ïðè ìÿñòîòî ìåæäó äóìèòå, êîãàòî âìúêâàòå òåêñò è íàïðàâèòå ðåä, êîéòî
841å òâúðäå äúëúã. 841å òâúðäå äúëúã.
842 842
@@ -856,7 +856,7 @@ auto fill mode<Return>. Êîãàòî ðåæèìúò å âêëþ÷åí, ìîæå äà ãî
856àðãóìåíò íà êîìàíäàòà. 856àðãóìåíò íà êîìàíäàòà.
857 857
858>> Âúâåäåòå C-x f ñ àðãóìåíò 20. (C-u 2 0 C-x f). 858>> Âúâåäåòå C-x f ñ àðãóìåíò 20. (C-u 2 0 C-x f).
859 Ñåãà âúâåäåòå íÿêàêúâ òåêñò è âèæòå êàê Åìàêñ çàïúëâà ðåäîâåòå ñ ïî 859 Ñåãà âúâåäåòå íÿêàêúâ òåêñò è âèæòå êàê Emacs çàïúëâà ðåäîâåòå ñ ïî
860 íå ïîâå÷å îò 20 çíàêà. Ïîñëå âúðíåòå îáðàòíî ãðàíèöàòà íà 70, 860 íå ïîâå÷å îò 20 çíàêà. Ïîñëå âúðíåòå îáðàòíî ãðàíèöàòà íà 70,
861 èçïîëçâàéêè C-x f îòíîâî. 861 èçïîëçâàéêè C-x f îòíîâî.
862 862
@@ -871,12 +871,12 @@ auto fill mode<Return>. Êîãàòî ðåæèìúò å âêëþ÷åí, ìîæå äà ãî
871* ÒÚÐÑÅÍÅ 871* ÒÚÐÑÅÍÅ
872--------- 872---------
873 873
874Åìàêñ ìîæå äà èçâúðøâà òúðñåíèÿ íà íèçîâå (òîâà ñà ïîñëåäîâàòåëíîñòè 874Emacs ìîæå äà èçâúðøâà òúðñåíèÿ íà íèçîâå (òîâà ñà ïîñëåäîâàòåëíîñòè
875îò çíàöè èëè äóìè) èëè íàïðåä â òåêñòà, èëè íàçàä â íåãî. Òúðñåíåòî 875îò çíàöè èëè äóìè) èëè íàïðåä â òåêñòà, èëè íàçàä â íåãî. Òúðñåíåòî
876íà íèç å ïðèäâèæâàùà êóðñîðà êîìàíäà; òÿ ïðåìåñòâà êóðñîðà íà 876íà íèç å ïðèäâèæâàùà êóðñîðà êîìàíäà; òÿ ïðåìåñòâà êóðñîðà íà
877ñëåäâàùîòî ìÿñòî, êúäåòî ñå ñðåùà íèçúò. 877ñëåäâàùîòî ìÿñòî, êúäåòî ñå ñðåùà íèçúò.
878 878
879Êîìàíäàòà çà òúðñåíå íà Åìàêñ ñå ðàçëè÷àâà îò êîìàíäàòà çà òúðñåíå íà 879Êîìàíäàòà çà òúðñåíå íà Emacs ñå ðàçëè÷àâà îò êîìàíäàòà çà òúðñåíå íà
880ïîâå÷åòî ðåäàêòîðè ïî òîâà, ÷å òÿ å "ïîñòúïêîâà". Òîâà îçíà÷àâà, ÷å 880ïîâå÷åòî ðåäàêòîðè ïî òîâà, ÷å òÿ å "ïîñòúïêîâà". Òîâà îçíà÷àâà, ÷å
881òúðñåíåòî ñå èçâúðøâà îùå äîêàòî âúâåæäàòå òåêñòà, êîéòî òúðñèòå. 881òúðñåíåòî ñå èçâúðøâà îùå äîêàòî âúâåæäàòå òåêñòà, êîéòî òúðñèòå.
882 882
@@ -884,7 +884,7 @@ auto fill mode<Return>. Êîãàòî ðåæèìúò å âêëþ÷åí, ìîæå äà ãî
884òúðñåíå íàçàä. ÍÎ ÏÎ×ÀÊÀÉÒÅ! Íå ãè ïðîáâàéòå ñåãà. 884òúðñåíå íàçàä. ÍÎ ÏÎ×ÀÊÀÉÒÅ! Íå ãè ïðîáâàéòå ñåãà.
885 885
886Êîãàòî âúâåäåòå C-s, ùå çàáåëåæèòå, ÷å íèçúò "I-search" ñå ïîÿâÿâà 886Êîãàòî âúâåäåòå C-s, ùå çàáåëåæèòå, ÷å íèçúò "I-search" ñå ïîÿâÿâà
887êàòî ïîäñêàçêà â åõî îáëàñòòà. Òîâà âè êàçâà, ÷å Åìàêñ å â òîâà, 887êàòî ïîäñêàçêà â åõî îáëàñòòà. Òîâà âè êàçâà, ÷å Emacs å â òîâà,
888êîåòî ñå íàðè÷à ïîñòúïêîâî òúðñåíå, ÷àêàéêè âè äà âúâåæäàòå òåêñòà, 888êîåòî ñå íàðè÷à ïîñòúïêîâî òúðñåíå, ÷àêàéêè âè äà âúâåæäàòå òåêñòà,
889êîéòî èñêàòå äà òúðñèòå. <Return> ïðèêëþ÷âà òúðñåíåòî. 889êîéòî èñêàòå äà òúðñèòå. <Return> ïðèêëþ÷âà òúðñåíåòî.
890 890
@@ -896,19 +896,19 @@ auto fill mode<Return>. Êîãàòî ðåæèìúò å âêëþ÷åí, ìîæå äà ãî
896>> Ñåãà âúâåäåòå <Delback> òðè ïúòè è âèæòå êàê ñå ïðèäâèæâà êóðñîðà. 896>> Ñåãà âúâåäåòå <Delback> òðè ïúòè è âèæòå êàê ñå ïðèäâèæâà êóðñîðà.
897>> Âúâåäåòå <Return>, çà äà ïðåêðàòèòå òúðñåíåòî. 897>> Âúâåäåòå <Return>, çà äà ïðåêðàòèòå òúðñåíåòî.
898 898
899Çàáåëÿçàõòå ëè êàêâî ñòàíà? Åìàêñ, êîãàòî òúðñè ïîñòúïêîâî, ñå îïèòâà 899Çàáåëÿçàõòå ëè êàêâî ñòàíà? Emacs, êîãàòî òúðñè ïîñòúïêîâî, ñå îïèòâà
900äà íàìåðè ñëåäâàùîòî ñúâïàäåíèå íà íèçà, êîéòî ñå âúâåæäà. Çà äà 900äà íàìåðè ñëåäâàùîòî ñúâïàäåíèå íà íèçà, êîéòî ñå âúâåæäà. Çà äà
901îòèäåòå íà ñëåäâàùîòî ñúâïàäåíèå íà "òúðñíå", ïðîñòî îòíîâî âúâåäåòå 901îòèäåòå íà ñëåäâàùîòî ñúâïàäåíèå íà "òúðñíå", ïðîñòî îòíîâî âúâåäåòå
902C-s. Àêî íÿìà òàêîâà ñúâïàäåíèå, Åìàêñ áèáèïâà è âè êàçâà, ÷å 902C-s. Àêî íÿìà òàêîâà ñúâïàäåíèå, Emacs áèáèïâà è âè êàçâà, ÷å
903òúðñåíåòî å "ïðîâàëåíî" (failing). C-g ñúùî ïðåêðàòÿâà òúðñåíåòî. 903òúðñåíåòî å "ïðîâàëåíî" (failing). C-g ñúùî ïðåêðàòÿâà òúðñåíåòî.
904 904
905ÇÀÁÅËÅÆÊÀ: Íà íÿêîè ñèñòåìè âúâåæäàíåòî íà C-s ùå çàìðàçè åêðàíà è âèå 905ÇÀÁÅËÅÆÊÀ: Íà íÿêîè ñèñòåìè âúâåæäàíåòî íà C-s ùå çàìðàçè åêðàíà è âèå
906íÿìà äà ìîæå äà âèäèòå ïîâå÷å ðåàêöèÿ îò Åìàêñ. Òîâà ïîêàçâà, ÷å 906íÿìà äà ìîæå äà âèäèòå ïîâå÷å ðåàêöèÿ îò Emacs. Òîâà ïîêàçâà, ÷å
907"ñïîñîáíîñò" íà îïåðàöèîííàòà ñèñòåìà, íàðå÷åíà "óïðàâëåíèå íà ïîòîêà" 907"ñïîñîáíîñò" íà îïåðàöèîííàòà ñèñòåìà, íàðå÷åíà "óïðàâëåíèå íà ïîòîêà"
908(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà äî Åìàêñ. Çà äà 908(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà äî Emacs. Çà äà
909ðàçìðàçèòå åêðàíà, âúâåäåòå C-q. Òîãàâà âèæòå ñåêöèÿòà "Ñïîíòàííî 909ðàçìðàçèòå åêðàíà, âúâåäåòå C-q. Òîãàâà âèæòå ñåêöèÿòà "Ñïîíòàííî
910âêëþ÷âàíå íà ïîñòúïêîâîòî òúðñåíå" (Spontaneous Entry to Incremental 910âêëþ÷âàíå íà ïîñòúïêîâîòî òúðñåíå" (Spontaneous Entry to Incremental
911Search) â ðúêîâîäñòâîòî íà Åìàêñ çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè 911Search) â ðúêîâîäñòâîòî íà Emacs çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè
912"ñïîñîáíîñò". 912"ñïîñîáíîñò".
913 913
914Àêî ñòå â ñðåäàòà íà ïîñòúïêîâî òúðñåíå è âúâåäåòå <Delback>, ùå 914Àêî ñòå â ñðåäàòà íà ïîñòúïêîâî òúðñåíå è âúâåäåòå <Delback>, ùå
@@ -930,9 +930,9 @@ C-s çàïî÷âà òúðñåíå, êîåòî ãëåäà çà ñúâïàäåíèå ñ íèçà, äàäåí çà
930 930
931 931
932* ÌÍÎÆÅÑÒÂÎ ÏÐÎÇÎÐÖÈ 932* ÌÍÎÆÅÑÒÂÎ ÏÐÎÇÎÐÖÈ
933---------------- 933--------------------
934 934
935Åäíà îò ïðèâëåêàòåëíèòå ñïîñîáíîñòè íà Åìàêñ å òàçè, ÷å ìîæå äà 935Åäíà îò ïðèâëåêàòåëíèòå ñïîñîáíîñòè íà Emacs å òàçè, ÷å ìîæå äà
936ãëåäàòå ïîâå÷å îò åäèí ïðîçîðåö íà åêðàíà â äàäåí ìîìåíò îò âðåìå. 936ãëåäàòå ïîâå÷å îò åäèí ïðîçîðåö íà åêðàíà â äàäåí ìîìåíò îò âðåìå.
937 937
938>> Ïðèäâèæåòå êóðñîðà äî òîçè ðåä è âúâåäåòå C-u 0 C-l (òîâà å 938>> Ïðèäâèæåòå êóðñîðà äî òîçè ðåä è âúâåäåòå C-u 0 C-l (òîâà å
@@ -943,7 +943,7 @@ C-s çàïî÷âà òúðñåíå, êîåòî ãëåäà çà ñúâïàäåíèå ñ íèçà, äàäåí çà
943 îñòàâà íà ïî-ãîðíèÿ ïðîçîðåö. 943 îñòàâà íà ïî-ãîðíèÿ ïðîçîðåö.
944 944
945>> Âúâåäåòå C-M-v, çà äà ñêðîëèðàòå äîëíèÿ ïðîçîðåö. (Àêî íÿìàòå 945>> Âúâåäåòå C-M-v, çà äà ñêðîëèðàòå äîëíèÿ ïðîçîðåö. (Àêî íÿìàòå
946 èñòèíñêè êëàâèø META, âúâåäåòå ESC C-v.) 946 èñòèíñêè êëàâèø META, âúâåäåòå <ESC> C-v.)
947 947
948>> Âúâåäåòå C-x o ("o" îò "other" -- "äðóã"), çà äà ïðèäâèæèòå 948>> Âúâåäåòå C-x o ("o" îò "other" -- "äðóã"), çà äà ïðèäâèæèòå
949 êóðñîðà â äîëíèÿ ïðîçîðåö. 949 êóðñîðà â äîëíèÿ ïðîçîðåö.
@@ -972,10 +972,10 @@ C-M-v å ïðèìåð çà çíàê CONTROL-META. Àêî èìàòå èñòèíñêè êëàâèø META,
972ïúðâè", çàùîòî è äâàòà êëàâèøà äåéñòâàò, ìîäèôèöèðàéêè çíàêà, êîéòî 972ïúðâè", çàùîòî è äâàòà êëàâèøà äåéñòâàò, ìîäèôèöèðàéêè çíàêà, êîéòî
973ñòå âúâåëè. 973ñòå âúâåëè.
974 974
975Àêî íÿìàòå èñòèíñêè êëàâèø META è èçïîëçâàòå ESC âìåñòî òîâà, ðåäúò 975Àêî íÿìàòå èñòèíñêè êëàâèø META è èçïîëçâàòå <ESC> âìåñòî òîâà, ðåäúò
976èìà çíà÷åíèå: òðÿáâà äà âúâåæäàòå ESC, ïîñëåäâàí îò CONTROL-v, çàùîòî 976èìà çíà÷åíèå: òðÿáâà äà âúâåæäàòå <ESC>, ïîñëåäâàí îò CONTROL-v,
977CONTROL-ESC v íÿìà äà ðàáîòè. Òîâà å òàêà, çàùîòî ESC å ñîáñòâåí 977çàùîòî CONTROL-<ESC> v íÿìà äà ðàáîòè. Òîâà å òàêà, çàùîòî <ESC> å
978çíàê, à íå ìîäèôèêàòîð. 978ñîáñòâåí çíàê, à íå ìîäèôèêàòîð.
979 979
980>> Âúâåäåòå C-x 1 (â ãîðíèÿ ïðîçîðåö), çà äà ìàõíåòå äîëíèÿ ïðîçîðåö. 980>> Âúâåäåòå C-x 1 (â ãîðíèÿ ïðîçîðåö), çà äà ìàõíåòå äîëíèÿ ïðîçîðåö.
981 981
@@ -1008,13 +1008,13 @@ CONTROL-ESC v íÿìà äà ðàáîòè. Òîâà å òàêà, çàùîòî ESC å ñîáñòâåí
1008íà ãëàâíèÿ ðåæèì. Íàïðèìåð, ìîæå äà âèäèòå [(Fundamental)] âìåñòî 1008íà ãëàâíèÿ ðåæèì. Íàïðèìåð, ìîæå äà âèäèòå [(Fundamental)] âìåñòî
1009(Fundamental). 1009(Fundamental).
1010 1010
1011Çà äà ñå ìàõíåòå îò âëîæåíîòî íèâî íà ðåäàêòèðàíå, âúâåäåòå ESC ESC 1011Çà äà ñå ìàõíåòå îò âëîæåíîòî íèâî íà ðåäàêòèðàíå, âúâåäåòå <ESC>
1012ESC. Òîâà å îáùà êîìàíäà çà "èçëèçàíå". Ìîæå è äà ÿ èçïîëçâàòå çà 1012<ESC> <ESC>. Òîâà å îáùà êîìàíäà çà "èçëèçàíå". Ìîæå è äà ÿ
1013ìàõàíå (ñêðèâàíå) íà äîïúëíèòåëíè ïðîçîðöè, êàêòî è çà äà ñå ìàõíåòå 1013èçïîëçâàòå çà ìàõàíå (ñêðèâàíå) íà äîïúëíèòåëíè ïðîçîðöè, êàêòî è çà
1014îò ìèíèáóôåðà. 1014äà ñå ìàõíåòå îò ìèíèáóôåðà.
1015 1015
1016>> Âúâåäåòå M-x, çà äà âëåçåòå â ìèíèáóôåð; òîãàâà âúâåäåòå ESC ESC 1016>> Âúâåäåòå M-x, çà äà âëåçåòå â ìèíèáóôåð; òîãàâà âúâåäåòå <ESC> <ESC>
1017 ESC, çà äà èçëåçåòå. 1017 <ESC>, çà äà èçëåçåòå.
1018 1018
1019Íå ìîæåòå äà èçïîëçâàòå C-g, çà äà èçëåçåòå îò âëîæåíî íèâî íà 1019Íå ìîæåòå äà èçïîëçâàòå C-g, çà äà èçëåçåòå îò âëîæåíî íèâî íà
1020ðåäàêòèðàíå. Òîâà å òàêà, çàùîòî C-g ñå èçïîëçâà çà ïðåêðàòÿâàíå íà 1020ðåäàêòèðàíå. Òîâà å òàêà, çàùîòî C-g ñå èçïîëçâà çà ïðåêðàòÿâàíå íà
@@ -1025,16 +1025,16 @@ ESC. Òîâà å îáùà êîìàíäà çà "èçëèçàíå". Ìîæå è äà ÿ èçïîëçâàòå çà
1025---------------------------------- 1025----------------------------------
1026 1026
1027 òîâà âúâåäåíèå ñå îïèòàõìå äà îñèãóðèì äîñòàòú÷íî èíôîðìàöèÿ, çà äà 1027 òîâà âúâåäåíèå ñå îïèòàõìå äà îñèãóðèì äîñòàòú÷íî èíôîðìàöèÿ, çà äà
1028çàïî÷íåòå äà èçïîëçâàòå Åìàêñ. Èìà òîëêîâà ìíîãî îùå â Åìàêñ, ÷å íå å 1028çàïî÷íåòå äà èçïîëçâàòå Emacs. Èìà òîëêîâà ìíîãî îùå â Emacs, ÷å íå å
1029âúçìîæíî òî äà áúäå îáÿñíåíî âñè÷êîòî òóê. Îáà÷å ìîæå äà ïîèñêàòå äà 1029âúçìîæíî òî äà áúäå îáÿñíåíî âñè÷êîòî òóê. Îáà÷å ìîæå äà ïîèñêàòå äà
1030íàó÷èòå ïîâå÷å çà Åìàêñ, òúé êàòî òîé ïðèòåæàâà îùå ìíîãî ïîëåçíè 1030íàó÷èòå ïîâå÷å çà Emacs, òúé êàòî òîé ïðèòåæàâà îùå ìíîãî ïîëåçíè
1031ñïîñîáíîñòè. Åìàêñ èìà êîìàíäè çà ÷åòåíå íà äîêóìåíòàöèÿòà íà Åìàêñ 1031ñïîñîáíîñòè. Emacs èìà êîìàíäè çà ÷åòåíå íà äîêóìåíòàöèÿòà íà Emacs
1032êîìàíäèòå. Òåçè "ïîìîùíè" êîìàíäè âñè÷êè çàïî÷âàò ñúñ çíàêà 1032êîìàíäèòå. Òåçè "ïîìîùíè" êîìàíäè âñè÷êè çàïî÷âàò ñúñ çíàêà
1033CONTROL-h, êîéòî ñå íàðè÷à "çíàêúò çà ïîìîù". 1033CONTROL-h, êîéòî ñå íàðè÷à "çíàêúò çà ïîìîù".
1034 1034
1035Çà äà èçïîëçâàòå âúçìîæíîñòèòå íà òàçè ïîìîù, âúâåäåòå çíàêà C-h è 1035Çà äà èçïîëçâàòå âúçìîæíîñòèòå íà òàçè ïîìîù, âúâåäåòå çíàêà C-h è
1036ñëåä òîâà çíàêà, êàçâàù êàêúâ âèä ïîìîù èñêàòå. Àêî ÍÀÈÑÒÈÍÀ ñòå ñå 1036ñëåä òîâà çíàêà, êàçâàù êàêúâ âèä ïîìîù èñêàòå. Àêî ÍÀÈÑÒÈÍÀ ñòå ñå
1037èçãóáèëè, âúâåäåòå C-h ? è Åìàêñ ùå âè êàæå ñ êàêâî ìîæå äà âè 1037èçãóáèëè, âúâåäåòå C-h ? è Emacs ùå âè êàæå ñ êàêâî ìîæå äà âè
1038ïîìîãíå. Àêî ñòå âúâåëè C-h è ðåøèòå, ÷å íå ñå íóæäàåòå îò ïîìîù, 1038ïîìîãíå. Àêî ñòå âúâåëè C-h è ðåøèòå, ÷å íå ñå íóæäàåòå îò ïîìîù,
1039ïðîñòî âúâåäåòå C-g, çà äà ÿ ïðåêðàòèòå. 1039ïðîñòî âúâåäåòå C-g, çà äà ÿ ïðåêðàòèòå.
1040 1040
@@ -1046,7 +1046,7 @@ CONTROL-h, êîéòî ñå íàðè÷à "çíàêúò çà ïîìîù".
1046 1046
1047Íàé-îñíîâíîòî ïîìîùíî ñðåäñòâî å C-h c. Âúâåäåòå C-h, çíàêà c è 1047Íàé-îñíîâíîòî ïîìîùíî ñðåäñòâî å C-h c. Âúâåäåòå C-h, çíàêà c è
1048êîìàíäåí çíàê èëè ïîñëåäîâàòåëíîñò îò çíàöè, îáðàçóâàùè êîìàíäà; 1048êîìàíäåí çíàê èëè ïîñëåäîâàòåëíîñò îò çíàöè, îáðàçóâàùè êîìàíäà;
1049òîãàâà Åìàêñ ùå èçâåäå ìíîãî êðàòêî îïèñàíèå íà êîìàíäàòà. 1049òîãàâà Emacs ùå èçâåäå ìíîãî êðàòêî îïèñàíèå íà êîìàíäàòà.
1050 1050
1051>> Type C-h c C-p. 1051>> Type C-h c C-p.
1052 1052
@@ -1056,7 +1056,7 @@ CONTROL-h, êîéòî ñå íàðè÷à "çíàêúò çà ïîìîù".
1056 (C-p èçïúëíÿâà êîìàíäàòà ïðåäèøåí-ðåä) 1056 (C-p èçïúëíÿâà êîìàíäàòà ïðåäèøåí-ðåä)
1057 1057
1058Òîâà âè êàçâà "èìåòî íà ôóíêöèÿòà". Èìåíàòà íà ôóíêöèèòå ñå èçïîëçâàò 1058Òîâà âè êàçâà "èìåòî íà ôóíêöèÿòà". Èìåíàòà íà ôóíêöèèòå ñå èçïîëçâàò
1059íàé-âå÷å çà íàñòðîéâàíå è ðàçøèðÿâàíå íà Åìàêñ. Íî òúé êàòî èìåíàòà 1059íàé-âå÷å çà íàñòðîéâàíå è ðàçøèðÿâàíå íà Emacs. Íî òúé êàòî èìåíàòà
1060íà ôóíêöèèòå ñà èçáðàíè òàêà, ÷å äà ïîêàçâàò êàêâî ïðàâè êîìàíäàòà, òå 1060íà ôóíêöèèòå ñà èçáðàíè òàêà, ÷å äà ïîêàçâàò êàêâî ïðàâè êîìàíäàòà, òå
1061ìîãàò äà ñëóæàò è çà ìíîãî êðàòêà äîêóìåíòàöèÿ -- äîñòàòú÷íà, çà äà âè 1061ìîãàò äà ñëóæàò è çà ìíîãî êðàòêà äîêóìåíòàöèÿ -- äîñòàòú÷íà, çà äà âè
1062ïðèïîìíè êîìàíäè, êîèòî âå÷å ñòå ó÷èëè. 1062ïðèïîìíè êîìàíäè, êîèòî âå÷å ñòå ó÷èëè.
@@ -1070,7 +1070,7 @@ c.
1070>> Âúâåäåòå C-h k C-p. 1070>> Âúâåäåòå C-h k C-p.
1071 1071
1072Òîâà èçâåæäà äîêóìåíòàöèÿòà íà ôóíêöèÿòà, êàêòî è íåéíîòî èìå, â 1072Òîâà èçâåæäà äîêóìåíòàöèÿòà íà ôóíêöèÿòà, êàêòî è íåéíîòî èìå, â
1073îòäåëåí Åìàêñ ïðîçîðåö. Êîãàòî ÿ ïðî÷åòåòå, âúâåäåòå C-x 1, çà äà 1073îòäåëåí Emacs ïðîçîðåö. Êîãàòî ÿ ïðî÷åòåòå, âúâåäåòå C-x 1, çà äà
1074ìàõíåòå ïîìîùíèÿ òåêñò. Íå å íóæíî äà ïðàâèòå òîâà òî÷íî ñåãà. Ìîæå 1074ìàõíåòå ïîìîùíèÿ òåêñò. Íå å íóæíî äà ïðàâèòå òîâà òî÷íî ñåãà. Ìîæå
1075äà ðåäàêòèðàòå, äîêàòî ñå îáðúùàòå êúì ïîìîùíèÿ òåêñò çà ñïðàâêà, è 1075äà ðåäàêòèðàòå, äîêàòî ñå îáðúùàòå êúì ïîìîùíèÿ òåêñò çà ñïðàâêà, è
1076ñëåä òîâà äà âúâåäåòå C-x 1. 1076ñëåä òîâà äà âúâåäåòå C-x 1.
@@ -1081,14 +1081,14 @@ c.
1081 ôóíêöèÿòà. 1081 ôóíêöèÿòà.
1082 1082
1083>> Îïèòàéòå ñ âúâåæäàíå íà C-h f previous-line<Return>. 1083>> Îïèòàéòå ñ âúâåæäàíå íà C-h f previous-line<Return>.
1084 Òîâà èçâåæäà öÿëàòà èíôîðìàöèÿ, êîÿòî Åìàêñ çíàå çà ôóíêöèÿòà, 1084 Òîâà èçâåæäà öÿëàòà èíôîðìàöèÿ, êîÿòî Emacs çíàå çà ôóíêöèÿòà,
1085 êîÿòî îñúùåñòâÿâà êîìàíäàòà C-p. 1085 êîÿòî îñúùåñòâÿâà êîìàíäàòà C-p.
1086 1086
1087Ïîäîáíà êîìàíäà, C-h v, èçâåæäà äîêóìåíòàöèÿòà íà ïðîìåíëèâèòå, êîèòî 1087Ïîäîáíà êîìàíäà, C-h v, èçâåæäà äîêóìåíòàöèÿòà íà ïðîìåíëèâèòå, êîèòî
1088ìîæå äà ïðîìåíÿòå, çà äà íàñòðîéâàòå ïîâåäåíèåòî íà Åìàêñ. Òðÿáâà äà 1088ìîæå äà ïðîìåíÿòå, çà äà íàñòðîéâàòå ïîâåäåíèåòî íà Emacs. Òðÿáâà äà
1089âúâåäåòå èìåòî íà ïðîìåíëèâàòà, êîãàòî Åìàêñ âè ïîäñêàæå òîâà. 1089âúâåäåòå èìåòî íà ïðîìåíëèâàòà, êîãàòî Emacs âè ïîäñêàæå òîâà.
1090 1090
1091 C-h a Êîìàíäà Àïðîïîñ. Âúâåäåòå êëþ÷îâà äóìà è Åìàêñ ùå 1091 C-h a Êîìàíäà Àïðîïîñ. Âúâåäåòå êëþ÷îâà äóìà è Emacs ùå
1092 ïîêàæå ñïèñúê íà âñè÷êè êîìàíäè, ÷èåòî èìå ñúäúðæà 1092 ïîêàæå ñïèñúê íà âñè÷êè êîìàíäè, ÷èåòî èìå ñúäúðæà
1093 òàçè êëþ÷îâà äóìà. Òåçè êîìàíäè ìîãàò âñè÷êè äà áúäàò 1093 òàçè êëþ÷îâà äóìà. Òåçè êîìàíäè ìîãàò âñè÷êè äà áúäàò
1094 èçâèêàíè ÷ðåç META-x. Çà íÿêîè êîìàíäè êîìàíäàòà 1094 èçâèêàíè ÷ðåç META-x. Çà íÿêîè êîìàíäè êîìàíäàòà
@@ -1111,18 +1111,18 @@ C-f, èçáðîåíè èçìåæäó ñúîòâåòíèòå èìåíà íà êîìàíäè, êàòî find-file.
1111 ñïåöèàëåí áóôåð, íàðè÷àí "*info*", êúäåòî ìîæå äà 1111 ñïåöèàëåí áóôåð, íàðè÷àí "*info*", êúäåòî ìîæå äà
1112 ÷åòåòå ðúêîâîäñòâàòà íà èíñòàëèðàíèòå âúâ âàøàòà 1112 ÷åòåòå ðúêîâîäñòâàòà íà èíñòàëèðàíèòå âúâ âàøàòà
1113 ñèñòåìà ïàêåòè. Âúâåäåòå m emacs <Return>, çà äà 1113 ñèñòåìà ïàêåòè. Âúâåäåòå m emacs <Return>, çà äà
1114 ÷åòåòå ðúêîâîäñòâîòî íà Åìàêñ. Àêî íèêîãà ïðåäè òîâà 1114 ÷åòåòå ðúêîâîäñòâîòî íà Emacs. Àêî íèêîãà ïðåäè òîâà
1115 íå ñòå èçïîëçâàëè Info, âúâåäåòå ? è Åìàêñ ùå âêëþ÷è 1115 íå ñòå èçïîëçâàëè Info, âúâåäåòå ? è Emacs ùå âêëþ÷è
1116 âúâåäåíèå âúâ âúçìîæíîñòèòå íà ðåæèìà Èíôî. Âåäíúæ 1116 âúâåäåíèå âúâ âúçìîæíîñòèòå íà ðåæèìà Èíôî. Âåäíúæ
1117 ñëåä êàòî ñòå ïðåìèíàëè òîâà âúâåäåíèå, òðÿáâà äà ñå 1117 ñëåä êàòî ñòå ïðåìèíàëè òîâà âúâåäåíèå, òðÿáâà äà ñå
1118 êîíñóëòèðàòå ñ Åìàêñ Èíôî ðúêîâîäñòâîòî êàòî âàøà 1118 êîíñóëòèðàòå ñ Emacs Èíôî ðúêîâîäñòâîòî êàòî âàøà
1119 îñíîâíà äîêóìåíòàöèÿ. 1119 îñíîâíà äîêóìåíòàöèÿ.
1120 1120
1121 1121
1122* ÎÙÅ ÂÚÇÌÎÆÍÎÑÒÈ 1122* ÎÙÅ ÂÚÇÌÎÆÍÎÑÒÈ
1123----------------- 1123-----------------
1124 1124
1125Ìîæå äà íàó÷èòå ïîâå÷å çà Åìàêñ ñ ÷åòåíå íà íåãîâîòî ðúêîâîäñòâî, èëè 1125Ìîæå äà íàó÷èòå ïîâå÷å çà Emacs ñ ÷åòåíå íà íåãîâîòî ðúêîâîäñòâî, èëè
1126êàòî êíèãà, èëè â Èíôî (èçïîëçâàéòå ìåíþòî ïîìîù (Help) èëè âúâåäåòå 1126êàòî êíèãà, èëè â Èíôî (èçïîëçâàéòå ìåíþòî ïîìîù (Help) èëè âúâåäåòå
1127F10 h r). Äâå âúçìîæíîñòè, êîèòî ìîæå äà æåëàåòå â íà÷àëîòî, ñà 1127F10 h r). Äâå âúçìîæíîñòè, êîèòî ìîæå äà æåëàåòå â íà÷àëîòî, ñà
1128äîâúðøâàíå (completion), êîåòî ñïåñòÿâà ïèñàíå, è dired, êîéòî 1128äîâúðøâàíå (completion), êîåòî ñïåñòÿâà ïèñàíå, è dired, êîéòî
@@ -1130,26 +1130,26 @@ F10 h r). Äâå âúçìîæíîñòè, êîèòî ìîæå äà æåëàåòå â íà÷àëîòî, ñà
1130 1130
1131Äîâúðøâàíåòî å íà÷èí äà èçáÿãâàòå íåíóæíî ïèñàíå. Íàïðèìåð, àêî 1131Äîâúðøâàíåòî å íà÷èí äà èçáÿãâàòå íåíóæíî ïèñàíå. Íàïðèìåð, àêî
1132èñêàòå äà ïðåâêëþ÷èòå êúì áóôåðà *Messages*, ìîæå äà âúâåäåòå C-x b 1132èñêàòå äà ïðåâêëþ÷èòå êúì áóôåðà *Messages*, ìîæå äà âúâåäåòå C-x b
1133*M<Tab> è Åìàêñ ùå çàïúëíè îñòàíàëàòà ÷àñò îò èìåòî íà áóôåðà, 1133*M<Tab> è Emacs ùå çàïúëíè îñòàíàëàòà ÷àñò îò èìåòî íà áóôåðà,
1134äîêîëêîòî ìîæå äà ñå îïðåäåëè îò òîâà, êîåòî ñòå âúâåëè. Äîâúðøâàíåòî 1134äîêîëêîòî ìîæå äà ñå îïðåäåëè îò òîâà, êîåòî ñòå âúâåëè. Äîâúðøâàíåòî
1135å îïèñàíî â Èíôî-ðúêîâîäñòâîòî íà Åìàêñ â ñòðàíèöàòà "Äîâúðøâàíå" 1135å îïèñàíî â Èíôî-ðúêîâîäñòâîòî íà Emacs â ñòðàíèöàòà "Äîâúðøâàíå"
1136("Completion"). 1136("Completion").
1137 1137
1138Dired âè ïîçâîëÿâà äà ãëåäàòå ñïèñúêà îò ôàéëîâå â äèðåêòîðèÿ (è êàòî 1138Dired âè ïîçâîëÿâà äà ãëåäàòå ñïèñúêà îò ôàéëîâå â äèðåêòîðèÿ (è êàòî
1139âúçìîæíîñò: íåéíèòå ïîääèðåêòîðèè), äà ñå ïðèäâèæâàòå â òîçè ñïèñúê, 1139âúçìîæíîñò: íåéíèòå ïîääèðåêòîðèè), äà ñå ïðèäâèæâàòå â òîçè ñïèñúê,
1140äà ïîñåùàâàòå, ïðåèìåíóâàòå, èçòðèâàòå è èçîáùî äåéñòâàòå âúðõó 1140äà ïîñåùàâàòå, ïðåèìåíóâàòå, èçòðèâàòå è èçîáùî äåéñòâàòå âúðõó
1141ôàéëîâåòå. Dired å îïèñàí â Èíôî-ðúêîâîäñòâîòî íà Åìàêñ â ñòðàíèöàòà 1141ôàéëîâåòå. Dired å îïèñàí â Èíôî-ðúêîâîäñòâîòî íà Emacs â ñòðàíèöàòà
1142"Dired". 1142"Dired".
1143 1143
1144Ðúêîâîäñòâîòî íà Åìàêñ îïèñâà îùå ìíîãî äðóãè âúçìîæíîñòè íà 1144Ðúêîâîäñòâîòî íà Emacs îïèñâà îùå ìíîãî äðóãè âúçìîæíîñòè íà
1145ðåäàêòîðà. 1145ðåäàêòîðà.
1146 1146
1147 1147
1148* ÇÀÊËÞ×ÅÍÈÅ 1148* ÇÀÊËÞ×ÅÍÈÅ
1149------------ 1149------------
1150 1150
1151Çàïîìíåòå: çà äà èçëåçåòå áåçâúçâðàòíî îò Åìàêñ, èçïîëçâàéòå C-x C-c. 1151Çàïîìíåòå: çà äà èçëåçåòå áåçâúçâðàòíî îò Emacs, èçïîëçâàéòå C-x C-c.
1152Çà äà èçëåçåòå âðåìåííî â îáâèâêà, òàêà ÷å äà ñå âúðíåòå â Åìàêñ 1152Çà äà èçëåçåòå âðåìåííî â îáâèâêà, òàêà ÷å äà ñå âúðíåòå â Emacs
1153ïî-êúñíî, èçïîëçâàéòå C-z. 1153ïî-êúñíî, èçïîëçâàéòå C-z.
1154 1154
1155Òîâà âúâåäåíèå å ïðåäâèäåíî äà áúäå ðàçáèðàåìî çà âñè÷êè íîâè 1155Òîâà âúâåäåíèå å ïðåäâèäåíî äà áúäå ðàçáèðàåìî çà âñè÷êè íîâè
@@ -1160,17 +1160,17 @@ Dired âè ïîçâîëÿâà äà ãëåäàòå ñïèñúêà îò ôàéëîâå â äèðåêòîðèÿ (è êàòî
1160* ÊÎÏÈÐÀÍÅ 1160* ÊÎÏÈÐÀÍÅ
1161---------- 1161----------
1162 1162
1163Òîâà âúâåäåíèå ïðîèçëèçà îò äúëãà ïîðåäèöà âúâåäåíèÿ â Åìàêñ, 1163Òîâà âúâåäåíèå ïðîèçëèçà îò äúëãà ïîðåäèöà âúâåäåíèÿ â Emacs,
1164çàïî÷âàéêè îò åäíî, íàïèñàíî îò Ñòþúðò Êðàêðàôò çà íà÷àëíèÿ Åìàêñ. 1164çàïî÷âàéêè îò åäíî, íàïèñàíî îò Ñòþúðò Êðàêðàôò çà íà÷àëíèÿ Emacs.
1165 1165
1166Òàçè âåðñèÿ íà âúâåäåíèåòî, êàêòî è ÃÍÓ Åìàêñ, å çàùèòåíà ñ àâòîðñêè 1166Òàçè âåðñèÿ íà âúâåäåíèåòî, êàêòî è GNU Emacs, å çàùèòåíà ñ àâòîðñêè
1167ïðàâà è èäâà ñ ðàçðåøåíèå äà ðàçïðîñòðàíÿâàòå êîïèÿ ïðè ñëåäíèòå 1167ïðàâà è èäâà ñ ðàçðåøåíèå äà ðàçïðîñòðàíÿâàòå êîïèÿ ïðè ñëåäíèòå
1168óñëîâèÿ: 1168óñëîâèÿ:
1169 1169
1170This version of the tutorial, like GNU Emacs, is copyrighted, and 1170This version of the tutorial, like GNU Emacs, is copyrighted, and
1171comes with permission to distribute copies on certain conditions: 1171comes with permission to distribute copies on certain conditions:
1172 1172
1173Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation 1173Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation
1174 1174
1175 Permission is granted to anyone to make or distribute verbatim copies 1175 Permission is granted to anyone to make or distribute verbatim copies
1176 of this document as received, in any medium, provided that the 1176 of this document as received, in any medium, provided that the
@@ -1183,8 +1183,8 @@ Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation
1183 under the above conditions, provided also that they 1183 under the above conditions, provided also that they
1184 carry prominent notices stating who last altered them. 1184 carry prominent notices stating who last altered them.
1185 1185
1186Óñëîâèÿòà çà êîïèðàíå íà ñàìèÿ Åìàêñ ñà ïî-ñëîæíè, íî â ñúùèÿ äóõ. 1186Óñëîâèÿòà çà êîïèðàíå íà ñàìèÿ Emacs ñà ïî-ñëîæíè, íî â ñúùèÿ äóõ.
1187Ìîëÿ, ïðî÷åòåòå ôàéëà COPYING è òîãàâà äàâàéòå êîïèÿ íà ÃÍÓ Åìàêñ íà 1187Ìîëÿ, ïðî÷åòåòå ôàéëà COPYING è òîãàâà äàâàéòå êîïèÿ íà GNU Emacs íà
1188ñâîè ïðèÿòåëè. Ïîìîãíåòå äà ñïðåì çàòâîðåíîñòòà íà ïðîãðàìèòå 1188ñâîè ïðèÿòåëè. Ïîìîãíåòå äà ñïðåì çàòâîðåíîñòòà íà ïðîãðàìèòå
1189("ïðèòåæàíèåòî"), êàòî èçïîëçâàìå, ïèøåì è ñïîäåëÿìå ñâîáîäåí ñîôòóåð! 1189("ïðèòåæàíèåòî"), êàòî èçïîëçâàìå, ïèøåì è ñïîäåëÿìå ñâîáîäåí ñîôòóåð!
1190 1190
diff --git a/etc/TUTORIAL.cn b/etc/TUTORIAL.cn
index cb3e93d956a..1b30b6e909a 100644
--- a/etc/TUTORIAL.cn
+++ b/etc/TUTORIAL.cn
@@ -1,4 +1,4 @@
1ÄúÕýÔÚÔĶÁ Emacs ¿ìËÙÖ¸ÄÏ£¨ Emacs tutorial £©¡£Çë¼ûҳβÓйظ´ÖÆÌõ¼þ¡£ 1Emacs ¿ìËÙÖ¸ÄÏ.
2Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. 2Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
3 3
4Emacs Ö¸Áîͨ³£°üº¬ÓÐ CONTROL ¼ü£¨ÓÐʱºòÒÔ CTRL »ò CTL À´±êʾ£©»òÊÇ 4Emacs Ö¸Áîͨ³£°üº¬ÓÐ CONTROL ¼ü£¨ÓÐʱºòÒÔ CTRL »ò CTL À´±êʾ£©»òÊÇ
diff --git a/etc/TUTORIAL.cs b/etc/TUTORIAL.cs
index 525e481d3db..f8945b89e36 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.es b/etc/TUTORIAL.es
index e4850649c7d..ed55cc5ca41 100644
--- a/etc/TUTORIAL.es
+++ b/etc/TUTORIAL.es
@@ -1,6 +1,5 @@
1Usted esta viendo el tutorial de Emacs. Vea al final las condiciones 1Tutorial de Emacs. Vea al final las condiciones de copiado.
2de copiado. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software 2Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
3Foundation.
4 3
5Generalmente los comandos de Emacs involucran la tecla CONTROL 4Generalmente los comandos de Emacs involucran la tecla CONTROL
6(algunas veces llamada CTRL O CTL) o la tecla meta (algunas veces 5(algunas veces llamada CTRL O CTL) o la tecla meta (algunas veces
diff --git a/etc/TUTORIAL.ja b/etc/TUTORIAL.ja
index ad25a0a31cc..683a4f485c8 100644
--- a/etc/TUTORIAL.ja
+++ b/etc/TUTORIAL.ja
@@ -1,4 +1,4 @@
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 1Emacs $BF~Lg%,%$%I(B.
2Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. 2Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
3 3
4Emacs $B$N%3%^%s%I$rF~NO$9$k$K$O!"0lHL$K%3%s%H%m!<%k%-!<!J%-!<%H%C%W$K(B 4Emacs $B$N%3%^%s%I$rF~NO$9$k$K$O!"0lHL$K%3%s%H%m!<%k%-!<!J%-!<%H%C%W$K(B
diff --git a/etc/TUTORIAL.ko b/etc/TUTORIAL.ko
index 72782dc330a..8e94db3c658 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..6b6a20a1bba 100644
--- a/etc/TUTORIAL.nl
+++ b/etc/TUTORIAL.nl
@@ -1,4 +1,4 @@
1Je leest nu de Emacs-inleiding. De kopieervoorwaarden staan onderaan. 1Emacs-inleiding. De kopieervoorwaarden staan onderaan.
2Copyright (c) 1985, 1996, 1997, 2003, 2004, 2005 Free Software Foundation 2Copyright (c) 1985, 1996, 1997, 2003, 2004, 2005 Free Software Foundation
3 3
4De meeste Emacs-commando's gebruiken de CONTROL-toets (soms CTRL of CTL 4De meeste Emacs-commando's gebruiken de CONTROL-toets (soms CTRL of CTL
diff --git a/etc/TUTORIAL.pl b/etc/TUTORIAL.pl
index 501df8f6521..c3bcb8047c8 100644
--- a/etc/TUTORIAL.pl
+++ b/etc/TUTORIAL.pl
@@ -1,4 +1,4 @@
1Czytasz w³a¶nie krótki samouczek Emacsa. Copyright (c) 1985, 2001 1krótki samouczek Emacsa. Copyright (c) 1985, 2001
2Free Software Foundation, Inc. Szczegó³y na koñcu pliku. 2Free Software Foundation, Inc. Szczegó³y na koñcu pliku.
3 3
4Polecenia Emacsa wymagaj± na ogó³ wci¶niêcia klawisza CONTROL (oznaczanego 4Polecenia Emacsa wymagaj± na ogó³ wci¶niêcia klawisza CONTROL (oznaczanego
diff --git a/etc/TUTORIAL.pt_BR b/etc/TUTORIAL.pt_BR
index 58101c28edb..a7a50804ca0 100644
--- a/etc/TUTORIAL.pt_BR
+++ b/etc/TUTORIAL.pt_BR
@@ -1,5 +1,5 @@
1Copyright (c) 2004 Free Software Foundation, Inc; Veja no fim as 1Tutorial do Emacs. Veja no fim as condições para cópia.
2condições. 2Copyright (c) 2004, 2005 Free Software Foundation.
3 3
4Os comandos do Emacs geralmente envolvem a tecla CONTROL (algumas vezes 4Os comandos do Emacs geralmente envolvem a tecla CONTROL (algumas vezes
5nomeada CTRL ou CTL) ou a tecla META (algumas vezes nomeada EDIT ou 5nomeada CTRL ou CTL) ou a tecla META (algumas vezes nomeada EDIT ou
@@ -130,8 +130,8 @@ jeito na direção contraria.
130 você pode observar a ação do M-f e M-b de varias lugares dentro e no 130 você pode observar a ação do M-f e M-b de varias lugares dentro e no
131 meio de palavras. 131 meio de palavras.
132 132
133Observe o paralelismo entre C-f e C-b em uma o, e M-f e M-b na 133Observe o paralelismo entre C-f e C-b por um lado, e M-f e M-b por outro
134outra. Muito freqüentemente os caracteres Meta são usados para operações 134lado. Muito freqüentemente os caracteres Meta são usados para operações
135relacionadas com as unidades definidas pela linguagem (palavras, 135relacionadas com as unidades definidas pela linguagem (palavras,
136sentenças, parágrafos), enquanto caracteres Control operam nas unidades 136sentenças, parágrafos), enquanto caracteres Control operam nas unidades
137básicas que são independente do que você está editando (caracteres, 137básicas que são independente do que você está editando (caracteres,
@@ -859,7 +859,7 @@ manual do Emacs para uma dica de como lhe dar com esse "recurso".
859 859
860Se você estiver no meio de uma pesquisa incremental e digitar <Delete>, 860Se você estiver no meio de uma pesquisa incremental e digitar <Delete>,
861você percebera que o ultimo caractere da pesquisa será apagado e a 861você percebera que o ultimo caractere da pesquisa será apagado e a
862pesquisa voltara para o ultimo lugar da pesquisa. Por instancia, imagine 862pesquisa voltara para o ultimo lugar da pesquisa. Por exemplo, imagine
863que você tenha digitado "c", para pesquisar a primeira ocorrência de 863que você tenha digitado "c", para pesquisar a primeira ocorrência de
864"c". Agora se você digitar "u", o cursor ira mover para a primeira 864"c". Agora se você digitar "u", o cursor ira mover para a primeira
865ocorrência de "cu". Agora digite <Delete>. Isso ira apagar o "u" da 865ocorrência de "cu". Agora digite <Delete>. Isso ira apagar o "u" da
diff --git a/etc/TUTORIAL.ro b/etc/TUTORIAL.ro
index 670c39bc454..459d3726cee 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..f1deaf6c89f 100644
--- a/etc/TUTORIAL.ru
+++ b/etc/TUTORIAL.ru
@@ -1,4 +1,4 @@
1÷Ù ÞÉÔÁÅÔÅ ÕÞÅÂÎÉË Emacs. õÓÌÏ×ÉÑ ËÏÐÉÒÏ×ÁÎÉÑ × ËÏÎÃÅ ÆÁÊÌÁ. 1ÕÞÅÂÎÉË Emacs.
2Copyright (c) 1985, 1996, 2004 Free Software Foundation, Inc. 2Copyright (c) 1985, 1996, 2004 Free Software Foundation, Inc.
3 3
4äÌÑ ÕÐÒÁ×ÌÅÎÉÑ Emacs ÏÂÙÞÎÏ ÉÓÐÏÌØÚÕÅÔÓÑ ËÌÀÞ (ÓÏÞÅÔÁÎÉÅ ËÌÁ×ÉÛ ËÌÁ×ÉÁÔÕÒÙ 4äÌÑ ÕÐÒÁ×ÌÅÎÉÑ Emacs ÏÂÙÞÎÏ ÉÓÐÏÌØÚÕÅÔÓÑ ËÌÀÞ (ÓÏÞÅÔÁÎÉÅ ËÌÁ×ÉÛ ËÌÁ×ÉÁÔÕÒÙ
diff --git a/etc/TUTORIAL.sk b/etc/TUTORIAL.sk
index f294088aba9..465a3805a62 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.sv b/etc/TUTORIAL.sv
index 65d1548c378..e4a86cabada 100644
--- a/etc/TUTORIAL.sv
+++ b/etc/TUTORIAL.sv
@@ -1,6 +1,6 @@
1Detta är den Svenska användarhandledningen till Emacs. I slutet finns 1Emacs användarhandledning. I slutet finns kopieringsvillkoren.
2kopieringsvillkoren. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free 2Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software
3Software Foundation, Inc. 3Foundation, Inc.
4 4
5Emacs-kommandon innebär ofta användning av kontrolltangenten (vanligen 5Emacs-kommandon innebär ofta användning av kontrolltangenten (vanligen
6märkt CTRL eller CTL) eller META-tangenten (på vissa tangentbord märkt 6märkt CTRL eller CTL) eller META-tangenten (på vissa tangentbord märkt
@@ -49,6 +49,10 @@ Följande kommandon är bra för att se hela skärmbilder:
49 Hitta markören igen och notera att det är samma text som står kring 49 Hitta markören igen och notera att det är samma text som står kring
50 markören nu. 50 markören nu.
51 51
52Du kan också använda PageUp och PageDn tangenterna, om din terminal
53har dem, för att flytta en hel skärmbild åt gången, men du redigerar
54effektivare om du använder C-v och M-v.
55
52 56
53* GRUNDLÄGGANDE MARKÖRRÖRELSER 57* GRUNDLÄGGANDE MARKÖRRÖRELSER
54------------------------------ 58------------------------------
@@ -56,12 +60,10 @@ Följande kommandon är bra för att se hela skärmbilder:
56Att flytta sig från skärmbild till skärmbild kan vara bra, men hur 60Att flytta sig från skärmbild till skärmbild kan vara bra, men hur
57förflyttar man sig till en speciell plats på skärmen? 61förflyttar man sig till en speciell plats på skärmen?
58 62
59Det finns flera sätt att göra detta på. Det vanligaste är att använda 63Det finns flera sätt att göra detta. Du kan använda piltangenterna,
60kommandona C-p, C-b, C-f och C-n. Vart och ett av dessa kommandon 64men det är mer effektivt att ha händerna i standardläget och använda
61flyttar markören en rad eller en kolumn i en bestämd riktning på 65kommandona C-p, C-b, C-f och C-n. Dessa tecken är likvärdiga med de
62skärmen. Här visas dessa fyra kommandon och i vilken riktning de 66fyra piltangenterna. Så här:
63flyttar markören:
64
65 67
66 Föregående rad, C-p 68 Föregående rad, C-p
67 : 69 :
@@ -75,11 +77,10 @@ flyttar markören:
75 och C-p. Använd sedan C-l för att centrera diagrammet på 77 och C-p. Använd sedan C-l för att centrera diagrammet på
76 skärmbilden. 78 skärmbilden.
77 79
78Detta är säkert lite enklare att förstå om du tänker på dessa 80Detta är enklare att komma ihåg om du tänker på dessa förkortningar: P
79förkortningar: P för föregående (previous), N för nästa (next), B för 81för föregående (previous), N för nästa (next), B för bakåt (backward)
80bakåt (backward) och F för framåt (forward). Detta är de grundläggande 82och F för framåt (forward). Dessa är de grundläggande kommandona för
81kommandona för att flytta markören och du kommer säkert att använda 83att flytta markören och du kommer att använda dem hela tiden.
82dem hela tiden, så det är en stor fördel om du lär dig dem nu.
83 84
84>> Gör några C-n så att du kommer ned till den här raden. 85>> Gör några C-n så att du kommer ned till den här raden.
85 86
@@ -309,17 +310,23 @@ texten. Tecken som du kan se, så som A, 7, *, etc. tolkas som text och
309sätts in direkt. Skriv <Return> (retur-tangenten) för att sätta in en 310sätts in direkt. Skriv <Return> (retur-tangenten) för att sätta in en
310radbrytning. 311radbrytning.
311 312
312Du kan radera det sista tecknet du skrev genom att trycka <Delete>. 313Du kan radera det sista tecknet du skrev genom att trycka <Delback>.
313<Delete> är en tangent på tangentbordet, som kan vara märkt "Del". I 314<Delback> är en tangent på tangentbordet -- samma som du normalt
314några fall fungerar också "backsteg" som <Delete> men inte alltid! 315använder utanför Emacs för att ta bort det senaste tecknet du skrivit.
316Det är vanligen en stor tangent några rader ovanför retur-tangenten,
317och den är vanligtvis märkt "Delete, "Del" eller "Backspace".
315 318
316Generellt raderar <Delete> tecknet precis före den aktuella 319Om den stora tangenten är märkt med "Backspace" så är det den du
320använder för <Delback>. Det kan finnas en annan tangent som är märkt
321med "Delete" men det är inte <Delback>.
322
323Generellt raderar <Delback> tecknet precis före den aktuella
317markörspositionen. 324markörspositionen.
318 325
319>> Gör detta nu: Skriv in några tecken och ta bort dem genom att 326>> Gör detta nu: Skriv in några tecken och ta bort dem genom att
320 använda <Delete>. Var inte rädd för att skriva i den här filen, du 327 använda <Delback>. Var inte rädd för att skriva i den här filen,
321 kommer inte att kunna förändra originalet till vägledningen. Detta 328 du kommer inte att kunna förändra originalet till vägledningen.
322 är bara en lokal kopia. 329 Detta är bara en lokal kopia.
323 330
324När en rad blir för lång för att rymmas på en skärmbredd så fortsätter 331När en rad blir för lång för att rymmas på en skärmbredd så fortsätter
325den på raden under. Ett bakstreck ("\") (eller om du kör under ett 332den på raden under. Ett bakstreck ("\") (eller om du kör under ett
@@ -330,7 +337,7 @@ indikerar att raden fortsätter.
330 fortsätt att skriva lite till. Du kommer då att se hur 337 fortsätt att skriva lite till. Du kommer då att se hur
331 fortsättningstecknet ser ut. 338 fortsättningstecknet ser ut.
332 339
333>> Använd <Delete> för att radera texten tills raden ryms på en 340>> Använd <Delback> för att radera texten tills raden ryms på en
334 skärmbredd igen. Fortsättningstecknet kommer då att försvinna. 341 skärmbredd igen. Fortsättningstecknet kommer då att försvinna.
335 342
336Du kan radera radbrytning precis som andra tecken. Genom att radera 343Du kan radera radbrytning precis som andra tecken. Genom att radera
@@ -338,7 +345,7 @@ radbrytningen mellan två rader slås dessa samman till en. Om
338resultatet av denna sammanslagning blir för stor för att passa inom en 345resultatet av denna sammanslagning blir för stor för att passa inom en
339skärmbredd, så kommer den att visas med ett fortsättningstecken. 346skärmbredd, så kommer den att visas med ett fortsättningstecken.
340 347
341>> Flytta markören till början av en rad och tryck <Delete>. 348>> Flytta markören till början av en rad och tryck <Delback>.
342 Detta kommer att klistra ihop raden med raden över. 349 Detta kommer att klistra ihop raden med raden över.
343 350
344>> Tryck <Return> för att sätta in radbrytningen du tog bort. 351>> Tryck <Return> för att sätta in radbrytningen du tog bort.
@@ -353,21 +360,21 @@ Du har nu lärt dig de mest grundläggande sätten att skriva något i
353Emacs och att rätta fel. Du kan radera ord och rader också. Här är en 360Emacs och att rätta fel. Du kan radera ord och rader också. Här är en
354översikt över kommandon för radering: 361översikt över kommandon för radering:
355 362
356 <Delete> raderar tecknet som står precis före markören 363 <Delback> Raderar tecknet som står precis före markören
357 C-d raderar tecknet som står precis under markören 364 C-d Raderar tecknet som står precis under markören
358 365
359 M-<Delete> raderar ordet precis före markören 366 M-<Delback> Raderar ordet precis före markören
360 M-d raderar ordet precis efter markören 367 M-d Raderar ordet precis efter markören
361 368
362 C-k raderar från markören till slutet av raden 369 C-k Raderar från markören till slutet av raden
363 M-k raderar till slutet av stycket 370 M-k Raderar till slutet av stycket
364 371
365Lägg märke till att <Delete> och C-d kontra M-<Delete> och M-d följer 372Lägg märke till att <Delback> och C-d kontra M-<Delback> och M-d
366mönstret som började med C-f och M-f. (<Delete> är inte precis 373följer mönstret som började med C-f och M-f. (<Delback> är inte precis
367ett kontrolltecken men låt oss inte bry oss om det.) C-k och M-k 374ett kontrolltecken men låt oss inte bry oss om det.) C-k och M-k
368fungerar på samma sätt som C-e och M-e (nästan). 375fungerar på samma sätt som C-e och M-e (nästan).
369 376
370Du kan också ta bort vilken del som helst av bufferten med hjälp av 377Du kan också ta bort vilken del som helst av texten med hjälp av
371följande allmänna metod. Flytta till ena änden av det område du vill 378följande allmänna metod. Flytta till ena änden av det område du vill
372ta bort och tryck C-@ eller C-mellanslag. Flytta till andra änden av 379ta bort och tryck C-@ eller C-mellanslag. Flytta till andra änden av
373området och tryck C-w. Detta tar bort all text mellan de två 380området och tryck C-w. Detta tar bort all text mellan de två
@@ -401,13 +408,13 @@ raderar så många rader OCH innehållet i dem. Detta är alltså inte bara
401en repetition av kommandot. C-u 2 C-k raderar två rader samt de tomma 408en repetition av kommandot. C-u 2 C-k raderar två rader samt de tomma
402raderna, medan C-k två gånger inte kommer att göra det. 409raderna, medan C-k två gånger inte kommer att göra det.
403 410
404Att sätta in borttagen text kallas att "återhämta" den (yanking). 411Att sätta in borttagen text kallas att "återhämta" den (yanking).
405(Tänk på det som att du rycker, eller drar, tillbaka någon text som 412(Tänk på det som att du rycker, eller drar, tillbaka någon text som
406tagits bort.) Du kan antingen hämta tillbaka borttagen text till samma 413tagits bort.) Du kan antingen hämta tillbaka borttagen text till samma
407plats som där den blev borttagen, eller så kan du sätta in den på en 414plats som där den blev borttagen, eller så kan du sätta in den på en
408annan plats i bufferten eller till och med i en helt annan fil. Du kan 415annan plats i texten du redigerar eller till och med i en helt annan
409också hämta tillbaka den flera gånger så att du får flera lika 416fil. Du kan också hämta tillbaka samma text flera gånger så att du får
410förekomster av den. 417flera lika förekomster av den.
411 418
412Kommandot för att hämta tillbaka text är C-y. Kommandot hämtar 419Kommandot för att hämta tillbaka text är C-y. Kommandot hämtar
413tillbaka den sist borttagna texten och placerar den där markören är. 420tillbaka den sist borttagna texten och placerar den där markören är.
@@ -496,8 +503,8 @@ nytt namn, som backup, ifall du senare ångrar alltihop.
496 503
497Om du tittar nästan längst ner på skärmbilden så kommer du se en rad 504Om du tittar nästan längst ner på skärmbilden så kommer du se en rad
498som börjar och slutar med minustecken, och som innehåller texten 505som börjar och slutar med minustecken, och som innehåller texten
499"--:-- TUTORIAL.se". Denna del av skärmbilden visar alltid namnet på 506"--:-- TUTORIAL.sv". Denna del av skärmbilden visar alltid namnet på
500filen du besöker. Just nu är du inne i en fil som heter "TUTORIAL.se" 507filen du besöker. Just nu är du inne i en fil som heter "TUTORIAL.sv"
501och som är en personlig kopia av vägledningen till Emacs. Vilken fil 508och som är en personlig kopia av vägledningen till Emacs. Vilken fil
502du än är inne i så kommer filnamnet stå där. 509du än är inne i så kommer filnamnet stå där.
503 510
@@ -540,7 +547,7 @@ blev sparad. Du bör spara ofta så att du inte förlorar så mycket om
540systemet kraschar. 547systemet kraschar.
541 548
542>> Skriv C-x C-s för att spara en kopia av denna vägledning. 549>> Skriv C-x C-s för att spara en kopia av denna vägledning.
543 Detta skall leda till att "Wrote ...TUTORIAL.se" skrivs ut nederst 550 Detta skall leda till att "Wrote ...TUTORIAL.sv" skrivs ut nederst
544 på skärmbilden. 551 på skärmbilden.
545 552
546Observera: På vissa system leder C-x C-s till att skärmen låser 553Observera: På vissa system leder C-x C-s till att skärmen låser
@@ -569,7 +576,7 @@ den på nytt med C-x C-f. På så sätt kan du ha ett stort antal filer
569 576
570>> Skapa en fil med namnet "foo" genom att trycka C-x C-f foo <Return>. 577>> Skapa en fil med namnet "foo" genom att trycka C-x C-f foo <Return>.
571 Skriv in lite text, redigera den och spara "foo" genom att använda 578 Skriv in lite text, redigera den och spara "foo" genom att använda
572 C-x C-s. Skriv till slut C-x C-f TUTORIAL.se<Return> för att komma 579 C-x C-s. Skriv till slut C-x C-f TUTORIAL.sv <Return> för att komma
573 tillbaka till den här vägledningen. 580 tillbaka till den här vägledningen.
574 581
575Emacs sparar texten för varje fil i ett objekt kallat "buffert". När 582Emacs sparar texten för varje fil i ett objekt kallat "buffert". När
@@ -581,13 +588,37 @@ du finner en ny fil skapas en ny buffert i Emacs. För att se en lista
581>> Prova C-x C-b nu. 588>> Prova C-x C-b nu.
582 589
583Se hur varje buffert har ett namn och att de också kan ha namnet på 590Se hur varje buffert har ett namn och att de också kan ha namnet på
584den fil som innehållet kommer från. En del buffertar är inte knutna 591den fil som innehållet kommer från. Vilken text du än ser i ett
585till någon fil, till exempel bufferten "*Buffer List*". Det är den 592Emacs-fönster så tillhör den alltid en buffert.
586buffert som innehåller buffertlistan som skapades med C-x C-b. Vilken
587text du än ser i ett Emacs-fönster så tillhör den alltid en buffert.
588 593
589>> Skriv C-x 1 för att bli kvitt buffertlistan. 594>> Skriv C-x 1 för att bli kvitt buffertlistan.
590 595
596När du har flera buffertar så är bara en av dem "gällande" åt gången.
597Det är den buffert du redigerar. Om du vill redigera en annan buffert
598så måste du byta till den. Om du vill byta till en buffert som
599motsvarar en fil kan du göra det genom att besöka den igen med C-x
600C-f. Det finns dock ett enklare sätt: använd C-x b kommandot. I det
601kommandot anger du buffertens namn.
602
603>> Skriv C-x b foo <Return> för att gå tillbaka till bufferten "foo"
604 som innehåller texten i filen "foo". Skriv sedan C-x b TUTORIAL.sv
605 <Return> för att komma tillbaka till den här handledningen.
606
607Mestadels är buffertens namn densamma som filens namn (utan
608katalogdel.) Det är dock inte alltid så. Bufferlistan du skapar med
609C-x C-b visar alltid namnen på varje buffert.
610
611All text du ser i ett Emacsfönster är alltid del av någon buffert. En
612del buffertar är inte knutna till någon fil, till exempel bufferten
613"*Buffer List*". Det är den buffert som innehåller buffertlistan som
614skapades med C-x C-b. Bufferten "*Messages*" motsvarar inte heller
615någon fil. Den innehåller de meddelanden som visas på den nedersta
616raden i Emacs sessionen.
617
618>> Skriv C-x b *Messages* <Return> för att se meddelandebufferten.
619 Skriv sedan C-x b TUTORIAL.sv <Return> för att återgå till den här
620 handledningen.
621
591Om du ändrar texten till en fil och sedan öppnar en ny fil, så kommer 622Om du ändrar texten till en fil och sedan öppnar en ny fil, så kommer
592inte den första filen sparas. Förändringen ligger kvar i 623inte den första filen sparas. Förändringen ligger kvar i
593bufferten. Skapande och redigering av den nya filen påverkar inte den 624bufferten. Skapande och redigering av den nya filen påverkar inte den
@@ -603,7 +634,7 @@ vill spara eller ej.
603 634
604>> Sätt in en rad med text och spara med C-x s 635>> Sätt in en rad med text och spara med C-x s
605 Du skall nu få frågan om du önskar spara bufferten 636 Du skall nu få frågan om du önskar spara bufferten
606 TUTORIAL.se. Svara ja på frågan genom att trycka "y" (yes). 637 TUTORIAL.sv. Svara ja på frågan genom att trycka "y" (yes).
607 638
608 639
609* UTVIDGNING AV KOMMANDOMÄNGDEN 640* UTVIDGNING AV KOMMANDOMÄNGDEN
@@ -618,9 +649,9 @@ META-tangenter. För att komma förbi denna begränsning har Emacs ett
618 kommandonamn. 649 kommandonamn.
619 650
620Detta är kommandon som är bra att ha men används mer sällan än de 651Detta är kommandon som är bra att ha men används mer sällan än de
621kommandon du redan har lärt dig. Du har redan sett två av dem, C-x C-f 652kommandon du redan har lärt dig. Du har redan sett några av dem, C-x
622för finn, och C-x C-s för spara. Ett annat exempel är kommandot för 653C-f för finn, och C-x C-s för spara. Ett annat exempel är kommandot
623att avsluta Emacs som är C-x C-c. Var inte rädd för att förlora 654för att avsluta Emacs som är C-x C-c. Var inte rädd för att förlora
624förändringar du har gjort. C-x C-c erbjuder dig att spara förändringar 655förändringar du har gjort. C-x C-c erbjuder dig att spara förändringar
625innan Emacs avslutas. 656innan Emacs avslutas.
626 657
@@ -646,12 +677,14 @@ istället för att avsluta.
646Det finns många C-x kommandon. Här är en lista över de du har lärt dig 677Det finns många C-x kommandon. Här är en lista över de du har lärt dig
647hittills: 678hittills:
648 679
649 C-x C-f Finn fil. 680 C-x C-f Finn fil
650 C-x C-s Spara fil. 681 C-x C-s Spara fil
651 C-x C-b Lista buffertar. 682 C-x s Spara några buffertar
652 C-x C-c Avsluta Emacs. 683 C-x C-b Lista buffertar
653 C-x 1 Ta bort alla utom ett fönster. 684 C-x b Byt buffert
654 C-x u Ångra. 685 C-x C-c Avsluta Emacs
686 C-x 1 Ta bort alla utom ett fönster
687 C-x u Ångra
655 688
656Namngivna utvidgade kommandon är kommandon som används mycket sällan 689Namngivna utvidgade kommandon är kommandon som används mycket sällan
657eller bara i vissa lägen. Ett exempel på ett sådant kommando är 690eller bara i vissa lägen. Ett exempel på ett sådant kommando är
@@ -708,16 +741,16 @@ skärmbilden.
708Raden precis över ekoområdet kallas "lägesrad" (mode line). Den ser 741Raden precis över ekoområdet kallas "lägesrad" (mode line). Den ser
709ungefär ut så här: 742ungefär ut så här:
710 743
711--:** TUTORIAL (Fundamental)--L670--58%---------------- 744--:** TUTORIAL 63% L749 (Fundamental)-----------------------
712 745
713Raden innehåller information om Emacs och texten du redigerar. 746Raden innehåller information om Emacs och texten du redigerar.
714 747
715Du vet redan vad filnamnet betyder, det är den fil du har funnit. 748Du vet redan vad filnamnet betyder, det är den fil du har funnit. NN%
716-NN%-- visar den aktuella positionen i texten, dvs. NN procent av 749visar den aktuella positionen i texten, dvs. NN procent av texten
717texten befinner sig över toppen av skärmbilden. Om toppen av filen är 750befinner sig över toppen av skärmbilden. Om toppen av filen är i
718i skärmbilden kommer det stå --Top-- istället för --00%-- och om 751skärmbilden kommer det stå "Top" istället för " 0%" och om slutet av
719slutet av filen är i skärmbilden kommer det stå --Bot--. Om du ser på 752filen är i skärmbilden kommer det stå "Bot". Om du ser på en fil där
720en fil där hela texten passar in på en sida kommer det stå --All--. 753hela texten passar in på en sida kommer det stå "All".
721 754
722Bokstaven L följd av siffror anger positionen på ett annat 755Bokstaven L följd av siffror anger positionen på ett annat
723sätt. Siffrorna visar vilken rad som markören befinner sig på. 756sätt. Siffrorna visar vilken rad som markören befinner sig på.
@@ -831,7 +864,7 @@ efter. <Return> avslutar sökandet.
831 har du sökt efter ordet "markör" en gång. 864 har du sökt efter ordet "markör" en gång.
832>> Skriv C-s en gång till för att söka efter nästa förekomst av ordet 865>> Skriv C-s en gång till för att söka efter nästa förekomst av ordet
833 "markör". 866 "markör".
834>> Tryck nu på <Delete> fyra gånger och se hur markören flyttar sig 867>> Tryck nu på <Delback> fyra gånger och se hur markören flyttar sig
835>> Tryck <Return> för att avsluta sökandet. 868>> Tryck <Return> för att avsluta sökandet.
836 869
837Såg du vad som hände? Under inkrementell sökning försöker Emacs att gå 870Såg du vad som hände? Under inkrementell sökning försöker Emacs att gå
@@ -847,12 +880,12 @@ den vidare till Emacs. För att fortsätta måste du trycka C-q. Se i så
847fall avsnittet "Spontaneous Entry to Incremental Search" i 880fall avsnittet "Spontaneous Entry to Incremental Search" i
848Emacs-manualen för råd om hur detta kan undvikas. 881Emacs-manualen för råd om hur detta kan undvikas.
849 882
850Om du är inne i en inkrementell sökning och trycker <Delete> kommer du 883Om du är inne i en inkrementell sökning och trycker <Delback> kommer
851lägga märke till att den sista bokstaven i söksträngen blir raderad 884du lägga märke till att den sista bokstaven i söksträngen blir raderad
852och sökandet hoppar tillbaka till en tidigare förekomst. Om du till 885och sökandet hoppar tillbaka till en tidigare förekomst. Om du till
853exempel skriver "m" för att söka efter den första förekomsten av "m", 886exempel skriver "m" för att söka efter den första förekomsten av "m",
854och sedan trycker "a" så kommer markören flytta sig till första 887och sedan trycker "a" så kommer markören flytta sig till första
855förekomsten av "ma". Tryck nu <Delete>. Detta avlägsnar "a" från 888förekomsten av "ma". Tryck nu <Delback>. Detta avlägsnar "a" från
856söksträngen, och markören flyttar sig tillbaka till den första 889söksträngen, och markören flyttar sig tillbaka till den första
857förekomsten av "m". 890förekomsten av "m".
858 891
@@ -880,7 +913,7 @@ skärmen samtidig.
880 det övre fönstret. 913 det övre fönstret.
881 914
882>> Skriv C-M-v för att rulla det nedre fönstret. 915>> Skriv C-M-v för att rulla det nedre fönstret.
883 (Om du inte har META-tangenten trycker du ESC C-v.) 916 (Om du inte har META-tangenten trycker du <ESC> C-v.)
884 917
885>> Skriv C-x o (o för other) för att flytta markören till det 918>> Skriv C-x o (o för other) för att flytta markören till det
886 nedre fönstret. 919 nedre fönstret.
@@ -910,10 +943,10 @@ som du trycker v. Det har ingen betydelse vilken av tangenterna
910KONTROLL och META som trycks först, för bägge fungerar så att de 943KONTROLL och META som trycks först, för bägge fungerar så att de
911"modifierar" de andra tangenterna du trycker. 944"modifierar" de andra tangenterna du trycker.
912 945
913Om du inte har META-tangenten och använder ESC istället är 946Om du inte har META-tangenten och använder <ESC> istället är
914ordningsföljden viktig. Du måste trycka ESC följt av KONTROLL-v, 947ordningsföljden viktig. Du måste trycka <ESC> följt av KONTROLL-v,
915KONTROLL-ESC v fungerar inte. Det är för att ESC är ett tecken i sig 948KONTROLL-<ESC> v fungerar inte. Det är för att <ESC> är ett tecken i
916och inte en äkta "modifierare". 949sig och inte en äkta "modifierare".
917 950
918>> Skriv C-x 1 i det övre fönstret för att bli kvitt det nedre 951>> Skriv C-x 1 i det övre fönstret för att bli kvitt det nedre
919 fönstret. 952 fönstret.
@@ -946,12 +979,12 @@ Ibland kan du hamna i något som kallas "rekursiv redigering"
946huvudläget i lägesraden. Till exempel kan det stå [(Fundamental)] 979huvudläget i lägesraden. Till exempel kan det stå [(Fundamental)]
947istället för (Fundamental). 980istället för (Fundamental).
948 981
949För att komma ur rekursiv redigering trycker du ESC ESC ESC. Detta är 982För att komma ur rekursiv redigering trycker du <ESC> <ESC> <ESC>.
950ett generellt brytkommando. Du kan också använda det för att bli kvitt 983Detta är ett generellt brytkommando. Du kan också använda det för att
951extra fönster och för att komma ut ur minibufferten. 984bli kvitt extra fönster och för att komma ut ur minibufferten.
952 985
953>> Skriv M-x för att komma in i minibufferten. Skriv så ESC ESC ESC 986>> Skriv M-x för att komma in i minibufferten. Skriv så <ESC> <ESC>
954 för att komma ut. 987 <ESC> för att komma ut.
955 988
956Du kan inte använda C-g för att komma ut ur rekursiv redigering. 989Du kan inte använda C-g för att komma ut ur rekursiv redigering.
957Detta är för att C-g används för att avbryta kommandon och argument 990Detta är för att C-g används för att avbryta kommandon och argument
@@ -985,7 +1018,8 @@ Den mest grundläggande hjälp-funktionen är C-h c. Skriv C-h, ett "c"
985och en knappsekvens. Emacs ger då en beskrivning av kommandot. 1018och en knappsekvens. Emacs ger då en beskrivning av kommandot.
986 1019
987>> Skriv C-h c C-p. 1020>> Skriv C-h c C-p.
988 Meddelandet skall då bli något i stil med 1021
1022Meddelandet skall då bli något i stil med:
989 1023
990 C-p runs the command previous-line 1024 C-p runs the command previous-line
991 1025
@@ -1061,6 +1095,29 @@ oklart duger det inte att sitta och tycka synd om sig själv -- Skicka
1061ett mail och klaga! 1095ett mail och klaga!
1062 1096
1063 1097
1098* MER FUNKTIONER
1099----------------
1100
1101Du kan lära dig mer om Emacs genom att läsa dess manual, antingen i
1102bokform eller on-line i Info (använd Hjälp-menyn eller skriv F10 h r).
1103Två finesser som du kan komma att gilla speciellt är komplettering
1104(completion), som spar tangenttryckningar, och dired, som förenklar
1105filhantering.
1106
1107Komplettering är ett sätt att undvika onödiga tangenttryckningar. Till
1108exempel, om du vill byta till *Messages* bufferten, kan du du skriva
1109C-x b *M<Tab> och Emacs kommer fylla i resten av buffertnamnet så
1110långt den kan räkna ut det från det du redan skrivit. Komplettering
1111finns beskrivet i Emacs-manualen i noden "Completion".
1112
1113Dired gör det möjligt att lista filer i en katalog (och även dess
1114subkataloger), flytta runt i listan, besöka, byta namn, ta bort och
1115operera på olika sätt på filerna. Dired finns beskrivet i Info i
1116Emacs-manualen i noden "Dired".
1117
1118Manualen beskriver även många andra Emacs funktioner.
1119
1120
1064* KOPIERING 1121* KOPIERING
1065----------- 1122-----------
1066 1123
@@ -1071,7 +1128,7 @@ Lidell översatte den till Svenska.
1071This version of the tutorial, like GNU Emacs, is copyrighted, and 1128This version of the tutorial, like GNU Emacs, is copyrighted, and
1072comes with permission to distribute copies on certain conditions: 1129comes with permission to distribute copies on certain conditions:
1073 1130
1074Copyright (c) 1985, 1996 Free Software Foundation 1131Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation
1075 1132
1076 Permission is granted to anyone to make or distribute verbatim copies 1133 Permission is granted to anyone to make or distribute verbatim copies
1077 of this document as received, in any medium, provided that the 1134 of this document as received, in any medium, provided that the
diff --git a/etc/TUTORIAL.th b/etc/TUTORIAL.th
index f3708c9d60f..e1fb9d561e1 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..8411bf878f5 100644
--- a/etc/TUTORIAL.zh
+++ b/etc/TUTORIAL.zh
@@ -1,4 +1,4 @@
1±z¥¿¦b¾\Ū Emacs §Ö³t«ü«n¡] Emacs tutorial ¡^¡C½Ð¨£­¶§À¦³Ãö½Æ»s±ø¥ó¡C 1Emacs §Ö³t«ü«n¡].
2Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. 2Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
3 3
4Emacs «ü¥O³q±`¥]§t¦³ CONTROL Áä¡]¦³®É­Ô¥H CTRL ©Î CTL ¨Ó¼Ð¥Ü¡^©Î¬O 4Emacs «ü¥O³q±`¥]§t¦³ CONTROL Áä¡]¦³®É­Ô¥H CTRL ©Î CTL ¨Ó¼Ð¥Ü¡^©Î¬O
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/lisp/ChangeLog b/lisp/ChangeLog
index ac6f62b9a40..d5a58deb7e4 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,482 @@
12005-04-04 Lute Kamstra <lute@gnu.org>
2
3 * autorevert.el (auto-revert-mode): Specify :group.
4 * battery.el (display-battery-mode): Specify :group.
5 * diff-mode.el (diff-minor-mode): Specify :group.
6 * font-core.el (font-lock-mode): Specify :group.
7 * hl-line.el (hl-line-mode): Specify :group.
8 * iimage.el (iimage): New customization group.
9 (iimage-mode): Specify :group.
10 * longlines.el (longlines-mode): Specify :group.
11 * master.el: Don't require easy-mmode.
12 (master): New customization group.
13 (master-mode): Specify :group.
14 * msb.el (msb-mode): Specify :group.
15 * reveal.el (reveal-mode): Specify :group.
16 * simple.el (next-error-follow-minor-mode): Specify :group.
17 * smerge-mode.el (smerge-mode): Specify :group.
18 * emacs-lisp/eldoc.el (eldoc-mode): Specify :group.
19 * emulation/cua-base.el (cua-mode): Specify :group.
20 * international/encoded-kb.el (encoded-kbd-mode): Specify :group.
21 * language/thai-util.el (thai-auto-composition-mode)
22 (thai-word-mode): Specify :group.
23 * mail/supercite.el (sc-minor-mode): Specify :group.
24 * progmodes/cwarn.el (cwarn-mode): Specify :group.
25 * progmodes/flymake.el (flymake-mode): Specify :group.
26 * progmodes/glasses.el (glasses-mode): Specify :group.
27 * progmodes/hideif.el (hide-ifdef-mode): Specify :group.
28 * textmodes/enriched.el (enriched-mode): Specify :group.
29 * textmodes/refill.el (refill-mode): Specify :group.
30
31 * add-log.el (change-log-font-lock-keywords): Names in
32 parenthesized lists can contain spaces.
33
342005-04-04 Thien-Thi Nguyen <ttn@gnu.org>
35
36 * startup.el (fancy-splash-text): Shorten default text of
37 "Emacs Tutorial" line. Also, if the current language env
38 indicates an available tutorial file other than TUTORIAL,
39 extract its title and append it to the line in parentheses.
40 (fancy-splash-insert): If arg is a thunk, funcall it.
41
422005-04-04 Jay Belanger <belanger@truman.edu>
43
44 * calc.el (calc-language-alist): Add tags to customization type.
45
462005-04-03 Luc Teirlinck <teirllm@auburn.edu>
47
48 * xt-mouse.el (xterm-mouse-mode): Add explicit Custom group, mouse.
49 Doc fix.
50
512005-04-03 Marcelo Toledo <marcelo@marcelotoledo.org>
52
53 * add-log.el (change-log-font-lock-keywords): The manual
54 describing a Change Log entry, says: (...) "Aside from these
55 header lines, every line in the change log starts with a space or
56 a tab.". The font-lock was not highlighting lines started with
57 spaces, added support for it.
58
592005-04-03 Roland Winkler <Roland.Winkler@physik.uni-erlangen.de>
60
61 * textmodes/bibtex.el (bibtex-url): Use format to generate the url.
62 (bibtex-generate-url-list): Update docstring accordingly. Put the
63 complex example in the docstring.
64 (bibtex-font-lock-url): Use pop.
65
662005-04-03 Stefan Monnier <monnier@iro.umontreal.ca>
67
68 * progmodes/tcl.el (tcl-set-font-lock-keywords): Use new \_< ops.
69
70 * pcvs.el (cvs-checkout): Prompt for cvsroot as well.
71
722005-04-03 Glenn Morris <gmorris@ast.cam.ac.uk>
73
74 * filesets.el (filesets-set-default): Doc fix.
75
762005-04-03 Lute Kamstra <lute@gnu.org>
77
78 * generic.el (define-generic-mode): Add argument to specify
79 keywords for defcustom.
80 (default-generic-mode): Specify :group.
81
82 * generic-x.el: Specify :group for all generic modes.
83
84 * desktop.el (desktop-no-desktop-file-hook)
85 (desktop-after-read-hook): Fix docstring.
86
872005-04-02 Luc Teirlinck <teirllm@auburn.edu>
88
89 * simple.el (visible-mode): Use explicit :group keyword.
90 This changes the group of `visible-mode-hook' from paren-blinking
91 to editing-basics.
92
932005-04-02 Sergey Poznyakoff <gray@Mirddin.farlep.net> (tiny change)
94
95 * mail/rmail.el (rmail-parse-url): Bugfix. Parse traditional
96 mailbox specifications as well as URLs.
97 (rmail-insert-inbox-text): Remove unused conditional branches.
98
992005-04-01 Jay Belanger <belanger@truman.edu>
100
101 * calc/calc-graph.el (calc-gnuplot-name, calc-gnuplot-plot-command)
102 (calc-gnuplot-print-command): Move definitions to calc.el.
103
104 * calc/calc-embed.el (calc-embedded-announce-formula)
105 (calc-embedded-open-formula, calc-embedded-close-formula)
106 (calc-embedded-open-word, calc-embedded-close-word)
107 (calc-embedded-open-plain, calc-embedded-close-plain)
108 (calc-embedded-open-new-formula, calc-embedded-close-new-formula)
109 (calc-embedded-open-mode, calc-embedded-close-mode):
110 Move definitions to calc.el.
111
112 * calc/calc.el (calc-settings-file, calc-language-alist):
113 Make customizable.
114 (calc-embedded-announce-formula, calc-embedded-open-formula)
115 (calc-embedded-close-formula, calc-embedded-open-word)
116 (calc-embedded-close-word, calc-embedded-open-plain)
117 (calc-embedded-close-plain, calc-embedded-open-new-formula)
118 (calc-embedded-close-new-formula, calc-embedded-open-mode)
119 (calc-embedded-close-mode, calc-gnuplot-name)
120 (calc-gnuplot-plot-command, calc-gnuplot-print-command): Move here
121 from other files and make customizable.
122
1232005-04-01 Stefan Monnier <monnier@iro.umontreal.ca>
124
125 * pcvs.el (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check):
126 Use buffer-live-p.
127 (cvs-mode-run): Don't call cvs-update-header here.
128 (cvs-run-process): Call cvs-update-header.
129 Use process properties for cvs-postprocess and cvs-buffer so that
130 the sentinel can behave better if the temp buffer is killed.
131 Use a pipe rather than a tty, to better handle unexpected prompts.
132 (cvs-sentinel): Rewrite. Call cvs-update-header.
133
1342005-04-01 Andre Spiegel <spiegel@gnu.org>
135
136 * vc-hooks.el (vc-workfile-unchanged-p): Disable mtime check when
137 we go via Tramp or Ange-FTP. Suggested by Kai Grossjohann.
138
1392005-03-31 Stefan Monnier <monnier@iro.umontreal.ca>
140
141 * generic.el (define-generic-mode): Add indentation rule.
142
1432005-03-31 Luc Teirlinck <teirllm@auburn.edu>
144
145 * files.el (mode-require-final-newline): Make Custom correctly
146 report a nil value and allow to set it to nil via Custom.
147 Doc fix.
148
1492005-04-01 Kenichi Handa <handa@m17n.org>
150
151 * international/characters.el: Enable the correct case setting for
152 dotless-i and dotted-I.
153
1542005-04-01 Kim F. Storm <storm@cua.dk>
155
156 * ido.el (ido-file-internal): Fall back to non-ido command if
157 initial directory is on slow ftp (or tramp) host.
158
1592005-03-31 Richard M. Stallman <rms@gnu.org>
160
161 * emacs-lisp/autoload.el (make-autoload):
162 Handle define-global-minor-mode.
163
164 * emacs-lisp/easy-mmode.el (define-global-minor-mode):
165 Rename from easy-mmode-define-global-mode.
166 (easy-mmode-define-global-mode): Alias for define-global-minor-mode.
167
168 * progmodes/scheme.el (scheme-mode-syntax-table):
169 Update syntax of | and # for two-character comment syntax.
170
1712005-03-31 Lute Kamstra <lute@gnu.org>
172
173 * emacs-lisp/easy-mmode.el (easy-mmode-define-global-mode)
174 (define-minor-mode): Call custom-current-group at load-time.
175
176 * generic.el (define-generic-mode): Add debug declaration.
177 Add defcustom for the mode hook.
178 (generic-mode-internal): Use run-mode-hooks.
179
1802005-03-31 Kim F. Storm <storm@cua.dk>
181
182 * mouse.el (mouse-1-click-follows-link): Increase to 450 ms.
183 (mouse-fixup-help-message): New defun called by show_help_echo
184 to fixup mouse-2 prefix in help messages when applicable.
185
186 * tooltip.el (tooltip-show-help-function): Don't fixup message here.
187
1882005-03-31 Kenichi Handa <handa@m17n.org>
189
190 * language/thai-word.el (thai-find-word-ends): Pay attention to
191 the case that we reach the end of buffer.
192
193 * textmodes/fill.el (fill-text-properties-at): New function.
194 (fill-newline): Use fill-text-properties-at instead of
195 text-properties-at.
196
1972005-03-31 Karl Berry <karl@freefriends.org>
198
199 * textmodes/tex-mode.el (tex-compile): shell-quote-argument,
200 not comint-quote-filename.
201
2022005-03-31 Olive Lin <olive.lin@versateladsl.be> (tiny change)
203
204 * textmodes/tex-mode.el (tex-start-tex) shell-quote-argument,
205 not comint-quote-filename.
206
2072005-03-31 Thien-Thi Nguyen <ttn@gnu.org>
208
209 * help-fns.el (help-with-tutorial): Revert last change.
210
2112005-03-31 Kim F. Storm <storm@cua.dk>
212
213 * emulation/cua-base.el (cua-scroll-down): Add CUA property.
214
2152005-03-30 Paul Eggert <eggert@cs.ucla.edu>
216
217 * calendar/cal-china.el: Update reference to "Calendrical
218 Calculations" book; there's a new edition.
219 * calendar/cal-coptic.el: Likewise.
220 * calendar/cal-french.el: Likewise.
221 * calendar/cal-hebrew.el: Likewise.
222 * calendar/cal-islam.el: Likewise.
223 * calendar/cal-iso.el: Likewise.
224 * calendar/cal-julian.el: Likewise.
225 * calendar/cal-mayan.el: Likewise.
226 * calendar/cal-persia.el: Likewise.
227 * calendar/calendar.el: Likewise.
228 * calendar/holidays.el: Likewise.
229 * calendar/lunar.el: Likewise.
230 * calendar/solar.el: Likewise.
231
232 * calendar/calendar.el (calendar-day-abbrev-array): Remove trailing
233 white space from doc string.
234
2352005-03-30 Jay Belanger <belanger@truman.edu>
236
237 * calc/calc-help.el (calc-full-help): Remove email address.
238
2392005-03-30 Thien-Thi Nguyen <ttn@gnu.org>
240
241 * help-fns.el (help-with-tutorial): Delete title line.
242
2432005-03-30 Glenn Morris <gmorris@ast.cam.ac.uk>
244
245 * calendar/cal-x.el (calendar-one-frame-setup)
246 (calendar-only-one-frame-setup, calendar-two-frame-setup): Use t
247 rather than 'symbol for set-window-dedicated-p.
248
249 * calendar/appt.el (appt-buffer-name): Make it a constant.
250 (appt-add): Doc fix.
251
252 * filesets.el (filesets-menu-path, filesets-menu-before)
253 (filesets-menu-in-menu): Doc fix. Now valid in GNU Emacs.
254 (filesets-menu-cache-file): Use directory ~/.emacs.d.
255 (filesets-add-submenu): Delete and use add-submenu instead.
256
2572005-03-30 Carsten Dominik <dominik@science.uva.nl>
258
259 * org.el (org-agenda-phases-of-moon, org-agenda-sunrise-sunset)
260 (org-agenda-convert-date, org-agenda-goto-calendar): New commands.
261 (org-diary-default-entry): New function.
262 (org-get-entries-from-diary): Better parsing of diary entries.
263 (org-agenda-check-no-diary): New function.
264 ("diary-lib"): Advice to function `add-to-diary-list', to allow
265 linking to diary entries.
266 (org-agenda-execute-calendar-command): New function.
267 (org-agenda): Improve visible section in window.
268 Use `org-fit-agenda-window'.
269 (org-fit-agenda-window): New option.
270 (org-move-subtree-down): Better handling of empty lines
271 at end of subtree.
272 (org-cycle): Numeric prefix is interpreted now as show-subtree N
273 levels up.
274 (org-fontify-done-headline): New option.
275 (org-headline-done-face): New face.
276 (org-set-font-lock-defaults): Use `org-headline-done-face'.
277 (org-table-copy-down): Rename from `org-table-copy-from-above'.
278 When current field is non-empty, it is copied to next row.
279 (org-table-copy-from-above): Fix bug which made it
280 impossible to copy fields containing only a single non-white character.
281
2822005-03-30 Kim F. Storm <storm@cua.dk>
283
284 * kmacro.el (kmacro-end-macro): Isearch may store this command
285 into the macro -- so ignore it when executing keyboard macro.
286
2872005-03-30 Nick Roberts <nickrob@snap.net.nz>
288
289 * tooltip.el (tooltip-gud-display): Use gud-overlay-arrow-position.
290
2912005-03-29 Kenichi Handa <handa@m17n.org>
292
293 * language/thai.el ("Thai"): Set setup-function and exit-function
294 for Thai language environment.
295
296 * language/thai-util.el: Require thai-word.
297 (thai-word-mode-map): New variable.
298 (thai-word-mode): New minor mode.
299 (setup-thai-language-environment-internal): New function.
300 (exit-thai-language-environment-internal): New function.
301
302 * language/thai-word.el (thai-word-table): Declare it by defvar,
303 use dolist to initialize it.
304 (thai-kill-word, thai-backward-kill-word, thai-transpose-words)
305 (thai-fill-find-break-point): New functions.
306
3072005-03-29 Richard M. Stallman <rms@gnu.org>
308
309 * simple.el (idle-update-delay): Move definition up.
310 (set-mark): Doc fix.
311
3122005-03-29 Chong Yidong <cyd@stupidchicken.com>
313
314 * longlines.el: New file.
315
316 * simple.el (buffer-substring-filters): New variable.
317 (filter-buffer-substring): New function.
318 (kill-region, copy-region-as-kill): Use it.
319
320 * register.el (copy-to-register, append-to-register)
321 (prepend-to-register): Use filter-buffer-substring.
322
3232005-03-30 Nick Roberts <nickrob@snap.net.nz>
324
325 * progmodes/gud.el (gdb): (Re)-initialise gud-filter-pending-text.
326 (gud-filter-pending-text): Move in front of gdb.
327 (gud-overlay-arrow-position): New variable.
328 (gud-sentinel, gud-display-line): Use it in place of
329 overlay-arrow-position.
330
3312005-03-29 Glenn Morris <gmorris@ast.cam.ac.uk>
332
333 * progmodes/fortran.el (fortran-if-indent): Doc fix.
334 (fortran-font-lock-keywords-2): Add "where", "elsewhere".
335 (fortran-font-lock-keywords-4): New variable.
336 (fortran-blocks-re, fortran-end-block-re)
337 (fortran-start-block-re): New constants, for hideshow.
338 (hs-special-modes-alist): Add a Fortran entry.
339 (fortran-mode-map): Bind fortran-end-of-block,
340 fortran-beginning-of-block to \M-\C-n, \M-\C-p.
341 (fortran-mode): Doc fix. Add fortran-font-lock-keywords-4.
342 (fortran-looking-at-if-then, fortran-end-of-block)
343 (fortran-beginning-of-block): New functions, for hideshow.
344
345 * progmodes/f90.el (f90-end-block-re, f90-start-block-re): Doc
346 fix. Tweak regexp.
347 (f90-beginning-of-block): Push mark first.
348
3492005-03-29 Jay Belanger <belanger@truman.edu>
350
351 * calc/calc.el: Update copyright date.
352 (calc-version): Increase to 2.1.
353 (calc-version-date): Remove.
354
355 * calc/calc-help.el: Update copyright date.
356 (calc-full-help): Remove reference to calc-version-date.
357 Update copyright date.
358
3592005-03-29 Stefan Monnier <monnier@iro.umontreal.ca>
360
361 * vc.el (vc-do-command): Use a pipe for async processes, so password
362 prompts don't show up at places where the user can't reply.
363
3642005-03-29 Olive Lin <olive.lin@versateladsl.be> (tiny change)
365
366 * textmodes/tex-mode.el (tex-send-command): shell-quote-argument
367 on the file name we pass to the inferior shell.
368
3692005-03-29 Stephan Stahl <stahl@eos.franken.de> (tiny change)
370
371 * progmodes/which-func.el (which-function): Be robust in the face of an
372 imenu--make-index-alist failure.
373
3742005-03-29 Stefan Monnier <monnier@iro.umontreal.ca>
375
376 * reveal.el (reveal-mode-map): Don't override C-a and C-e.
377
378 * progmodes/python.el (python-preoutput-filter): Fix last change.
379
3802005-03-29 Lute Kamstra <lute@gnu.org>
381
382 * emacs-lisp/debug.el (debug-on-entry): Handle autoloaded
383 functions and compiled macros.
384 (debug-convert-byte-code): Handle macros too.
385 (debug-on-entry-1): Don't signal an error when trying to clear a
386 function that is not set to debug on entry.
387
3882005-03-29 Jay Belanger <belanger@truman.edu>
389
390 * calc/calc-lang.el: Add functions to math-function-table
391 properties of tex and math.
392
3932005-03-29 Kenichi Handa <handa@m17n.org>
394
395 * ps-mule.el (ps-mule-plot-string): Translate characters by
396 ps-print-translation-table.
397 (ps-mule-begin-job): Call find-charset-region/string with
398 ps-print-translation-table.
399 (ps-mule-printable-p): Return t if CHARSET is ascii or latin-iso8859-1.
400
401 * ps-print.el (ps-print-translation-table): New variable.
402 (ps-plot-region): Translate characters by ps-print-translation-table.
403
4042005-03-29 Juri Linkov <juri@jurta.org>
405
406 * simple.el (next-error-highlight-timer): New variable.
407
408 * progmodes/compile.el (compilation-goto-locus):
409 Use `next-error-highlight-timer' instead of `sit-for'.
410
4112005-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
412
413 * mail/supercite.el (sc-mail-field): Use assoc-string.
414 (sc-get-address): Simplify regexps.
415
416 * files.el (minibuffer-with-setup-hook): New macro.
417 (find-file-read-args): Use it to avoid let-binding
418 minibuffer-with-setup-hook (which breaks turning on/off
419 file-name-shadow-mode while in the prompt).
420
421 * complete.el (PC-read-include-file-name-internal): Use test-completion.
422
4232005-03-28 Luc Teirlinck <teirllm@auburn.edu>
424
425 * font-lock.el: Bind `font-lock-fontify-block' to M-o M-o.
426
4272005-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
428
429 * window.el (window-buffer-height): Use count-screen-lines.
430
431 * progmodes/python.el (python-preoutput-leftover): New var.
432 (python-preoutput-filter): Use it.
433 (python-send-receive): Loop until all the result has been received.
434
4352005-03-28 Juri Linkov <juri@jurta.org>
436
437 * dired.el (dired-mode-map): Add ellipsis to "Compare directories".
438
439 * menu-bar.el (menu-bar-file-menu): Remove ellipsis from
440 "Recover Crashed Session".
441 (menu-bar-search-menu): Add ellipsis to "Search tagged files".
442 (menu-bar-replace-menu): Add ellipsis to "Replace in tagged files".
443 (menu-bar-goto-menu): Add ellipsis to "Set Tags File Name".
444 (menu-bar-goto-menu): Add ellipsis to "Tags Apropos".
445 (menu-bar-options-menu): Add ellipsis to "Set Font/Fontset".
446 (menu-bar-manuals-menu): Add ellipsis to "Find Command in Manual".
447 (menu-bar-manuals-menu): Add ellipsis to "Find Key in Manual".
448 (menu-bar-help-menu): Remove ellipsis from "Find Emacs Packages".
449
450 * ediff-hook.el (menu-bar-ediff-misc-menu, ediff-misc-menu):
451 Remove ellipsis from "Ediff Manual", "Customize Ediff", "List
452 Ediff Sessions", "Toggle use of separate control buffer frame",
453 "Use separate frame for Ediff control buffer".
454
455 * bookmark.el (menu-bar-bookmark-map): Add ellipsis to "Jump to
456 Bookmark", "Set Bookmark", "Insert Contents", "Insert Location",
457 "Rename Bookmark", "Delete Bookmark".
458
459 * info.el (Info-mode-menu): Remove ellipsis from "Index".
460 Add ellipsis to "Lookup a String", "Lookup a string in all indices".
461 Add `:active Info-index-alternatives' to "Next Matching Item".
462
463 * wdired.el (wdired-change-to-wdired-mode):
464 Mention `wdired-abort-changes' key in the initial message.
465
466 * international/mule.el (auto-coding-alist): Associate non-ascii
467 image filename extensions with `no-conversion'.
468
4692005-03-27 Stefan Monnier <monnier@iro.umontreal.ca>
470
471 * international/iso-acc.el:
472 * obsolete/iso-acc.el: Move iso-acc to the obsolete subdir.
473
4742005-03-26 Luc Teirlinck <teirllm@auburn.edu>
475
476 * textmodes/sgml-mode.el (html-mode): Doc update.
477
478 * autorevert.el (auto-revert-check-vc-info): Minor doc fix.
479
12005-03-26 Dan Nicolaescu <dann@ics.uci.edu> 4802005-03-26 Dan Nicolaescu <dann@ics.uci.edu>
2 481
3 * term.el (term-move-columns): Fix face after extending a line. 482 * term.el (term-move-columns): Fix face after extending a line.
@@ -345,8 +824,7 @@
345 824
3462005-03-21 Lute Kamstra <lute@gnu.org> 8252005-03-21 Lute Kamstra <lute@gnu.org>
347 826
348 * generic.el: Fix commentary section. Don't require cl for 827 * generic.el: Fix commentary section. Don't require cl for compilation.
349 compilation.
350 (generic-mode-list): Add autoload cookie. 828 (generic-mode-list): Add autoload cookie.
351 (generic-use-find-file-hook, generic-lines-to-scan) 829 (generic-use-find-file-hook, generic-lines-to-scan)
352 (generic-find-file-regexp, generic-ignore-files-regexp) 830 (generic-find-file-regexp, generic-ignore-files-regexp)
@@ -396,20 +874,27 @@
396 874
397 * tramp-smb.el (all): Remove debug construct for 875 * tramp-smb.el (all): Remove debug construct for
398 `with-parsed-tramp-file-name'. 876 `with-parsed-tramp-file-name'.
399 (tramp-smb-prompt): Prompt can contain spaces inside directory 877 (tramp-smb-prompt): Prompt can contain spaces inside directory names.
400 names.
401 (tramp-smb-handle-delete-directory, tramp-smb-handle-delete-file): 878 (tramp-smb-handle-delete-directory, tramp-smb-handle-delete-file):
402 No error message if DIRECTORY or FILENAME doesn't exist. 879 No error message if DIRECTORY or FILENAME doesn't exist.
403 (tramp-smb-open-connection): Check existence of 880 (tramp-smb-open-connection): Check existence of
404 `tramp-smb-program'. 881 `tramp-smb-program'.
405 882
8832005-03-20 Stefan Monnier <monnier@iro.umontreal.ca>
884
885 * progmodes/perl-mode.el (perl-font-lock-syntactic-face-function):
886 Properly handle the case where the `m' or `s' command's argument is not
887 yet terminated.
888 (perl-indent-new-calculate): New function.
889 (perl-indent-line): Use it.
890
4062005-03-20 Miles Bader <miles@gnu.org> 8912005-03-20 Miles Bader <miles@gnu.org>
407 892
408 * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Use breakpoint faces 893 * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Use breakpoint faces
409 in text-mode too. Change to new face names. 894 in text-mode too. Change to new face names.
410 (breakpoint-enabled): Renamed from `breakpoint-enabled-bitmap-face'. 895 (breakpoint-enabled): Rename from `breakpoint-enabled-bitmap-face'.
411 Add `:weight bold' attribute. 896 Add `:weight bold' attribute.
412 (breakpoint-disabled): Renamed from `breakpoint-disabled-bitmap-face'. 897 (breakpoint-disabled): Rename from `breakpoint-disabled-bitmap-face'.
413 898
4142005-03-19 Juri Linkov <juri@jurta.org> 8992005-03-19 Juri Linkov <juri@jurta.org>
415 900
@@ -426,8 +911,7 @@
426 911
4272005-03-19 Yoichi NAKAYAMA <yoichi@geiin.org> (tiny changes) 9122005-03-19 Yoichi NAKAYAMA <yoichi@geiin.org> (tiny changes)
428 913
429 * finder.el (finder-current-item): Throw an error on an empty 914 * finder.el (finder-current-item): Throw an error on an empty line.
430 line.
431 915
432 * man.el (Man-follow-manual-reference): If current-word returns 916 * man.el (Man-follow-manual-reference): If current-word returns
433 nil, use "". 917 nil, use "".
@@ -466,8 +950,8 @@
466 950
4672005-03-19 Vinicius Jose Latorre <viniciusjl@ig.com.br> 9512005-03-19 Vinicius Jose Latorre <viniciusjl@ig.com.br>
468 952
469 * ps-print.el (ps-generate-string-list, ps-generate-header-line): Use 953 * ps-print.el (ps-generate-string-list, ps-generate-header-line):
470 functionp instead of symbolp and fboundp. Reported by Drkm 954 Use functionp instead of symbolp and fboundp. Reported by Drkm
471 <darkman_spam@yahoo.fr>. 955 <darkman_spam@yahoo.fr>.
472 (ps-print-version): New version 6.6.6. 956 (ps-print-version): New version 6.6.6.
473 957
@@ -2290,7 +2774,7 @@
2290 * simple.el (eval-expression-print-format): Avoid warning 2774 * simple.el (eval-expression-print-format): Avoid warning
2291 about edebug-active. 2775 about edebug-active.
2292 2776
22932005-01-15 "James R. Van Zandt" <jrvz@comcast.net> (Tiny change) 27772005-01-15 James R. Van Zandt <jrvz@comcast.net> (Tiny change)
2294 2778
2295 * progmodes/sh-script.el: Code copied from make-mode.el 2779 * progmodes/sh-script.el: Code copied from make-mode.el
2296 with small changes, 2780 with small changes,
@@ -7012,8 +7496,7 @@
7012 7496
70132004-09-21 Kenichi Handa <handa@m17n.org> 74972004-09-21 Kenichi Handa <handa@m17n.org>
7014 7498
7015 * descr-text.el (describe-char): Checking of quail activation 7499 * descr-text.el (describe-char): Checking of quail activation fixed.
7016 fixed.
7017 7500
70182004-09-21 Jay Belanger <belanger@truman.edu> 75012004-09-21 Jay Belanger <belanger@truman.edu>
7019 7502
diff --git a/lisp/add-log.el b/lisp/add-log.el
index 7706a697755..126e7ecbaa5 100644
--- a/lisp/add-log.el
+++ b/lisp/add-log.el
@@ -1,7 +1,7 @@
1;;; add-log.el --- change log maintenance commands for Emacs 1;;; add-log.el --- change log maintenance commands for Emacs
2 2
3;; Copyright (C) 1985, 86, 88, 93, 94, 97, 98, 2000, 03, 2004 3;; Copyright (C) 1985, 1986, 1988, 1993, 1994, 1997, 1998, 2000, 2003,
4;; Free Software Foundation, Inc. 4;; 2004, 2005 Free Software Foundation, Inc.
5 5
6;; Maintainer: FSF 6;; Maintainer: FSF
7;; Keywords: tools 7;; Keywords: tools
@@ -225,20 +225,20 @@ Note: The search is conducted only within 10%, at the beginning of the file."
225 (2 'change-log-email-face))) 225 (2 'change-log-email-face)))
226 ;; 226 ;;
227 ;; File names. 227 ;; File names.
228 ("^\t\\* \\([^ ,:([\n]+\\)" 228 ("^\\(?: +\\|\t\\)\\* \\([^ ,:([\n]+\\)"
229 (1 'change-log-file-face) 229 (1 'change-log-file-face)
230 ;; Possibly further names in a list: 230 ;; Possibly further names in a list:
231 ("\\=, \\([^ ,:([\n]+\\)" nil nil (1 'change-log-file-face)) 231 ("\\=, \\([^ ,:([\n]+\\)" nil nil (1 'change-log-file-face))
232 ;; Possibly a parenthesized list of names: 232 ;; Possibly a parenthesized list of names:
233 ("\\= (\\([^() ,\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" 233 ("\\= (\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)"
234 nil nil (1 'change-log-list-face)) 234 nil nil (1 'change-log-list-face))
235 ("\\=, *\\([^() ,\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" 235 ("\\=, *\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)"
236 nil nil (1 'change-log-list-face))) 236 nil nil (1 'change-log-list-face)))
237 ;; 237 ;;
238 ;; Function or variable names. 238 ;; Function or variable names.
239 ("^\t(\\([^() ,\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" 239 ("^\t(\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)"
240 (1 'change-log-list-face) 240 (1 'change-log-list-face)
241 ("\\=, *\\([^() ,\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil 241 ("\\=, *\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil
242 (1 'change-log-list-face))) 242 (1 'change-log-list-face)))
243 ;; 243 ;;
244 ;; Conditionals. 244 ;; Conditionals.
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index d4a3d10d167..36b5a6f5a37 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -1,6 +1,6 @@
1;;; autorevert.el --- revert buffers when files on disk change 1;;; autorevert.el --- revert buffers when files on disk change
2 2
3;; Copyright (C) 1997, 1998, 1999, 2001, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1997, 1998, 1999, 2001, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Anders Lindgren <andersl@andersl.com> 5;; Author: Anders Lindgren <andersl@andersl.com>
6;; Keywords: convenience 6;; Keywords: convenience
@@ -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")
@@ -290,7 +290,7 @@ This is a minor mode that affects only the current buffer.
290Use `global-auto-revert-mode' to automatically revert all buffers. 290Use `global-auto-revert-mode' to automatically revert all buffers.
291Use `auto-revert-tail-mode' if you know that the file will only grow 291Use `auto-revert-tail-mode' if you know that the file will only grow
292without being changed in the part that is already in the buffer." 292without being changed in the part that is already in the buffer."
293 nil auto-revert-mode-text nil 293 :group 'auto-revert :lighter auto-revert-mode-text
294 (if auto-revert-mode 294 (if auto-revert-mode
295 (if (not (memq (current-buffer) auto-revert-buffer-list)) 295 (if (not (memq (current-buffer) auto-revert-buffer-list))
296 (push (current-buffer) auto-revert-buffer-list)) 296 (push (current-buffer) auto-revert-buffer-list))
diff --git a/lisp/battery.el b/lisp/battery.el
index 69bd68bb0b9..42ceec0c90c 100644
--- a/lisp/battery.el
+++ b/lisp/battery.el
@@ -114,7 +114,7 @@ The text being displayed in the mode line is controlled by the variables
114`battery-mode-line-format' and `battery-status-function'. 114`battery-mode-line-format' and `battery-status-function'.
115The mode line will be updated automatically every `battery-update-interval' 115The mode line will be updated automatically every `battery-update-interval'
116seconds." 116seconds."
117 :global t 117 :global t :group 'battery
118 (setq battery-mode-line-string "") 118 (setq battery-mode-line-string "")
119 (or global-mode-string (setq global-mode-string '(""))) 119 (or global-mode-string (setq global-mode-string '("")))
120 (and battery-update-timer (cancel-timer battery-update-timer)) 120 (and battery-update-timer (cancel-timer battery-update-timer))
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 2d2f66b1ebf..4f45419c136 100644
--- a/lisp/calc/calc-embed.el
+++ b/lisp/calc/calc-embed.el
@@ -1,6 +1,6 @@
1;;; calc-embed.el --- embed Calc in a buffer 1;;; calc-embed.el --- embed Calc in a buffer
2 2
3;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc. 3;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2005 Free Software Foundation, Inc.
4 4
5;; Author: David Gillespie <daveg@synaptics.com> 5;; Author: David Gillespie <daveg@synaptics.com>
6;; Maintainer: Jay Belanger <belanger@truman.edu> 6;; Maintainer: Jay Belanger <belanger@truman.edu>
@@ -48,48 +48,18 @@
48(defvar calc-embedded-some-active nil) 48(defvar calc-embedded-some-active nil)
49(make-variable-buffer-local 'calc-embedded-some-active) 49(make-variable-buffer-local 'calc-embedded-some-active)
50 50
51(defvar calc-embedded-open-formula "\\`\\|^\n\\|\\$\\$?\\|\\\\\\[\\|^\\\\begin[^{].*\n\\|^\\\\begin{.*[^x]}.*\n\\|^@.*\n\\|^\\.EQ.*\n\\|\\\\(\\|^%\n\\|^\\.\\\\\"\n" 51;; The following variables are customizable and defined in calc.el.
52 "*A regular expression for the opening delimiter of a formula used by 52(defvar calc-embedded-announce-formula)
53calc-embedded.") 53(defvar calc-embedded-open-formula)
54 54(defvar calc-embedded-close-formula)
55(defvar calc-embedded-close-formula "\\'\\|\n$\\|\\$\\$?\\|\\\\]\\|^\\\\end[^{].*\n\\|^\\\\end{.*[^x]}.*\n\\|^@.*\n\\|^\\.EN.*\n\\|\\\\)\\|\n%\n\\|^\\.\\\\\"\n" 55(defvar calc-embedded-open-word)
56 "*A regular expression for the closing delimiter of a formula used by 56(defvar calc-embedded-close-word)
57calc-embedded.") 57(defvar calc-embedded-open-plain)
58 58(defvar calc-embedded-close-plain)
59(defvar calc-embedded-open-word "^\\|[^-+0-9.eE]" 59(defvar calc-embedded-open-new-formula)
60 "*A regular expression for the opening delimiter of a formula used by 60(defvar calc-embedded-close-new-formula)
61calc-embedded-word.") 61(defvar calc-embedded-open-mode)
62 62(defvar calc-embedded-close-mode)
63(defvar calc-embedded-close-word "$\\|[^-+0-9.eE]"
64 "*A regular expression for the closing delimiter of a formula used by
65calc-embedded-word.")
66
67(defvar calc-embedded-open-plain "%%% "
68 "*A string which is the opening delimiter for a \"plain\" formula.
69If calc-show-plain mode is enabled, this is inserted at the front of
70each formula.")
71
72(defvar calc-embedded-close-plain " %%%\n"
73 "*A string which is the closing delimiter for a \"plain\" formula.
74See calc-embedded-open-plain.")
75
76(defvar calc-embedded-open-new-formula "\n\n"
77 "*A string which is inserted at front of formula by calc-embedded-new-formula.")
78
79(defvar calc-embedded-close-new-formula "\n\n"
80 "*A string which is inserted at end of formula by calc-embedded-new-formula.")
81
82(defvar calc-embedded-announce-formula "%Embed\n\\(% .*\n\\)*"
83 "*A regular expression which is sure to be followed by a calc-embedded formula." )
84
85(defvar calc-embedded-open-mode "% "
86 "*A string which should precede calc-embedded mode annotations.
87This is not required to be present for user-written mode annotations.")
88
89(defvar calc-embedded-close-mode "\n"
90 "*A string which should follow calc-embedded mode annotations.
91This is not required to be present for user-written mode annotations.")
92
93 63
94(defconst calc-embedded-mode-vars '(("precision" . calc-internal-prec) 64(defconst calc-embedded-mode-vars '(("precision" . calc-internal-prec)
95 ("word-size" . calc-word-size) 65 ("word-size" . calc-word-size)
diff --git a/lisp/calc/calc-graph.el b/lisp/calc/calc-graph.el
index 662de5db867..6a58a6215fa 100644
--- a/lisp/calc/calc-graph.el
+++ b/lisp/calc/calc-graph.el
@@ -1,6 +1,6 @@
1;;; calc-graph.el --- graph output functions for Calc 1;;; calc-graph.el --- graph output 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 Free Software Foundation, Inc.
4 4
5;; Author: David Gillespie <daveg@synaptics.com> 5;; Author: David Gillespie <daveg@synaptics.com>
6;; Maintainer: Jay Belanger <belanger@truman.edu> 6;; Maintainer: Jay Belanger <belanger@truman.edu>
@@ -33,14 +33,10 @@
33 33
34;;; Graphics 34;;; Graphics
35 35
36(defvar calc-gnuplot-name "gnuplot" 36;; The following three variables are customizable and defined in calc.el.
37 "*Name of GNUPLOT program, for calc-graph features.") 37(defvar calc-gnuplot-name)
38 38(defvar calc-gnuplot-plot-command)
39(defvar calc-gnuplot-plot-command nil 39(defvar calc-gnuplot-print-command)
40 "*Name of command for displaying GNUPLOT output; %s = file name to print.")
41
42(defvar calc-gnuplot-print-command "lp %s"
43 "*Name of command for printing GNUPLOT output; %s = file name to print.")
44 40
45(defvar calc-gnuplot-tempfile "calc") 41(defvar calc-gnuplot-tempfile "calc")
46 42
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.el b/lisp/calc/calc.el
index 24336ad9333..ceee013e493 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>
@@ -205,9 +206,122 @@
205 206
206(require 'calc-macs) 207(require 'calc-macs)
207 208
209(defgroup calc nil
210 "GNU Calc"
211 :prefix "calc-"
212 :tag "Calc")
213
208;;;###autoload 214;;;###autoload
209(defvar calc-settings-file (convert-standard-filename "~/.calc.el") 215(defcustom calc-settings-file
210 "*File in which to record permanent settings.") 216 (convert-standard-filename "~/.calc.el")
217 "*File in which to record permanent settings."
218 :group 'calc
219 :type '(file))
220
221(defcustom calc-language-alist
222 '((latex-mode . latex)
223 (tex-mode . tex)
224 (plain-tex-mode . tex)
225 (context-mode . tex)
226 (nroff-mode . eqn)
227 (pascal-mode . pascal)
228 (c-mode . c)
229 (c++-mode . c)
230 (fortran-mode . fortran)
231 (f90-mode . fortran))
232 "*Alist of major modes with appropriate Calc languages."
233 :group 'calc
234 :type '(alist :key-type (symbol :tag "Major mode")
235 :value-type (symbol :tag "Calc language")))
236
237(defcustom calc-embedded-announce-formula
238 "%Embed\n\\(% .*\n\\)*"
239 "*A regular expression which is sure to be followed by a calc-embedded formula."
240 :group 'calc
241 :type '(regexp))
242
243(defcustom calc-embedded-open-formula
244 "\\`\\|^\n\\|\\$\\$?\\|\\\\\\[\\|^\\\\begin[^{].*\n\\|^\\\\begin{.*[^x]}.*\n\\|^@.*\n\\|^\\.EQ.*\n\\|\\\\(\\|^%\n\\|^\\.\\\\\"\n"
245 "*A regular expression for the opening delimiter of a formula used by calc-embedded."
246 :group 'calc
247 :type '(regexp))
248
249(defcustom calc-embedded-close-formula
250 "\\'\\|\n$\\|\\$\\$?\\|\\\\]\\|^\\\\end[^{].*\n\\|^\\\\end{.*[^x]}.*\n\\|^@.*\n\\|^\\.EN.*\n\\|\\\\)\\|\n%\n\\|^\\.\\\\\"\n"
251 "*A regular expression for the closing delimiter of a formula used by calc-embedded."
252 :group 'calc
253 :type '(regexp))
254
255(defcustom calc-embedded-open-word
256 "^\\|[^-+0-9.eE]"
257 "*A regular expression for the opening delimiter of a formula used by calc-embedded-word."
258 :group 'calc
259 :type '(regexp))
260
261(defcustom calc-embedded-close-word
262 "$\\|[^-+0-9.eE]"
263 "*A regular expression for the closing delimiter of a formula used by calc-embedded-word."
264 :group 'calc
265 :type '(regexp))
266
267(defcustom calc-embedded-open-plain
268 "%%% "
269 "*A string which is the opening delimiter for a \"plain\" formula.
270If calc-show-plain mode is enabled, this is inserted at the front of
271each formula."
272 :group 'calc
273 :type '(string))
274
275(defcustom calc-embedded-close-plain
276 " %%%\n"
277 "*A string which is the closing delimiter for a \"plain\" formula.
278See calc-embedded-open-plain."
279 :group 'calc
280 :type '(string))
281
282(defcustom calc-embedded-open-new-formula
283 "\n\n"
284 "*A string which is inserted at front of formula by calc-embedded-new-formula."
285 :group 'calc
286 :type '(string))
287
288(defcustom calc-embedded-close-new-formula
289 "\n\n"
290 "*A string which is inserted at end of formula by calc-embedded-new-formula."
291 :group 'calc
292 :type '(string))
293
294(defcustom calc-embedded-open-mode
295 "% "
296 "*A string which should precede calc-embedded mode annotations.
297This is not required to be present for user-written mode annotations."
298 :group 'calc
299 :type '(string))
300
301(defcustom calc-embedded-close-mode
302 "\n"
303 "*A string which should follow calc-embedded mode annotations.
304This is not required to be present for user-written mode annotations."
305 :group 'calc
306 :type '(string))
307
308(defcustom calc-gnuplot-name
309 "gnuplot"
310 "*Name of GNUPLOT program, for calc-graph features."
311 :group 'calc
312 :type '(string))
313
314(defcustom calc-gnuplot-plot-command
315 nil
316 "*Name of command for displaying GNUPLOT output; %s = file name to print."
317 :group 'calc
318 :type '(choice (string) (sexp)))
319
320(defcustom calc-gnuplot-print-command
321 "lp %s"
322 "*Name of command for printing GNUPLOT output; %s = file name to print."
323 :group 'calc
324 :type '(choice (string) (sexp)))
211 325
212(defvar calc-bug-address "belanger@truman.edu" 326(defvar calc-bug-address "belanger@truman.edu"
213 "Address of the author of Calc, for use by `report-calc-bug'.") 327 "Address of the author of Calc, for use by `report-calc-bug'.")
@@ -656,8 +770,7 @@ If nil, selections displayed but ignored.")
656(put 'math-underflow 'error-conditions '(error math-underflow calc-error)) 770(put 'math-underflow 'error-conditions '(error math-underflow calc-error))
657(put 'math-underflow 'error-message "Floating-point underflow occurred") 771(put 'math-underflow 'error-message "Floating-point underflow occurred")
658 772
659(defconst calc-version "2.02g") 773(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. 774(defvar calc-trail-pointer nil) ; "Current" entry in trail buffer.
662(defvar calc-trail-overlay nil) ; Value of overlay-arrow-string. 775(defvar calc-trail-overlay nil) ; Value of overlay-arrow-string.
663(defvar calc-undo-list nil) ; List of previous operations for undo. 776(defvar calc-undo-list nil) ; List of previous operations for undo.
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-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 89d32c4952b..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
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/calendar/time-date.el b/lisp/calendar/time-date.el
index a4acb8b9291..7160d26ef42 100644
--- a/lisp/calendar/time-date.el
+++ b/lisp/calendar/time-date.el
@@ -1,5 +1,5 @@
1;;; time-date.el --- date and time handling functions 1;;; time-date.el --- Date and time handling functions
2;; Copyright (C) 1998, 1999, 2000, 2004, 2005 Free Software Foundation, Inc. 2;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
3 3
4;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org> 4;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
5;; Masanobu Umeda <umerin@mse.kyutech.ac.jp> 5;; Masanobu Umeda <umerin@mse.kyutech.ac.jp>
diff --git a/lisp/complete.el b/lisp/complete.el
index 337af81de71..60bddd01f17 100644
--- a/lisp/complete.el
+++ b/lisp/complete.el
@@ -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/desktop.el b/lisp/desktop.el
index 6ec81fcac70..ed663d375d5 100644
--- a/lisp/desktop.el
+++ b/lisp/desktop.el
@@ -1,6 +1,6 @@
1;;; desktop.el --- save partial status of Emacs when killed 1;;; desktop.el --- save partial status of Emacs when killed
2 2
3;; Copyright (C) 1993, 1994, 1995, 1997, 2000, 2001 3;; Copyright (C) 1993, 1994, 1995, 1997, 2000, 2001, 2005
4;; Free Software Foundation, Inc. 4;; Free Software Foundation, Inc.
5 5
6;; Author: Morten Welinder <terra@diku.dk> 6;; Author: Morten Welinder <terra@diku.dk>
@@ -158,14 +158,14 @@ If nil, just print error messages in the message buffer."
158 158
159(defcustom desktop-no-desktop-file-hook nil 159(defcustom desktop-no-desktop-file-hook nil
160 "Normal hook run when `desktop-read' can't find a desktop file. 160 "Normal hook run when `desktop-read' can't find a desktop file.
161May e.g. be used to show a dired buffer." 161May be used to show a dired buffer."
162 :type 'hook 162 :type 'hook
163 :group 'desktop 163 :group 'desktop
164 :version "22.1") 164 :version "22.1")
165 165
166(defcustom desktop-after-read-hook nil 166(defcustom desktop-after-read-hook nil
167 "Normal hook run after a successful `desktop-read'. 167 "Normal hook run after a successful `desktop-read'.
168May e.g. be used to show a buffer list." 168May be used to show a buffer list."
169 :type 'hook 169 :type 'hook
170 :group 'desktop 170 :group 'desktop
171 :version "22.1") 171 :version "22.1")
diff --git a/lisp/diff-mode.el b/lisp/diff-mode.el
index c945a6a7221..d69685ac86f 100644
--- a/lisp/diff-mode.el
+++ b/lisp/diff-mode.el
@@ -1,7 +1,7 @@
1;;; diff-mode.el --- a mode for viewing/editing context diffs 1;;; diff-mode.el --- a mode for viewing/editing context diffs
2 2
3;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 3;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
4;; Free Software Foundation, Inc. 4;; Free Software Foundation, Inc.
5 5
6;; Author: Stefan Monnier <monnier@cs.yale.edu> 6;; Author: Stefan Monnier <monnier@cs.yale.edu>
7;; Keywords: convenience patch diff 7;; Keywords: convenience patch diff
@@ -263,7 +263,7 @@ when editing big diffs)."
263 (save-excursion 263 (save-excursion
264 (while (re-search-backward re start t) 264 (while (re-search-backward re start t)
265 (replace-match "" t t))))))) 265 (replace-match "" t t)))))))
266 266
267 267
268(defvar diff-font-lock-keywords 268(defvar diff-font-lock-keywords
269 `(("^\\(@@ -[0-9,]+ \\+[0-9,]+ @@\\)\\(.*\\)$" ;unified 269 `(("^\\(@@ -[0-9,]+ \\+[0-9,]+ @@\\)\\(.*\\)$" ;unified
@@ -484,7 +484,7 @@ If the OLD prefix arg is passed, tell the file NAME of the old file."
484 (let ((fs (diff-hunk-file-names old))) 484 (let ((fs (diff-hunk-file-names old)))
485 (unless fs (error "No file name to look for")) 485 (unless fs (error "No file name to look for"))
486 (push (cons fs name) diff-remembered-files-alist))) 486 (push (cons fs name) diff-remembered-files-alist)))
487 487
488(defun diff-hunk-file-names (&optional old) 488(defun diff-hunk-file-names (&optional old)
489 "Give the list of file names textually mentioned for the current hunk." 489 "Give the list of file names textually mentioned for the current hunk."
490 (save-excursion 490 (save-excursion
@@ -952,7 +952,7 @@ a diff with \\[diff-reverse-direction]."
952(define-minor-mode diff-minor-mode 952(define-minor-mode diff-minor-mode
953 "Minor mode for viewing/editing context diffs. 953 "Minor mode for viewing/editing context diffs.
954\\{diff-minor-mode-map}" 954\\{diff-minor-mode-map}"
955 nil " Diff" nil 955 :group 'diff-mode :lighter " Diff"
956 ;; FIXME: setup font-lock 956 ;; FIXME: setup font-lock
957 ;; setup change hooks 957 ;; setup change hooks
958 (if (not diff-update-on-the-fly) 958 (if (not diff-update-on-the-fly)
diff --git a/lisp/dired.el b/lisp/dired.el
index b42d4f8cece..8ee19486a7e 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -1252,7 +1252,7 @@ Do so according to the former subdir alist OLD-SUBDIR-ALIST."
1252 '("--")) 1252 '("--"))
1253 1253
1254 (define-key map [menu-bar immediate compare-directories] 1254 (define-key map [menu-bar immediate compare-directories]
1255 '(menu-item "Compare directories" dired-compare-directories 1255 '(menu-item "Compare directories..." dired-compare-directories
1256 :help "Mark files with different attributes in two dired buffers")) 1256 :help "Mark files with different attributes in two dired buffers"))
1257 (define-key map [menu-bar immediate backup-diff] 1257 (define-key map [menu-bar immediate backup-diff]
1258 '(menu-item "Compare with Backup" dired-backup-diff 1258 '(menu-item "Compare with Backup" dired-backup-diff
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/autoload.el b/lisp/emacs-lisp/autoload.el
index 0a75a43827e..68d1287d98c 100644
--- a/lisp/emacs-lisp/autoload.el
+++ b/lisp/emacs-lisp/autoload.el
@@ -72,7 +72,7 @@ or macro definition or a defcustom)."
72 (let ((car (car-safe form)) expand) 72 (let ((car (car-safe form)) expand)
73 (cond 73 (cond
74 ;; For complex cases, try again on the macro-expansion. 74 ;; For complex cases, try again on the macro-expansion.
75 ((and (memq car '(easy-mmode-define-global-mode 75 ((and (memq car '(easy-mmode-define-global-mode define-global-minor-mode
76 easy-mmode-define-minor-mode define-minor-mode)) 76 easy-mmode-define-minor-mode define-minor-mode))
77 (setq expand (let ((load-file-name file)) (macroexpand form))) 77 (setq expand (let ((load-file-name file)) (macroexpand form)))
78 (eq (car expand) 'progn) 78 (eq (car expand) 'progn)
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index 1e45439658c..2149cba8720 100644
--- a/lisp/emacs-lisp/debug.el
+++ b/lisp/emacs-lisp/debug.el
@@ -632,24 +632,31 @@ which must be written in Lisp, not predefined.
632Use \\[cancel-debug-on-entry] to cancel the effect of this command. 632Use \\[cancel-debug-on-entry] to cancel the effect of this command.
633Redefining FUNCTION also cancels it." 633Redefining FUNCTION also cancels it."
634 (interactive "aDebug on entry (to function): ") 634 (interactive "aDebug on entry (to function): ")
635 ;; Handle a function that has been aliased to some other function. 635 (when (and (subrp (symbol-function function))
636 (if (and (subrp (symbol-function function)) 636 (eq (cdr (subr-arity (symbol-function function))) 'unevalled))
637 (eq (cdr (subr-arity (symbol-function function))) 'unevalled)) 637 (error "Function %s is a special form" function))
638 (error "Function %s is a special form" function)) 638 (if (or (symbolp (symbol-function function))
639 (if (or (symbolp (symbol-function function))
640 (subrp (symbol-function function))) 639 (subrp (symbol-function function)))
641 ;; 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.
642 (fset function `(lambda (&rest debug-on-entry-args) 642 (fset function `(lambda (&rest debug-on-entry-args)
643 ,(interactive-form (symbol-function function)) 643 ,(interactive-form (symbol-function function))
644 (apply ',(symbol-function function) 644 (apply ',(symbol-function function)
645 debug-on-entry-args)))) 645 debug-on-entry-args)))
646 (or (consp (symbol-function function)) 646 (when (eq (car-safe (symbol-function function)) 'autoload)
647 (debug-convert-byte-code function)) 647 ;; The function is autoloaded. Load its real definition.
648 (or (consp (symbol-function function)) 648 (load (cadr (symbol-function function)) nil noninteractive nil t))
649 (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))
650 (fset function (debug-on-entry-1 function t)) 657 (fset function (debug-on-entry-1 function t))
651 (or (memq function debug-function-list) 658 (unless (memq function debug-function-list)
652 (push function debug-function-list)) 659 (push function debug-function-list))
653 function) 660 function)
654 661
655;;;###autoload 662;;;###autoload
@@ -664,45 +671,52 @@ If argument is nil or an empty string, cancel for all functions."
664 (if name (intern name))))) 671 (if name (intern name)))))
665 (if (and function (not (string= function ""))) 672 (if (and function (not (string= function "")))
666 (progn 673 (progn
667 (let ((f (debug-on-entry-1 function nil))) 674 (let ((defn (debug-on-entry-1 function nil)))
668 (condition-case nil 675 (condition-case nil
669 (if (and (equal (nth 1 f) '(&rest debug-on-entry-args)) 676 (when (and (equal (nth 1 defn) '(&rest debug-on-entry-args))
670 (eq (car (nth 3 f)) 'apply)) 677 (eq (car (nth 3 defn)) 'apply))
671 ;; `f' is a wrapper introduced in debug-on-entry. 678 ;; `defn' is a wrapper introduced in debug-on-entry.
672 ;; 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.
673 (setq f (nth 1 (nth 1 (nth 3 f))))) 680 (setq defn (nth 1 (nth 1 (nth 3 defn)))))
674 (error nil)) 681 (error nil))
675 (fset function f)) 682 (fset function defn))
676 (setq debug-function-list (delq function debug-function-list)) 683 (setq debug-function-list (delq function debug-function-list))
677 function) 684 function)
678 (message "Cancelling debug-on-entry for all functions") 685 (message "Cancelling debug-on-entry for all functions")
679 (mapcar 'cancel-debug-on-entry debug-function-list))) 686 (mapcar 'cancel-debug-on-entry debug-function-list)))
680 687
681(defun debug-convert-byte-code (function) 688(defun debug-convert-byte-code (function)
682 (let ((defn (symbol-function function))) 689 (let* ((defn (symbol-function function))
683 (if (not (consp defn)) 690 (macro (eq (car-safe defn) 'macro)))
684 ;; Assume a compiled code object. 691 (when macro (setq defn (cdr defn)))
685 (let* ((contents (append defn nil)) 692 (unless (consp defn)
686 (body 693 ;; Assume a compiled code object.
687 (list (list 'byte-code (nth 1 contents) 694 (let* ((contents (append defn nil))
688 (nth 2 contents) (nth 3 contents))))) 695 (body
689 (if (nthcdr 5 contents) 696 (list (list 'byte-code (nth 1 contents)
690 (setq body (cons (list 'interactive (nth 5 contents)) body))) 697 (nth 2 contents) (nth 3 contents)))))
691 (if (nth 4 contents) 698 (if (nthcdr 5 contents)
692 ;; Use `documentation' here, to get the actual string, 699 (setq body (cons (list 'interactive (nth 5 contents)) body)))
693 ;; in case the compiled function has a reference 700 (if (nth 4 contents)
694 ;; to the .elc file. 701 ;; Use `documentation' here, to get the actual string,
695 (setq body (cons (documentation function) body))) 702 ;; in case the compiled function has a reference
696 (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))))
697 708
698(defun debug-on-entry-1 (function flag) 709(defun debug-on-entry-1 (function flag)
699 (let* ((defn (symbol-function function)) 710 (let* ((defn (symbol-function function))
700 (tail defn)) 711 (tail defn))
701 (if (subrp tail) 712 (when (eq (car-safe tail) 'macro)
702 (error "%s is a built-in function" function) 713 (setq tail (cdr tail)))
703 (if (eq (car tail) 'macro) (setq tail (cdr tail))) 714 (if (not (eq (car-safe tail) 'lambda))
704 (if (eq (car tail) 'lambda) (setq tail (cdr tail)) 715 ;; Only signal an error when we try to set debug-on-entry.
705 (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))
706 ;; Skip the docstring. 720 ;; Skip the docstring.
707 (when (and (stringp (cadr tail)) (cddr tail)) 721 (when (and (stringp (cadr tail)) (cddr tail))
708 (setq tail (cdr tail))) 722 (setq tail (cdr tail)))
@@ -713,8 +727,8 @@ If argument is nil or an empty string, cancel for all functions."
713 ;; Add/remove debug statement as needed. 727 ;; Add/remove debug statement as needed.
714 (if flag 728 (if flag
715 (setcdr tail (cons '(implement-debug-on-entry) (cdr tail))) 729 (setcdr tail (cons '(implement-debug-on-entry) (cdr tail)))
716 (setcdr tail (cddr tail)))) 730 (setcdr tail (cddr tail)))))
717 defn))) 731 defn))
718 732
719(defun debugger-list-functions () 733(defun debugger-list-functions ()
720 "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/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index b6b91710ed4..a96b1741139 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -1,6 +1,7 @@
1;;; easy-mmode.el --- easy definition for major and minor modes 1;;; easy-mmode.el --- easy definition for major and minor modes
2 2
3;; Copyright (C) 1997,2000,01,02,03,2004 Free Software Foundation, Inc. 3;; Copyright (C) 1997, 2000, 2001, 2002, 2003, 2004, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Author: Georges Brun-Cottan <Georges.Brun-Cottan@inria.fr> 6;; Author: Georges Brun-Cottan <Georges.Brun-Cottan@inria.fr>
6;; Maintainer: Stefan Monnier <monnier@gnu.org> 7;; Maintainer: Stefan Monnier <monnier@gnu.org>
@@ -152,8 +153,8 @@ For example, you could write
152 (unless group 153 (unless group
153 ;; We might as well provide a best-guess default group. 154 ;; We might as well provide a best-guess default group.
154 (setq group 155 (setq group
155 `(:group ',(or (custom-current-group) 156 `(:group (or (custom-current-group)
156 (intern (replace-regexp-in-string 157 ',(intern (replace-regexp-in-string
157 "-mode\\'" "" mode-name)))))) 158 "-mode\\'" "" mode-name))))))
158 159
159 `(progn 160 `(progn
@@ -253,8 +254,9 @@ With zero or negative ARG turn mode off.
253;;; 254;;;
254 255
255;;;###autoload 256;;;###autoload
256(defmacro easy-mmode-define-global-mode (global-mode mode turn-on 257(defalias 'easy-mmode-define-global-mode 'define-global-minor-mode)
257 &rest keys) 258;;;###autoload
259(defmacro define-global-minor-mode (global-mode mode turn-on &rest keys)
258 "Make GLOBAL-MODE out of the buffer-local minor MODE. 260 "Make GLOBAL-MODE out of the buffer-local minor MODE.
259TURN-ON is a function that will be called with no args in every buffer 261TURN-ON is a function that will be called with no args in every buffer
260 and that should try to turn MODE on if applicable for that buffer. 262 and that should try to turn MODE on if applicable for that buffer.
@@ -278,8 +280,8 @@ KEYS is a list of CL-style keyword arguments:
278 (unless group 280 (unless group
279 ;; We might as well provide a best-guess default group. 281 ;; We might as well provide a best-guess default group.
280 (setq group 282 (setq group
281 `(:group ',(or (custom-current-group) 283 `(:group (or (custom-current-group)
282 (intern (replace-regexp-in-string 284 ',(intern (replace-regexp-in-string
283 "-mode\\'" "" (symbol-name mode))))))) 285 "-mode\\'" "" (symbol-name mode)))))))
284 286
285 `(progn 287 `(progn
diff --git a/lisp/emacs-lisp/eldoc.el b/lisp/emacs-lisp/eldoc.el
index bc868759d92..f31dafb7b11 100644
--- a/lisp/emacs-lisp/eldoc.el
+++ b/lisp/emacs-lisp/eldoc.el
@@ -1,6 +1,7 @@
1;;; eldoc.el --- show function arglist or variable docstring in echo area 1;;; eldoc.el --- show function arglist or variable docstring in echo area
2 2
3;; Copyright (C) 1996, 97, 98, 99, 2000, 2003 Free Software Foundation, Inc. 3;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2003, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Author: Noah Friedman <friedman@splode.com> 6;; Author: Noah Friedman <friedman@splode.com>
6;; Maintainer: friedman@splode.com 7;; Maintainer: friedman@splode.com
@@ -150,7 +151,7 @@ If point is over a documented variable, print that variable's docstring
150instead. 151instead.
151 152
152With prefix ARG, turn ElDoc mode on if and only if ARG is positive." 153With prefix ARG, turn ElDoc mode on if and only if ARG is positive."
153 nil eldoc-minor-mode-string nil 154 :group 'eldoc :lighter eldoc-minor-mode-string
154 (setq eldoc-last-message nil) 155 (setq eldoc-last-message nil)
155 (if eldoc-mode 156 (if eldoc-mode
156 (progn 157 (progn
diff --git a/lisp/emulation/cua-base.el b/lisp/emulation/cua-base.el
index d72dc91ad2b..8852999db2d 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
@@ -1307,6 +1307,7 @@ highlight the region using `transient-mark-mode'), and typed text replaces
1307the active selection. C-z, C-x, C-c, and C-v will undo, cut, copy, and 1307the active selection. C-z, C-x, C-c, and C-v will undo, cut, copy, and
1308paste (in addition to the normal emacs bindings)." 1308paste (in addition to the normal emacs bindings)."
1309 :global t 1309 :global t
1310 :group 'cua
1310 :set-after '(cua-enable-modeline-indications cua-use-hyper-key) 1311 :set-after '(cua-enable-modeline-indications cua-use-hyper-key)
1311 :require 'cua-base 1312 :require 'cua-base
1312 :link '(emacs-commentary-link "cua-base.el") 1313 :link '(emacs-commentary-link "cua-base.el")
diff --git a/lisp/files.el b/lisp/files.el
index dbc43e4a5a9..4551e6ddb66 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -291,7 +291,7 @@ from `mode-require-final-newline'."
291 :group 'editing-basics) 291 :group 'editing-basics)
292 292
293(defcustom mode-require-final-newline t 293(defcustom mode-require-final-newline t
294 "*Whether to add a newline at the end of the file, in certain major modes. 294 "*Whether to add a newline at end of file, in certain major modes.
295Those modes set `require-final-newline' to this value when you enable them. 295Those modes set `require-final-newline' to this value when you enable them.
296They do so because they are used for files that are supposed 296They do so because they are used for files that are supposed
297to end in newlines, and the question is how to arrange that. 297to end in newlines, and the question is how to arrange that.
@@ -299,10 +299,16 @@ to end in newlines, and the question is how to arrange that.
299A value of t means do this only when the file is about to be saved. 299A value of t means do this only when the file is about to be saved.
300A value of `visit' means do this right after the file is visited. 300A value of `visit' means do this right after the file is visited.
301A value of `visit-save' means do it at both of those times. 301A value of `visit-save' means do it at both of those times.
302Any other non-nil value means ask user whether to add a newline, when saving." 302Any other non-nil value means ask user whether to add a newline, when saving.
303nil means don't add newlines.
304
305You will have to be careful if you set this to nil: you will have
306to remember to manually add a final newline whenever you finish a
307file that really needs one."
303 :type '(choice (const :tag "When visiting" visit) 308 :type '(choice (const :tag "When visiting" visit)
304 (const :tag "When saving" t) 309 (const :tag "When saving" t)
305 (const :tag "When visiting or saving" visit-save) 310 (const :tag "When visiting or saving" visit-save)
311 (const :tag "Never" nil)
306 (other :tag "Ask" ask)) 312 (other :tag "Ask" ask))
307 :group 'editing-basics 313 :group 'editing-basics
308 :version "22.1") 314 :version "22.1")
@@ -928,20 +934,31 @@ documentation for additional customization information."
928(defvar find-file-default nil 934(defvar find-file-default nil
929 "Used within `find-file-read-args'.") 935 "Used within `find-file-read-args'.")
930 936
937(defmacro minibuffer-with-setup-hook (fun &rest body)
938 "Add FUN to `minibuffer-setup-hook' while executing BODY.
939BODY should use the minibuffer at most once.
940Recursive uses of the minibuffer will not be affected."
941 (declare (indent 1) (debug t))
942 (let ((hook (make-symbol "setup-hook")))
943 `(let ((,hook
944 (lambda ()
945 ;; Clear out this hook so it does not interfere
946 ;; with any recursive minibuffer usage.
947 (remove-hook 'minibuffer-setup-hook ,hook)
948 (,fun))))
949 (unwind-protect
950 (progn
951 (add-hook 'minibuffer-setup-hook ,hook)
952 ,@body)
953 (remove-hook 'minibuffer-setup-hook ,hook)))))
954
931(defun find-file-read-args (prompt mustmatch) 955(defun find-file-read-args (prompt mustmatch)
932 (list (let ((find-file-default 956 (list (let ((find-file-default
933 (and buffer-file-name 957 (and buffer-file-name
934 (abbreviate-file-name buffer-file-name))) 958 (abbreviate-file-name buffer-file-name))))
935 (munge-default-fun 959 (minibuffer-with-setup-hook
936 (lambda () 960 (lambda () (setq minibuffer-default find-file-default))
937 (setq minibuffer-default find-file-default) 961 (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)) 962 t))
946 963
947(defun find-file (filename &optional wildcards) 964(defun find-file (filename &optional wildcards)
diff --git a/lisp/filesets.el b/lisp/filesets.el
index faba379db03..5a4dd7bda9a 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
@@ -250,8 +250,15 @@ key is supported."
250; (customize-set-variable var val)) 250; (customize-set-variable var val))
251; (filesets-build-menu)) 251; (filesets-build-menu))
252 252
253;; It seems this is a workaround for the XEmacs issue described in the
254;; doc-string of filesets-menu-ensure-use-cached. Under Emacs this is
255;; essentially just `set-default'.
253(defun filesets-set-default (sym val &optional init-flag) 256(defun filesets-set-default (sym val &optional init-flag)
254 "Set-default wrapper function used in conjunction with `defcustom'." 257 "Set-default wrapper function used in conjunction with `defcustom'.
258If SYM is in the list `filesets-ignore-next-set-default', delete
259it from that list, and return nil. Otherwise, set the value of
260SYM to VAL and return t. If INIT-FLAG is non-nil, set with
261`custom-initialize-set', otherwise with `set-default'."
255 (let ((ignore-flag (member sym filesets-ignore-next-set-default))) 262 (let ((ignore-flag (member sym filesets-ignore-next-set-default)))
256 (if ignore-flag 263 (if ignore-flag
257 (setq filesets-ignore-next-set-default 264 (setq filesets-ignore-next-set-default
@@ -304,31 +311,26 @@ key is supported."
304 :type 'sexp 311 :type 'sexp
305 :group 'filesets) 312 :group 'filesets)
306 313
307(if filesets-running-xemacs 314(defcustom filesets-menu-path nil
308 (progn 315 "*The menu under which the filesets menu should be inserted.
309 (defcustom filesets-menu-path nil 316See `add-submenu' for documentation."
310 "*The menu under which the filesets menu should be inserted. 317 :set (function filesets-set-default)
311XEmacs specific; see `add-submenu' for documentation." 318 :type 'sexp
312 :set (function filesets-set-default) 319 :group 'filesets)
313 :type 'sexp 320
314 :group 'filesets) 321(defcustom filesets-menu-before "File"
315 322 "*The name of a menu before which this menu should be added.
316 (defcustom filesets-menu-before "File" 323See `add-submenu' for documentation."
317 "*The name of a menu before which this menu should be added. 324 :set (function filesets-set-default)
318XEmacs specific; see `add-submenu' for documentation." 325 :type 'sexp
319 :set (function filesets-set-default) 326 :group 'filesets)
320 :type 'sexp 327
321 :group 'filesets) 328(defcustom filesets-menu-in-menu nil
322 329 "*Use that instead of `current-menubar' as the menu to change.
323 (defcustom filesets-menu-in-menu nil 330See `add-submenu' for documentation."
324 "*Use that instead of `current-menubar' as the menu to change. 331 :set (function filesets-set-default)
325XEmacs specific; see `add-submenu' for documentation." 332 :type 'sexp
326 :set (function filesets-set-default) 333 :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 334
333(defcustom filesets-menu-shortcuts-flag t 335(defcustom filesets-menu-shortcuts-flag t
334 "*Non-nil means to prepend menus with hopefully unique shortcuts." 336 "*Non-nil means to prepend menus with hopefully unique shortcuts."
@@ -351,7 +353,7 @@ XEmacs specific; see `add-submenu' for documentation."
351(defcustom filesets-menu-cache-file 353(defcustom filesets-menu-cache-file
352 (if filesets-running-xemacs 354 (if filesets-running-xemacs
353 "~/.xemacs/filesets-cache.el" 355 "~/.xemacs/filesets-cache.el"
354 "~/.filesets-cache.el") 356 "~/.emacs.d/filesets-cache.el")
355 "*File to be used for saving the filesets menu between sessions. 357 "*File to be used for saving the filesets menu between sessions.
356Set this to \"\", to disable caching of menus. 358Set this to \"\", to disable caching of menus.
357Don't forget to check out `filesets-menu-ensure-use-cached'." 359Don't forget to check out `filesets-menu-ensure-use-cached'."
@@ -1070,9 +1072,7 @@ defined in `filesets-ingroup-patterns'."
1070;;; Emacs compatibility 1072;;; Emacs compatibility
1071(eval-and-compile 1073(eval-and-compile
1072 (if filesets-running-xemacs 1074 (if filesets-running-xemacs
1073 (progn 1075 (fset 'filesets-error 'error)
1074 (fset 'filesets-error 'error)
1075 (fset 'filesets-add-submenu 'add-submenu))
1076 1076
1077 (require 'easymenu) 1077 (require 'easymenu)
1078 1078
@@ -1080,12 +1080,6 @@ defined in `filesets-ingroup-patterns'."
1080 "`error' wrapper." 1080 "`error' wrapper."
1081 (error (mapconcat 'identity args " "))) 1081 (error (mapconcat 'identity args " ")))
1082 1082
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 )) 1083 ))
1090 1084
1091(defun filesets-filter-dir-names (lst &optional negative) 1085(defun filesets-filter-dir-names (lst &optional negative)
@@ -2339,7 +2333,7 @@ bottom up, set `filesets-submenus' to nil, first.)"
2339 (filesets-menu-cache-file-save-maybe))) 2333 (filesets-menu-cache-file-save-maybe)))
2340 (let ((cb (current-buffer))) 2334 (let ((cb (current-buffer)))
2341 (when (not (member cb filesets-updated-buffers)) 2335 (when (not (member cb filesets-updated-buffers))
2342 (filesets-add-submenu 2336 (add-submenu
2343 filesets-menu-path 2337 filesets-menu-path
2344 `(,filesets-menu-name 2338 `(,filesets-menu-name
2345 ("# Filesets" 2339 ("# Filesets"
diff --git a/lisp/font-core.el b/lisp/font-core.el
index ea1880baac7..5bf30d4d6c5 100644
--- a/lisp/font-core.el
+++ b/lisp/font-core.el
@@ -148,7 +148,7 @@ buffer local value for `font-lock-defaults', via its mode hook.
148The above is the default behavior of `font-lock-mode'; you may specify 148The above is the default behavior of `font-lock-mode'; you may specify
149your own function which is called when `font-lock-mode' is toggled via 149your own function which is called when `font-lock-mode' is toggled via
150`font-lock-function'. " 150`font-lock-function'. "
151 nil nil nil 151 :group 'font-lock
152 ;; Don't turn on Font Lock mode if we don't have a display (we're running a 152 ;; Don't turn on Font Lock mode if we don't have a display (we're running a
153 ;; batch job) or if the buffer is invisible (the name starts with a space). 153 ;; batch job) or if the buffer is invisible (the name starts with a space).
154 (when (or noninteractive (eq (aref (buffer-name) 0) ?\ )) 154 (when (or noninteractive (eq (aref (buffer-name) 0) ?\ ))
diff --git a/lisp/font-lock.el b/lisp/font-lock.el
index 2cdda321092..38d3b94bccf 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 d39edbb7ef6..019456aae6b 100644
--- a/lisp/generic-x.el
+++ b/lisp/generic-x.el
@@ -170,7 +170,8 @@ generic-x to enable the specified modes."
170 '((nil "^\\([-A-Za-z0-9_]+\\)" 1) 170 '((nil "^\\([-A-Za-z0-9_]+\\)" 1)
171 ("*Directories*" "^\\s-*<Directory\\s-*\\([^>]+\\)>" 1) 171 ("*Directories*" "^\\s-*<Directory\\s-*\\([^>]+\\)>" 1)
172 ("*Locations*" "^\\s-*<Location\\s-*\\([^>]+\\)>" 1)))))) 172 ("*Locations*" "^\\s-*<Location\\s-*\\([^>]+\\)>" 1))))))
173 "Generic mode for Apache or HTTPD configuration files.")) 173 "Generic mode for Apache or HTTPD configuration files."
174 :group 'generic-x))
174 175
175(when (memq 'apache-log-generic-mode generic-extras-enable-list) 176(when (memq 'apache-log-generic-mode generic-extras-enable-list)
176 177
@@ -183,7 +184,8 @@ generic-x to enable the specified modes."
183 (2 font-lock-variable-name-face))) 184 (2 font-lock-variable-name-face)))
184 '("access_log\\'") 185 '("access_log\\'")
185 nil 186 nil
186 "Mode for Apache log files")) 187 "Mode for Apache log files"
188 :group 'generic-x))
187 189
188;;; Samba 190;;; Samba
189(when (memq 'samba-generic-mode generic-extras-enable-list) 191(when (memq 'samba-generic-mode generic-extras-enable-list)
@@ -197,7 +199,8 @@ generic-x to enable the specified modes."
197 (2 font-lock-type-face))) 199 (2 font-lock-type-face)))
198 '("smb\\.conf\\'") 200 '("smb\\.conf\\'")
199 '(generic-bracket-support) 201 '(generic-bracket-support)
200 "Generic mode for Samba configuration files.")) 202 "Generic mode for Samba configuration files."
203 :group 'generic-x))
201 204
202;;; Fvwm 205;;; Fvwm
203;; This is pretty basic. Also, modes for other window managers could 206;; This is pretty basic. Also, modes for other window managers could
@@ -222,7 +225,8 @@ generic-x to enable the specified modes."
222 nil 225 nil
223 '("\\.fvwmrc\\'" "\\.fvwm2rc\\'") 226 '("\\.fvwmrc\\'" "\\.fvwm2rc\\'")
224 nil 227 nil
225 "Generic mode for FVWM configuration files.")) 228 "Generic mode for FVWM configuration files."
229 :group 'generic-x))
226 230
227;;; X Resource 231;;; X Resource
228;; I'm pretty sure I've seen an actual mode to do this, but I don't 232;; I'm pretty sure I've seen an actual mode to do this, but I don't
@@ -235,7 +239,8 @@ generic-x to enable the specified modes."
235 '(("^\\([^:\n]+:\\)" 1 font-lock-variable-name-face)) 239 '(("^\\([^:\n]+:\\)" 1 font-lock-variable-name-face))
236 '("\\.Xdefaults\\'" "\\.Xresources\\'" "\\.Xenvironment\\'" "\\.ad\\'") 240 '("\\.Xdefaults\\'" "\\.Xresources\\'" "\\.Xenvironment\\'" "\\.ad\\'")
237 nil 241 nil
238 "Generic mode for X Resource configuration files.")) 242 "Generic mode for X Resource configuration files."
243 :group 'generic-x))
239 244
240;;; Hosts 245;;; Hosts
241(when (memq 'hosts-generic-mode generic-extras-enable-list) 246(when (memq 'hosts-generic-mode generic-extras-enable-list)
@@ -246,7 +251,8 @@ generic-x to enable the specified modes."
246 '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 font-lock-constant-face)) 251 '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 font-lock-constant-face))
247 '("[hH][oO][sS][tT][sS]\\'") 252 '("[hH][oO][sS][tT][sS]\\'")
248 nil 253 nil
249 "Generic mode for HOSTS files.")) 254 "Generic mode for HOSTS files."
255 :group 'generic-x))
250 256
251;;; Windows INF files 257;;; Windows INF files
252(when (memq 'inf-generic-mode generic-extras-enable-list) 258(when (memq 'inf-generic-mode generic-extras-enable-list)
@@ -257,7 +263,8 @@ generic-x to enable the specified modes."
257 '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face)) 263 '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face))
258 '("\\.[iI][nN][fF]\\'") 264 '("\\.[iI][nN][fF]\\'")
259 '(generic-bracket-support) 265 '(generic-bracket-support)
260 "Generic mode for MS-Windows INF files.")) 266 "Generic mode for MS-Windows INF files."
267 :group 'generic-x))
261 268
262;;; Windows INI files 269;;; Windows INI files
263;; Should define escape character as well! 270;; Should define escape character as well!
@@ -277,7 +284,8 @@ generic-x to enable the specified modes."
277 (setq imenu-generic-expression 284 (setq imenu-generic-expression
278 '((nil "^\\[\\(.*\\)\\]" 1) 285 '((nil "^\\[\\(.*\\)\\]" 1)
279 ("*Variables*" "^\\s-*\\([^=]+\\)\\s-*=" 1)))))) 286 ("*Variables*" "^\\s-*\\([^=]+\\)\\s-*=" 1))))))
280 "Generic mode for MS-Windows INI files.")) 287 "Generic mode for MS-Windows INI files."
288 :group 'generic-x))
281 289
282;;; Windows REG files 290;;; Windows REG files
283;;; Unfortunately, Windows 95 and Windows NT have different REG file syntax! 291;;; Unfortunately, Windows 95 and Windows NT have different REG file syntax!
@@ -294,7 +302,8 @@ generic-x to enable the specified modes."
294 (lambda () 302 (lambda ()
295 (setq imenu-generic-expression 303 (setq imenu-generic-expression
296 '((nil "^\\s-*\\(.*\\)\\s-*=" 1)))))) 304 '((nil "^\\s-*\\(.*\\)\\s-*=" 1))))))
297 "Generic mode for MS-Windows Registry files.")) 305 "Generic mode for MS-Windows Registry files."
306 :group 'generic-x))
298 307
299;;; DOS/Windows BAT files 308;;; DOS/Windows BAT files
300(when (memq 'bat-generic-mode generic-extras-enable-list) 309(when (memq 'bat-generic-mode generic-extras-enable-list)
@@ -368,7 +377,8 @@ generic-x to enable the specified modes."
368 "\\`[cC][oO][nN][fF][iI][gG]\\." 377 "\\`[cC][oO][nN][fF][iI][gG]\\."
369 "\\`[aA][uU][tT][oO][eE][xX][eE][cC]\\.") 378 "\\`[aA][uU][tT][oO][eE][xX][eE][cC]\\.")
370 '(generic-bat-mode-setup-function) 379 '(generic-bat-mode-setup-function)
371 "Generic mode for MS-Windows BAT files.") 380 "Generic mode for MS-Windows BAT files."
381 :group 'generic-x)
372 382
373(defvar bat-generic-mode-syntax-table nil 383(defvar bat-generic-mode-syntax-table nil
374 "Syntax table in use in bat-generic-mode buffers.") 384 "Syntax table in use in bat-generic-mode buffers.")
@@ -446,7 +456,8 @@ generic-x to enable the specified modes."
446 (lambda () 456 (lambda ()
447 (setq imenu-generic-expression 457 (setq imenu-generic-expression
448 '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1)))))) 458 '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1))))))
449 "Mode for Mailagent rules files.")) 459 "Mode for Mailagent rules files."
460 :group 'generic-x))
450 461
451;; Solaris/Sys V prototype files 462;; Solaris/Sys V prototype files
452(when (memq 'prototype-generic-mode generic-extras-enable-list) 463(when (memq 'prototype-generic-mode generic-extras-enable-list)
@@ -469,7 +480,8 @@ generic-x to enable the specified modes."
469 (2 font-lock-variable-name-face))) 480 (2 font-lock-variable-name-face)))
470 '("prototype\\'") 481 '("prototype\\'")
471 nil 482 nil
472 "Mode for Sys V prototype files.")) 483 "Mode for Sys V prototype files."
484 :group 'generic-x))
473 485
474;; Solaris/Sys V pkginfo files 486;; Solaris/Sys V pkginfo files
475(when (memq 'pkginfo-generic-mode generic-extras-enable-list) 487(when (memq 'pkginfo-generic-mode generic-extras-enable-list)
@@ -482,7 +494,8 @@ generic-x to enable the specified modes."
482 (2 font-lock-variable-name-face))) 494 (2 font-lock-variable-name-face)))
483 '("pkginfo\\'") 495 '("pkginfo\\'")
484 nil 496 nil
485 "Mode for Sys V pkginfo files.")) 497 "Mode for Sys V pkginfo files."
498 :group 'generic-x))
486 499
487;; Javascript mode 500;; Javascript mode
488;; Includes extra keywords from Armando Singer [asinger@MAIL.COLGATE.EDU] 501;; Includes extra keywords from Armando Singer [asinger@MAIL.COLGATE.EDU]
@@ -559,7 +572,8 @@ generic-x to enable the specified modes."
559 (setq imenu-generic-expression 572 (setq imenu-generic-expression
560 '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1) 573 '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1)
561 ("*Variables*" "^var\\s-+\\([A-Za-z0-9_]+\\)" 1)))))) 574 ("*Variables*" "^var\\s-+\\([A-Za-z0-9_]+\\)" 1))))))
562 "Mode for JavaScript files.") 575 "Mode for JavaScript files."
576 :group 'generic-x)
563 577
564;; VRML files 578;; VRML files
565(define-generic-mode vrml-generic-mode 579(define-generic-mode vrml-generic-mode
@@ -610,7 +624,8 @@ generic-x to enable the specified modes."
610 ("*Definitions*" 624 ("*Definitions*"
611 "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{" 625 "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{"
612 1)))))) 626 1))))))
613 "Generic Mode for VRML files.") 627 "Generic Mode for VRML files."
628 :group 'generic-x)
614 629
615;; Java Manifests 630;; Java Manifests
616(define-generic-mode java-manifest-generic-mode 631(define-generic-mode java-manifest-generic-mode
@@ -629,7 +644,8 @@ generic-x to enable the specified modes."
629 (2 font-lock-constant-face))) 644 (2 font-lock-constant-face)))
630 '("[mM][aA][nN][iI][fF][eE][sS][tT]\\.[mM][fF]\\'") 645 '("[mM][aA][nN][iI][fF][eE][sS][tT]\\.[mM][fF]\\'")
631 nil 646 nil
632 "Mode for Java Manifest files") 647 "Mode for Java Manifest files"
648 :group 'generic-x)
633 649
634;; Java properties files 650;; Java properties files
635(define-generic-mode java-properties-generic-mode 651(define-generic-mode java-properties-generic-mode
@@ -659,7 +675,8 @@ generic-x to enable the specified modes."
659 (lambda () 675 (lambda ()
660 (setq imenu-generic-expression 676 (setq imenu-generic-expression
661 '((nil "^\\([^#! \t\n\r=:]+\\)" 1)))))) 677 '((nil "^\\([^#! \t\n\r=:]+\\)" 1))))))
662 "Mode for Java properties files.") 678 "Mode for Java properties files."
679 :group 'generic-x)
663 680
664;; C shell alias definitions 681;; C shell alias definitions
665(when (memq 'alias-generic-mode generic-extras-enable-list) 682(when (memq 'alias-generic-mode generic-extras-enable-list)
@@ -677,7 +694,8 @@ generic-x to enable the specified modes."
677 (lambda () 694 (lambda ()
678 (setq imenu-generic-expression 695 (setq imenu-generic-expression
679 '((nil "^\\(alias\\|unalias\\)\\s-+\\([-a-zA-Z0-9_]+\\)" 2)))))) 696 '((nil "^\\(alias\\|unalias\\)\\s-+\\([-a-zA-Z0-9_]+\\)" 2))))))
680 "Mode for C Shell alias files.")) 697 "Mode for C Shell alias files."
698 :group 'generic-x))
681 699
682;;; Windows RC files 700;;; Windows RC files
683;; Contributed by ACorreir@pervasive-sw.com (Alfred Correira) 701;; Contributed by ACorreir@pervasive-sw.com (Alfred Correira)
@@ -769,7 +787,8 @@ generic-x to enable the specified modes."
769 (2 font-lock-variable-name-face nil t)))) 787 (2 font-lock-variable-name-face nil t))))
770 '("\\.[rR][cC]$") 788 '("\\.[rR][cC]$")
771 nil 789 nil
772 "Generic mode for MS-Windows Resource files.")) 790 "Generic mode for MS-Windows Resource files."
791 :group 'generic-x))
773 792
774;; InstallShield RUL files 793;; InstallShield RUL files
775;; Contributed by Alfred.Correira@Pervasive.Com 794;; Contributed by Alfred.Correira@Pervasive.Com
@@ -1389,7 +1408,8 @@ generic-x to enable the specified modes."
1389 font-lock-variable-name-face "[^_]" "[^_]"))) ; is this face the best choice? 1408 font-lock-variable-name-face "[^_]" "[^_]"))) ; is this face the best choice?
1390 '("\\.[rR][uU][lL]$") 1409 '("\\.[rR][uU][lL]$")
1391 '(generic-rul-mode-setup-function) 1410 '(generic-rul-mode-setup-function)
1392 "Generic mode for InstallShield RUL files.") 1411 "Generic mode for InstallShield RUL files."
1412 :group 'generic-x)
1393 1413
1394(define-skeleton rul-if 1414(define-skeleton rul-if
1395 "Insert an if statement." 1415 "Insert an if statement."
@@ -1437,7 +1457,8 @@ generic-x to enable the specified modes."
1437 (2 font-lock-variable-name-face))) 1457 (2 font-lock-variable-name-face)))
1438 '("\\.mailrc\\'") 1458 '("\\.mailrc\\'")
1439 nil 1459 nil
1440 "Mode for mailrc files.") 1460 "Mode for mailrc files."
1461 :group 'generic-x)
1441 1462
1442;; Inetd.conf 1463;; Inetd.conf
1443(when (memq 'inetd-conf-generic-mode generic-extras-enable-list) 1464(when (memq 'inetd-conf-generic-mode generic-extras-enable-list)
@@ -1457,7 +1478,8 @@ generic-x to enable the specified modes."
1457 (function 1478 (function
1458 (lambda () 1479 (lambda ()
1459 (setq imenu-generic-expression 1480 (setq imenu-generic-expression
1460 '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))))))) 1481 '((nil "^\\([-A-Za-z0-9_]+\\)" 1))))))
1482 :group 'generic-x))
1461 1483
1462;; Services 1484;; Services
1463(when (memq 'etc-services-generic-mode generic-extras-enable-list) 1485(when (memq 'etc-services-generic-mode generic-extras-enable-list)
@@ -1475,7 +1497,8 @@ generic-x to enable the specified modes."
1475 (function 1497 (function
1476 (lambda () 1498 (lambda ()
1477 (setq imenu-generic-expression 1499 (setq imenu-generic-expression
1478 '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))))))) 1500 '((nil "^\\([-A-Za-z0-9_]+\\)" 1))))))
1501 :group 'generic-x))
1479 1502
1480;; Password and Group files 1503;; Password and Group files
1481(when (memq 'etc-passwd-generic-mode generic-extras-enable-list) 1504(when (memq 'etc-passwd-generic-mode generic-extras-enable-list)
@@ -1517,7 +1540,8 @@ generic-x to enable the specified modes."
1517 (function 1540 (function
1518 (lambda () 1541 (lambda ()
1519 (setq imenu-generic-expression 1542 (setq imenu-generic-expression
1520 '((nil "^\\([-A-Za-z0-9_]+\\):" 1)))))))) 1543 '((nil "^\\([-A-Za-z0-9_]+\\):" 1))))))
1544 :group 'generic-x))
1521 1545
1522;; Fstab 1546;; Fstab
1523(when (memq 'etc-fstab-generic-mode generic-extras-enable-list) 1547(when (memq 'etc-fstab-generic-mode generic-extras-enable-list)
@@ -1567,7 +1591,8 @@ generic-x to enable the specified modes."
1567 (function 1591 (function
1568 (lambda () 1592 (lambda ()
1569 (setq imenu-generic-expression 1593 (setq imenu-generic-expression
1570 '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1)))))))) 1594 '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1))))))
1595 :group 'generic-x))
1571 1596
1572;; From Jacques Duthen <jacques.duthen@sncf.fr> 1597;; From Jacques Duthen <jacques.duthen@sncf.fr>
1573(eval-when-compile 1598(eval-when-compile
@@ -1609,7 +1634,8 @@ generic-x to enable the specified modes."
1609 nil ;; no auto-mode-alist 1634 nil ;; no auto-mode-alist
1610 ;; '(show-tabs-generic-mode-hook-fun) 1635 ;; '(show-tabs-generic-mode-hook-fun)
1611 nil 1636 nil
1612 "Generic mode to show tabs and trailing spaces") 1637 "Generic mode to show tabs and trailing spaces"
1638 :group 'generic-x)
1613 1639
1614;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1640;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1615;; DNS modes 1641;; DNS modes
@@ -1630,7 +1656,8 @@ generic-x to enable the specified modes."
1630 ;; List of additional automode-alist expressions 1656 ;; List of additional automode-alist expressions
1631 '("/etc/named.boot\\'") 1657 '("/etc/named.boot\\'")
1632 ;; List of set up functions to call 1658 ;; List of set up functions to call
1633 nil) 1659 nil
1660 :group 'generic-x)
1634 1661
1635(define-generic-mode named-database-generic-mode 1662(define-generic-mode named-database-generic-mode
1636 ;; List of comment characters 1663 ;; List of comment characters
@@ -1643,7 +1670,8 @@ generic-x to enable the specified modes."
1643 ;; List of additional automode-alist expressions 1670 ;; List of additional automode-alist expressions
1644 nil 1671 nil
1645 ;; List of set up functions to call 1672 ;; List of set up functions to call
1646 nil) 1673 nil
1674 :group 'generic-x)
1647 1675
1648(defvar named-database-time-string "%Y%m%d%H" 1676(defvar named-database-time-string "%Y%m%d%H"
1649 "Timestring for named serial numbers.") 1677 "Timestring for named serial numbers.")
@@ -1663,7 +1691,8 @@ generic-x to enable the specified modes."
1663 ;; List of additional automode-alist expressions 1691 ;; List of additional automode-alist expressions
1664 '("/etc/resolv[e]?.conf\\'") 1692 '("/etc/resolv[e]?.conf\\'")
1665 ;; List of set up functions to call 1693 ;; List of set up functions to call
1666 nil) 1694 nil
1695 :group 'generic-x)
1667 1696
1668;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1697;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1669;; Modes for spice and common electrical engineering circuit netlist formats 1698;; Modes for spice and common electrical engineering circuit netlist formats
@@ -1705,7 +1734,8 @@ generic-x to enable the specified modes."
1705 (function 1734 (function
1706 (lambda() 1735 (lambda()
1707 (setq font-lock-defaults '(generic-font-lock-keywords nil t))))) 1736 (setq font-lock-defaults '(generic-font-lock-keywords nil t)))))
1708 "Generic mode for SPICE circuit netlist files.") 1737 "Generic mode for SPICE circuit netlist files."
1738 :group 'generic-x)
1709 1739
1710(define-generic-mode ibis-generic-mode 1740(define-generic-mode ibis-generic-mode
1711 '(?|) 1741 '(?|)
@@ -1714,7 +1744,8 @@ generic-x to enable the specified modes."
1714 ("\\(\\(_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face)) 1744 ("\\(\\(_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face))
1715 '("\\.[iI][bB][sS]\\'") 1745 '("\\.[iI][bB][sS]\\'")
1716 '(generic-bracket-support) 1746 '(generic-bracket-support)
1717 "Generic mode for IBIS circuit netlist files.") 1747 "Generic mode for IBIS circuit netlist files."
1748 :group 'generic-x)
1718 1749
1719(define-generic-mode astap-generic-mode 1750(define-generic-mode astap-generic-mode
1720 nil 1751 nil
@@ -1749,7 +1780,8 @@ generic-x to enable the specified modes."
1749 (function 1780 (function
1750 (lambda() 1781 (lambda()
1751 (setq font-lock-defaults '(generic-font-lock-keywords nil t))))) 1782 (setq font-lock-defaults '(generic-font-lock-keywords nil t)))))
1752 "Generic mode for ASTAP circuit netlist files.") 1783 "Generic mode for ASTAP circuit netlist files."
1784 :group 'generic-x)
1753 1785
1754(define-generic-mode etc-modules-conf-generic-mode 1786(define-generic-mode etc-modules-conf-generic-mode
1755 ;; List of comment characters 1787 ;; List of comment characters
@@ -1791,7 +1823,8 @@ generic-x to enable the specified modes."
1791 ;; List of additional automode-alist expressions 1823 ;; List of additional automode-alist expressions
1792 '("/etc/modules.conf" "/etc/conf.modules") 1824 '("/etc/modules.conf" "/etc/conf.modules")
1793 ;; List of set up functions to call 1825 ;; List of set up functions to call
1794 nil) 1826 nil
1827 :group 'generic-x)
1795 1828
1796(provide 'generic-x) 1829(provide 'generic-x)
1797 1830
diff --git a/lisp/generic.el b/lisp/generic.el
index e20f73688c7..e170d05e0f3 100644
--- a/lisp/generic.el
+++ b/lisp/generic.el
@@ -185,7 +185,8 @@ the regexp in `generic-find-file-regexp'. If the value is nil,
185;;;###autoload 185;;;###autoload
186(defmacro define-generic-mode (mode comment-list keyword-list 186(defmacro define-generic-mode (mode comment-list keyword-list
187 font-lock-list auto-mode-list 187 font-lock-list auto-mode-list
188 function-list &optional docstring) 188 function-list &optional docstring
189 &rest custom-keyword-args)
189 "Create a new generic mode MODE. 190 "Create a new generic mode MODE.
190 191
191MODE is the name of the command for the generic mode; it need not 192MODE is the name of the command for the generic mode; it need not
@@ -216,59 +217,90 @@ as soon as `define-generic-mode' is called.
216FUNCTION-LIST is a list of functions to call to do some 217FUNCTION-LIST is a list of functions to call to do some
217additional setup. 218additional setup.
218 219
220The optional CUSTOM-KEYWORD-ARGS are pairs of keywords and
221values. They will be passed to the generated `defcustom' form of
222the mode hook variable MODE-hook. You can specify keyword
223arguments without specifying a docstring.
224
219See the file generic-x.el for some examples of `define-generic-mode'." 225See the file generic-x.el for some examples of `define-generic-mode'."
220 (let* ((name-unquoted (if (eq (car-safe mode) 'quote) ; Backward compatibility. 226 (declare (debug (sexp def-form def-form def-form form def-form
221 (eval mode) 227 &optional stringp))
222 mode)) 228 (indent 1))
223 (name-string (symbol-name name-unquoted)) 229
230 ;; Backward compatibility.
231 (when (eq (car-safe mode) 'quote)
232 (setq mode (eval mode)))
233
234 (when (and docstring (not (stringp docstring)))
235 ;; DOCSTRING is not a string so we assume that it's actually the
236 ;; first keyword of CUSTOM-KEYWORD-ARGS.
237 (push docstring custom-keyword-args)
238 (setq docstring nil))
239
240 (let* ((mode-name (symbol-name mode))
224 (pretty-name (capitalize (replace-regexp-in-string 241 (pretty-name (capitalize (replace-regexp-in-string
225 "-mode\\'" "" name-string)))) 242 "-mode\\'" "" mode-name)))
243 (mode-hook (intern (concat mode-name "-hook"))))
244
245 (unless (plist-get custom-keyword-args :group)
246 (setq custom-keyword-args
247 (plist-put custom-keyword-args
248 :group `(or (custom-current-group)
249 ',(intern (replace-regexp-in-string
250 "-mode\\'" "" mode-name))))))
226 251
227 `(progn 252 `(progn
228 ;; Add a new entry. 253 ;; Add a new entry.
229 (add-to-list 'generic-mode-list ,name-string) 254 (add-to-list 'generic-mode-list ,mode-name)
230 255
231 ;; Add it to auto-mode-alist 256 ;; Add it to auto-mode-alist
232 (dolist (re ,auto-mode-list) 257 (dolist (re ,auto-mode-list)
233 (add-to-list 'auto-mode-alist (cons re ',name-unquoted))) 258 (add-to-list 'auto-mode-alist (cons re ',mode)))
259
260 (defcustom ,mode-hook nil
261 ,(concat "Hook run when entering " pretty-name " mode.")
262 :type 'hook
263 ,@custom-keyword-args)
234 264
235 (defun ,name-unquoted () 265 (defun ,mode ()
236 ,(or docstring 266 ,(or docstring
237 (concat pretty-name " mode.\n" 267 (concat pretty-name " mode.\n"
238 "This a generic mode defined with `define-generic-mode'.")) 268 "This a generic mode defined with `define-generic-mode'."))
239 (interactive) 269 (interactive)
240 (generic-mode-internal ',name-unquoted ,comment-list ,keyword-list 270 (generic-mode-internal ',mode ,comment-list ,keyword-list
241 ,font-lock-list ,function-list))))) 271 ,font-lock-list ,function-list)))))
242 272
243;;;###autoload 273;;;###autoload
244(defun generic-mode-internal (mode comments keywords font-lock-list funs) 274(defun generic-mode-internal (mode comment-list keyword-list
275 font-lock-list function-list)
245 "Go into the generic mode MODE." 276 "Go into the generic mode MODE."
246 (let* ((modename (symbol-name mode)) 277 (let* ((mode-name (symbol-name mode))
247 (generic-mode-hooks (intern (concat modename "-hook")))
248 (pretty-name (capitalize (replace-regexp-in-string 278 (pretty-name (capitalize (replace-regexp-in-string
249 "-mode\\'" "" modename)))) 279 "-mode\\'" "" mode-name)))
280 (mode-hook (intern (concat mode-name "-hook"))))
250 281
251 (kill-all-local-variables) 282 (kill-all-local-variables)
252 283
253 (setq major-mode mode 284 (setq major-mode mode
254 mode-name pretty-name) 285 mode-name pretty-name)
255 286
256 (generic-mode-set-comments comments) 287 (generic-mode-set-comments comment-list)
257 288
258 ;; Font-lock functionality. 289 ;; Font-lock functionality.
259 ;; Font-lock-defaults is always set even if there are no keywords 290 ;; Font-lock-defaults is always set even if there are no keywords
260 ;; or font-lock expressions, so comments can be highlighted. 291 ;; or font-lock expressions, so comments can be highlighted.
261 (setq generic-font-lock-keywords 292 (setq generic-font-lock-keywords
262 (append 293 (append
263 (when keywords 294 (when keyword-list
264 (list (generic-make-keywords-list keywords font-lock-keyword-face))) 295 (list (generic-make-keywords-list keyword-list
296 font-lock-keyword-face)))
265 font-lock-list)) 297 font-lock-list))
266 (setq font-lock-defaults '(generic-font-lock-keywords nil)) 298 (setq font-lock-defaults '(generic-font-lock-keywords nil))
267 299
268 ;; Call a list of functions 300 ;; Call a list of functions
269 (mapcar 'funcall funs) 301 (mapcar 'funcall function-list)
270 302
271 (run-hooks generic-mode-hooks))) 303 (run-mode-hooks mode-hook)))
272 304
273;;;###autoload 305;;;###autoload
274(defun generic-mode (mode) 306(defun generic-mode (mode)
@@ -359,7 +391,7 @@ Some generic modes are defined in `generic-x.el'."
359 imenu-case-fold-search t)) 391 imenu-case-fold-search t))
360 392
361;; This generic mode is always defined 393;; This generic mode is always defined
362(define-generic-mode default-generic-mode (list ?#) nil nil nil nil) 394(define-generic-mode default-generic-mode (list ?#) nil nil nil nil :group 'generic)
363 395
364;; A more general solution would allow us to enter generic-mode for 396;; A more general solution would allow us to enter generic-mode for
365;; *any* comment character, but would require us to synthesize a new 397;; *any* comment character, but would require us to synthesize a new
@@ -392,7 +424,7 @@ This hook will be installed if the variable
392 424
393(defun generic-mode-ini-file-find-file-hook () 425(defun generic-mode-ini-file-find-file-hook ()
394 "Hook function to enter Default-Generic mode automatically for INI files. 426 "Hook function to enter Default-Generic mode automatically for INI files.
395Done if the first few lines of a file in Fundamental mode look like an 427Done if the first few lines of a file in Fundamental mode look like an
396INI file. This hook is NOT installed by default." 428INI file. This hook is NOT installed by default."
397 (and (eq major-mode 'fundamental-mode) 429 (and (eq major-mode 'fundamental-mode)
398 (save-excursion 430 (save-excursion
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 5d15a6f9646..b19598eb3ab 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,99 @@
12005-04-03 Katsumi Yamaoka <yamaoka@jpl.org>
2
3 * gnus-sum.el (gnus-summary-make-menu-bar): Fix an
4 "unrecognised menu descriptor" error.
5
62005-03-25 Katsumi Yamaoka <yamaoka@jpl.org>
7
8 * message.el (message-resend): Bind rfc2047-encode-encoded-words.
9
10 * mm-util.el (mm-replace-in-string): New function.
11 (mm-xemacs-find-mime-charset-1): Ignore errors while loading
12 latin-unity, which cannot be used with XEmacs 21.1.
13
14 * rfc2047.el (rfc2047-encode-function-alist): Rename from
15 rfc2047-encoding-function-alist in order to avoid conflicting with
16 the old version.
17 (rfc2047-encode-message-header): Remove useless goto-char.
18 (rfc2047-encodable-p): Don't move point.
19 (rfc2047-syntax-table): Treat `(' and `)' as is.
20 (rfc2047-encode-region): Concatenate words containing non-ASCII
21 characters in structured fields; don't encode space-delimited
22 ASCII words even in unstructured fields; don't break words at
23 char-category boundaries; encode encoded words in structured
24 fields; treat text within parentheses as special; show the
25 original text when error has occurred; move point to the end of
26 the region after encoding, suggested by IRIE Tetsuya
27 <irie@t.email.ne.jp>; treat backslash-quoted characters as
28 non-special; check carefully whether to encode special characters;
29 fix some kind of misconfigured headers; signal a real error if
30 debug-on-quit or debug-on-error is non-nil; don't infloop,
31 suggested by Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>; assume
32 the close parenthesis may be included in the encoded word; encode
33 bogus delimiters.
34 (rfc2047-encode-string): Use mm-with-multibyte-buffer.
35 (rfc2047-encode-max-chars): New variable.
36 (rfc2047-encode-1): New function.
37 (rfc2047-encode): Use it; encode text so that it occupies the
38 maximum width within 76-column; work correctly on Q encoding for
39 iso-2022-* charsets; fold the line before encoding; don't append a
40 space if the encoded word includes close parenthesis.
41 (rfc2047-fold-region): Use existing whitespace for LWSP; make it
42 sure not to break a line just after the header name.
43 (rfc2047-b-encode-region): Remove.
44 (rfc2047-b-encode-string): New function.
45 (rfc2047-q-encode-region): Remove.
46 (rfc2047-q-encode-string): New function.
47 (rfc2047-encode-parameter): New function.
48 (rfc2047-encoded-word-regexp): Don't use shy group.
49 (rfc2047-decode-region): Follow rfc2047-encoded-word-regexp change.
50 (rfc2047-parse-and-decode): Ditto.
51 (rfc2047-decode): Treat the ascii coding-system as raw-text by
52 default.
53
542005-03-25 Lars Magne Ingebrigtsen <larsi@gnus.org>
55
56 * rfc2047.el (rfc2047-encode-encoded-words): New variable.
57 (rfc2047-field-value): Strip props.
58 (rfc2047-encode-message-header): Disabled header folding -- not
59 all headers can be folded, and this should be done by the message
60 composition mode. Probably. I think.
61 (rfc2047-encodable-p): Say that =? needs encoding.
62 (rfc2047-encode-region): Encode =? strings.
63
642005-03-25 Jesper Harder <harder@ifa.au.dk>
65
66 * rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231
67 language tags; remove unnecessary '+'. Reported by Stefan Wiens
68 <s.wi@gmx.net>.
69 (rfc2047-decode-string): Don't cons a string unnecessarily.
70 (rfc2047-parse-and-decode, rfc2047-decode): Use a character for
71 the encoding to avoid consing a string.
72 (rfc2047-decode): Use mm-subst-char-in-string instead of
73 mm-replace-chars-in-string.
74
752005-03-25 TSUCHIYA Masatoshi <tsuchiya@namazu.org>
76
77 * rfc2047.el (rfc2047-encode): Use uppercase letters to specify
78 encodings of MIME-encoded words, in order to improve
79 interoperability with several broken MUAs.
80
812005-03-21 Reiner Steib <Reiner.Steib@gmx.de>
82
83 * gnus-srvr.el (gnus-browse-select-group): Add NUMBER argument and
84 pass it to `gnus-browse-read-group'.
85 (gnus-browse-read-group): Add NUMBER argument and pass it to
86 `gnus-group-read-ephemeral-group'.
87
88 * gnus-group.el (gnus-group-read-ephemeral-group): Add NUMBER
89 argument and pass it to `gnus-group-read-group'.
90
912005-03-19 Aidan Kehoe <kehoea@parhasard.net>
92
93 * mm-util.el (mm-xemacs-find-mime-charset): Only call
94 mm-xemacs-find-mime-charset-1 if we have the mule feature
95 available at runtime.
96
12005-03-25 Werner Lemberg <wl@gnu.org> 972005-03-25 Werner Lemberg <wl@gnu.org>
2 98
3 * nnmaildir.el: Replace `illegal' with `invalid'. 99 * nnmaildir.el: Replace `illegal' with `invalid'.
@@ -618,7 +714,7 @@
618 unless plugged. Disable the agent so that an open failure causes 714 unless plugged. Disable the agent so that an open failure causes
619 an error. 715 an error.
620 716
6212004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Reiner Steib <Reiner.Steib@gmx.de> 7172004-10-18 Reiner Steib <Reiner.Steib@gmx.de>
622 718
623 * gnus-agent.el (gnus-agent-fetched-hook): Add :version. 719 * gnus-agent.el (gnus-agent-fetched-hook): Add :version.
624 (gnus-agent-go-online): Change :version. 720 (gnus-agent-go-online): Change :version.
@@ -660,21 +756,21 @@
660 (gnus-convert-mark-converter-prompt) 756 (gnus-convert-mark-converter-prompt)
661 (gnus-convert-converter-needs-prompt): Fix use of property list. 757 (gnus-convert-converter-needs-prompt): Fix use of property list.
662 758
6632004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org> 7592004-10-18 Katsumi Yamaoka <yamaoka@jpl.org>
664 760
665 * gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote. 761 * gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote.
666 762
6672004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org> 7632004-10-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
668 764
669 * gnus-start.el (gnus-get-unread-articles-in-group): Don't do 765 * gnus-start.el (gnus-get-unread-articles-in-group): Don't do
670 stuff for non-living groups. 766 stuff for non-living groups.
671 767
6722004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org> 7682004-10-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
673 769
674 * gnus-agent.el (gnus-agent-synchronize-flags): Default to nil. 770 * gnus-agent.el (gnus-agent-synchronize-flags): Default to nil.
675 (gnus-agent-regenerate-group): Using nil messages aren't valid. 771 (gnus-agent-regenerate-group): Using nil messages aren't valid.
676 772
6772004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Lars Magne Ingebrigtsen <larsi@gnus.org> 7732004-10-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
678 774
679 * gnus-agent.el (gnus-agent-read-agentview): 775 * gnus-agent.el (gnus-agent-read-agentview):
680 Inline gnus-uncompress-range. 776 Inline gnus-uncompress-range.
@@ -691,7 +787,7 @@
691 message-send-mail-function. The change makes the agent real-time 787 message-send-mail-function. The change makes the agent real-time
692 responsive to user changes to message-send-mail-function. 788 responsive to user changes to message-send-mail-function.
693 789
6942004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Reiner Steib <Reiner.Steib@gmx.de> 7902004-10-18 Reiner Steib <Reiner.Steib@gmx.de>
695 791
696 * gnus-start.el (gnus-get-unread-articles): Fix last commit. 792 * gnus-start.el (gnus-get-unread-articles): Fix last commit.
697 793
@@ -732,12 +828,12 @@
732 828
733 * gnus-util.el (gnus-rename-file): New function. 829 * gnus-util.el (gnus-rename-file): New function.
734 830
7352004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org> 8312004-10-18 Katsumi Yamaoka <yamaoka@jpl.org>
736 832
737 * gnus-agent.el (gnus-agent-regenerate-group): Activate the group 833 * gnus-agent.el (gnus-agent-regenerate-group): Activate the group
738 when the group's active is not available. 834 when the group's active is not available.
739 835
7402004-10-18 Kevin Greiner <kevin.greiner@compsol.cc> for Katsumi Yamaoka <yamaoka@jpl.org> 8362004-10-18 Katsumi Yamaoka <yamaoka@jpl.org>
741 837
742 * gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to 838 * gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to
743 error. 839 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/gnus-sum.el b/lisp/gnus/gnus-sum.el
index ea8f7e063fe..8d6a5f951b5 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -2250,7 +2250,7 @@ gnus-summary-show-article-from-menu-as-charset-%s" cs))))
2250 ,@(if (featurep 'xemacs) '(t) 2250 ,@(if (featurep 'xemacs) '(t)
2251 '(:help "Generate and print a PostScript image"))]) 2251 '(:help "Generate and print a PostScript image"))])
2252 ("Copy, move,... (Backend)" 2252 ("Copy, move,... (Backend)"
2253 ,@(if (featurep 'xemacs) '(t) 2253 ,@(if (featurep 'xemacs) nil
2254 '(:help "Copying, moving, expiring articles...")) 2254 '(:help "Copying, moving, expiring articles..."))
2255 ["Respool article..." gnus-summary-respool-article t] 2255 ["Respool article..." gnus-summary-respool-article t]
2256 ["Move article..." gnus-summary-move-article 2256 ["Move article..." gnus-summary-move-article
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index de56fe2be96..9edbce2620e 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 5b4200d6d52..3be6444f18f 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)
@@ -606,7 +632,7 @@ But this is very much a corner case, so don't worry about it."
606 632
607 ;; Load the Latin Unity library, if available. 633 ;; Load the Latin Unity library, if available.
608 (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity")) 634 (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity"))
609 (require 'latin-unity)) 635 (ignore-errors (require 'latin-unity)))
610 636
611 ;; Now, can we use it? 637 ;; Now, can we use it?
612 (if (featurep 'latin-unity) 638 (if (featurep 'latin-unity)
@@ -651,7 +677,7 @@ But this is very much a corner case, so don't worry about it."
651 677
652(defmacro mm-xemacs-find-mime-charset (begin end) 678(defmacro mm-xemacs-find-mime-charset (begin end)
653 (when (featurep 'xemacs) 679 (when (featurep 'xemacs)
654 `(mm-xemacs-find-mime-charset-1 ,begin ,end))) 680 `(and (featurep 'mule) (mm-xemacs-find-mime-charset-1 ,begin ,end))))
655 681
656(defun mm-find-mime-charset-region (b e &optional hack-charsets) 682(defun mm-find-mime-charset-region (b e &optional hack-charsets)
657 "Return the MIME charsets needed to encode the region between B and E. 683 "Return the MIME charsets needed to encode the region between B and E.
diff --git a/lisp/gnus/rfc2047.el b/lisp/gnus/rfc2047.el
index 6086f422abd..538e22e0f88 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/hl-line.el b/lisp/hl-line.el
index a3e786dd801..e553636674b 100644
--- a/lisp/hl-line.el
+++ b/lisp/hl-line.el
@@ -1,6 +1,6 @@
1;;; hl-line.el --- highlight the current line 1;;; hl-line.el --- highlight the current line
2 2
3;; Copyright (C) 1998, 2000, 2001, 2003 Free Software Foundation, Inc. 3;; Copyright (C) 1998, 2000, 2001, 2003, 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
@@ -113,7 +113,7 @@ When `hl-line-sticky-flag' is nil, Hl-Line mode highlights the
113line about point in the selected window only. In this case, it 113line about point in the selected window only. In this case, it
114uses the function `hl-line-unhighlight' on `pre-command-hook' in 114uses the function `hl-line-unhighlight' on `pre-command-hook' in
115addition to `hl-line-highlight' on `post-command-hook'." 115addition to `hl-line-highlight' on `post-command-hook'."
116 nil nil nil 116 :group 'hl-line
117 (if hl-line-mode 117 (if hl-line-mode
118 (progn 118 (progn
119 ;; In case `kill-all-local-variables' is called. 119 ;; In case `kill-all-local-variables' is called.
diff --git a/lisp/ido.el b/lisp/ido.el
index 86a88d0d491..ddeecbb9b69 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -1935,19 +1935,21 @@ If INITIAL is non-nil, it specifies the initial input string."
1935 ;; Internal function for ido-find-file and friends 1935 ;; Internal function for ido-find-file and friends
1936 (unless item 1936 (unless item
1937 (setq item 'file)) 1937 (setq item 'file))
1938 (let* ((ido-current-directory (ido-expand-directory default)) 1938 (let ((ido-current-directory (ido-expand-directory default))
1939 (ido-directory-nonreadable (ido-nonreadable-directory-p ido-current-directory)) 1939 (ido-context-switch-command switch-cmd)
1940 (ido-directory-too-big (and (not ido-directory-nonreadable) 1940 ido-directory-nonreadable ido-directory-too-big
1941 (ido-directory-too-big-p ido-current-directory))) 1941 filename)
1942 (ido-context-switch-command switch-cmd) 1942
1943 filename) 1943 (if (or (not ido-mode) (ido-is-slow-ftp-host))
1944 1944 (setq filename t
1945 (cond 1945 ido-exit 'fallback)
1946 ((or (not ido-mode) (ido-is-slow-ftp-host)) 1946 (setq ido-directory-nonreadable
1947 (setq filename t 1947 (ido-nonreadable-directory-p ido-current-directory)
1948 ido-exit 'fallback)) 1948 ido-directory-too-big
1949 1949 (and (not ido-directory-nonreadable)
1950 ((and (eq item 'file) 1950 (ido-directory-too-big-p ido-current-directory))))
1951
1952 (when (and (eq item 'file)
1951 (or ido-use-url-at-point ido-use-filename-at-point)) 1953 (or ido-use-url-at-point ido-use-filename-at-point))
1952 (let (fn d) 1954 (let (fn d)
1953 (require 'ffap) 1955 (require 'ffap)
@@ -1966,7 +1968,7 @@ If INITIAL is non-nil, it specifies the initial input string."
1966 (setq d (file-name-directory fn)) 1968 (setq d (file-name-directory fn))
1967 (file-directory-p d)) 1969 (file-directory-p d))
1968 (setq ido-current-directory d) 1970 (setq ido-current-directory d)
1969 (setq initial (file-name-nondirectory fn))))))) 1971 (setq initial (file-name-nondirectory fn))))))
1970 1972
1971 (let (ido-saved-vc-hb 1973 (let (ido-saved-vc-hb
1972 (vc-handled-backends (and (boundp 'vc-handled-backends) vc-handled-backends)) 1974 (vc-handled-backends (and (boundp 'vc-handled-backends) vc-handled-backends))
diff --git a/lisp/iimage.el b/lisp/iimage.el
index 9b183ebb01d..32f6aef9abd 100644
--- a/lisp/iimage.el
+++ b/lisp/iimage.el
@@ -1,6 +1,6 @@
1;;; iimage.el --- Inline image minor mode. 1;;; iimage.el --- Inline image minor mode.
2 2
3;; Copyright (C) 2004 Free Software Foundation 3;; Copyright (C) 2004, 2005 Free Software Foundation
4 4
5;; Author: KOSEKI Yoshinori <kose@meadowy.org> 5;; Author: KOSEKI Yoshinori <kose@meadowy.org>
6;; Maintainer: KOSEKI Yoshinori <kose@meadowy.org> 6;; Maintainer: KOSEKI Yoshinori <kose@meadowy.org>
@@ -51,6 +51,11 @@
51(eval-when-compile 51(eval-when-compile
52 (require 'image-file)) 52 (require 'image-file))
53 53
54(defgroup iimage nil
55 "Support for inline images."
56 :version "22.1"
57 :group 'image)
58
54(defconst iimage-version "1.1") 59(defconst iimage-version "1.1")
55(defvar iimage-mode nil) 60(defvar iimage-mode nil)
56(defvar iimage-mode-map nil) 61(defvar iimage-mode-map nil)
@@ -137,7 +142,7 @@ With numeric ARG, display the images if and only if ARG is positive."
137;;;###autoload 142;;;###autoload
138(define-minor-mode iimage-mode 143(define-minor-mode iimage-mode
139 "Toggle inline image minor mode." 144 "Toggle inline image minor mode."
140 nil " iImg" iimage-mode-map 145 :group 'iimage :lighter " iImg" :keymap iimage-mode-map
141 (run-hooks 'iimage-mode-hook) 146 (run-hooks 'iimage-mode-hook)
142 (iimage-mode-buffer iimage-mode)) 147 (iimage-mode-buffer iimage-mode))
143 148
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/characters.el b/lisp/international/characters.el
index 727c9e6b9ff..77eb49807c0 100644
--- a/lisp/international/characters.el
+++ b/lisp/international/characters.el
@@ -884,8 +884,8 @@
884 (set-case-syntax-pair 884 (set-case-syntax-pair
885 (decode-char 'ucs (1- c)) (decode-char 'ucs c) tbl)) 885 (decode-char 'ucs (1- c)) (decode-char 'ucs c) tbl))
886 (setq c (1+ c))) 886 (setq c (1+ c)))
887 ;;(set-downcase-syntax ?$,1 P(B ?i tbl) 887 (set-downcase-syntax ?$,1 P(B ?i tbl)
888 ;;(set-upcase-syntax ?I ?$,1 Q(B tbl) 888 (set-upcase-syntax ?I ?$,1 Q(B tbl)
889 (set-case-syntax-pair ?$,1 R(B ?$,1 S(B tbl) 889 (set-case-syntax-pair ?$,1 R(B ?$,1 S(B tbl)
890 (set-case-syntax-pair ?$,1 T(B ?$,1 U(B tbl) 890 (set-case-syntax-pair ?$,1 T(B ?$,1 U(B tbl)
891 (set-case-syntax-pair ?$,1 V(B ?$,1 W(B tbl) 891 (set-case-syntax-pair ?$,1 V(B ?$,1 W(B tbl)
diff --git a/lisp/international/encoded-kb.el b/lisp/international/encoded-kb.el
index aa6d35c340f..fdb35b34533 100644
--- a/lisp/international/encoded-kb.el
+++ b/lisp/international/encoded-kb.el
@@ -269,7 +269,7 @@ automatically.
269In Encoded-kbd mode, a text sent from keyboard is accepted 269In Encoded-kbd mode, a text sent from keyboard is accepted
270as a multilingual text encoded in a coding system set by 270as a multilingual text encoded in a coding system set by
271\\[set-keyboard-coding-system]." 271\\[set-keyboard-coding-system]."
272 :global t 272 :global t :group 'keyboard :group 'mule
273 273
274 (if encoded-kbd-mode 274 (if encoded-kbd-mode
275 ;; We are turning on Encoded-kbd mode. 275 ;; We are turning on Encoded-kbd mode.
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index 86665d31ba8..5e9f3014dc2 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -384,6 +384,7 @@ See also `coding-category-list' and `coding-system-category'."
384 ;; CODING-SYSTEM is no-conversion or undecided. 384 ;; CODING-SYSTEM is no-conversion or undecided.
385 (error "Can't prefer the coding system `%s'" coding-system)) 385 (error "Can't prefer the coding system `%s'" coding-system))
386 (set coding-category (or base coding-system)) 386 (set coding-category (or base coding-system))
387 ;; Changing the binding of a coding category requires this call.
387 (update-coding-systems-internal) 388 (update-coding-systems-internal)
388 (or (eq coding-category (car coding-category-list)) 389 (or (eq coding-category (car coding-category-list))
389 ;; We must change the order. 390 ;; We must change the order.
@@ -1691,6 +1692,7 @@ The default status is as follows:
1691 coding-category-ccl 1692 coding-category-ccl
1692 coding-category-binary)) 1693 coding-category-binary))
1693 1694
1695 ;; Changing the binding of a coding category requires this call.
1694 (update-coding-systems-internal) 1696 (update-coding-systems-internal)
1695 1697
1696 (set-default-coding-systems nil) 1698 (set-default-coding-systems nil)
@@ -1904,6 +1906,7 @@ of `buffer-file-coding-system' set by this function."
1904 (while priority 1906 (while priority
1905 (set (car categories) (car priority)) 1907 (set (car categories) (car priority))
1906 (setq priority (cdr priority) categories (cdr categories))) 1908 (setq priority (cdr priority) categories (cdr categories)))
1909 ;; Changing the binding of a coding category requires this call.
1907 (update-coding-systems-internal))))) 1910 (update-coding-systems-internal)))))
1908 1911
1909(defsubst princ-list (&rest args) 1912(defsubst princ-list (&rest args)
diff --git a/lisp/international/mule-util.el b/lisp/international/mule-util.el
index 7c51409422b..8ac56b4bd65 100644
--- a/lisp/international/mule-util.el
+++ b/lisp/international/mule-util.el
@@ -327,6 +327,7 @@ coding systems ordered by priority."
327 (mapc (function (lambda (x) (set (car x) (cdr x)))) 327 (mapc (function (lambda (x) (set (car x) (cdr x))))
328 prio-list) 328 prio-list)
329 (set-coding-priority (mapcar #'car prio-list)) 329 (set-coding-priority (mapcar #'car prio-list))
330 ;; Changing the binding of a coding category requires this call.
330 (update-coding-systems-internal) 331 (update-coding-systems-internal)
331 (detect-coding-region ,from ,to)) 332 (detect-coding-region ,from ,to))
332 ;; We must restore the internal database. 333 ;; We must restore the internal database.
diff --git a/lisp/international/mule.el b/lisp/international/mule.el
index 1ec546e22fd..49635652bb2 100644
--- a/lisp/international/mule.el
+++ b/lisp/international/mule.el
@@ -1546,6 +1546,7 @@ text, and convert it in the temporary buffer. Otherwise, convert in-place."
1546 ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . no-conversion) 1546 ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . no-conversion)
1547 ("\\.\\(sx[dmicw]\\|tar\\|tgz\\)\\'" . no-conversion) 1547 ("\\.\\(sx[dmicw]\\|tar\\|tgz\\)\\'" . no-conversion)
1548 ("\\.\\(gz\\|Z\\|bz\\|bz2\\|gpg\\)\\'" . no-conversion) 1548 ("\\.\\(gz\\|Z\\|bz\\|bz2\\|gpg\\)\\'" . no-conversion)
1549 ("\\.\\(jpe?g\\|png\\|gif\\|tiff?\\|p[bpgn]m\\)\\'" . no-conversion)
1549 ("/#[^/]+#\\'" . emacs-mule)) 1550 ("/#[^/]+#\\'" . emacs-mule))
1550 "Alist of filename patterns vs corresponding coding systems. 1551 "Alist of filename patterns vs corresponding coding systems.
1551Each element looks like (REGEXP . CODING-SYSTEM). 1552Each 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 09f84d6fad6..dea05a4c948 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) 2005
6;; National Institute of Advanced Industrial Science and Technology (AIST) 4;; National Institute of Advanced Industrial Science and Technology (AIST)
7;; Registration Number H14PRO021 5;; Registration Number H14PRO021
6;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
8 7
9;; Keywords: mule, multilingual, thai 8;; Keywords: mule, multilingual, thai
10 9
@@ -279,7 +278,7 @@ if necessary."
279 278
280(defun thai-compose-syllable (beg end &optional category-set string) 279(defun thai-compose-syllable (beg end &optional category-set string)
281 (or category-set 280 (or category-set
282 (setq category-set 281 (setq category-set
283 (char-category-set (if string (aref string beg) (char-after beg))))) 282 (char-category-set (if string (aref string beg) (char-after beg)))))
284 (if (aref category-set ?c) 283 (if (aref category-set ?c)
285 ;; Starting with a consonant. We do relative composition. 284 ;; Starting with a consonant. We do relative composition.
@@ -288,9 +287,9 @@ if necessary."
288 (compose-region beg end)) 287 (compose-region beg end))
289 ;; Vowel tone sequence. 288 ;; Vowel tone sequence.
290 (if string 289 (if string
291 (compose-string string beg end (list (aref string beg) '(Bc . Bc) 290 (compose-string string beg end (list (aref string beg) '(Bc . Bc)
292 (aref string (1+ beg)))) 291 (aref string (1+ beg))))
293 (compose-region beg end (list (char-after beg) '(Bc . Bc) 292 (compose-region beg end (list (char-after beg) '(Bc . Bc)
294 (char-after (1+ beg)))))) 293 (char-after (1+ beg))))))
295 (- end beg)) 294 (- end beg))
296 295
@@ -348,7 +347,7 @@ The return value is number of composed characters."
348 (if string 347 (if string
349 (if (eq (string-match thai-composition-pattern string from) from) 348 (if (eq (string-match thai-composition-pattern string from) from)
350 (thai-compose-syllable from (match-end 0) nil string)) 349 (thai-compose-syllable from (match-end 0) nil string))
351 (if (save-excursion 350 (if (save-excursion
352 (goto-char from) 351 (goto-char from)
353 (and (looking-at thai-composition-pattern) 352 (and (looking-at thai-composition-pattern)
354 (setq to (match-end 0)))) 353 (setq to (match-end 0))))
@@ -376,12 +375,48 @@ The return value is number of composed characters."
376;;;###autoload 375;;;###autoload
377(define-minor-mode thai-auto-composition-mode 376(define-minor-mode thai-auto-composition-mode
378 "Minor mode for automatically correct Thai character composition." 377 "Minor mode for automatically correct Thai character composition."
379 nil nil nil 378 :group 'mule
380 (cond ((null thai-auto-composition-mode) 379 (cond ((null thai-auto-composition-mode)
381 (remove-hook 'after-change-functions 'thai-auto-composition)) 380 (remove-hook 'after-change-functions 'thai-auto-composition))
382 (t 381 (t
383 (add-hook 'after-change-functions 'thai-auto-composition)))) 382 (add-hook 'after-change-functions 'thai-auto-composition))))
384 383
384;; Thai-word-mode requires functions in the feature `thai-word'.
385(require 'thai-word)
386
387(defvar thai-word-mode-map
388 (let ((map (make-sparse-keymap)))
389 (define-key map [remap forward-word] 'thai-forward-word)
390 (define-key map [remap backward-word] 'thai-backward-word)
391 (define-key map [remap kill-word] 'thai-kill-word)
392 (define-key map [remap backward-kill-word] 'thai-backward-kill-word)
393 (define-key map [remap transpose-words] 'thai-transpose-words)
394 map)
395 "Keymap for `thai-word-mode'.")
396
397(define-minor-mode thai-word-mode
398 "Minor mode to make word-oriented commands aware of Thai words.
399The commands affected are \\[forward-word], \\[backward-word], \\[kill-word], \\[backward-kill-word], \\[transpose-words], and \\[fill-paragraph]."
400 :global t :group 'mule
401 (cond (thai-word-mode
402 ;; This enables linebreak between Thai characters.
403 (modify-category-entry (make-char 'thai-tis620) ?|)
404 ;; This enables linebreak at a Thai word boundary.
405 (put-charset-property 'thai-tis620 'fill-find-break-point-function
406 'thai-fill-find-break-point))
407 (t
408 (modify-category-entry (make-char 'thai-tis620) ?| nil t)
409 (put-charset-property 'thai-tis620 'fill-find-break-point-function
410 nil))))
411
412;; Function to call on entering the Thai language environment.
413(defun setup-thai-language-environment-internal ()
414 (thai-word-mode 1))
415
416;; Function to call on exiting the Thai language environment.
417(defun exit-thai-language-environment-internal ()
418 (thai-word-mode -1))
419
385;; 420;;
386(provide 'thai-util) 421(provide 'thai-util)
387 422
diff --git a/lisp/language/thai-word.el b/lisp/language/thai-word.el
index 82f6fcdea6a..2548a44ea80 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)
@@ -10783,7 +10780,7 @@ the current word list."
10783 ;; character by character. 10780 ;; character by character.
10784 (while this 10781 (while this
10785 (setq pos (1+ pos) 10782 (setq pos (1+ pos)
10786 char (char-after pos) 10783 char (or (char-after pos) 0)
10787 category-set (char-category-set char)) 10784 category-set (char-category-set char))
10788 ;; If the current sequence is recorded in `thai-word-table' 10785 ;; If the current sequence is recorded in `thai-word-table'
10789 ;; (i.e. (car THIS) is 1) and the following Thai character is 10786 ;; (i.e. (car THIS) is 1) and the following Thai character is
@@ -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 6b5df5c08b6..c14d0005a72 100644
--- a/lisp/language/thai.el
+++ b/lisp/language/thai.el
@@ -1,10 +1,9 @@
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) 2005
6;; National Institute of Advanced Industrial Science and Technology (AIST) 4;; National Institute of Advanced Industrial Science and Technology (AIST)
7;; Registration Number H14PRO021 5;; Registration Number H14PRO021
6;; Copyright (C) 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
8 7
9;; Keywords: multilingual, Thai 8;; Keywords: multilingual, Thai
10 9
@@ -53,6 +52,8 @@
53 (input-method . "thai-kesmanee") 52 (input-method . "thai-kesmanee")
54 (unibyte-display . thai-tis620) 53 (unibyte-display . thai-tis620)
55 (features thai-util) 54 (features thai-util)
55 (setup-function . setup-thai-language-environment-internal)
56 (exit-function . exit-thai-language-environment-internal)
56 (sample-text 57 (sample-text
57 . (thai-compose-string 58 . (thai-compose-string
58 (copy-sequence "Thai (,T@RIRd7B(B) ,TJ0GQ1J04U1$0CQ1:(B, ,TJ0GQ1J04U10$h1P(B"))) 59 (copy-sequence "Thai (,T@RIRd7B(B) ,TJ0GQ1J04U1$0CQ1:(B, ,TJ0GQ1J04U10$h1P(B")))
diff --git a/lisp/longlines.el b/lisp/longlines.el
new file mode 100644
index 00000000000..ebfb7a660b0
--- /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 :group 'longlines :lighter " ll"
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/rmail.el b/lisp/mail/rmail.el
index 559963589a1..de88b37d91e 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -1622,13 +1622,15 @@ a remote mailbox, PASSWORD is the password if it should be
1622supplied as a separate argument to `movemail' or nil otherwise, GOT-PASSWORD 1622supplied as a separate argument to `movemail' or nil otherwise, GOT-PASSWORD
1623is non-nil if the user has supplied the password interactively. 1623is non-nil if the user has supplied the password interactively.
1624" 1624"
1625 (if (string-match "^\\([^:]+\\)://\\(\\([^:@]+\\)\\(:\\([^@]+\\)\\)?@\\)?.*" file) 1625 (cond
1626 ((string-match "^\\([^:]+\\)://\\(\\([^:@]+\\)\\(:\\([^@]+\\)\\)?@\\)?.*" file)
1626 (let (got-password supplied-password 1627 (let (got-password supplied-password
1627 (proto (match-string 1 file)) 1628 (proto (match-string 1 file))
1628 (user (match-string 3 file)) 1629 (user (match-string 3 file))
1629 (pass (match-string 5 file)) 1630 (pass (match-string 5 file))
1630 (host (substring file (or (match-end 2) 1631 (host (substring file (or (match-end 2)
1631 (+ 3 (match-end 1)))))) 1632 (+ 3 (match-end 1))))))
1633
1632 (if (not pass) 1634 (if (not pass)
1633 (when rmail-remote-password-required 1635 (when rmail-remote-password-required
1634 (setq got-password (not (rmail-have-password))) 1636 (setq got-password (not (rmail-have-password)))
@@ -1645,8 +1647,22 @@ is non-nil if the user has supplied the password interactively.
1645 (list file 1647 (list file
1646 (or (string-equal proto "pop") (string-equal proto "imap")) 1648 (or (string-equal proto "pop") (string-equal proto "imap"))
1647 supplied-password 1649 supplied-password
1648 got-password))) 1650 got-password))))
1649 (list file nil nil nil))) 1651
1652 ((string-match "^po:\\([^:]+\\)\\(:\\(.*\\)\\)?" file)
1653 (let (got-password supplied-password
1654 (proto "pop")
1655 (user (match-string 1 file))
1656 (host (match-string 3 file)))
1657
1658 (when rmail-remote-password-required
1659 (setq got-password (not (rmail-have-password)))
1660 (setq supplied-password (rmail-get-remote-password nil)))
1661
1662 (list file "pop" supplied-password got-password)))
1663
1664 (t
1665 (list file nil nil nil))))
1650 1666
1651(defun rmail-insert-inbox-text (files renamep) 1667(defun rmail-insert-inbox-text (files renamep)
1652 ;; Detect a locked file now, so that we avoid moving mail 1668 ;; Detect a locked file now, so that we avoid moving mail
@@ -1686,15 +1702,7 @@ is non-nil if the user has supplied the password interactively.
1686 (expand-file-name buffer-file-name)))) 1702 (expand-file-name buffer-file-name))))
1687 ;; Always use movemail to rename the file, 1703 ;; Always use movemail to rename the file,
1688 ;; since there can be mailboxes in various directories. 1704 ;; since there can be mailboxes in various directories.
1689 (setq movemail t) 1705 (if (not popmail)
1690;;; ;; If getting from mail spool directory,
1691;;; ;; use movemail to move rather than just renaming,
1692;;; ;; so as to interlock with the mailer.
1693;;; (setq movemail (string= file
1694;;; (file-truename
1695;;; (concat rmail-spool-directory
1696;;; (file-name-nondirectory file)))))
1697 (if (and movemail (not popmail))
1698 (progn 1706 (progn
1699 ;; On some systems, /usr/spool/mail/foo is a directory 1707 ;; On some systems, /usr/spool/mail/foo is a directory
1700 ;; and the actual inbox is /usr/spool/mail/foo/foo. 1708 ;; and the actual inbox is /usr/spool/mail/foo/foo.
@@ -1716,23 +1724,6 @@ is non-nil if the user has supplied the password interactively.
1716 ((or (file-exists-p tofile) (and (not popmail) 1724 ((or (file-exists-p tofile) (and (not popmail)
1717 (not (file-exists-p file)))) 1725 (not (file-exists-p file))))
1718 nil) 1726 nil)
1719 ((and (not movemail) (not popmail))
1720 ;; Try copying. If that fails (perhaps no space) and
1721 ;; we're allowed to blow away the inbox, rename instead.
1722 (if rmail-preserve-inbox
1723 (copy-file file tofile nil)
1724 (condition-case nil
1725 (copy-file file tofile nil)
1726 (error
1727 ;; Third arg is t so we can replace existing file TOFILE.
1728 (rename-file file tofile t))))
1729 ;; Make the real inbox file empty.
1730 ;; Leaving it deleted could cause lossage
1731 ;; because mailers often won't create the file.
1732 (if (not rmail-preserve-inbox)
1733 (condition-case ()
1734 (write-region (point) (point) file)
1735 (file-error nil))))
1736 (t 1727 (t
1737 (with-temp-buffer 1728 (with-temp-buffer
1738 (let ((errors (current-buffer))) 1729 (let ((errors (current-buffer)))
diff --git a/lisp/mail/supercite.el b/lisp/mail/supercite.el
index 3f24c952d89..6b769f53801 100644
--- a/lisp/mail/supercite.el
+++ b/lisp/mail/supercite.el
@@ -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))) ?>))
@@ -1866,10 +1866,11 @@ Note on function names in this list: all functions of the form
1866 1866
1867(define-minor-mode sc-minor-mode 1867(define-minor-mode sc-minor-mode
1868 "Supercite minor mode." 1868 "Supercite minor mode."
1869 nil (" SC" (sc-auto-fill-region-p 1869 :group 'supercite
1870 (":f" (sc-fixup-whitespace-p "w")) 1870 :lighter (" SC" (sc-auto-fill-region-p
1871 (sc-fixup-whitespace-p ":w"))) 1871 (":f" (sc-fixup-whitespace-p "w"))
1872 `((,sc-mode-map-prefix . ,sc-mode-map))) 1872 (sc-fixup-whitespace-p ":w")))
1873 :keymap `((,sc-mode-map-prefix . ,sc-mode-map)))
1873 1874
1874;;;###autoload 1875;;;###autoload
1875(defun sc-cite-original () 1876(defun sc-cite-original ()
@@ -2054,5 +2055,5 @@ more information. Info node `(SC)Top'."
2054(provide 'supercite) 2055(provide 'supercite)
2055(run-hooks 'sc-load-hook) 2056(run-hooks 'sc-load-hook)
2056 2057
2057;;; arch-tag: a5d5bfa6-3bd5-4414-8c65-0afc83e45cd3 2058;; arch-tag: a5d5bfa6-3bd5-4414-8c65-0afc83e45cd3
2058;;; supercite.el ends here 2059;;; supercite.el ends here
diff --git a/lisp/master.el b/lisp/master.el
index ce4144f087c..b9908e82b55 100644
--- a/lisp/master.el
+++ b/lisp/master.el
@@ -1,6 +1,6 @@
1;;; master.el --- make a buffer the master over another buffer 1;;; master.el --- make a buffer the master over another buffer
2 2
3;; Copyright (C) 1999, 2000, 2001 Alexander Schroeder 3;; Copyright (C) 1999, 2000, 2001, 2005 Alexander Schroeder
4 4
5;; Author: Alex Schroeder <alex@gnu.org> 5;; Author: Alex Schroeder <alex@gnu.org>
6;; Maintainer: Alex Schroeder <alex@gnu.org> 6;; Maintainer: Alex Schroeder <alex@gnu.org>
@@ -55,7 +55,10 @@
55 55
56;;; Code: 56;;; Code:
57 57
58(require 'easy-mmode) 58(defgroup master nil
59 "Support for master/slave relationships between buffers."
60 :version "22.1"
61 :group 'convenience)
59 62
60;; Variables that don't need initialization. 63;; Variables that don't need initialization.
61 64
@@ -83,16 +86,13 @@ following commands:
83The slave buffer is stored in the buffer-local variable `master-of'. 86The slave buffer is stored in the buffer-local variable `master-of'.
84You can set this variable using `master-set-slave'. You can show 87You can set this variable using `master-set-slave'. You can show
85yourself the value of `master-of' by calling `master-show-slave'." 88yourself the value of `master-of' by calling `master-show-slave'."
86 ;; The initial value. 89 :group 'master
87 nil 90 :keymap
88 ;; The indicator for the mode line. 91 '(("\C-c\C-n" . master-says-scroll-up)
89 nil 92 ("\C-c\C-p" . master-says-scroll-down)
90 ;; The minor mode bindings. 93 ("\C-c<" . master-says-beginning-of-buffer)
91 '(("\C-c\C-n" . master-says-scroll-up) 94 ("\C-c>" . master-says-end-of-buffer)
92 ("\C-c\C-p" . master-says-scroll-down) 95 ("\C-c\C-l" . master-says-recenter)))
93 ("\C-c<" . master-says-beginning-of-buffer)
94 ("\C-c>" . master-says-end-of-buffer)
95 ("\C-c\C-l" . master-says-recenter)))
96 96
97;; Initialize Master mode by setting a slave buffer. 97;; Initialize Master mode by setting a slave buffer.
98 98
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/mouse.el b/lisp/mouse.el
index fdc99205780..a409efadeca 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -49,7 +49,7 @@
49 :version "22.1" 49 :version "22.1"
50 :group 'mouse) 50 :group 'mouse)
51 51
52(defcustom mouse-1-click-follows-link 350 52(defcustom mouse-1-click-follows-link 450
53 "Non-nil means that clicking Mouse-1 on a link follows the link. 53 "Non-nil means that clicking Mouse-1 on a link follows the link.
54 54
55With the default setting, an ordinary Mouse-1 click on a link 55With the default setting, an ordinary Mouse-1 click on a link
@@ -837,6 +837,29 @@ at the same position."
837 (funcall action pos)) 837 (funcall action pos))
838 (t action))))))) 838 (t action)))))))
839 839
840(defun mouse-fixup-help-message (msg)
841 "Fix help message MSG for `mouse-1-click-follows-link'."
842 (let (mp pos)
843 (if (and mouse-1-click-follows-link
844 (stringp msg)
845 (save-match-data
846 (string-match "^mouse-2" msg))
847 (setq mp (mouse-pixel-position))
848 (consp (setq pos (cdr mp)))
849 (car pos) (>= (car pos) 0)
850 (cdr pos) (>= (cdr pos) 0)
851 (setq pos (posn-at-x-y (car pos) (cdr pos) (car mp)))
852 (windowp (posn-window pos)))
853 (with-current-buffer (window-buffer (posn-window pos))
854 (if (mouse-on-link-p pos)
855 (setq msg (concat
856 (cond
857 ((eq mouse-1-click-follows-link 'double) "double-")
858 ((and (integerp mouse-1-click-follows-link)
859 (< mouse-1-click-follows-link 0)) "Long ")
860 (t ""))
861 "mouse-1" (substring msg 7)))))))
862 msg)
840 863
841(defun mouse-drag-region-1 (start-event) 864(defun mouse-drag-region-1 (start-event)
842 (mouse-minibuffer-check start-event) 865 (mouse-minibuffer-check start-event)
@@ -886,6 +909,7 @@ at the same position."
886 (track-mouse 909 (track-mouse
887 (while (progn 910 (while (progn
888 (setq event (read-event)) 911 (setq event (read-event))
912 (setq mve (cons event (and (boundp 'mve) mve)))
889 (or (mouse-movement-p event) 913 (or (mouse-movement-p event)
890 (memq (car-safe event) '(switch-frame select-window)))) 914 (memq (car-safe event) '(switch-frame select-window))))
891 (if (memq (car-safe event) '(switch-frame select-window)) 915 (if (memq (car-safe event) '(switch-frame select-window))
@@ -997,7 +1021,7 @@ at the same position."
997 (= (window-start start-window) 1021 (= (window-start start-window)
998 start-window-start))) 1022 start-window-start)))
999 (if (and on-link 1023 (if (and on-link
1000 (not end-point) 1024 (or (not end-point) (= end-point start-point))
1001 (consp event) 1025 (consp event)
1002 (or remap-double-click 1026 (or remap-double-click
1003 (and 1027 (and
diff --git a/lisp/msb.el b/lisp/msb.el
index 2ab7fe5491d..0bcdad314a6 100644
--- a/lisp/msb.el
+++ b/lisp/msb.el
@@ -1,7 +1,7 @@
1;;; msb.el --- customizable buffer-selection with multiple menus 1;;; msb.el --- customizable buffer-selection with multiple menus
2 2
3;; Copyright (C) 1993, 94, 95, 97, 98, 99, 2000, 2001, 2003 3;; Copyright (C) 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2003,
4;; Free Software Foundation, Inc. 4;; 2005 Free Software Foundation, Inc.
5 5
6;; Author: Lars Lindberg <lars.lindberg@home.se> 6;; Author: Lars Lindberg <lars.lindberg@home.se>
7;; Maintainer: FSF 7;; Maintainer: FSF
@@ -1141,7 +1141,7 @@ variable `msb-menu-cond'."
1141With arg, turn Msb mode on if and only if arg is positive. 1141With arg, turn Msb mode on if and only if arg is positive.
1142This mode overrides the binding(s) of `mouse-buffer-menu' to provide a 1142This mode overrides the binding(s) of `mouse-buffer-menu' to provide a
1143different buffer menu using the function `msb'." 1143different buffer menu using the function `msb'."
1144 :global t 1144 :global t :group 'msb
1145 (if msb-mode 1145 (if msb-mode
1146 (progn 1146 (progn
1147 (add-hook 'menu-bar-update-hook 'msb-menu-bar-update-buffers) 1147 (add-hook 'menu-bar-update-hook 'msb-menu-bar-update-buffers)
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/pcvs.el b/lisp/pcvs.el
index b00de07e50f..e7139d9cfba 100644
--- a/lisp/pcvs.el
+++ b/lisp/pcvs.el
@@ -358,7 +358,7 @@ from the current buffer."
358 (dir default-directory) 358 (dir default-directory)
359 (buf (cond 359 (buf (cond
360 (name (cvs-get-buffer-create name)) 360 (name (cvs-get-buffer-create name))
361 ((and (bufferp cvs-temp-buffer) (buffer-name cvs-temp-buffer)) 361 ((and (bufferp cvs-temp-buffer) (buffer-live-p cvs-temp-buffer))
362 cvs-temp-buffer) 362 cvs-temp-buffer)
363 (t 363 (t
364 (set (make-local-variable 'cvs-temp-buffer) 364 (set (make-local-variable 'cvs-temp-buffer)
@@ -528,39 +528,49 @@ If non-nil, NEW means to create a new buffer no matter what."
528 (files (nth 1 dir+files+rest)) 528 (files (nth 1 dir+files+rest))
529 (rest (nth 2 dir+files+rest))) 529 (rest (nth 2 dir+files+rest)))
530 530
531 ;; setup the (current) process buffer
532 (set (make-local-variable 'cvs-postprocess)
533 (if (null rest)
534 ;; this is the last invocation
535 postprocess
536 ;; else, we have to register ourselves to be rerun on the rest
537 `(cvs-run-process ',args ',rest ',postprocess ',single-dir)))
538 (add-hook 'kill-buffer-hook 531 (add-hook 'kill-buffer-hook
539 (lambda () 532 (lambda ()
540 (let ((proc (get-buffer-process (current-buffer)))) 533 (let ((proc (get-buffer-process (current-buffer))))
541 (when (processp proc) 534 (when (processp proc)
542 (set-process-filter proc nil) 535 (set-process-filter proc nil)
543 (set-process-sentinel proc nil) 536 ;; Abort postprocessing but leave the sentinel so it
544 (delete-process proc)))) 537 ;; will update the list of running procs.
538 (process-put proc 'cvs-postprocess nil)
539 (interrupt-process proc))))
545 nil t) 540 nil t)
546 541
547 ;; create the new process and setup the procbuffer correspondingly 542 ;; create the new process and setup the procbuffer correspondingly
548 (let* ((args (append (cvs-flags-query 'cvs-cvs-flags nil 'noquery) 543 (let* ((msg (cvs-header-msg args fis))
544 (args (append (cvs-flags-query 'cvs-cvs-flags nil 'noquery)
549 (if cvs-cvsroot (list "-d" cvs-cvsroot)) 545 (if cvs-cvsroot (list "-d" cvs-cvsroot))
550 args 546 args
551 files)) 547 files))
552 ;; If process-connection-type is nil and the repository 548 ;; If process-connection-type is nil and the repository
553 ;; is accessed via SSH, a bad interaction between libc, 549 ;; is accessed via SSH, a bad interaction between libc,
554 ;; CVS and SSH can lead to garbled output. 550 ;; CVS and SSH can lead to garbled output.
555 ;; It might be a glibc-specific problem (but it also happens 551 ;; It might be a glibc-specific problem (but it can also happens
556 ;; under Mac OS X, it seems). 552 ;; under Mac OS X, it seems).
557 ;; Until the problem is cleared, we'll use a pty rather than 553 ;; It seems that using a pty can help circumvent the problem,
558 ;; a pipe. 554 ;; but at the cost of screwing up when the process thinks it
559 ;; (process-connection-type nil) ; Use a pipe, not a pty. 555 ;; can ask for user input (such as password or host-key
556 ;; confirmation). A better workaround is to set CVS_RSH to
557 ;; an appropriate script, or to use a later version of CVS.
558 (process-connection-type nil) ; Use a pipe, not a pty.
560 (process 559 (process
561 ;; the process will be run in the selected dir 560 ;; the process will be run in the selected dir
562 (let ((default-directory (cvs-expand-dir-name dir))) 561 (let ((default-directory (cvs-expand-dir-name dir)))
563 (apply 'start-process "cvs" procbuf cvs-program args)))) 562 (apply 'start-process "cvs" procbuf cvs-program args))))
563 ;; setup the process.
564 (process-put process 'cvs-buffer cvs-buffer)
565 (with-current-buffer cvs-buffer (cvs-update-header msg 'add))
566 (process-put process 'cvs-header msg)
567 (process-put
568 process 'cvs-postprocess
569 (if (null rest)
570 ;; this is the last invocation
571 postprocess
572 ;; else, we have to register ourselves to be rerun on the rest
573 `(cvs-run-process ',args ',rest ',postprocess ',single-dir)))
564 (set-process-sentinel process 'cvs-sentinel) 574 (set-process-sentinel process 'cvs-sentinel)
565 (set-process-filter process 'cvs-update-filter) 575 (set-process-filter process 'cvs-update-filter)
566 (set-marker (process-mark process) (point-max)) 576 (set-marker (process-mark process) (point-max))
@@ -636,33 +646,35 @@ If non-nil, NEW means to create a new buffer no matter what."
636This is responsible for parsing the output from the cvs update when 646This is responsible for parsing the output from the cvs update when
637it is finished." 647it is finished."
638 (when (memq (process-status proc) '(signal exit)) 648 (when (memq (process-status proc) '(signal exit))
639 (if (null (buffer-name (process-buffer proc))) 649 (let ((cvs-postproc (process-get proc 'cvs-postprocess))
640 ;;(set-process-buffer proc nil) 650 (cvs-buf (process-get proc 'cvs-buffer)))
641 (error "cvs' process buffer was killed") 651 ;; Since the buffer and mode line will show that the
642 (let* ((obuf (current-buffer)) 652 ;; process is dead, we can delete it now. Otherwise it
643 (procbuffer (process-buffer proc))) 653 ;; will stay around until M-x list-processes.
644 (set-buffer (with-current-buffer procbuffer cvs-buffer)) 654 (process-put proc 'postprocess nil)
645 (setq cvs-mode-line-process (symbol-name (process-status proc))) 655 (delete-process proc)
646 (force-mode-line-update) 656 ;; Don't do anything if the main buffer doesn't exist any more.
647 (set-buffer procbuffer) 657 (when (buffer-live-p cvs-buf)
648 (let ((cvs-postproc cvs-postprocess)) 658 (with-current-buffer cvs-buf
649 ;; Since the buffer and mode line will show that the 659 (cvs-update-header (process-get proc 'cvs-header) nil)
650 ;; process is dead, we can delete it now. Otherwise it 660 (setq cvs-mode-line-process (symbol-name (process-status proc)))
651 ;; will stay around until M-x list-processes. 661 (force-mode-line-update)
652 (delete-process proc) 662 (when cvs-postproc
653 (setq cvs-postprocess nil) 663 (if (null (buffer-live-p (process-buffer proc)))
654 ;; do the postprocessing like parsing and such 664 ;;(set-process-buffer proc nil)
655 (save-excursion (eval cvs-postproc)) 665 (error "cvs' process buffer was killed")
656 ;; check whether something is left 666 (with-current-buffer (process-buffer proc)
657 (unless cvs-postprocess 667 ;; do the postprocessing like parsing and such
658 ;; IIRC, we enable undo again once the process is finished 668 (save-excursion (eval cvs-postproc))
659 ;; for cases where the output was inserted in *vc-diff* or 669 ;; check whether something is left
660 ;; in a file-like buffer. -stef 670 (unless (get-buffer-process (current-buffer))
661 (buffer-enable-undo) 671 ;; IIRC, we enable undo again once the process is finished
662 (with-current-buffer cvs-buffer 672 ;; for cases where the output was inserted in *vc-diff* or
663 (message "CVS process has completed in %s" (buffer-name))))) 673 ;; in a file-like buffer. --Stef
664 ;; This might not even be necessary 674 (buffer-enable-undo)
665 (set-buffer obuf))))) 675 (with-current-buffer cvs-buffer
676 (message "CVS process has completed in %s"
677 (buffer-name))))))))))))
666 678
667(defun cvs-parse-process (dcd &optional subdir old-fis) 679(defun cvs-parse-process (dcd &optional subdir old-fis)
668 "Parse the output of a cvs process. 680 "Parse the output of a cvs process.
@@ -770,7 +782,7 @@ before calling the real function `" (symbol-name fun-1) "'.\n")
770(defun-cvs-mode cvs-mode-kill-process () 782(defun-cvs-mode cvs-mode-kill-process ()
771 "Kill the temporary buffer and associated process." 783 "Kill the temporary buffer and associated process."
772 (interactive) 784 (interactive)
773 (when (and (bufferp cvs-temp-buffer) (buffer-name cvs-temp-buffer)) 785 (when (and (bufferp cvs-temp-buffer) (buffer-live-p cvs-temp-buffer))
774 (let ((proc (get-buffer-process cvs-temp-buffer))) 786 (let ((proc (get-buffer-process cvs-temp-buffer)))
775 (when proc (delete-process proc))))) 787 (when proc (delete-process proc)))))
776 788
@@ -906,23 +918,28 @@ This usually doesn't really work but is a handy initval in a prompt."
906;;;; 918;;;;
907 919
908;;;###autoload 920;;;###autoload
909(defun cvs-checkout (modules dir flags) 921(defun cvs-checkout (modules dir flags &optional root)
910 "Run a 'cvs checkout MODULES' in DIR. 922 "Run a 'cvs checkout MODULES' in DIR.
911Feed the output to a *cvs* buffer, display it in the current window, 923Feed the output to a *cvs* buffer, display it in the current window,
912and run `cvs-mode' on it. 924and run `cvs-mode' on it.
913 925
914With a prefix argument, prompt for cvs FLAGS to use." 926With a prefix argument, prompt for cvs FLAGS to use."
915 (interactive 927 (interactive
916 (list (cvs-string->strings (read-string "Module(s): " (cvs-get-module))) 928 (let ((root (cvs-get-cvsroot)))
917 (read-directory-name "CVS Checkout Directory: " 929 (if (or (null root) current-prefix-arg)
918 nil default-directory nil) 930 (setq root (read-string "CVS Root: ")))
919 (cvs-add-branch-prefix 931 (list (cvs-string->strings (read-string "Module(s): " (cvs-get-module)))
920 (cvs-flags-query 'cvs-checkout-flags "cvs checkout flags")))) 932 (read-directory-name "CVS Checkout Directory: "
933 nil default-directory nil)
934 (cvs-add-branch-prefix
935 (cvs-flags-query 'cvs-checkout-flags "cvs checkout flags"))
936 root)))
921 (when (eq flags t) 937 (when (eq flags t)
922 (setf flags (cvs-flags-query 'cvs-checkout-flags nil 'noquery))) 938 (setf flags (cvs-flags-query 'cvs-checkout-flags nil 'noquery)))
923 (cvs-cmd-do "checkout" (or dir default-directory) 939 (let ((cvs-cvsroot root))
924 (append flags modules) nil 'new 940 (cvs-cmd-do "checkout" (or dir default-directory)
925 :noexist t)) 941 (append flags modules) nil 'new
942 :noexist t)))
926 943
927(defun-cvs-mode (cvs-mode-checkout . NOARGS) (dir) 944(defun-cvs-mode (cvs-mode-checkout . NOARGS) (dir)
928 "Run cvs checkout against the current branch. 945 "Run cvs checkout against the current branch.
@@ -1133,7 +1150,7 @@ Full documentation is in the Texinfo file."
1133 (eq (ewoc-buffer cvs-cookies) buf) 1150 (eq (ewoc-buffer cvs-cookies) buf)
1134 (setq check 'cvs-temp-buffer) 1151 (setq check 'cvs-temp-buffer)
1135 (or (null cvs-temp-buffer) 1152 (or (null cvs-temp-buffer)
1136 (null (buffer-name cvs-temp-buffer)) 1153 (null (buffer-live-p cvs-temp-buffer))
1137 (and (eq (with-current-buffer cvs-temp-buffer cvs-buffer) buf) 1154 (and (eq (with-current-buffer cvs-temp-buffer cvs-buffer) buf)
1138 (equal (with-current-buffer cvs-temp-buffer 1155 (equal (with-current-buffer cvs-temp-buffer
1139 default-directory) 1156 default-directory)
@@ -1822,11 +1839,6 @@ POSTPROC is a list of expressions to be evaluated at the very end (after
1822 ;; absence of `cvs update' output has a specific meaning. 1839 ;; absence of `cvs update' output has a specific meaning.
1823 (or fis (list (cvs-create-fileinfo 'DIRCHANGE "" "." "")))))) 1840 (or fis (list (cvs-create-fileinfo 'DIRCHANGE "" "." ""))))))
1824 (push `(cvs-parse-process ',dont-change-disc nil ',old-fis) postproc))) 1841 (push `(cvs-parse-process ',dont-change-disc nil ',old-fis) postproc)))
1825 (let ((msg (cvs-header-msg args fis)))
1826 (cvs-update-header msg 'add)
1827 (push `(with-current-buffer cvs-buffer
1828 (cvs-update-header ',msg nil))
1829 postproc))
1830 (setq postproc (if (cdr postproc) (cons 'progn postproc) (car postproc))) 1842 (setq postproc (if (cdr postproc) (cons 'progn postproc) (car postproc)))
1831 (with-current-buffer buf 1843 (with-current-buffer buf
1832 (let ((inhibit-read-only t)) (erase-buffer)) 1844 (let ((inhibit-read-only t)) (erase-buffer))
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/cwarn.el b/lisp/progmodes/cwarn.el
index b16381cd2c7..9dfd4dd9e26 100644
--- a/lisp/progmodes/cwarn.el
+++ b/lisp/progmodes/cwarn.el
@@ -1,6 +1,6 @@
1;;; cwarn.el --- highlight suspicious C and C++ constructions 1;;; cwarn.el --- highlight suspicious C and C++ constructions
2 2
3;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. 3;; Copyright (C) 1999, 2000, 2001, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Anders Lindgren <andersl@andersl.com> 5;; Author: Anders Lindgren <andersl@andersl.com>
6;; Keywords: c, languages, faces 6;; Keywords: c, languages, faces
@@ -193,7 +193,7 @@ be included in the variable `cwarn-configuration'. By default C and
193C++ modes are included. 193C++ modes are included.
194 194
195With ARG, turn CWarn mode on if and only if arg is positive." 195With ARG, turn CWarn mode on if and only if arg is positive."
196 nil cwarn-mode-text nil 196 :group 'cwarn :lighter cwarn-mode-text
197 (cwarn-font-lock-keywords cwarn-mode) 197 (cwarn-font-lock-keywords cwarn-mode)
198 (if font-lock-mode (font-lock-fontify-buffer))) 198 (if font-lock-mode (font-lock-fontify-buffer)))
199 199
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 70150111a86..7067ddca21c 100644
--- a/lisp/progmodes/flymake.el
+++ b/lisp/progmodes/flymake.el
@@ -964,7 +964,7 @@ Convert it to flymake internal format."
964 (if (consp file) (setq file (car file))) 964 (if (consp file) (setq file (car file)))
965 (if (consp line) (setq line (car line))) 965 (if (consp line) (setq line (car line)))
966 (if (consp col) (setq col (car col))) 966 (if (consp col) (setq col (car col)))
967 967
968 (when (not (functionp line)) 968 (when (not (functionp line))
969 (setq converted-list (cons (list regexp file line col) converted-list))))) 969 (setq converted-list (cons (list regexp file line col) converted-list)))))
970 converted-list)) 970 converted-list))
@@ -1508,7 +1508,7 @@ Return first 'INCLUDE-DIRS/REL-FILE-NAME' that exists, or just REL-FILE-NAME if
1508 "Minor mode to do on-the-fly syntax checking. 1508 "Minor mode to do on-the-fly syntax checking.
1509When called interactively, toggles the minor mode. 1509When called interactively, toggles the minor mode.
1510With arg, turn Flymake mode on if and only if arg is positive." 1510With arg, turn Flymake mode on if and only if arg is positive."
1511 :lighter flymake-mode-line 1511 :group 'flymake :lighter flymake-mode-line
1512 (if flymake-mode 1512 (if flymake-mode
1513 (if (flymake-can-syntax-check-file (buffer-file-name)) 1513 (if (flymake-can-syntax-check-file (buffer-file-name))
1514 (flymake-mode-on) 1514 (flymake-mode-on)
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/glasses.el b/lisp/progmodes/glasses.el
index dea40b8db19..7aff14ec608 100644
--- a/lisp/progmodes/glasses.el
+++ b/lisp/progmodes/glasses.el
@@ -1,6 +1,6 @@
1;;; glasses.el --- make cantReadThis readable 1;;; glasses.el --- make cantReadThis readable
2 2
3;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. 3;; Copyright (C) 1999, 2000, 2001, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Milan Zamazal <pdm@zamazal.org> 5;; Author: Milan Zamazal <pdm@zamazal.org>
6;; Maintainer: Milan Zamazal <pdm@zamazal.org> 6;; Maintainer: Milan Zamazal <pdm@zamazal.org>
@@ -251,7 +251,7 @@ recognized according to the current value of the variable `glasses-separator'."
251 "Minor mode for making identifiers likeThis readable. 251 "Minor mode for making identifiers likeThis readable.
252When this mode is active, it tries to add virtual separators (like underscores) 252When this mode is active, it tries to add virtual separators (like underscores)
253at places they belong to." 253at places they belong to."
254 nil " o^o" nil 254 :group 'glasses :lighter " o^o"
255 (save-excursion 255 (save-excursion
256 (save-restriction 256 (save-restriction
257 (widen) 257 (widen)
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/hideif.el b/lisp/progmodes/hideif.el
index da6b6f772b6..23031c5bcda 100644
--- a/lisp/progmodes/hideif.el
+++ b/lisp/progmodes/hideif.el
@@ -1,6 +1,6 @@
1;;; hideif.el --- hides selected code within ifdef 1;;; hideif.el --- hides selected code within ifdef
2 2
3;; Copyright (C) 1988,1994,2001, 2002 Free Software Foundation, Inc. 3;; Copyright (C) 1988, 1994, 2001, 2002, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Daniel LaLiberte <liberte@holonexus.org> 5;; Author: Daniel LaLiberte <liberte@holonexus.org>
6;; Maintainer: FSF 6;; Maintainer: FSF
@@ -197,7 +197,7 @@ how the hiding is done:
197 After `show-ifdefs', read-only status is restored to previous value. 197 After `show-ifdefs', read-only status is restored to previous value.
198 198
199\\{hide-ifdef-mode-map}" 199\\{hide-ifdef-mode-map}"
200 nil " Ifdef" nil 200 :group 'hide-ifdef :lighter " Ifdef"
201 (if hide-ifdef-mode 201 (if hide-ifdef-mode
202 (progn 202 (progn
203 ;; inherit global values 203 ;; inherit global values
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 20af0aaf96e..5073f2bc23a 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -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
diff --git a/lisp/progmodes/scheme.el b/lisp/progmodes/scheme.el
index d9ffea852d1..c792b59ad87 100644
--- a/lisp/progmodes/scheme.el
+++ b/lisp/progmodes/scheme.el
@@ -90,7 +90,7 @@
90 (modify-syntax-entry ?\] ")[ " st) 90 (modify-syntax-entry ?\] ")[ " st)
91 (modify-syntax-entry ?{ "(} " st) 91 (modify-syntax-entry ?{ "(} " st)
92 (modify-syntax-entry ?} "){ " st) 92 (modify-syntax-entry ?} "){ " st)
93 (modify-syntax-entry ?\| " 23" st) 93 (modify-syntax-entry ?\| "\" 23b" st)
94 94
95 ;; Other atom delimiters 95 ;; Other atom delimiters
96 (modify-syntax-entry ?\( "() " st) 96 (modify-syntax-entry ?\( "() " st)
@@ -103,7 +103,7 @@
103 ;; Special characters 103 ;; Special characters
104 (modify-syntax-entry ?, "' " st) 104 (modify-syntax-entry ?, "' " st)
105 (modify-syntax-entry ?@ "' " st) 105 (modify-syntax-entry ?@ "' " st)
106 (modify-syntax-entry ?# "' 14" st) 106 (modify-syntax-entry ?# "' 14bn" st)
107 (modify-syntax-entry ?\\ "\\ " st) 107 (modify-syntax-entry ?\\ "\\ " st)
108 st)) 108 st))
109 109
diff --git a/lisp/progmodes/tcl.el b/lisp/progmodes/tcl.el
index 4dba6b61a56..24ae19b0ad4 100644
--- a/lisp/progmodes/tcl.el
+++ b/lisp/progmodes/tcl.el
@@ -1,6 +1,7 @@
1;;; tcl.el --- Tcl code editing commands for Emacs 1;;; tcl.el --- Tcl code editing commands for Emacs
2 2
3;; Copyright (C) 1994,98,1999,2000,01,02,2003,2004 Free Software Foundation, Inc. 3;; Copyright (C) 1994, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
4;; Free Software Foundation, Inc.
4 5
5;; Maintainer: FSF 6;; Maintainer: FSF
6;; Author: Tom Tromey <tromey@redhat.com> 7;; Author: Tom Tromey <tromey@redhat.com>
@@ -469,10 +470,7 @@ Uses variables `tcl-proc-regexp' and `tcl-keyword-list'."
469 ;; Keywords. Only recognized if surrounded by whitespace. 470 ;; Keywords. Only recognized if surrounded by whitespace.
470 ;; FIXME consider using "not word or symbol", not 471 ;; FIXME consider using "not word or symbol", not
471 ;; "whitespace". 472 ;; "whitespace".
472 (cons (concat "\\(\\s-\\|^\\)" 473 (cons (concat "\\_<" (regexp-opt tcl-keyword-list t) "\\_>")
473 ;; FIXME Use regexp-quote?
474 (regexp-opt tcl-keyword-list t)
475 "\\(\\s-\\|$\\)")
476 2)))) 474 2))))
477 475
478(if tcl-proc-regexp 476(if tcl-proc-regexp
@@ -1507,5 +1505,5 @@ The first line is assumed to look like \"#!.../program ...\"."
1507 1505
1508(provide 'tcl) 1506(provide 'tcl)
1509 1507
1510;;; arch-tag: 8a032554-c3ef-422e-b84c-acec0522179d 1508;; arch-tag: 8a032554-c3ef-422e-b84c-acec0522179d
1511;;; tcl.el ends here 1509;;; tcl.el ends here
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/ps-mule.el b/lisp/ps-mule.el
index 6f14538ff4d..ba858959cc3 100644
--- a/lisp/ps-mule.el
+++ b/lisp/ps-mule.el
@@ -511,7 +511,10 @@ element of the list."
511 511
512(defsubst ps-mule-printable-p (charset) 512(defsubst ps-mule-printable-p (charset)
513 "Non-nil if characters in CHARSET is printable." 513 "Non-nil if characters in CHARSET is printable."
514 (ps-mule-get-font-spec charset 'normal)) 514 ;; ASCII and Latin-1 are always printable.
515 (or (eq charset 'ascii)
516 (eq charset 'latin-iso8859-1)
517 (ps-mule-get-font-spec charset 'normal)))
515 518
516(defconst ps-mule-external-libraries 519(defconst ps-mule-external-libraries
517 '((builtin nil nil 520 '((builtin nil nil
@@ -824,7 +827,9 @@ Returns the value:
824 827
825Where ENDPOS is the end position of the sequence and RUN-WIDTH is the width of 828Where ENDPOS is the end position of the sequence and RUN-WIDTH is the width of
826the sequence." 829the sequence."
827 (setq ps-mule-current-charset (charset-after from)) 830 (let ((ch (char-after from)))
831 (setq ps-mule-current-charset
832 (char-charset (or (aref ps-print-translation-table ch) ch))))
828 (let* ((wrappoint (ps-mule-find-wrappoint 833 (let* ((wrappoint (ps-mule-find-wrappoint
829 from to (ps-avg-char-width 'ps-font-for-text))) 834 from to (ps-avg-char-width 'ps-font-for-text)))
830 (to (car wrappoint)) 835 (to (car wrappoint))
@@ -832,6 +837,10 @@ the sequence."
832 (ps-font-alist 'ps-font-for-text)))) 837 (ps-font-alist 'ps-font-for-text))))
833 (font-spec (ps-mule-get-font-spec ps-mule-current-charset font-type)) 838 (font-spec (ps-mule-get-font-spec ps-mule-current-charset font-type))
834 (string (buffer-substring-no-properties from to))) 839 (string (buffer-substring-no-properties from to)))
840 (dotimes (i (length string))
841 (let ((ch (aref ps-print-translation-table (aref string i))))
842 (if ch
843 (aset string i ch))))
835 (cond 844 (cond
836 ((= from to) 845 ((= from to)
837 ;; We can't print any more characters in the current line. 846 ;; We can't print any more characters in the current line.
@@ -1393,6 +1402,7 @@ FONTTAG should be a string \"/h0\" or \"/h1\"."
1393(defun ps-mule-show-warning (charsets from to header-footer-list) 1402(defun ps-mule-show-warning (charsets from to header-footer-list)
1394 (let ((table (make-category-table)) 1403 (let ((table (make-category-table))
1395 (buf (current-buffer)) 1404 (buf (current-buffer))
1405 (max-unprintable-chars 15)
1396 char-pos-list) 1406 char-pos-list)
1397 (define-category ?u "Unprintable charset" table) 1407 (define-category ?u "Unprintable charset" table)
1398 (dolist (cs charsets) 1408 (dolist (cs charsets)
@@ -1400,19 +1410,22 @@ FONTTAG should be a string \"/h0\" or \"/h1\"."
1400 (with-category-table table 1410 (with-category-table table
1401 (save-excursion 1411 (save-excursion
1402 (goto-char from) 1412 (goto-char from)
1403 (while (and (< (length char-pos-list) 20) 1413 (while (and (<= (length char-pos-list) max-unprintable-chars)
1404 (re-search-forward "\\cu" to t)) 1414 (re-search-forward "\\cu" to t))
1405 (push (cons (preceding-char) (1- (point))) char-pos-list)) 1415 (push (cons (preceding-char) (1- (point))) char-pos-list))))
1406 (setq char-pos-list (nreverse char-pos-list))))
1407 (with-output-to-temp-buffer "*Warning*" 1416 (with-output-to-temp-buffer "*Warning*"
1408 (with-current-buffer standard-output 1417 (with-current-buffer standard-output
1409 (when char-pos-list 1418 (when char-pos-list
1410 (let ((func #'(lambda (buf pos) 1419 (let ((func #'(lambda (buf pos)
1411 (when (buffer-live-p buf) 1420 (when (buffer-live-p buf)
1412 (pop-to-buffer buf) 1421 (pop-to-buffer buf)
1413 (goto-char pos))))) 1422 (goto-char pos))))
1423 (more nil))
1424 (if (>= (length char-pos-list) max-unprintable-chars)
1425 (setq char-pos-list (cdr char-pos-list)
1426 more t))
1414 (insert "These characters in the buffer can't be printed:\n") 1427 (insert "These characters in the buffer can't be printed:\n")
1415 (dolist (elt char-pos-list) 1428 (dolist (elt (nreverse char-pos-list))
1416 (insert " ") 1429 (insert " ")
1417 (insert-text-button (string (car elt)) 1430 (insert-text-button (string (car elt))
1418 :type 'help-xref 1431 :type 'help-xref
@@ -1421,8 +1434,10 @@ FONTTAG should be a string \"/h0\" or \"/h1\"."
1421 'help-function func 1434 'help-function func
1422 'help-args (list buf (cdr elt))) 1435 'help-args (list buf (cdr elt)))
1423 (insert ",")) 1436 (insert ","))
1424 ;; Delete the last comma. 1437 (if more
1425 (delete-char -1) 1438 (insert " and more...")
1439 ;; Delete the last comma.
1440 (delete-char -1))
1426 (insert "\nClick them to jump to the buffer position,\n" 1441 (insert "\nClick them to jump to the buffer position,\n"
1427 (substitute-command-keys "\ 1442 (substitute-command-keys "\
1428or \\[universal-argument] \\[what-cursor-position] will give information about them.\n")))) 1443or \\[universal-argument] \\[what-cursor-position] will give information about them.\n"))))
@@ -1469,13 +1484,15 @@ This checks if all multi-byte characters in the region are printable or not."
1469 (setq ps-mule-charset-list 1484 (setq ps-mule-charset-list
1470 (delq 'ascii (delq 'eight-bit-control 1485 (delq 'ascii (delq 'eight-bit-control
1471 (delq 'eight-bit-graphic 1486 (delq 'eight-bit-graphic
1472 (find-charset-region from to)))) 1487 (find-charset-region
1488 from to ps-print-translation-table))))
1473 ps-mule-header-charsets 1489 ps-mule-header-charsets
1474 (delq 'ascii (delq 'eight-bit-control 1490 (delq 'ascii (delq 'eight-bit-control
1475 (delq 'eight-bit-graphic 1491 (delq 'eight-bit-graphic
1476 (find-charset-string 1492 (find-charset-string
1477 (mapconcat 1493 (mapconcat
1478 'identity header-footer-list "")))))) 1494 'identity header-footer-list "")
1495 ps-print-translation-table)))))
1479 (dolist (cs ps-mule-charset-list) 1496 (dolist (cs ps-mule-charset-list)
1480 (or (ps-mule-printable-p cs) 1497 (or (ps-mule-printable-p cs)
1481 (push cs unprintable-charsets))) 1498 (push cs unprintable-charsets)))
diff --git a/lisp/ps-print.el b/lisp/ps-print.el
index 726b0e4402c..b47ea3d4f89 100644
--- a/lisp/ps-print.el
+++ b/lisp/ps-print.el
@@ -6150,6 +6150,19 @@ XSTART YSTART are the relative position for the first page in a sheet.")
6150 6150
6151(defvar ps-current-effect 0) 6151(defvar ps-current-effect 0)
6152 6152
6153(defvar ps-print-translation-table
6154 (let ((tbl (make-char-table 'translation-table nil)))
6155 (if (and (boundp 'ucs-mule-8859-to-mule-unicode)
6156 (char-table-p ucs-mule-8859-to-mule-unicode))
6157 (map-char-table
6158 #'(lambda (k v)
6159 (if (and v (eq (char-charset v) 'latin-iso8859-1) (/= k v))
6160 (aset tbl k v)))
6161 ucs-mule-8859-to-mule-unicode))
6162 tbl)
6163 "Translation table for PostScript printing.
6164The default value is a table that translates non-Latin-1 Latin characters
6165to the equivalent Latin-1 characters.")
6153 6166
6154(defun ps-plot-region (from to font &optional fg-color bg-color effects) 6167(defun ps-plot-region (from to font &optional fg-color bg-color effects)
6155 (or (equal font ps-current-font) 6168 (or (equal font ps-current-font)
@@ -6240,11 +6253,17 @@ XSTART YSTART are the relative position for the first page in a sheet.")
6240 (ps-plot 'ps-mule-plot-composition match-point (point) bg-color)) 6253 (ps-plot 'ps-mule-plot-composition match-point (point) bg-color))
6241 6254
6242 ((> match 255) ; a multi-byte character 6255 ((> match 255) ; a multi-byte character
6256 (setq match (or (aref ps-print-translation-table match) match))
6243 (let* ((charset (char-charset match)) 6257 (let* ((charset (char-charset match))
6244 (composition (ps-e-find-composition match-point to)) 6258 (composition (ps-e-find-composition match-point to))
6245 (stop (if (nth 2 composition) (car composition) to))) 6259 (stop (if (nth 2 composition) (car composition) to)))
6246 (or (eq charset 'composition) 6260 (or (eq charset 'composition)
6247 (while (and (< (point) stop) (eq (charset-after) charset)) 6261 (while (and (< (point) stop)
6262 (let ((ch (following-char)))
6263 (setq ch
6264 (or (aref ps-print-translation-table ch)
6265 ch))
6266 (eq (char-charset ch) charset)))
6248 (forward-char 1))) 6267 (forward-char 1)))
6249 (ps-plot 'ps-mule-plot-string match-point (point) bg-color))) 6268 (ps-plot 'ps-mule-plot-string match-point (point) bg-color)))
6250 ; characters from ^@ to ^_ and 6269 ; characters from ^@ to ^_ and
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..97411fc1669 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
@@ -175,6 +175,7 @@ Reveal mode renders invisible text around point visible again.
175Interactively, with no prefix argument, toggle the mode. 175Interactively, with no prefix argument, toggle the mode.
176With universal prefix ARG (or if ARG is nil) turn mode on. 176With universal prefix ARG (or if ARG is nil) turn mode on.
177With zero or negative ARG turn mode off." 177With zero or negative ARG turn mode off."
178 :group 'reveal
178 :lighter (global-reveal-mode nil " Reveal") 179 :lighter (global-reveal-mode nil " Reveal")
179 :keymap reveal-mode-map 180 :keymap reveal-mode-map
180 (if reveal-mode 181 (if reveal-mode
diff --git a/lisp/simple.el b/lisp/simple.el
index 20563dc5433..22716a819f4 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
@@ -293,7 +302,7 @@ select the source buffer."
293When turned on, cursor motion in the compilation, grep, occur or diff 302When turned on, cursor motion in the compilation, grep, occur or diff
294buffer causes automatic display of the corresponding source code 303buffer causes automatic display of the corresponding source code
295location." 304location."
296 nil " Fol" nil 305 :group 'next-error :init-value " Fol"
297 (if (not next-error-follow-minor-mode) 306 (if (not next-error-follow-minor-mode)
298 (remove-hook 'post-command-hook 'next-error-follow-mode-post-command-hook t) 307 (remove-hook 'post-command-hook 'next-error-follow-mode-post-command-hook t)
299 (add-hook 'post-command-hook 'next-error-follow-mode-post-command-hook nil t) 308 (add-hook 'post-command-hook 'next-error-follow-mode-post-command-hook nil t)
@@ -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
@@ -2396,7 +2441,7 @@ specifies the yank-handler text property to be set on the killed
2396text. See `insert-for-yank'." 2441text. See `insert-for-yank'."
2397 (interactive "r") 2442 (interactive "r")
2398 (condition-case nil 2443 (condition-case nil
2399 (let ((string (delete-and-extract-region beg end))) 2444 (let ((string (filter-buffer-substring beg end t)))
2400 (when string ;STRING is nil if BEG = END 2445 (when string ;STRING is nil if BEG = END
2401 ;; Add that string to the kill ring, one way or another. 2446 ;; Add that string to the kill ring, one way or another.
2402 (if (eq last-command 'kill-region) 2447 (if (eq last-command 'kill-region)
@@ -2432,8 +2477,8 @@ If `interprogram-cut-function' is non-nil, also save the text for a window
2432system cut and paste." 2477system cut and paste."
2433 (interactive "r") 2478 (interactive "r")
2434 (if (eq last-command 'kill-region) 2479 (if (eq last-command 'kill-region)
2435 (kill-append (buffer-substring beg end) (< end beg)) 2480 (kill-append (filter-buffer-substring beg end) (< end beg))
2436 (kill-new (buffer-substring beg end))) 2481 (kill-new (filter-buffer-substring beg end)))
2437 (if transient-mark-mode 2482 (if transient-mark-mode
2438 (setq deactivate-mark t)) 2483 (setq deactivate-mark t))
2439 nil) 2484 nil)
@@ -2958,7 +3003,7 @@ the user to see that the mark has moved, and you want the previous
2958mark position to be lost. 3003mark position to be lost.
2959 3004
2960Normally, when a new mark is set, the old one should go on the stack. 3005Normally, when a new mark is set, the old one should go on the stack.
2961This is why most applications should use push-mark, not set-mark. 3006This is why most applications should use `push-mark', not `set-mark'.
2962 3007
2963Novice Emacs Lisp programmers often try to use the mark for the wrong 3008Novice Emacs Lisp programmers often try to use the mark for the wrong
2964purposes. The mark saves a location for the user's convenience. 3009purposes. The mark saves a location for the user's convenience.
@@ -5186,14 +5231,6 @@ See also `normal-erase-is-backspace'."
5186 (message "Delete key deletes %s" 5231 (message "Delete key deletes %s"
5187 (if normal-erase-is-backspace "forward" "backward")))) 5232 (if normal-erase-is-backspace "forward" "backward"))))
5188 5233
5189(defcustom idle-update-delay 0.5
5190 "*Idle time delay before updating various things on the screen.
5191Various Emacs features that update auxiliary information when point moves
5192wait this many seconds after Emacs becomes idle before doing an update."
5193 :type 'number
5194 :group 'display
5195 :version "22.1")
5196
5197(defvar vis-mode-saved-buffer-invisibility-spec nil 5234(defvar vis-mode-saved-buffer-invisibility-spec nil
5198 "Saved value of `buffer-invisibility-spec' when Visible mode is on.") 5235 "Saved value of `buffer-invisibility-spec' when Visible mode is on.")
5199 5236
@@ -5205,6 +5242,7 @@ Enabling Visible mode makes all invisible text temporarily visible.
5205Disabling Visible mode turns off that effect. Visible mode 5242Disabling Visible mode turns off that effect. Visible mode
5206works by saving the value of `buffer-invisibility-spec' and setting it to nil." 5243works by saving the value of `buffer-invisibility-spec' and setting it to nil."
5207 :lighter " Vis" 5244 :lighter " Vis"
5245 :group 'editing-basics
5208 (when (local-variable-p 'vis-mode-saved-buffer-invisibility-spec) 5246 (when (local-variable-p 'vis-mode-saved-buffer-invisibility-spec)
5209 (setq buffer-invisibility-spec vis-mode-saved-buffer-invisibility-spec) 5247 (setq buffer-invisibility-spec vis-mode-saved-buffer-invisibility-spec)
5210 (kill-local-variable 'vis-mode-saved-buffer-invisibility-spec)) 5248 (kill-local-variable 'vis-mode-saved-buffer-invisibility-spec))
diff --git a/lisp/smerge-mode.el b/lisp/smerge-mode.el
index 35903dcf749..d6a93a935d6 100644
--- a/lisp/smerge-mode.el
+++ b/lisp/smerge-mode.el
@@ -1,6 +1,6 @@
1;;; smerge-mode.el --- Minor mode to resolve diff3 conflicts 1;;; smerge-mode.el --- Minor mode to resolve diff3 conflicts
2 2
3;; Copyright (C) 1999, 2000, 01, 03, 2004 Free Software Foundation, Inc. 3;; Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Stefan Monnier <monnier@cs.yale.edu> 5;; Author: Stefan Monnier <monnier@cs.yale.edu>
6;; Keywords: revision-control merge diff3 cvs conflict 6;; Keywords: revision-control merge diff3 cvs conflict
@@ -667,7 +667,7 @@ buffer names."
667(define-minor-mode smerge-mode 667(define-minor-mode smerge-mode
668 "Minor mode to simplify editing output from the diff3 program. 668 "Minor mode to simplify editing output from the diff3 program.
669\\{smerge-mode-map}" 669\\{smerge-mode-map}"
670 nil " SMerge" nil 670 :group 'smerge :lighter " SMerge"
671 (when (and (boundp 'font-lock-mode) font-lock-mode) 671 (when (and (boundp 'font-lock-mode) font-lock-mode)
672 (set (make-local-variable 'font-lock-multiline) t) 672 (set (make-local-variable 'font-lock-multiline) t)
673 (save-excursion 673 (save-excursion
diff --git a/lisp/startup.el b/lisp/startup.el
index aa7a16d1356..e3c2617c420 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -1008,8 +1008,27 @@ If this is nil, no message will be displayed."
1008using the mouse.\n\n" 1008using the mouse.\n\n"
1009 :face (variable-pitch :weight bold) 1009 :face (variable-pitch :weight bold)
1010 "Important Help menu items:\n" 1010 "Important Help menu items:\n"
1011 :face variable-pitch "\ 1011 :face variable-pitch
1012Emacs Tutorial\tLearn-by-doing tutorial for using Emacs efficiently 1012 (lambda ()
1013 (let* ((en "TUTORIAL")
1014 (tut (or (get-language-info current-language-environment
1015 'tutorial)
1016 en))
1017 (title (with-temp-buffer
1018 (insert-file-contents
1019 (expand-file-name tut data-directory)
1020 nil 0 256)
1021 (search-forward ".")
1022 (buffer-substring (point-min) (1- (point))))))
1023 ;; If there is a specific tutorial for the current language
1024 ;; environment and it is not English, append its title.
1025 (concat
1026 "Emacs Tutorial\tLearn how to use Emacs efficiently"
1027 (if (string= en tut)
1028 ""
1029 (concat " (" title ")"))
1030 "\n")))
1031 :face variable-pitch "\
1013Emacs FAQ\tFrequently asked questions and answers 1032Emacs FAQ\tFrequently asked questions and answers
1014Read the Emacs Manual\tView the Emacs manual using Info 1033Read the Emacs Manual\tView the Emacs manual using Info
1015\(Non)Warranty\tGNU Emacs comes with " 1034\(Non)Warranty\tGNU Emacs comes with "
@@ -1073,14 +1092,18 @@ Values less than 60 seconds are ignored."
1073 1092
1074(defun fancy-splash-insert (&rest args) 1093(defun fancy-splash-insert (&rest args)
1075 "Insert text into the current buffer, with faces. 1094 "Insert text into the current buffer, with faces.
1076Arguments from ARGS should be either strings or pairs `:face FACE', 1095Arguments from ARGS should be either strings, functions called
1096with no args that return a string, or pairs `:face FACE',
1077where FACE is a valid face specification, as it can be used with 1097where FACE is a valid face specification, as it can be used with
1078`put-text-properties'." 1098`put-text-properties'."
1079 (let ((current-face nil)) 1099 (let ((current-face nil))
1080 (while args 1100 (while args
1081 (if (eq (car args) :face) 1101 (if (eq (car args) :face)
1082 (setq args (cdr args) current-face (car args)) 1102 (setq args (cdr args) current-face (car args))
1083 (insert (propertize (car args) 1103 (insert (propertize (let ((it (car args)))
1104 (if (functionp it)
1105 (funcall it)
1106 it))
1084 'face current-face 1107 'face current-face
1085 'help-echo fancy-splash-help-echo))) 1108 'help-echo fancy-splash-help-echo)))
1086 (setq args (cdr args))))) 1109 (setq args (cdr args)))))
diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el
index fc677b3de44..3e5b77d8baa 100644
--- a/lisp/textmodes/bibtex.el
+++ b/lisp/textmodes/bibtex.el
@@ -1,6 +1,6 @@
1;;; bibtex.el --- BibTeX mode for GNU Emacs 1;;; bibtex.el --- BibTeX mode for GNU Emacs
2 2
3;; Copyright (C) 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2004 3;; Copyright (C) 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2004, 2005
4;; Free Software Foundation, Inc. 4;; Free Software Foundation, Inc.
5 5
6;; Author: Stefan Schoef <schoef@offis.uni-oldenburg.de> 6;; Author: Stefan Schoef <schoef@offis.uni-oldenburg.de>
@@ -784,41 +784,56 @@ Used by `bibtex-complete-crossref-cleanup' and `bibtex-copy-summary-as-kill'."
784 (function :tag "Personalized function"))) 784 (function :tag "Personalized function")))
785 785
786(defcustom bibtex-generate-url-list 786(defcustom bibtex-generate-url-list
787 '((("url" . ".*:.*")) 787 '((("url" . ".*:.*")))
788 ;; Example of a complex setup.
789 (("journal" . "\\<\\(PR[ABCDEL]?\\|RMP\\)\\>")
790 "http://link.aps.org/abstract/"
791 ("journal" ".*" downcase)
792 "/v"
793 ("volume" ".*" 0)
794 "/p"
795 ("pages" "\\`\\([0-9]+\\)" 1)))
796 "List of schemes for generating the URL of a BibTeX entry. 788 "List of schemes for generating the URL of a BibTeX entry.
797These schemes are used by `bibtex-url'. 789These schemes are used by `bibtex-url'.
798 790
799Each scheme is of the form ((FIELD . REGEXP) STEP...). 791Each scheme should have one of these forms:
800 792
801FIELD is a field name as returned by `bibtex-parse-entry'. 793 ((FIELD . REGEXP))
802REGEXP is matched against the text of FIELD. If the match succeeds, then 794 ((FIELD . REGEXP) STEP...)
803this scheme is used. If no STEPs are specified the matched text is used 795 ((FIELD . REGEXP) STRING STEP...)
804as the URL, otherwise the URL is built by concatenating the STEPs.
805
806A STEP can be a string or a list (FIELD REGEXP REPLACE) in which case
807the text of FIELD is matched against REGEXP, and is replaced with REPLACE.
808REPLACE can be a string, or a number (which selects the corresponding submatch)
809or a function called with the field's text as argument and with the
810`match-data' properly set.
811 796
812Case is always ignored. Always remove the field delimiters." 797FIELD is a field name as returned by `bibtex-parse-entry'.
798REGEXP is matched against the text of FIELD. If the match succeeds,
799then this scheme is used. If no STRING and STEPs are specified
800the matched text is used as the URL, otherwise the URL is built
801by evaluating STEPs. If no STRING is specified the STEPs must result
802in strings which are concatenated. Otherwise the resulting objects
803are passed through `format' using STRING as format control string.
804
805A STEP is a list (FIELD REGEXP REPLACE). The text of FIELD
806is matched against REGEXP, and is replaced with REPLACE.
807REPLACE can be a string, or a number (which selects the corresponding
808submatch), or a function called with the field's text as argument
809and with the `match-data' properly set.
810
811Case is always ignored. Always remove the field delimiters.
812
813The following is a complex example, see http://link.aps.org/linkfaq.html.
814
815 (((\"journal\" . \"\\\\=<\\(PR[ABCDEL]?\\|RMP\\)\\\\=>\")
816 \"http://link.aps.org/abstract/%s/v%s/p%s\"
817 (\"journal\" \".*\" downcase)
818 (\"volume\" \".*\" 0)
819 (\"pages\" \"\\`[A-Z]?[0-9]+\" 0)))"
813 :group 'bibtex 820 :group 'bibtex
814 :type '(repeat 821 :type '(repeat
815 (list :tag "Scheme" 822 (cons :tag "Scheme"
816 (cons :tag "Matcher" :extra-offset 4 823 (cons :tag "Matcher" :extra-offset 4
817 (string :tag "BibTeX field") 824 (string :tag "BibTeX field")
818 (regexp :tag "Regexp")) 825 (regexp :tag "Regexp"))
819 (repeat :tag "Steps to generate URL" :inline t 826 (choice
820 (choice 827 (const :tag "Take match as is" nil)
821 (string :tag "Literal text") 828 (cons :tag "Formatted"
829 (string :tag "Format control string")
830 (repeat :tag "Steps to generate URL"
831 (list (string :tag "BibTeX field")
832 (regexp :tag "Regexp")
833 (choice (string :tag "Replacement")
834 (integer :tag "Sub-match")
835 (function :tag "Filter")))))
836 (repeat :tag "Concatenated"
822 (list (string :tag "BibTeX field") 837 (list (string :tag "BibTeX field")
823 (regexp :tag "Regexp") 838 (regexp :tag "Regexp")
824 (choice (string :tag "Replacement") 839 (choice (string :tag "Replacement")
@@ -2662,11 +2677,10 @@ begins at the beginning of a line. We use this function for font-locking."
2662 (let ((lst bibtex-generate-url-list) url) 2677 (let ((lst bibtex-generate-url-list) url)
2663 (goto-char start) 2678 (goto-char start)
2664 (while (and (not found) 2679 (while (and (not found)
2665 (setq url (caar lst))) 2680 (setq url (car (pop lst))))
2666 (setq found (and (bibtex-string= field (car url)) 2681 (setq found (and (bibtex-string= field (car url))
2667 (re-search-forward (cdr url) end t) 2682 (re-search-forward (cdr url) end t)
2668 (>= (match-beginning 0) pnt)) 2683 (>= (match-beginning 0) pnt)))))
2669 lst (cdr lst))))
2670 (goto-char end)) 2684 (goto-char end))
2671 (if found (bibtex-button (match-beginning 0) (match-end 0) 2685 (if found (bibtex-button (match-beginning 0) (match-end 0)
2672 'bibtex-url (match-beginning 0))) 2686 'bibtex-url (match-beginning 0)))
@@ -4283,39 +4297,36 @@ The URL is generated using the schemes defined in `bibtex-generate-url-list'
4283 ;; Always ignore case, 4297 ;; Always ignore case,
4284 (case-fold-search t) 4298 (case-fold-search t)
4285 (lst bibtex-generate-url-list) 4299 (lst bibtex-generate-url-list)
4286 field url scheme) 4300 field url scheme obj fmt)
4287 (while (setq scheme (pop lst)) 4301 (while (setq scheme (pop lst))
4288 (when (and (setq field (cdr (assoc-string (caar scheme) 4302 (when (and (setq field (cdr (assoc-string (caar scheme)
4289 fields-alist t))) 4303 fields-alist t)))
4290 ;; Always remove field delimiters 4304 ;; Always remove field delimiters
4291 (progn (setq field (bibtex-remove-delimiters-string field)) 4305 (progn (setq field (bibtex-remove-delimiters-string field))
4292 (string-match (cdar scheme) field))) 4306 (string-match (cdar scheme) field)))
4293 (setq lst nil) 4307 (setq lst nil
4294 (if (null (cdr scheme)) 4308 scheme (cdr scheme)
4295 (setq url (match-string 0 field))) 4309 url (if (null scheme) (match-string 0 field)
4296 (dolist (step (cdr scheme)) 4310 (if (stringp (car scheme))
4297 (cond ((stringp step) 4311 (setq fmt (pop scheme)))
4298 (setq url (concat url step))) 4312 (dolist (step scheme)
4299 ((setq field (cdr (assoc-string (car step) fields-alist t))) 4313 ;; Always remove field delimiters
4300 ;; Always remove field delimiters 4314 (setq field (bibtex-remove-delimiters-string
4301 (setq field (bibtex-remove-delimiters-string field)) 4315 (cdr (assoc-string (car step) fields-alist t))))
4302 (if (string-match (nth 1 step) field) 4316 (if (string-match (nth 1 step) field)
4303 (setq field (cond 4317 (setq field (cond ((functionp (nth 2 step))
4304 ((functionp (nth 2 step)) 4318 (funcall (nth 2 step) field))
4305 (funcall (nth 2 step) field)) 4319 ((numberp (nth 2 step))
4306 ((numberp (nth 2 step)) 4320 (match-string (nth 2 step) field))
4307 (match-string (nth 2 step) field)) 4321 (t
4308 (t 4322 (replace-match (nth 2 step) t nil field))))
4309 (replace-match (nth 2 step) t nil field)))) 4323 ;; If the scheme is set up correctly,
4310 ;; If the scheme is set up correctly, 4324 ;; we should never reach this point
4311 ;; we should never reach this point 4325 (error "Match failed: %s" field))
4312 (error "Match failed: %s" field)) 4326 (push field obj))
4313 (setq url (concat url field))) 4327 (if fmt (apply 'format fmt (nreverse obj))
4314 ;; If the scheme is set up correctly, 4328 (apply 'concat (nreverse obj)))))
4315 ;; we should never reach this point 4329 (browse-url (message "%s" url))))
4316 (t (error "Step failed: %s" step))))
4317 (message "%s" url)
4318 (browse-url url)))
4319 (unless url (message "No URL known."))))) 4330 (unless url (message "No URL known.")))))
4320 4331
4321 4332
diff --git a/lisp/textmodes/enriched.el b/lisp/textmodes/enriched.el
index 71bb6cf137d..b1b5abc488f 100644
--- a/lisp/textmodes/enriched.el
+++ b/lisp/textmodes/enriched.el
@@ -1,6 +1,6 @@
1;;; enriched.el --- read and save files in text/enriched format 1;;; enriched.el --- read and save files in text/enriched format
2 2
3;; Copyright (c) 1994, 1995, 1996, 2002, 2004 Free Software Foundation, Inc. 3;; Copyright (c) 1994, 1995, 1996, 2002, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Author: Boris Goldowsky <boris@gnu.org> 5;; Author: Boris Goldowsky <boris@gnu.org>
6;; Keywords: wp, faces 6;; Keywords: wp, faces
@@ -183,7 +183,7 @@ etc/enriched.doc in the Emacs distribution directory.
183Commands: 183Commands:
184 184
185\\{enriched-mode-map}" 185\\{enriched-mode-map}"
186 nil " Enriched" nil 186 :group 'enriched :lighter " Enriched"
187 (cond ((null enriched-mode) 187 (cond ((null enriched-mode)
188 ;; Turn mode off 188 ;; Turn mode off
189 (setq buffer-file-format (delq 'text/enriched buffer-file-format)) 189 (setq buffer-file-format (delq 'text/enriched buffer-file-format))
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/org.el b/lisp/textmodes/org.el
index ab45434526a..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, 2005 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
@@ -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"))))
@@ -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/refill.el b/lisp/textmodes/refill.el
index 9979f4a3e27..d5f3b19cc9c 100644
--- a/lisp/textmodes/refill.el
+++ b/lisp/textmodes/refill.el
@@ -221,7 +221,9 @@ With prefix arg, turn Refill mode on iff arg is positive.
221When Refill mode is on, the current paragraph will be formatted when 221When Refill mode is on, the current paragraph will be formatted when
222changes are made within it. Self-inserting characters only cause 222changes are made within it. Self-inserting characters only cause
223refilling if they would cause auto-filling." 223refilling if they would cause auto-filling."
224 nil " Refill" '(("\177" . backward-delete-char-untabify)) 224 :group 'refill
225 :lighter " Refill"
226 :keymap '(("\177" . backward-delete-char-untabify))
225 ;; Remove old state if necessary 227 ;; Remove old state if necessary
226 (when refill-ignorable-overlay 228 (when refill-ignorable-overlay
227 (delete-overlay refill-ignorable-overlay) 229 (delete-overlay refill-ignorable-overlay)
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 6fcf5869143..c4019d39fe5 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -1804,7 +1804,7 @@ have <h1>Very Major Headlines</h1> through <h6>Very Minor Headlines</h6>
1804 1804
1805<p>Paragraphs only need an opening tag. Line breaks and multiple spaces are 1805<p>Paragraphs only need an opening tag. Line breaks and multiple spaces are
1806ignored unless the text is <pre>preformatted.</pre> Text can be marked as 1806ignored unless the text is <pre>preformatted.</pre> Text can be marked as
1807<b>bold</b>, <i>italic</i> or <u>underlined</u> using the normal M-g or 1807<b>bold</b>, <i>italic</i> or <u>underlined</u> using the normal M-o or
1808Edit/Text Properties/Face commands. 1808Edit/Text Properties/Face commands.
1809 1809
1810Pages can have <a name=\"SOMENAME\">named points</a> and can link other points 1810Pages 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 7e5d9fee78b..cc9ed23c6be 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/tooltip.el b/lisp/tooltip.el
index 6ed93a0e99e..59f82c12e31 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
@@ -469,27 +469,7 @@ This function must return nil if it doesn't handle EVENT."
469(defun tooltip-show-help-function (msg) 469(defun tooltip-show-help-function (msg)
470 "Function installed as `show-help-function'. 470 "Function installed as `show-help-function'.
471MSG is either a help string to display, or nil to cancel the display." 471MSG is either a help string to display, or nil to cancel the display."
472 (let ((previous-help tooltip-help-message) 472 (let ((previous-help tooltip-help-message))
473 mp pos)
474 (if (and mouse-1-click-follows-link
475 (stringp msg)
476 (save-match-data
477 (string-match "^mouse-2" msg))
478 (setq mp (mouse-pixel-position))
479 (consp (setq pos (cdr mp)))
480 (car pos) (>= (car pos) 0)
481 (cdr pos) (>= (cdr pos) 0)
482 (setq pos (posn-at-x-y (car pos) (cdr pos) (car mp)))
483 (windowp (posn-window pos)))
484 (with-current-buffer (window-buffer (posn-window pos))
485 (if (mouse-on-link-p pos)
486 (setq msg (concat
487 (cond
488 ((eq mouse-1-click-follows-link 'double) "double-")
489 ((and (integerp mouse-1-click-follows-link)
490 (< mouse-1-click-follows-link 0)) "Long ")
491 (t ""))
492 "mouse-1" (substring msg 7))))))
493 (setq tooltip-help-message msg) 473 (setq tooltip-help-message msg)
494 (cond ((null msg) 474 (cond ((null msg)
495 ;; Cancel display. This also cancels a delayed tip, if 475 ;; Cancel display. This also cancels a delayed tip, if
diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog
index 5a3bf23529c..82b7f64dc01 100644
--- a/lisp/url/ChangeLog
+++ b/lisp/url/ChangeLog
@@ -1,3 +1,7 @@
12005-04-04 Lute Kamstra <lute@gnu.org>
2
3 * url-handlers.el (url-handler-mode): Specify :group.
4
12005-02-26 James Cloos <cloos@jhcloos.com> (tiny change) 52005-02-26 James Cloos <cloos@jhcloos.com> (tiny change)
2 6
3 * url-history.el (url-have-visited-url): Don't barf if 7 * url-history.el (url-have-visited-url): Don't barf if
diff --git a/lisp/url/url-handlers.el b/lisp/url/url-handlers.el
index f90f21a3dbe..68bf0ec7ab5 100644
--- a/lisp/url/url-handlers.el
+++ b/lisp/url/url-handlers.el
@@ -1,6 +1,6 @@
1;;; url-handlers.el --- file-name-handler stuff for URL loading 1;;; url-handlers.el --- file-name-handler stuff for URL loading
2 2
3;; Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc. 3;; Copyright (c) 1996, 1997, 1998, 1999, 2004, 2005 Free Software Foundation, Inc.
4 4
5;; Keywords: comm, data, processes, hypermedia 5;; Keywords: comm, data, processes, hypermedia
6 6
@@ -106,7 +106,7 @@ particularly bad at this\).")
106;;;###autoload 106;;;###autoload
107(define-minor-mode url-handler-mode 107(define-minor-mode url-handler-mode
108 "Use URL to handle URL-like file names." 108 "Use URL to handle URL-like file names."
109 :global t 109 :global t :group 'url
110 (if (not (boundp 'file-name-handler-alist)) 110 (if (not (boundp 'file-name-handler-alist))
111 ;; Can't be turned ON anyway. 111 ;; Can't be turned ON anyway.
112 (setq url-handler-mode nil) 112 (setq url-handler-mode nil)
diff --git a/lisp/url/vc-dav.el b/lisp/url/vc-dav.el
index e0e32f5da1a..3bf03165564 100644
--- a/lisp/url/vc-dav.el
+++ b/lisp/url/vc-dav.el
@@ -21,6 +21,11 @@
21;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, 21;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
22;; Boston, MA 02111-1307, USA. 22;; Boston, MA 02111-1307, USA.
23 23
24
25;;; Commentary:
26
27;;; Code:
28
24(require 'url) 29(require 'url)
25(require 'url-dav) 30(require 'url-dav)
26 31
@@ -175,4 +180,5 @@ It should return a status of either 0 (no differences found), or
175 180
176(provide 'vc-dav) 181(provide 'vc-dav)
177 182
178;;; arch-tag: 0a0fb9fe-8190-4c0a-a179-5c291d3a467e 183;; arch-tag: 0a0fb9fe-8190-4c0a-a179-5c291d3a467e
184;;; vc-dav.el ends here
diff --git a/lisp/vc-hooks.el b/lisp/vc-hooks.el
index 81a18eadd87..52b4659cec6 100644
--- a/lisp/vc-hooks.el
+++ b/lisp/vc-hooks.el
@@ -481,7 +481,9 @@ and does not employ any heuristic at all."
481 "Return non-nil if FILE has not changed since the last checkout." 481 "Return non-nil if FILE has not changed since the last checkout."
482 (let ((checkout-time (vc-file-getprop file 'vc-checkout-time)) 482 (let ((checkout-time (vc-file-getprop file 'vc-checkout-time))
483 (lastmod (nth 5 (file-attributes file)))) 483 (lastmod (nth 5 (file-attributes file))))
484 (if checkout-time 484 (if (and checkout-time
485 ;; Tramp and Ange-FTP return this when they don't know the time.
486 (not (equal lastmod '(0 0))))
485 (equal checkout-time lastmod) 487 (equal checkout-time lastmod)
486 (let ((unchanged (vc-call workfile-unchanged-p file))) 488 (let ((unchanged (vc-call workfile-unchanged-p file)))
487 (vc-file-setprop file 'vc-checkout-time (if unchanged lastmod 0)) 489 (vc-file-setprop file 'vc-checkout-time (if unchanged lastmod 0))
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/lisp/xt-mouse.el b/lisp/xt-mouse.el
index 131f95db7d0..4f7e19623fe 100644
--- a/lisp/xt-mouse.el
+++ b/lisp/xt-mouse.el
@@ -155,8 +155,11 @@
155 "Toggle XTerm mouse mode. 155 "Toggle XTerm mouse mode.
156With prefix arg, turn XTerm mouse mode on iff arg is positive. 156With prefix arg, turn XTerm mouse mode on iff arg is positive.
157 157
158Turn it on to use emacs mouse commands, and off to use xterm mouse commands." 158Turn it on to use Emacs mouse commands, and off to use xterm mouse commands.
159 nil " Mouse" nil :global t 159This works in terminal emulators compatible with xterm. Only single clicks
160are supported. When turned on, the normal xterm mouse functionality is still
161available by holding down the SHIFT key while pressing the mouse button."
162 nil " Mouse" nil :global t :group 'mouse
160 (if xterm-mouse-mode 163 (if xterm-mouse-mode
161 ;; Turn it on 164 ;; Turn it on
162 (unless window-system 165 (unless window-system
diff --git a/lispref/ChangeLog b/lispref/ChangeLog
index e6c901f786e..0f778a1591c 100644
--- a/lispref/ChangeLog
+++ b/lispref/ChangeLog
@@ -1,3 +1,40 @@
12005-04-03 Lute Kamstra <lute@gnu.org>
2
3 * hooks.texi (Standard Hooks): Add some hooks. Add cross
4 references and/or descriptions. Delete major mode hooks; mention
5 them as a category instead. Rename or delete obsolete hooks.
6
72005-04-02 Richard M. Stallman <rms@gnu.org>
8
9 * nonascii.texi (Coding System Basics): Another wording cleanup.
10
112005-04-01 Richard M. Stallman <rms@gnu.org>
12
13 * nonascii.texi (Coding System Basics): Clarify previous change.
14
152005-04-01 Kenichi Handa <handa@m17n.org>
16
17 * nonascii.texi (Coding System Basics): Describe about rondtrip
18 identity of coding systems.
19
202005-03-29 Chong Yidong <cyd@stupidchicken.com>
21
22 * text.texi (Buffer Contents): Add filter-buffer-substring and
23 buffer-substring-filters.
24
252005-03-26 Chong Yidong <cyd@stupidchicken.com>
26
27 * anti.texi (Antinews): Mention `G' interactive code.
28
29 * tips.texi (Compilation Tips): Mention benchmark.el.
30
312005-03-27 Luc Teirlinck <teirllm@auburn.edu>
32
33 * modes.texi (Other Font Lock Variables): `font-lock-fontify-block'
34 is now bound to M-o M-o.
35
36 * keymaps.texi (Prefix Keys): `facemenu-keymap' is now on M-o.
37
12005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk> 382005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk>
2 39
3 * calendar.texi: Delete file (and move contents to emacs-xtra.texi 40 * calendar.texi: Delete file (and move contents to emacs-xtra.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/hooks.texi b/lispref/hooks.texi
index 1aa22b94686..ea7c6605796 100644
--- a/lispref/hooks.texi
+++ b/lispref/hooks.texi
@@ -1,6 +1,6 @@
1@c -*-texinfo-*- 1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual. 2@c This is part of the GNU Emacs Lisp Reference Manual.
3@c Copyright (C) 1990, 1991, 1992, 1993, 1998, 2004 Free Software Foundation, Inc. 3@c Copyright (C) 1990, 1991, 1992, 1993, 1998, 2004, 2005 Free Software Foundation, Inc.
4@c See the file elisp.texi for copying conditions. 4@c See the file elisp.texi for copying conditions.
5@setfilename ../info/hooks 5@setfilename ../info/hooks
6@node Standard Hooks, Index, Standard Keymaps, Top 6@node Standard Hooks, Index, Standard Keymaps, Top
@@ -16,6 +16,11 @@ arguments and their values are completely ignored. The recommended way
16to put a new function on such a hook is to call @code{add-hook}. 16to put a new function on such a hook is to call @code{add-hook}.
17@xref{Hooks}, for more information about using hooks. 17@xref{Hooks}, for more information about using hooks.
18 18
19Every major mode defines a mode hook named
20@samp{@var{modename}-mode-hook}. The major mode command runs this
21normal hook with @code{run-mode-hooks} as the very last thing it does.
22@xref{Mode Hooks}. Mode hooks are omitted in the list below.
23
19The variables whose names end in @samp{-hooks} or @samp{-functions} are 24The variables whose names end in @samp{-hooks} or @samp{-functions} are
20usually @dfn{abnormal hooks}; their values are lists of functions, but 25usually @dfn{abnormal hooks}; their values are lists of functions, but
21these functions are called in a special way (they are passed arguments, 26these functions are called in a special way (they are passed arguments,
@@ -28,118 +33,229 @@ as their values. (In older Emacs versions, some of these variables had
28names ending in @samp{-hook} even though they were not normal hooks; 33names ending in @samp{-hook} even though they were not normal hooks;
29however, we have renamed all of those.) 34however, we have renamed all of those.)
30 35
31@c !!! need xref to where each hook is documented or else document it 36@c We need to xref to where each hook is documented or else document
32@c by specifying what is expected, and when it is called relative to 37@c it here.
33@c mode initialization.
34 38
35@table @code 39@table @code
36@item activate-mark-hook 40@item activate-mark-hook
41@xref{The Mark}.
42
37@item after-change-functions 43@item after-change-functions
44@xref{Change Hooks}.
45
38@item after-change-major-mode-hook 46@item after-change-major-mode-hook
47@xref{Mode Hooks}.
48
39@item after-init-hook 49@item after-init-hook
50@xref{Init File}.
51
40@item after-insert-file-functions 52@item after-insert-file-functions
53@xref{Saving Properties}.
54
41@item after-make-frame-functions 55@item after-make-frame-functions
56@xref{Creating Frames}.
57
42@item after-revert-hook 58@item after-revert-hook
59@xref{Reverting}.
60
43@item after-save-hook 61@item after-save-hook
44@item apropos-mode-hook 62@xref{Saving Buffers}.
63
45@item auto-fill-function 64@item auto-fill-function
65@xref{Auto Filling}.
66
46@item auto-save-hook 67@item auto-save-hook
68@xref{Auto-Saving}.
69
47@item before-change-functions 70@item before-change-functions
71@xref{Change Hooks}.
72
48@item before-init-hook 73@item before-init-hook
74@xref{Init File}.
75
49@item before-make-frame-hook 76@item before-make-frame-hook
77@xref{Creating Frames}.
78
50@item before-revert-hook 79@item before-revert-hook
80@xref{Reverting}.
81
51@item before-save-hook 82@item before-save-hook
83@xref{Saving Buffers}.
84
52@item blink-paren-function 85@item blink-paren-function
86@xref{Blinking}.
87
53@item buffer-access-fontify-functions 88@item buffer-access-fontify-functions
54@item c-mode-hook 89@xref{Lazy Properties}.
90
55@item calendar-load-hook 91@item calendar-load-hook
92@inforef{Calendar Customizing,, emacs-xtra}.
93
56@item change-major-mode-hook 94@item change-major-mode-hook
57@item command-history-hook 95@xref{Creating Buffer-Local}.
96
58@item command-line-functions 97@item command-line-functions
98@xref{Command-Line Arguments}.
99
59@item comment-indent-function 100@item comment-indent-function
101@xref{Options for Comments,, Options Controlling Comments, emacs, the
102GNU Emacs Manual}.
103
60@item custom-define-hook 104@item custom-define-hook
105Hook called after defining each customize option.
106
61@item deactivate-mark-hook 107@item deactivate-mark-hook
108@xref{The Mark}.
109
62@item desktop-after-read-hook 110@item desktop-after-read-hook
111Normal hook run after a successful @code{desktop-read}. May be used
112to show a buffer list. @xref{Saving Emacs Sessions,, Saving Emacs
113Sessions, emacs, the GNU Emacs Manual}.
114
63@item desktop-no-desktop-file-hook 115@item desktop-no-desktop-file-hook
116Normal hook run when @code{desktop-read} can't find a desktop file.
117May be used to show a dired buffer. @xref{Saving Emacs Sessions,,
118Saving Emacs Sessions, emacs, the GNU Emacs Manual}.
119
64@item desktop-save-hook 120@item desktop-save-hook
121Normal hook run before the desktop is saved in a desktop file. This
122is useful for truncating history lists, for example. @xref{Saving
123Emacs Sessions,, Saving Emacs Sessions, emacs, the GNU Emacs Manual}.
124
65@item diary-display-hook 125@item diary-display-hook
126@inforef{Fancy Diary Display,, emacs-xtra}.
127
66@item diary-hook 128@item diary-hook
67@item dired-mode-hook 129List of functions called after the display of the diary. Can be used
130for appointment notification.
131
68@item disabled-command-function 132@item disabled-command-function
133@xref{Disabling Commands}.
134
69@item echo-area-clear-hook 135@item echo-area-clear-hook
70@item edit-picture-hook 136@xref{The Echo Area}.
71@item electric-buffer-menu-mode-hook 137
72@item electric-command-history-hook 138@item emacs-startup-hook
73@item electric-help-mode-hook 139@xref{Init File}.
74@item emacs-lisp-mode-hook 140
75@item find-file-hook 141@item find-file-hook
142@xref{Visiting Functions}.
143
76@item find-file-not-found-functions 144@item find-file-not-found-functions
145@xref{Visiting Functions}.
146
77@item first-change-hook 147@item first-change-hook
78@item fortran-comment-hook 148@xref{Change Hooks}.
79@item fortran-mode-hook 149
80@item indent-mim-hook
81@item initial-calendar-window-hook 150@item initial-calendar-window-hook
151@inforef{Calendar Customizing,, emacs-xtra}.
152
82@item kbd-macro-termination-hook 153@item kbd-macro-termination-hook
154@xref{Keyboard Macros}.
155
83@item kill-buffer-hook 156@item kill-buffer-hook
157@xref{Killing Buffers}.
158
84@item kill-buffer-query-functions 159@item kill-buffer-query-functions
160@xref{Killing Buffers}.
161
85@item kill-emacs-hook 162@item kill-emacs-hook
163@xref{Killing Emacs}.
164
86@item kill-emacs-query-functions 165@item kill-emacs-query-functions
87@item LaTeX-mode-hook 166@xref{Killing Emacs}.
88@item ledit-mode-hook 167
89@item lisp-indent-function 168@item lisp-indent-function
90@item lisp-interaction-mode-hook 169
91@item lisp-mode-hook
92@item list-diary-entries-hook 170@item list-diary-entries-hook
93@item mail-mode-hook 171@inforef{Fancy Diary Display,, emacs-xtra}.
172
94@item mail-setup-hook 173@item mail-setup-hook
174@xref{Mail Mode Misc,, Mail Mode Miscellany, emacs, the GNU Emacs
175Manual}.
176
95@item mark-diary-entries-hook 177@item mark-diary-entries-hook
96@item medit-mode-hook 178@inforef{Fancy Diary Display,, emacs-xtra}.
179
97@item menu-bar-update-hook 180@item menu-bar-update-hook
181@xref{Menu Bar}.
182
98@item minibuffer-setup-hook 183@item minibuffer-setup-hook
184@xref{Minibuffer Misc}.
185
99@item minibuffer-exit-hook 186@item minibuffer-exit-hook
187@xref{Minibuffer Misc}.
188
100@item mouse-position-function 189@item mouse-position-function
101@item news-mode-hook 190@xref{Mouse Position}.
102@item news-reply-mode-hook 191
103@item news-setup-hook
104@item nongregorian-diary-listing-hook 192@item nongregorian-diary-listing-hook
193@inforef{Hebrew/Islamic Entries,, emacs-xtra}.
194
105@item nongregorian-diary-marking-hook 195@item nongregorian-diary-marking-hook
106@item nroff-mode-hook 196@inforef{Hebrew/Islamic Entries,, emacs-xtra}.
107@item outline-mode-hook 197
108@item plain-TeX-mode-hook
109@item post-command-hook 198@item post-command-hook
199@xref{Command Overview}.
200
110@item pre-abbrev-expand-hook 201@item pre-abbrev-expand-hook
202@xref{Abbrev Expansion}.
203
111@item pre-command-hook 204@item pre-command-hook
205@xref{Command Overview}.
206
112@item print-diary-entries-hook 207@item print-diary-entries-hook
113@item prolog-mode-hook 208@inforef{Diary Customizing,, emacs-xtra}.
114@item protect-innocence-hook 209
115@item redisplay-end-trigger-functions 210@item redisplay-end-trigger-functions
116@item rmail-edit-mode-hook 211@xref{Window Hooks}.
117@item rmail-mode-hook 212
118@item rmail-summary-mode-hook 213@item scheme-indent-function
119@item scheme-indent-hook 214
120@item scheme-mode-hook
121@item scribe-mode-hook
122@item shell-mode-hook
123@item shell-set-directory-error-hook
124@item suspend-hook 215@item suspend-hook
216@xref{Suspending Emacs}.
217
125@item suspend-resume-hook 218@item suspend-resume-hook
219@xref{Suspending Emacs}.
220
221@item temp-buffer-setup-hook
222@xref{Temporary Displays}.
223
126@item temp-buffer-show-function 224@item temp-buffer-show-function
225@xref{Temporary Displays}.
226
227@item temp-buffer-show-hook
228@xref{Temporary Displays}.
229
127@item term-setup-hook 230@item term-setup-hook
128@item terminal-mode-hook 231@xref{Terminal-Specific}.
129@item terminal-mode-break-hook 232
130@item TeX-mode-hook
131@item text-mode-hook
132@item today-visible-calendar-hook 233@item today-visible-calendar-hook
234@inforef{Calendar Customizing,, emacs-xtra}.
235
133@item today-invisible-calendar-hook 236@item today-invisible-calendar-hook
134@item vi-mode-hook 237@inforef{Calendar Customizing,, emacs-xtra}.
135@item view-hook 238
136@item window-configuration-change-hook 239@item window-configuration-change-hook
240@xref{Window Hooks}.
241
137@item window-scroll-functions 242@item window-scroll-functions
243@xref{Window Hooks}.
244
138@item window-setup-hook 245@item window-setup-hook
246@xref{Window Systems}.
247
139@item window-size-change-functions 248@item window-size-change-functions
249@xref{Window Hooks}.
250
140@item write-contents-functions 251@item write-contents-functions
252@xref{Saving Buffers}.
253
141@item write-file-functions 254@item write-file-functions
255@xref{Saving Buffers}.
256
142@item write-region-annotate-functions 257@item write-region-annotate-functions
258@xref{Saving Properties}.
143@end table 259@end table
144 260
145@ignore 261@ignore
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/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/nonascii.texi b/lispref/nonascii.texi
index 70e77e0a837..aaa23e90a48 100644
--- a/lispref/nonascii.texi
+++ b/lispref/nonascii.texi
@@ -628,6 +628,27 @@ characters; for example, there are three coding systems for the Cyrillic
628conversion, but some of them leave the choice unspecified---to be chosen 628conversion, but some of them leave the choice unspecified---to be chosen
629heuristically for each file, based on the data. 629heuristically for each file, based on the data.
630 630
631 In general, a coding system doesn't guarantee roundtrip identity:
632decoding a byte sequence using coding system, then encoding the
633resulting text in the same coding system, can produce a different byte
634sequence. However, the following coding systems do guarantee that the
635byte sequence will be the same as what you originally decoded:
636
637@quotation
638chinese-big5 chinese-iso-8bit cyrillic-iso-8bit emacs-mule
639greek-iso-8bit hebrew-iso-8bit iso-latin-1 iso-latin-2 iso-latin-3
640iso-latin-4 iso-latin-5 iso-latin-8 iso-latin-9 iso-safe
641japanese-iso-8bit japanese-shift-jis korean-iso-8bit raw-text
642@end quotation
643
644 Encoding buffer text and then decoding the result can also fail to
645reproduce the original text. For instance, if you encode Latin-2
646characters with @code{utf-8} and decode the result using the same
647coding system, you'll get Unicode characters (of charset
648@code{mule-unicode-0100-24ff}). If you encode Unicode characters with
649@code{iso-latin-2} and decode the result with the same coding system,
650you'll get Latin-2 characters.
651
631@cindex end of line conversion 652@cindex end of line conversion
632 @dfn{End of line conversion} handles three different conventions used 653 @dfn{End of line conversion} handles three different conventions used
633on various systems for representing end of line in files. The Unix 654on various systems for representing end of line in files. The Unix
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/lwlib/ChangeLog b/lwlib/ChangeLog
index 7823673ec1b..d085f41ff77 100644
--- a/lwlib/ChangeLog
+++ b/lwlib/ChangeLog
@@ -1,3 +1,16 @@
12005-04-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
2
3 Reenable support for I18N to Lucid menus.
4
5 * xlwmenuP.h (_XlwMenu_part): Add fontSet resource.
6
7 * xlwmenu.c (string_width):
8 (MENU_FONT_HEIGHT, MENU_FONT_ASCENT): Ditto.
9 (display_menu_item, make_drawing_gcs, XlwMenuInitialize)
10 (XlwMenuSetValues): Use font if fontSet is NULL, use only
11 font for !HAVE_X_I18N.
12 (xlwMenuResources): Add fontSet resource.
13
12005-03-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> 142005-03-22 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
2 15
3 * xlwmenuP.h: Temporary #undef HAVE_X_I18N until FontSet for UTF-8 16 * xlwmenuP.h: Temporary #undef HAVE_X_I18N until FontSet for UTF-8
diff --git a/lwlib/xlwmenu.c b/lwlib/xlwmenu.c
index 77b61d32e21..3fab2e80dbe 100644
--- a/lwlib/xlwmenu.c
+++ b/lwlib/xlwmenu.c
@@ -131,20 +131,16 @@ xlwMenuTranslations [] =
131 131
132/* FIXME: F10 should enter the menu, the first one in the menu-bar. */ 132/* FIXME: F10 should enter the menu, the first one in the menu-bar. */
133 133
134/* FIXME: HAVE_X_I18N does not work yet. */
135#undef HAVE_X_I18N
136
137#define offset(field) XtOffset(XlwMenuWidget, field) 134#define offset(field) XtOffset(XlwMenuWidget, field)
138static XtResource 135static XtResource
139xlwMenuResources[] = 136xlwMenuResources[] =
140{ 137{
141#ifdef HAVE_X_I18N 138#ifdef HAVE_X_I18N
142 {XtNfont, XtCFont, XtRFontSet, sizeof(XFontSet), 139 {XtNfontSet, XtCFontSet, XtRFontSet, sizeof(XFontSet),
143 offset(menu.font), XtRString, "XtDefaultFontSet"}, 140 offset(menu.fontSet), XtRFontSet, NULL},
144#else 141#endif
145 {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), 142 {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *),
146 offset(menu.font), XtRString, "XtDefaultFont"}, 143 offset(menu.font), XtRString, "XtDefaultFont"},
147#endif
148 {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), 144 {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
149 offset(menu.foreground), XtRString, "XtDefaultForeground"}, 145 offset(menu.foreground), XtRString, "XtDefaultForeground"},
150 {XtNdisabledForeground, XtCDisabledForeground, XtRPixel, sizeof(Pixel), 146 {XtNdisabledForeground, XtCDisabledForeground, XtRPixel, sizeof(Pixel),
@@ -361,24 +357,31 @@ string_width (mw, s)
361 XlwMenuWidget mw; 357 XlwMenuWidget mw;
362 char *s; 358 char *s;
363{ 359{
364#ifdef HAVE_X_I18N
365 XRectangle ink, logical;
366 XmbTextExtents (mw->menu.font, s, strlen (s), &ink, &logical);
367 return logical.width;
368#else
369 XCharStruct xcs; 360 XCharStruct xcs;
370 int drop; 361 int drop;
362#ifdef HAVE_X_I18N
363 XRectangle ink, logical;
364 if (mw->menu.fontSet)
365 {
366 XmbTextExtents (mw->menu.fontSet, s, strlen (s), &ink, &logical);
367 return logical.width;
368 }
369#endif
371 370
372 XTextExtents (mw->menu.font, s, strlen (s), &drop, &drop, &drop, &xcs); 371 XTextExtents (mw->menu.font, s, strlen (s), &drop, &drop, &drop, &xcs);
373 return xcs.width; 372 return xcs.width;
374#endif 373
375} 374}
376 375
377#ifdef HAVE_X_I18N 376#ifdef HAVE_X_I18N
378#define MENU_FONT_HEIGHT(mw) \ 377#define MENU_FONT_HEIGHT(mw) \
379 ((mw)->menu.font_extents->max_logical_extent.height) 378 ((mw)->menu.fontSet != NULL \
379 ? (mw)->menu.font_extents->max_logical_extent.height \
380 : (mw)->menu.font->ascent + (mw)->menu.font->descent)
380#define MENU_FONT_ASCENT(mw) \ 381#define MENU_FONT_ASCENT(mw) \
381 (- (mw)->menu.font_extents->max_logical_extent.y) 382 ((mw)->menu.fontSet != NULL \
383 ? - (mw)->menu.font_extents->max_logical_extent.y \
384 : (mw)->menu.font->ascent)
382#else 385#else
383#define MENU_FONT_HEIGHT(mw) \ 386#define MENU_FONT_HEIGHT(mw) \
384 ((mw)->menu.font->ascent + (mw)->menu.font->descent) 387 ((mw)->menu.font->ascent + (mw)->menu.font->descent)
@@ -1053,10 +1056,14 @@ display_menu_item (mw, val, ws, where, highlighted_p, horizontal_p,
1053 1056
1054 1057
1055#ifdef HAVE_X_I18N 1058#ifdef HAVE_X_I18N
1056 XmbDrawString (XtDisplay (mw), ws->window, mw->menu.font, 1059 if (mw->menu.fontSet)
1057#else 1060 XmbDrawString (XtDisplay (mw), ws->window, mw->menu.fontSet,
1058 XDrawString (XtDisplay (mw), ws->window, 1061 text_gc, x_offset,
1062 y + v_spacing + shadow + font_ascent,
1063 display_string, strlen (display_string));
1064 else
1059#endif 1065#endif
1066 XDrawString (XtDisplay (mw), ws->window,
1060 text_gc, x_offset, 1067 text_gc, x_offset,
1061 y + v_spacing + shadow + font_ascent, 1068 y + v_spacing + shadow + font_ascent,
1062 display_string, strlen (display_string)); 1069 display_string, strlen (display_string));
@@ -1083,10 +1090,16 @@ display_menu_item (mw, val, ws, where, highlighted_p, horizontal_p,
1083 else if (val->key) 1090 else if (val->key)
1084 { 1091 {
1085#ifdef HAVE_X_I18N 1092#ifdef HAVE_X_I18N
1086 XmbDrawString (XtDisplay (mw), ws->window, mw->menu.font, 1093 if (mw->menu.fontSet)
1087#else 1094 XmbDrawString (XtDisplay (mw), ws->window,
1088 XDrawString (XtDisplay (mw), ws->window, 1095 mw->menu.fontSet,
1096 text_gc,
1097 x + label_width + mw->menu.arrow_spacing,
1098 y + v_spacing + shadow + font_ascent,
1099 val->key, strlen (val->key));
1100 else
1089#endif 1101#endif
1102 XDrawString (XtDisplay (mw), ws->window,
1090 text_gc, 1103 text_gc,
1091 x + label_width + mw->menu.arrow_spacing, 1104 x + label_width + mw->menu.arrow_spacing,
1092 y + v_spacing + shadow + font_ascent, 1105 y + v_spacing + shadow + font_ascent,
@@ -1493,34 +1506,25 @@ make_drawing_gcs (mw)
1493{ 1506{
1494 XGCValues xgcv; 1507 XGCValues xgcv;
1495 float scale; 1508 float scale;
1509 XtGCMask mask = GCForeground | GCBackground;
1496 1510
1497#ifndef HAVE_X_I18N 1511#ifdef HAVE_X_I18N
1512 if (!mw->menu.fontSet)
1513 {
1514 xgcv.font = mw->menu.font->fid;
1515 mask |= GCFont;
1516 }
1517#else
1498 xgcv.font = mw->menu.font->fid; 1518 xgcv.font = mw->menu.font->fid;
1519 mask |= GCFont;
1499#endif 1520#endif
1500 xgcv.foreground = mw->menu.foreground; 1521 xgcv.foreground = mw->menu.foreground;
1501 xgcv.background = mw->core.background_pixel; 1522 xgcv.background = mw->core.background_pixel;
1502 mw->menu.foreground_gc = XtGetGC ((Widget)mw, 1523 mw->menu.foreground_gc = XtGetGC ((Widget)mw, mask, &xgcv);
1503#ifndef HAVE_X_I18N
1504 GCFont |
1505#endif
1506 GCForeground | GCBackground,
1507 &xgcv);
1508 1524
1509#ifndef HAVE_X_I18N
1510 xgcv.font = mw->menu.font->fid;
1511#endif
1512 xgcv.foreground = mw->menu.button_foreground; 1525 xgcv.foreground = mw->menu.button_foreground;
1513 xgcv.background = mw->core.background_pixel; 1526 mw->menu.button_gc = XtGetGC ((Widget)mw, mask, &xgcv);
1514 mw->menu.button_gc = XtGetGC ((Widget)mw,
1515#ifndef HAVE_X_I18N
1516 GCFont |
1517#endif
1518 GCForeground | GCBackground,
1519 &xgcv);
1520 1527
1521#ifndef HAVE_X_I18N
1522 xgcv.font = mw->menu.font->fid;
1523#endif
1524 xgcv.background = mw->core.background_pixel; 1528 xgcv.background = mw->core.background_pixel;
1525 1529
1526#define BRIGHTNESS(color) (((color) & 0xff) + (((color) >> 8) & 0xff) + (((color) >> 16) & 0xff)) 1530#define BRIGHTNESS(color) (((color) & 0xff) + (((color) >> 8) & 0xff) + (((color) >> 16) & 0xff))
@@ -1545,49 +1549,26 @@ make_drawing_gcs (mw)
1545 xgcv.foreground = mw->menu.foreground; 1549 xgcv.foreground = mw->menu.foreground;
1546 xgcv.fill_style = FillStippled; 1550 xgcv.fill_style = FillStippled;
1547 xgcv.stipple = mw->menu.gray_pixmap; 1551 xgcv.stipple = mw->menu.gray_pixmap;
1548 mw->menu.disabled_gc = XtGetGC ((Widget)mw, 1552 mw->menu.disabled_gc = XtGetGC ((Widget)mw, mask
1549#ifndef HAVE_X_I18N
1550 GCFont |
1551#endif
1552 GCForeground | GCBackground
1553 | GCFillStyle | GCStipple, &xgcv); 1553 | GCFillStyle | GCStipple, &xgcv);
1554 } 1554 }
1555 else 1555 else
1556 { 1556 {
1557 /* Many colors available, use disabled pixel. */ 1557 /* Many colors available, use disabled pixel. */
1558 xgcv.foreground = mw->menu.disabled_foreground; 1558 xgcv.foreground = mw->menu.disabled_foreground;
1559 mw->menu.disabled_gc = XtGetGC ((Widget)mw, 1559 mw->menu.disabled_gc = XtGetGC ((Widget)mw, mask, &xgcv);
1560#ifndef HAVE_X_I18N
1561 GCFont |
1562#endif
1563 GCForeground | GCBackground, &xgcv);
1564 } 1560 }
1565 1561
1566#ifndef HAVE_X_I18N
1567 xgcv.font = mw->menu.font->fid;
1568#endif
1569 xgcv.foreground = mw->menu.button_foreground; 1562 xgcv.foreground = mw->menu.button_foreground;
1570 xgcv.background = mw->core.background_pixel; 1563 xgcv.background = mw->core.background_pixel;
1571 xgcv.fill_style = FillStippled; 1564 xgcv.fill_style = FillStippled;
1572 xgcv.stipple = mw->menu.gray_pixmap; 1565 xgcv.stipple = mw->menu.gray_pixmap;
1573 mw->menu.inactive_button_gc = XtGetGC ((Widget)mw, 1566 mw->menu.inactive_button_gc = XtGetGC ((Widget)mw, mask
1574#ifndef HAVE_X_I18N
1575 GCFont |
1576#endif
1577 GCForeground | GCBackground
1578 | GCFillStyle | GCStipple, &xgcv); 1567 | GCFillStyle | GCStipple, &xgcv);
1579 1568
1580#ifndef HAVE_X_I18N
1581 xgcv.font = mw->menu.font->fid;
1582#endif
1583 xgcv.foreground = mw->core.background_pixel; 1569 xgcv.foreground = mw->core.background_pixel;
1584 xgcv.background = mw->menu.foreground; 1570 xgcv.background = mw->menu.foreground;
1585 mw->menu.background_gc = XtGetGC ((Widget)mw, 1571 mw->menu.background_gc = XtGetGC ((Widget)mw, mask, &xgcv);
1586#ifndef HAVE_X_I18N
1587 GCFont |
1588#endif
1589 GCForeground | GCBackground,
1590 &xgcv);
1591} 1572}
1592 1573
1593static void 1574static void
@@ -1793,14 +1774,14 @@ XlwMenuInitialize (request, mw, args, num_args)
1793 gray_bitmap_width, gray_bitmap_height, 1774 gray_bitmap_width, gray_bitmap_height,
1794 (unsigned long)1, (unsigned long)0, 1); 1775 (unsigned long)1, (unsigned long)0, 1);
1795 1776
1796#ifndef HAVE_X_I18N
1797 /* I don't understand why this ends up 0 sometimes, 1777 /* I don't understand why this ends up 0 sometimes,
1798 but it does. This kludge works around it. 1778 but it does. This kludge works around it.
1799 Can anyone find a real fix? -- rms. */ 1779 Can anyone find a real fix? -- rms. */
1800 if (mw->menu.font == 0) 1780 if (mw->menu.font == 0)
1801 mw->menu.font = xlwmenu_default_font; 1781 mw->menu.font = xlwmenu_default_font;
1802#else 1782#ifdef HAVE_X_I18N
1803 mw->menu.font_extents = XExtentsOfFontSet (mw->menu.font); 1783 if (mw->menu.fontSet)
1784 mw->menu.font_extents = XExtentsOfFontSet (mw->menu.fontSet);
1804#endif 1785#endif
1805 1786
1806 make_drawing_gcs (mw); 1787 make_drawing_gcs (mw);
@@ -1969,7 +1950,10 @@ XlwMenuSetValues (current, request, new)
1969 1950
1970 if (newmw->core.background_pixel != oldmw->core.background_pixel 1951 if (newmw->core.background_pixel != oldmw->core.background_pixel
1971 || newmw->menu.foreground != oldmw->menu.foreground 1952 || newmw->menu.foreground != oldmw->menu.foreground
1972#ifndef HAVE_X_I18N 1953#ifdef HAVE_X_I18N
1954 || newmw->menu.fontSet != oldmw->menu.fontSet
1955 || (newmw->menu.fontSet == NULL && newmw->menu.font != oldmw->menu.font)
1956#else
1973 || newmw->menu.font != oldmw->menu.font 1957 || newmw->menu.font != oldmw->menu.font
1974#endif 1958#endif
1975 ) 1959 )
@@ -1999,10 +1983,10 @@ XlwMenuSetValues (current, request, new)
1999 } 1983 }
2000 1984
2001#ifdef HAVE_X_I18N 1985#ifdef HAVE_X_I18N
2002 if (newmw->menu.font != oldmw->menu.font) 1986 if (newmw->menu.fontSet != oldmw->menu.fontSet && newmw->menu.fontSet != NULL)
2003 { 1987 {
2004 redisplay = True; 1988 redisplay = True;
2005 newmw->menu.font_extents = XExtentsOfFontSet (newmw->menu.font); 1989 newmw->menu.font_extents = XExtentsOfFontSet (newmw->menu.fontSet);
2006 } 1990 }
2007#endif 1991#endif
2008 1992
diff --git a/lwlib/xlwmenuP.h b/lwlib/xlwmenuP.h
index 12cc1790d9d..ac908d34b74 100644
--- a/lwlib/xlwmenuP.h
+++ b/lwlib/xlwmenuP.h
@@ -24,9 +24,6 @@ Boston, MA 02111-1307, USA. */
24#include "xlwmenu.h" 24#include "xlwmenu.h"
25#include <X11/CoreP.h> 25#include <X11/CoreP.h>
26 26
27/* FIXME: HAVE_X_I18N does not work yet. */
28#undef HAVE_X_I18N
29
30/* Elements in the stack arrays. */ 27/* Elements in the stack arrays. */
31typedef struct _window_state 28typedef struct _window_state
32{ 29{
@@ -47,11 +44,10 @@ typedef struct _XlwMenu_part
47{ 44{
48 /* slots set by the resources */ 45 /* slots set by the resources */
49#ifdef HAVE_X_I18N 46#ifdef HAVE_X_I18N
50 XFontSet font; 47 XFontSet fontSet;
51 XFontSetExtents *font_extents; 48 XFontSetExtents *font_extents;
52#else
53 XFontStruct* font;
54#endif 49#endif
50 XFontStruct* font;
55 Pixel foreground; 51 Pixel foreground;
56 Pixel disabled_foreground; 52 Pixel disabled_foreground;
57 Pixel button_foreground; 53 Pixel button_foreground;
diff --git a/man/ChangeLog b/man/ChangeLog
index 432fd8bad2c..eddd1e97741 100644
--- a/man/ChangeLog
+++ b/man/ChangeLog
@@ -1,3 +1,138 @@
12005-04-04 Jay Belanger <belanger@truman.edu>
2
3 * calc.texi: Change Calc version number.
4 (Customizable variables): Fix description of calc-language-alist.
5 (Copying): Put in version 2 of GPL.
6
72005-04-03 Glenn Morris <gmorris@ast.cam.ac.uk>
8
9 * calendar.texi (Diary): Mention shell utility `calendar'.
10
112005-04-01 Jay Belanger <belanger@truman.edu>
12
13 * calc.texi (Troubleshooting Commands): Remove comment about
14 installation.
15 (Installation): Remove section.
16 (Customizable Variables): New section.
17 (Basic Embedded Mode, Customizing Embedded Mode, Graphics)
18 (Graphical Devices): Add references to Customizable Variables.
19
202005-04-01 Lute Kamstra <lute@gnu.org>
21
22 * maintaining.texi (Change Log): add-change-log-entry uses
23 add-log-mailing-address.
24
252005-03-31 Luc Teirlinck <teirllm@auburn.edu>
26
27 * files.texi (Reverting): Move `auto-revert-check-vc-info' to
28 `VC Mode Line' and put in an xref to that node.
29 (VC Mode Line): Move `auto-revert-check-vc-info' here and clarify
30 its description.
31
322005-03-31 Paul Eggert <eggert@cs.ucla.edu>
33
34 * calendar.texi (Calendar Systems): Say that the Persian calendar
35 implemented here is the arithmetical one championed by Birashk.
36
372005-03-30 Glenn Morris <gmorris@ast.cam.ac.uk>
38
39 * programs.texi (Fortran Motion): Fix previous change.
40
412005-03-25 Katsumi Yamaoka <yamaoka@jpl.org>
42
43 * emacs-mime.texi (Display Customization): Markup fixes.
44 (rfc2047): Update.
45
462005-03-23 Reiner Steib <Reiner.Steib@gmx.de>
47
48 * gnus-faq.texi: Replaced with auto-generated version.
49
502005-03-29 Richard M. Stallman <rms@gnu.org>
51
52 * mule.texi (Single-Byte Character Support): Reinstall the C-x 8 info.
53
542005-03-29 Chong Yidong <cyd@stupidchicken.com>
55
56 * text.texi (Refill): Refer to Long Lines Mode.
57 (Longlines): New node.
58 (Auto Fill): Don't index "word wrap" here.
59 (Filling): Add Longlines to menu.
60
612005-03-29 Richard M. Stallman <rms@gnu.org>
62
63 * xresources.texi: Minor fixes.
64
65 * misc.texi (Emacs Server): Fix Texinfo usage.
66
67 * emacs.texi (Top): Don't use a real section heading for
68 "Detailed Node Listing". Fake it instead.
69
70 * basic.texi (Position Info): Minor cleanup.
71
72 * mule.texi (Input Methods): Minor cleanup.
73
742005-03-29 Glenn Morris <gmorris@ast.cam.ac.uk>
75
76 * programs.texi (ForIndent Vars): `fortran-if-indent' does other
77 constructs as well.
78 (Fortran Motion): Add fortran-end-of-block,
79 fortran-beginning-of-block.
80
812005-03-29 Kenichi Handa <handa@m17n.org>
82
83 * mule.texi (Input Methods): Refer to the command C-u C-x =.
84
85 * basic.texi (Position Info): Update the description about the
86 command C-u C-x =.
87
882005-03-28 Richard M. Stallman <rms@gnu.org>
89
90 * emacs.texi (Top): Use @section for the detailed node listing.
91
92 * calendar.texi: Minor fixes to previous change.
93
94 * programs.texi (Fortran): Small fixes to previous changes.
95
96 * emacs.texi (Top): Update list of subnodes of Dired.
97 Likewise for building.texi.
98
99 * files.texi (File Conveniences): Delete Auto Image File mode.
100
1012005-03-28 Chong Yidong <cyd@stupidchicken.com>
102
103 * building.texi (Flymake): New node.
104
105 * custom.texi (Function Keys): Document kp- event types and
106 keypad-setup package.
107
108 * dired.texi (Wdired): New node.
109
110 * files.texi (File Conveniences): Reorder entries.
111 Explain how to turn on Auto-image-file mode.
112 Document Thumbs mode.
113
114 * mule.texi (Specify Coding): Document recode-region and
115 recode-file-name.
116
117 * programs.texi (Program Modes): Add Conf mode and DNS mode.
118
1192005-03-27 Luc Teirlinck <teirllm@auburn.edu>
120
121 * commands.texi (Keys): M-o is now a prefix key.
122
1232005-03-27 Glenn Morris <gmorris@ast.cam.ac.uk>
124
125 * programs.texi: Reformat and update copyright years.
126 (Fortran): Update section.
127
1282005-03-26 Luc Teirlinck <teirllm@auburn.edu>
129
130 * files.texi: Several small changes in addition to:
131 (Visiting): Change xref for Dialog Boxes to ref.
132 (Version Headers): Replace references to obsolete var
133 `vc-header-alist' with `vc-BACKEND-header'.
134 (Customizing VC): Update value of `vc-handled-backends'.
135
12005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk> 1362005-03-26 Glenn Morris <gmorris@ast.cam.ac.uk>
2 137
3 * emacs-xtra.texi (Advanced Calendar/Diary Usage): New section; 138 * emacs-xtra.texi (Advanced Calendar/Diary Usage): New section;
@@ -49,7 +184,7 @@
49 * files.texi (Visiting): Fix cross-references introduced with the 184 * files.texi (Visiting): Fix cross-references introduced with the
50 last change. 185 last change.
51 186
52 * xresources.texi (GTK resources): Fix last change. 187 * xresources.texi (GTK resources): Fix last change.
53 188
542005-03-26 Jay Belanger <belanger@truman.edu> 1892005-03-26 Jay Belanger <belanger@truman.edu>
55 190
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 07c33206f28..0cd28e5bf8a 100644
--- a/man/calc.texi
+++ b/man/calc.texi
@@ -3,7 +3,7 @@
3@c smallbook 3@c smallbook
4@setfilename ../info/calc 4@setfilename ../info/calc
5@c [title] 5@c [title]
6@settitle GNU Emacs Calc 2.02g Manual 6@settitle GNU Emacs Calc 2.1 Manual
7@setchapternewpage odd 7@setchapternewpage odd
8@comment %**end of header (This is for running Texinfo on a region.) 8@comment %**end of header (This is for running Texinfo on a region.)
9 9
@@ -108,7 +108,7 @@ Software Foundation raise funds for GNU development.''
108@sp 6 108@sp 6
109@center @titlefont{Calc Manual} 109@center @titlefont{Calc Manual}
110@sp 4 110@sp 4
111@center GNU Emacs Calc Version 2.02g 111@center GNU Emacs Calc Version 2.1
112@c [volume] 112@c [volume]
113@sp 1 113@sp 1
114@center March 2005 114@center March 2005
@@ -165,7 +165,7 @@ longer Info tutorial.)
165* Embedded Mode:: Working with formulas embedded in a file. 165* Embedded Mode:: Working with formulas embedded in a file.
166* Programming:: Calc as a programmable calculator. 166* Programming:: Calc as a programmable calculator.
167 167
168* Installation:: Installing Calc as a part of GNU Emacs. 168* Customizable Variables:: Customizable Variables.
169* Reporting Bugs:: How to report bugs and make suggestions. 169* Reporting Bugs:: How to report bugs and make suggestions.
170 170
171* Summary:: Summary of Calc commands and functions. 171* Summary:: Summary of Calc commands and functions.
@@ -180,11 +180,13 @@ longer Info tutorial.)
180 180
181@node Copying, Getting Started, Top, Top 181@node Copying, Getting Started, Top, Top
182@unnumbered GNU GENERAL PUBLIC LICENSE 182@unnumbered GNU GENERAL PUBLIC LICENSE
183@center Version 1, February 1989 183@center Version 2, June 1991
184
185@c This file is intended to be included in another file.
184 186
185@display 187@display
186Copyright @copyright{} 1989 Free Software Foundation, Inc. 188Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
187675 Mass Ave, Cambridge, MA 02139, USA 18959 Temple Place - Suite 330, Boston, MA 02111-1307, USA
188 190
189Everyone is permitted to copy and distribute verbatim copies 191Everyone is permitted to copy and distribute verbatim copies
190of this license document, but changing it is not allowed. 192of this license document, but changing it is not allowed.
@@ -192,30 +194,33 @@ of this license document, but changing it is not allowed.
192 194
193@unnumberedsec Preamble 195@unnumberedsec Preamble
194 196
195 The license agreements of most software companies try to keep users 197 The licenses for most software are designed to take away your
196at the mercy of those companies. By contrast, our General Public 198freedom to share and change it. By contrast, the GNU General Public
197License is intended to guarantee your freedom to share and change free 199License is intended to guarantee your freedom to share and change free
198software---to make sure the software is free for all its users. The 200software---to make sure the software is free for all its users. This
199General Public License applies to the Free Software Foundation's 201General Public License applies to most of the Free Software
200software and to any other program whose authors commit to using it. 202Foundation's software and to any other program whose authors commit to
201You can use it for your programs, too. 203using it. (Some other Free Software Foundation software is covered by
204the GNU Library General Public License instead.) You can apply it to
205your programs, too.
202 206
203 When we speak of free software, we are referring to freedom, not 207 When we speak of free software, we are referring to freedom, not
204price. Specifically, the General Public License is designed to make 208price. Our General Public Licenses are designed to make sure that you
205sure that you have the freedom to give away or sell copies of free 209have the freedom to distribute copies of free software (and charge for
206software, that you receive source code or can get it if you want it, 210this service if you wish), that you receive source code or can get it
207that you can change the software or use pieces of it in new free 211if you want it, that you can change the software or use pieces of it
208programs; and that you know you can do these things. 212in new free programs; and that you know you can do these things.
209 213
210 To protect your rights, we need to make restrictions that forbid 214 To protect your rights, we need to make restrictions that forbid
211anyone to deny you these rights or to ask you to surrender the rights. 215anyone to deny you these rights or to ask you to surrender the rights.
212These restrictions translate to certain responsibilities for you if you 216These restrictions translate to certain responsibilities for you if you
213distribute copies of the software, or if you modify it. 217distribute copies of the software, or if you modify it.
214 218
215 For example, if you distribute copies of a such a program, whether 219 For example, if you distribute copies of such a program, whether
216gratis or for a fee, you must give the recipients all the rights that 220gratis or for a fee, you must give the recipients all the rights that
217you have. You must make sure that they, too, receive or can get the 221you have. You must make sure that they, too, receive or can get the
218source code. And you must tell them their rights. 222source code. And you must show them these terms so they know their
223rights.
219 224
220 We protect your rights with two steps: (1) copyright the software, and 225 We protect your rights with two steps: (1) copyright the software, and
221(2) offer you this license which gives you legal permission to copy, 226(2) offer you this license which gives you legal permission to copy,
@@ -228,128 +233,216 @@ want its recipients to know that what they have is not the original, so
228that any problems introduced by others will not reflect on the original 233that any problems introduced by others will not reflect on the original
229authors' reputations. 234authors' reputations.
230 235
236 Finally, any free program is threatened constantly by software
237patents. We wish to avoid the danger that redistributors of a free
238program will individually obtain patent licenses, in effect making the
239program proprietary. To prevent this, we have made it clear that any
240patent must be licensed for everyone's free use or not licensed at all.
241
231 The precise terms and conditions for copying, distribution and 242 The precise terms and conditions for copying, distribution and
232modification follow. 243modification follow.
233 244
234@iftex 245@iftex
235@unnumberedsec TERMS AND CONDITIONS 246@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
236@end iftex 247@end iftex
237@ifinfo 248@ifinfo
238@center TERMS AND CONDITIONS 249@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
239@end ifinfo 250@end ifinfo
240 251
241@enumerate 252@enumerate 0
242@item 253@item
243This License Agreement applies to any program or other work which 254This License applies to any program or other work which contains
244contains a notice placed by the copyright holder saying it may be 255a notice placed by the copyright holder saying it may be distributed
245distributed under the terms of this General Public License. The 256under the terms of this General Public License. The ``Program'', below,
246``Program'', below, refers to any such program or work, and a ``work based 257refers to any such program or work, and a ``work based on the Program''
247on the Program'' means either the Program or any work containing the 258means either the Program or any derivative work under copyright law:
248Program or a portion of it, either verbatim or with modifications. Each 259that is to say, a work containing the Program or a portion of it,
249licensee is addressed as ``you''. 260either verbatim or with modifications and/or translated into another
261language. (Hereinafter, translation is included without limitation in
262the term ``modification''.) Each licensee is addressed as ``you''.
263
264Activities other than copying, distribution and modification are not
265covered by this License; they are outside its scope. The act of
266running the Program is not restricted, and the output from the Program
267is covered only if its contents constitute a work based on the
268Program (independent of having been made by running the Program).
269Whether that is true depends on what the Program does.
250 270
251@item 271@item
252You may copy and distribute verbatim copies of the Program's source 272You may copy and distribute verbatim copies of the Program's
253code as you receive it, in any medium, provided that you conspicuously and 273source code as you receive it, in any medium, provided that you
254appropriately publish on each copy an appropriate copyright notice and 274conspicuously and appropriately publish on each copy an appropriate
255disclaimer of warranty; keep intact all the notices that refer to this 275copyright notice and disclaimer of warranty; keep intact all the
256General Public License and to the absence of any warranty; and give any 276notices that refer to this License and to the absence of any warranty;
257other recipients of the Program a copy of this General Public License 277and give any other recipients of the Program a copy of this License
258along with the Program. You may charge a fee for the physical act of 278along with the Program.
259transferring a copy.
260 279
261@item 280You may charge a fee for the physical act of transferring a copy, and
262You may modify your copy or copies of the Program or any portion of 281you may at your option offer warranty protection in exchange for a fee.
263it, and copy and distribute such modifications under the terms of Paragraph
2641 above, provided that you also do the following:
265 282
266@itemize @bullet
267@item 283@item
268cause the modified files to carry prominent notices stating that 284You may modify your copy or copies of the Program or any portion
269you changed the files and the date of any change; and 285of it, thus forming a work based on the Program, and copy and
286distribute such modifications or work under the terms of Section 1
287above, provided that you also meet all of these conditions:
270 288
289@enumerate a
271@item 290@item
272cause the whole of any work that you distribute or publish, that 291You must cause the modified files to carry prominent notices
273in whole or in part contains the Program or any part thereof, either 292stating that you changed the files and the date of any change.
274with or without modifications, to be licensed at no charge to all
275third parties under the terms of this General Public License (except
276that you may choose to grant warranty protection to some or all
277third parties, at your option).
278 293
279@item 294@item
280If the modified program normally reads commands interactively when 295You must cause any work that you distribute or publish, that in
281run, you must cause it, when started running for such interactive use 296whole or in part contains or is derived from the Program or any
282in the simplest and most usual way, to print or display an 297part thereof, to be licensed as a whole at no charge to all third
283announcement including an appropriate copyright notice and a notice 298parties under the terms of this License.
284that there is no warranty (or else, saying that you provide a
285warranty) and that users may redistribute the program under these
286conditions, and telling the user how to view a copy of this General
287Public License.
288 299
289@item 300@item
290You may charge a fee for the physical act of transferring a 301If the modified program normally reads commands interactively
291copy, and you may at your option offer warranty protection in 302when run, you must cause it, when started running for such
292exchange for a fee. 303interactive use in the most ordinary way, to print or display an
293@end itemize 304announcement including an appropriate copyright notice and a
305notice that there is no warranty (or else, saying that you provide
306a warranty) and that users may redistribute the program under
307these conditions, and telling the user how to view a copy of this
308License. (Exception: if the Program itself is interactive but
309does not normally print such an announcement, your work based on
310the Program is not required to print an announcement.)
311@end enumerate
294 312
295Mere aggregation of another independent work with the Program (or its 313These requirements apply to the modified work as a whole. If
296derivative) on a volume of a storage or distribution medium does not bring 314identifiable sections of that work are not derived from the Program,
297the other work under the scope of these terms. 315and can be reasonably considered independent and separate works in
316themselves, then this License, and its terms, do not apply to those
317sections when you distribute them as separate works. But when you
318distribute the same sections as part of a whole which is a work based
319on the Program, the distribution of the whole must be on the terms of
320this License, whose permissions for other licensees extend to the
321entire whole, and thus to each and every part regardless of who wrote it.
322
323Thus, it is not the intent of this section to claim rights or contest
324your rights to work written entirely by you; rather, the intent is to
325exercise the right to control the distribution of derivative or
326collective works based on the Program.
327
328In addition, mere aggregation of another work not based on the Program
329with the Program (or with a work based on the Program) on a volume of
330a storage or distribution medium does not bring the other work under
331the scope of this License.
298 332
299@item 333@item
300You may copy and distribute the Program (or a portion or derivative of 334You may copy and distribute the Program (or a work based on it,
301it, under Paragraph 2) in object code or executable form under the terms of 335under Section 2) in object code or executable form under the terms of
302Paragraphs 1 and 2 above provided that you also do one of the following: 336Sections 1 and 2 above provided that you also do one of the following:
303 337
304@itemize @bullet 338@enumerate a
305@item 339@item
306accompany it with the complete corresponding machine-readable 340Accompany it with the complete corresponding machine-readable
307source code, which must be distributed under the terms of 341source code, which must be distributed under the terms of Sections
308Paragraphs 1 and 2 above; or, 3421 and 2 above on a medium customarily used for software interchange; or,
309 343
310@item 344@item
311accompany it with a written offer, valid for at least three 345Accompany it with a written offer, valid for at least three
312years, to give any third party free (except for a nominal charge 346years, to give any third party, for a charge no more than your
313for the cost of distribution) a complete machine-readable copy of the 347cost of physically performing source distribution, a complete
314corresponding source code, to be distributed under the terms of 348machine-readable copy of the corresponding source code, to be
315Paragraphs 1 and 2 above; or, 349distributed under the terms of Sections 1 and 2 above on a medium
350customarily used for software interchange; or,
316 351
317@item 352@item
318accompany it with the information you received as to where the 353Accompany it with the information you received as to the offer
319corresponding source code may be obtained. (This alternative is 354to distribute corresponding source code. (This alternative is
320allowed only for noncommercial distribution and only if you 355allowed only for noncommercial distribution and only if you
321received the program in object code or executable form alone.) 356received the program in object code or executable form with such
322@end itemize 357an offer, in accord with Subsection b above.)
358@end enumerate
323 359
324Source code for a work means the preferred form of the work for making 360The source code for a work means the preferred form of the work for
325modifications to it. For an executable file, complete source code means 361making modifications to it. For an executable work, complete source
326all the source code for all modules it contains; but, as a special 362code means all the source code for all modules it contains, plus any
327exception, it need not include source code for modules which are standard 363associated interface definition files, plus the scripts used to
328libraries that accompany the operating system on which the executable 364control compilation and installation of the executable. However, as a
329file runs, or for standard header files or definitions files that 365special exception, the source code distributed need not include
330accompany that operating system. 366anything that is normally distributed (in either source or binary
367form) with the major components (compiler, kernel, and so on) of the
368operating system on which the executable runs, unless that component
369itself accompanies the executable.
370
371If distribution of executable or object code is made by offering
372access to copy from a designated place, then offering equivalent
373access to copy the source code from the same place counts as
374distribution of the source code, even though third parties are not
375compelled to copy the source along with the object code.
331 376
332@item 377@item
333You may not copy, modify, sublicense, distribute or transfer the 378You may not copy, modify, sublicense, or distribute the Program
334Program except as expressly provided under this General Public License. 379except as expressly provided under this License. Any attempt
335Any attempt otherwise to copy, modify, sublicense, distribute or transfer 380otherwise to copy, modify, sublicense or distribute the Program is
336the Program is void, and will automatically terminate your rights to use 381void, and will automatically terminate your rights under this License.
337the Program under this License. However, parties who have received 382However, parties who have received copies, or rights, from you under
338copies, or rights to use copies, from you under this General Public 383this License will not have their licenses terminated so long as such
339License will not have their licenses terminated so long as such parties 384parties remain in full compliance.
340remain in full compliance.
341 385
342@item 386@item
343By copying, distributing or modifying the Program (or any work based 387You are not required to accept this License, since you have not
344on the Program) you indicate your acceptance of this license to do so, 388signed it. However, nothing else grants you permission to modify or
345and all its terms and conditions. 389distribute the Program or its derivative works. These actions are
390prohibited by law if you do not accept this License. Therefore, by
391modifying or distributing the Program (or any work based on the
392Program), you indicate your acceptance of this License to do so, and
393all its terms and conditions for copying, distributing or modifying
394the Program or works based on it.
346 395
347@item 396@item
348Each time you redistribute the Program (or any work based on the 397Each time you redistribute the Program (or any work based on the
349Program), the recipient automatically receives a license from the original 398Program), the recipient automatically receives a license from the
350licensor to copy, distribute or modify the Program subject to these 399original licensor to copy, distribute or modify the Program subject to
351terms and conditions. You may not impose any further restrictions on the 400these terms and conditions. You may not impose any further
352recipients' exercise of the rights granted herein. 401restrictions on the recipients' exercise of the rights granted herein.
402You are not responsible for enforcing compliance by third parties to
403this License.
404
405@item
406If, as a consequence of a court judgment or allegation of patent
407infringement or for any other reason (not limited to patent issues),
408conditions are imposed on you (whether by court order, agreement or
409otherwise) that contradict the conditions of this License, they do not
410excuse you from the conditions of this License. If you cannot
411distribute so as to satisfy simultaneously your obligations under this
412License and any other pertinent obligations, then as a consequence you
413may not distribute the Program at all. For example, if a patent
414license would not permit royalty-free redistribution of the Program by
415all those who receive copies directly or indirectly through you, then
416the only way you could satisfy both it and this License would be to
417refrain entirely from distribution of the Program.
418
419If any portion of this section is held invalid or unenforceable under
420any particular circumstance, the balance of the section is intended to
421apply and the section as a whole is intended to apply in other
422circumstances.
423
424It is not the purpose of this section to induce you to infringe any
425patents or other property right claims or to contest validity of any
426such claims; this section has the sole purpose of protecting the
427integrity of the free software distribution system, which is
428implemented by public license practices. Many people have made
429generous contributions to the wide range of software distributed
430through that system in reliance on consistent application of that
431system; it is up to the author/donor to decide if he or she is willing
432to distribute software through any other system and a licensee cannot
433impose that choice.
434
435This section is intended to make thoroughly clear what is believed to
436be a consequence of the rest of this License.
437
438@item
439If the distribution and/or use of the Program is restricted in
440certain countries either by patents or by copyrighted interfaces, the
441original copyright holder who places the Program under this License
442may add an explicit geographical distribution limitation excluding
443those countries, so that distribution is permitted only in or among
444countries not thus excluded. In such case, this License incorporates
445the limitation as if written in the body of this License.
353 446
354@item 447@item
355The Free Software Foundation may publish revised and/or new versions 448The Free Software Foundation may publish revised and/or new versions
@@ -358,11 +451,11 @@ be similar in spirit to the present version, but may differ in detail to
358address new problems or concerns. 451address new problems or concerns.
359 452
360Each version is given a distinguishing version number. If the Program 453Each version is given a distinguishing version number. If the Program
361specifies a version number of the license which applies to it and ``any 454specifies a version number of this License which applies to it and ``any
362later version'', you have the option of following the terms and conditions 455later version'', you have the option of following the terms and conditions
363either of that version or of any later version published by the Free 456either of that version or of any later version published by the Free
364Software Foundation. If the Program does not specify a version number of 457Software Foundation. If the Program does not specify a version number of
365the license, you may choose any version ever published by the Free Software 458this License, you may choose any version ever published by the Free Software
366Foundation. 459Foundation.
367 460
368@item 461@item
@@ -393,17 +486,91 @@ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
393REPAIR OR CORRECTION. 486REPAIR OR CORRECTION.
394 487
395@item 488@item
396IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL 489IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
397ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 490WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
398REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 491REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
399INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES 492INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
400ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT 493OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
401LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES 494TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
402SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE 495YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
403WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN 496PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
404ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 497POSSIBILITY OF SUCH DAMAGES.
405@end enumerate 498@end enumerate
406 499
500@iftex
501@heading END OF TERMS AND CONDITIONS
502@end iftex
503@ifinfo
504@center END OF TERMS AND CONDITIONS
505@end ifinfo
506
507@page
508@unnumberedsec Appendix: How to Apply These Terms to Your New Programs
509
510 If you develop a new program, and you want it to be of the greatest
511possible use to the public, the best way to achieve this is to make it
512free software which everyone can redistribute and change under these terms.
513
514 To do so, attach the following notices to the program. It is safest
515to attach them to the start of each source file to most effectively
516convey the exclusion of warranty; and each file should have at least
517the ``copyright'' line and a pointer to where the full notice is found.
518
519@smallexample
520@var{one line to give the program's name and a brief idea of what it does.}
521Copyright (C) @var{yyyy} @var{name of author}
522
523This program is free software; you can redistribute it and/or modify
524it under the terms of the GNU General Public License as published by
525the Free Software Foundation; either version 2 of the License, or
526(at your option) any later version.
527
528This program is distributed in the hope that it will be useful,
529but WITHOUT ANY WARRANTY; without even the implied warranty of
530MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
531GNU General Public License for more details.
532
533You should have received a copy of the GNU General Public License
534along with this program; if not, write to the Free Software
535Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
536@end smallexample
537
538Also add information on how to contact you by electronic and paper mail.
539
540If the program is interactive, make it output a short notice like this
541when it starts in an interactive mode:
542
543@smallexample
544Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
545Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
546This is free software, and you are welcome to redistribute it
547under certain conditions; type `show c' for details.
548@end smallexample
549
550The hypothetical commands @samp{show w} and @samp{show c} should show
551the appropriate parts of the General Public License. Of course, the
552commands you use may be called something other than @samp{show w} and
553@samp{show c}; they could even be mouse-clicks or menu items---whatever
554suits your program.
555
556You should also get your employer (if you work as a programmer) or your
557school, if any, to sign a ``copyright disclaimer'' for the program, if
558necessary. Here is a sample; alter the names:
559
560@example
561Yoyodyne, Inc., hereby disclaims all copyright interest in the program
562`Gnomovision' (which makes passes at compilers) written by James Hacker.
563
564@var{signature of Ty Coon}, 1 April 1989
565Ty Coon, President of Vice
566@end example
567
568This General Public License does not permit incorporating your program into
569proprietary programs. If your program is a subroutine library, you may
570consider it more useful to permit linking proprietary applications with the
571library. If this is what you want to do, use the GNU Library General
572Public License instead of this License.
573
407@node Getting Started, Tutorial, Copying, Top 574@node Getting Started, Tutorial, Copying, Top
408@chapter Getting Started 575@chapter Getting Started
409@noindent 576@noindent
@@ -10613,11 +10780,6 @@ If this happens, the easiest workaround is to type @kbd{M-# L}
10613loaded right away. This will cause Emacs to take up a lot more 10780loaded right away. This will cause Emacs to take up a lot more
10614memory than it would otherwise, but it's guaranteed to fix the problem. 10781memory than it would otherwise, but it's guaranteed to fix the problem.
10615 10782
10616If you seem to run into this problem no matter what you do, or if
10617even the @kbd{M-# L} command crashes, Calc may have been improperly
10618installed. @xref{Installation}, for details of the installation
10619process.
10620
10621@node Recursion Depth, Caches, Autoloading Problems, Troubleshooting Commands 10783@node Recursion Depth, Caches, Autoloading Problems, Troubleshooting Commands
10622@subsection Recursion Depth 10784@subsection Recursion Depth
10623 10785
@@ -12306,7 +12468,7 @@ if this file exists, and this file becomes the one that Calc will
12306use in the future for commands like @kbd{m m}. The default settings 12468use in the future for commands like @kbd{m m}. The default settings
12307file name is @file{~/.calc.el}. You can see the current file name by 12469file name is @file{~/.calc.el}. You can see the current file name by
12308giving a blank response to the @kbd{m F} prompt. See also the 12470giving a blank response to the @kbd{m F} prompt. See also the
12309discussion of the @code{calc-settings-file} variable; @pxref{Installation}. 12471discussion of the @code{calc-settings-file} variable; @pxref{Customizable Variables}.
12310 12472
12311If the file name you give is your user init file (typically 12473If the file name you give is your user init file (typically
12312@file{~/.emacs}), @kbd{m F} will not automatically load the new file. This 12474@file{~/.emacs}), @kbd{m F} will not automatically load the new file. This
@@ -29109,7 +29271,7 @@ of the @samp{*Gnuplot Commands*} buffer.
29109@vindex calc-gnuplot-print-command 29271@vindex calc-gnuplot-print-command
29110@vindex calc-gnuplot-print-device 29272@vindex calc-gnuplot-print-device
29111@vindex calc-gnuplot-print-output 29273@vindex calc-gnuplot-print-output
29112If you are installing Calc you may wish to configure the default and 29274You may wish to configure the default and
29113printer devices and output files for the whole system. The relevant 29275printer devices and output files for the whole system. The relevant
29114Lisp variables are @code{calc-gnuplot-default-device} and @code{-output}, 29276Lisp variables are @code{calc-gnuplot-default-device} and @code{-output},
29115and @code{calc-gnuplot-print-device} and @code{-output}. The output 29277and @code{calc-gnuplot-print-device} and @code{-output}. The output
@@ -29122,7 +29284,8 @@ display or print the output of GNUPLOT, respectively. These may be
29122@code{nil} if no command is necessary, or strings which can include 29284@code{nil} if no command is necessary, or strings which can include
29123@samp{%s} to signify the name of the file to be displayed or printed. 29285@samp{%s} to signify the name of the file to be displayed or printed.
29124Or, these variables may contain Lisp expressions which are evaluated 29286Or, these variables may contain Lisp expressions which are evaluated
29125to display or print the output. 29287to display or print the output. These variables are customizable
29288(@pxref{Customizable Variables}).
29126 29289
29127@kindex g x 29290@kindex g x
29128@pindex calc-graph-display 29291@pindex calc-graph-display
@@ -29910,7 +30073,8 @@ Similarly, Calc will use @TeX{} language for @code{tex-mode},
29910@code{plain-tex-mode} and @code{context-mode}, C language for 30073@code{plain-tex-mode} and @code{context-mode}, C language for
29911@code{c-mode} and @code{c++-mode}, FORTRAN language for 30074@code{c-mode} and @code{c++-mode}, FORTRAN language for
29912@code{fortran-mode} and @code{f90-mode}, Pascal for @code{pascal-mode}, 30075@code{fortran-mode} and @code{f90-mode}, Pascal for @code{pascal-mode},
29913and eqn for @code{nroff-mode}. These can be overridden with Calc's mode 30076and eqn for @code{nroff-mode} (@pxref{Customizable Variables}).
30077These can be overridden with Calc's mode
29914changing commands (@pxref{Mode Settings in Embedded Mode}). If no 30078changing commands (@pxref{Mode Settings in Embedded Mode}). If no
29915suitable language is available, Calc will continue with its current language. 30079suitable language is available, Calc will continue with its current language.
29916 30080
@@ -30612,10 +30776,10 @@ for @code{Save} have no effect.
30612 30776
30613@noindent 30777@noindent
30614You can modify Embedded mode's behavior by setting various Lisp 30778You can modify Embedded mode's behavior by setting various Lisp
30615variables described here. Use @kbd{M-x set-variable} or 30779variables described here. These variables are customizable
30616@kbd{M-x edit-options} to adjust a variable on the fly, or 30780(@pxref{Customizable Variables}), or you can use @kbd{M-x set-variable}
30617put a suitable @code{setq} statement in your Calc init file (or 30781or @kbd{M-x edit-options} to adjust a variable on the fly.
30618@file{~/.emacs}) to set a variable permanently. (Another possibility would 30782(Another possibility would
30619be to use a file-local variable annotation at the end of the 30783be to use a file-local variable annotation at the end of the
30620file; @pxref{File Variables, , Local Variables in Files, emacs, the 30784file; @pxref{File Variables, , Local Variables in Files, emacs, the
30621Emacs manual}.) 30785Emacs manual}.)
@@ -30760,7 +30924,7 @@ is simply a newline, @code{"\n"}. If you change this, it is a
30760good idea still to end with a newline so that mode annotations 30924good idea still to end with a newline so that mode annotations
30761will appear on lines by themselves. 30925will appear on lines by themselves.
30762 30926
30763@node Programming, Installation, Embedded Mode, Top 30927@node Programming, Customizable Variables, Embedded Mode, Top
30764@chapter Programming 30928@chapter Programming
30765 30929
30766@noindent 30930@noindent
@@ -34610,70 +34774,204 @@ used the first time, your hook should add a variable to the
34610list and also call @code{make-local-variable} itself. 34774list and also call @code{make-local-variable} itself.
34611@end defvar 34775@end defvar
34612 34776
34613@node Installation, Reporting Bugs, Programming, Top 34777@node Customizable Variables, Reporting Bugs, Programming, Top
34614@appendix Installation 34778@appendix Customizable Variables
34779
34780GNU Calc is controlled by many variables, most of which can be reset
34781from within Calc. Some variables are less involved with actual
34782calculation, and can be set outside of Calc using Emacs's
34783customization facilities. These variables are listed below.
34784Typing @kbd{M-x customize-variable RET @var{variable-name} RET}
34785will bring up a buffer in which the variable's value can be redefined.
34786Typing @kbd{M-x customize-group RET calc RET} will bring up a buffer which
34787contains all of Calc's customizable variables. (These variables can
34788also be reset by putting the appropriate lines in your .emacs file;
34789@xref{Init File, ,Init File, emacs, The GNU Emacs Manual}.)
34790
34791Some of the customizable variables are regular expressions. A regular
34792expression is basically a pattern that Calc can search for.
34793See @ref{Regexp Search,, Regular Expression Search, emacs, The GNU Emacs Manual}
34794to see how regular expressions work.
34615 34795
34616@noindent 34796@table @code
34617As of Calc 2.02g, Calc is integrated with GNU Emacs, and thus requires
34618no separate installation of its Lisp files and this manual.
34619 34797
34620@appendixsec The GNUPLOT Program 34798@item calc-settings-file
34621 34799
34622@noindent 34800@vindex calc-settings-file
34623Calc's graphing commands use the GNUPLOT program. If you have GNUPLOT 34801The variable @code{calc-settings-file} holds the file name in
34624but you must type some command other than @file{gnuplot} to get it, 34802which commands like @kbd{m m} and @kbd{Z P} store ``permanent''
34625you should add a command to set the Lisp variable @code{calc-gnuplot-name} 34803definitions.
34626to the appropriate file name. You may also need to change the variables 34804If @code{calc-settings-file} is not your user init file (typically
34627@code{calc-gnuplot-plot-command} and @code{calc-gnuplot-print-command} in 34805@file{~/.emacs}) and if the variable @code{calc-loaded-settings-file} is
34628order to get correct displays and hardcopies, respectively, of your 34806@code{nil}, then Calc will automatically load your settings file (if it
34629plots. 34807exists) the first time Calc is invoked.
34808
34809The default value for this variable is @code{"~/.calc.el"}.
34810
34811@item calc-gnuplot-name
34812
34813See @ref{Graphics}.@*
34814The variable @code{calc-gnuplot-name} should be the name of the
34815GNUPLOT program (a string). If you have GNUPLOT installed on your
34816system but Calc is unable to find it, you may need to set this
34817variable. (@pxref{Customizable Variables})
34818You may also need to set some Lisp variables to show Calc how to run
34819GNUPLOT on your system, see @ref{Devices, ,Graphical Devices} . The default value
34820of @code{calc-gnuplot-name} is @code{"gnuplot"}.
34821
34822@item calc-gnuplot-plot-command
34823@itemx calc-gnuplot-print-command
34824
34825See @ref{Devices, ,Graphical Devices}.@*
34826The variables @code{calc-gnuplot-plot-command} and
34827@code{calc-gnuplot-print-command} represent system commands to
34828display and print the output of GNUPLOT, respectively. These may be
34829@code{nil} if no command is necessary, or strings which can include
34830@samp{%s} to signify the name of the file to be displayed or printed.
34831Or, these variables may contain Lisp expressions which are evaluated
34832to display or print the output.
34630 34833
34631@ifinfo 34834The default value of @code{calc-gnuplot-plot-command} is @code{nil},
34835and the default value of @code{calc-gnuplot-print-command} is
34836@code{"lp %s"}.
34837
34838@item calc-language-alist
34839
34840See @ref{Basic Embedded Mode}.@*
34841The variable @code{calc-language-alist} controls the languages that
34842Calc will associate with major modes. When Calc embedded mode is
34843enabled, it will try to use the current major mode to
34844determine what language should be used. (This can be overridden using
34845Calc's mode changing commands, @xref{Mode Settings in Embedded Mode}.)
34846The variable @code{calc-language-alist} consists of a list of pairs of
34847the form @code{(@var{MAJOR-MODE} . @var{LANGUAGE})}; for example,
34848@code{(latex-mode . latex)} is one such pair. If Calc embedded is
34849activated in a buffer whose major mode is @var{MAJOR-MODE}, it will set itself
34850to use the language @var{LANGUAGE}.
34851
34852The default value of @code{calc-language-alist} is
34632@example 34853@example
34633 34854 ((latex-mode . latex)
34855 (tex-mode . tex)
34856 (plain-tex-mode . tex)
34857 (context-mode . tex)
34858 (nroff-mode . eqn)
34859 (pascal-mode . pascal)
34860 (c-mode . c)
34861 (c++-mode . c)
34862 (fortran-mode . fortran)
34863 (f90-mode . fortran))
34634@end example 34864@end example
34635@end ifinfo
34636 34865
34637@appendixsec Settings File 34866@item calc-embedded-announce-formula
34638 34867
34639@noindent 34868See @ref{Customizing Embedded Mode}.@*
34640@vindex calc-settings-file 34869The variable @code{calc-embedded-announce-formula} helps determine
34641Another variable you might want to set is @code{calc-settings-file}, 34870what formulas @kbd{M-# a} will activate in a buffer. It is a
34642which holds the file name in which commands like @kbd{m m} and @kbd{Z P} 34871regular expression, and when activating embedded formulas with
34643store ``permanent'' definitions. The default value for this variable 34872@kbd{M-# a}, it will tell Calc that what follows is a formula to be
34644is @code{"~/.calc.el"}. If @code{calc-settings-file} is not your user 34873activated. (Calc also uses other patterns to find formulas, such as
34645init file (typically @file{~/.emacs}) and if the variable 34874@samp{=>} and @samp{:=}.)
34646@code{calc-loaded-settings-file} is @code{nil}, then Calc will
34647automatically load your settings file (if it exists) the first time
34648Calc is invoked.
34649 34875
34650@ifinfo 34876The default pattern is @code{"%Embed\n\\(% .*\n\\)*"}, which checks
34651@example 34877for @samp{%Embed} followed by any number of lines beginning with
34878@samp{%} and a space.
34652 34879
34653@end example 34880@item calc-embedded-open-formula
34654@end ifinfo 34881@itemx calc-embedded-close-formula
34655@appendixsec Testing the Installation
34656 34882
34657@noindent 34883See @ref{Customizing Embedded Mode}.@*
34658To test your installation of Calc, start a new Emacs and type @kbd{M-# c} 34884The variables @code{calc-embedded-open-formula} and
34659to make sure the autoloads and key bindings work. Type @kbd{M-# i} 34885@code{calc-embedded-open-formula} control the region that Calc will
34660to make sure Calc can find its Info documentation. Press @kbd{q} to 34886activate as a formula when Embedded mode is entered with @kbd{M-# e}.
34661exit the Info system and @kbd{M-# c} to re-enter the Calculator. 34887They are regular expressions;
34662Type @kbd{20 S} to compute the sine of 20 degrees; this will test the 34888Calc normally scans backward and forward in the buffer for the
34663autoloading of the extensions modules. The result should be 34889nearest text matching these regular expressions to be the ``formula
346640.342020143326. Finally, press @kbd{M-# c} again to make sure the 34890delimiters''.
34665Calculator can exit.
34666 34891
34667You may also wish to test the GNUPLOT interface; to plot a sine wave, 34892The simplest delimiters are blank lines. Other delimiters that
34668type @kbd{' [0 ..@: 360], sin(x) @key{RET} g f}. Type @kbd{g q} when you 34893Embedded mode understands by default are:
34669are done viewing the plot. 34894@enumerate
34895@item
34896The @TeX{} and La@TeX{} math delimiters @samp{$ $}, @samp{$$ $$},
34897@samp{\[ \]}, and @samp{\( \)};
34898@item
34899Lines beginning with @samp{\begin} and @samp{\end} (except matrix delimiters);
34900@item
34901Lines beginning with @samp{@@} (Texinfo delimiters).
34902@item
34903Lines beginning with @samp{.EQ} and @samp{.EN} (@dfn{eqn} delimiters);
34904@item
34905Lines containing a single @samp{%} or @samp{.\"} symbol and nothing else.
34906@end enumerate
34670 34907
34671Calc is now ready to use. If you wish to go through the Calc Tutorial, 34908@item calc-embedded-open-word
34672press @kbd{M-# t} to begin. 34909@itemx calc-embedded-close-word
34673@example
34674 34910
34675@end example 34911See @ref{Customizing Embedded Mode}.@*
34676@node Reporting Bugs, Summary, Installation, Top 34912The variables @code{calc-embedded-open-word} and
34913@code{calc-embedded-close-word} control the region that Calc will
34914activate when Embedded mode is entered with @kbd{M-# w}. They are
34915regular expressions.
34916
34917The default values of @code{calc-embedded-open-word} and
34918@code{calc-embedded-close-word} are @code{"^\\|[^-+0-9.eE]"} and
34919@code{"$\\|[^-+0-9.eE]"} respectively.
34920
34921@item calc-embedded-open-plain
34922@itemx calc-embedded-close-plain
34923
34924See @ref{Customizing Embedded Mode}.@*
34925The variables @code{calc-embedded-open-plain} and
34926@code{calc-embedded-open-plain} are used to delimit ``plain''
34927formulas. Note that these are actual strings, not regular
34928expressions, because Calc must be able to write these string into a
34929buffer as well as to recognize them.
34930
34931The default string for @code{calc-embedded-open-plain} is
34932@code{"%%% "}, note the trailing space. The default string for
34933@code{calc-embedded-close-plain} is @code{" %%%\n"}, without
34934the trailing newline here, the first line of a Big mode formula
34935that followed might be shifted over with respect to the other lines.
34936
34937@item calc-embedded-open-new-formula
34938@itemx calc-embedded-close-new-formula
34939
34940See @ref{Customizing Embedded Mode}.@*
34941The variables @code{calc-embedded-open-new-formula} and
34942@code{calc-embedded-close-new-formula} are strings which are
34943inserted before and after a new formula when you type @kbd{M-# f}.
34944
34945The default value of @code{calc-embedded-open-new-formula} is
34946@code{"\n\n"}. If this string begins with a newline character and the
34947@kbd{M-# f} is typed at the beginning of a line, @kbd{M-# f} will skip
34948this first newline to avoid introducing unnecessary blank lines in the
34949file. The default value of @code{calc-embedded-close-new-formula} is
34950also @code{"\n\n"}. The final newline is omitted by @w{@kbd{M-# f}}
34951if typed at the end of a line. (It follows that if @kbd{M-# f} is
34952typed on a blank line, both a leading opening newline and a trailing
34953closing newline are omitted.)
34954
34955@item calc-embedded-open-mode
34956@itemx calc-embedded-close-mode
34957
34958See @ref{Customizing Embedded Mode}.@*
34959The variables @code{calc-embedded-open-mode} and
34960@code{calc-embedded-close-mode} are strings which Calc will place before
34961and after any mode annotations that it inserts. Calc never scans for
34962these strings; Calc always looks for the annotation itself, so it is not
34963necessary to add them to user-written annotations.
34964
34965The default value of @code{calc-embedded-open-mode} is @code{"% "}
34966and the default value of @code{calc-embedded-close-mode} is
34967@code{"\n"}.
34968If you change the value of @code{calc-embedded-close-mode}, it is a good
34969idea still to end with a newline so that mode annotations will appear on
34970lines by themselves.
34971
34972@end table
34973
34974@node Reporting Bugs, Summary, Customizable Variables, Top
34677@appendix Reporting Bugs 34975@appendix Reporting Bugs
34678 34976
34679@noindent 34977@noindent
diff --git a/man/calendar.texi b/man/calendar.texi
index 747a6b822df..cf02377f1d9 100644
--- a/man/calendar.texi
+++ b/man/calendar.texi
@@ -433,7 +433,7 @@ click on that date with @kbd{Mouse-2} and then choose @kbd{Holidays}
433from the menu that appears. Either way, this displays the holidays for 433from the menu that appears. Either way, this displays the holidays for
434that 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
435window. If the variable @code{view-calendar-holidays-initially} is 435window. If the variable @code{view-calendar-holidays-initially} is
436non-@code{nil}, holidays are displayed when the calendar is created. 436non-@code{nil}, creating the calendar displays holidays in this way.
437 437
438@kindex x @r{(Calendar mode)} 438@kindex x @r{(Calendar mode)}
439@findex mark-calendar-holidays 439@findex mark-calendar-holidays
@@ -449,9 +449,8 @@ both to the currently visible months and to other months that
449subsequently become visible by scrolling. To turn marking off and erase 449subsequently become visible by scrolling. To turn marking off and erase
450the current marks, type @kbd{u}, which also erases any diary marks 450the current marks, type @kbd{u}, which also erases any diary marks
451(@pxref{Diary}). If the variable @code{mark-holidays-in-calendar} is 451(@pxref{Diary}). If the variable @code{mark-holidays-in-calendar} is
452non-@code{nil}, holidays are marked in the calendar when it is created 452non-@code{nil}, creating or updating the calendar marks holidays
453(or recomputed). 453automatically.
454
455 454
456@kindex a @r{(Calendar mode)} 455@kindex a @r{(Calendar mode)}
457@findex list-calendar-holidays 456@findex list-calendar-holidays
@@ -692,6 +691,12 @@ Their calendar consists of twelve months of which the first six have 31
692days, the next five have 30 days, and the last has 29 in ordinary years 691days, the next five have 30 days, and the last has 29 in ordinary years
693and 30 in leap years. Leap years occur in a complicated pattern every 692and 30 in leap years. Leap years occur in a complicated pattern every
694four or five years. 693four or five years.
694The calendar implemented here is the arithmetical Persian calendar
695championed by Birashk, based on a 2,820-year cycle. It differs from
696the astronomical Persian calendar, which is based on astronomical
697events. As of this writing the first future discrepancy is projected
698to occur on March 20, 2025. It is currently not clear what the
699official calendar of Iran will be that far into the future.
695 700
696@cindex Chinese calendar 701@cindex Chinese calendar
697 The Chinese calendar is a complicated system of lunar months arranged 702 The Chinese calendar is a complicated system of lunar months arranged
@@ -937,7 +942,8 @@ date.
937 942
938 The name of the diary file is specified by the variable 943 The name of the diary file is specified by the variable
939@code{diary-file}; @file{~/diary} is the default. A sample diary file 944@code{diary-file}; @file{~/diary} is the default. A sample diary file
940is: 945is (note that the file format is essentially the same as that used by
946the external shell utility @samp{calendar}):
941 947
942@example 948@example
94312/22/1988 Twentieth wedding anniversary!! 94912/22/1988 Twentieth wedding anniversary!!
@@ -1005,13 +1011,14 @@ of the new window shows the date of the diary entries and any holidays
1005that fall on that date. If you specify a numeric argument with @kbd{d}, 1011that fall on that date. If you specify a numeric argument with @kbd{d},
1006it shows all the diary entries for that many successive days. Thus, 1012it shows all the diary entries for that many successive days. Thus,
1007@kbd{2 d} displays all the entries for the selected date and for the 1013@kbd{2 d} displays all the entries for the selected date and for the
1008following day. If the variable @code{view-diary-entries-initially} is 1014following day.
1009non-@code{nil}, the diary entries for the current date are displayed
1010when the calendar is created (provided the current date is visible).
1011 1015
1012 Another way to display the diary entries for a date is to click 1016 Another way to display the diary entries for a date is to click
1013@kbd{Mouse-2} on the date, and then choose @kbd{Diary entries} from 1017@kbd{Mouse-2} on the date, and then choose @kbd{Diary entries} from
1014the menu that appears. 1018the menu that appears. If the variable
1019@code{view-diary-entries-initially} is non-@code{nil}, creating the
1020calendar also lists diary entries for the current date (provided the
1021current date is visible).
1015 1022
1016@kindex m @r{(Calendar mode)} 1023@kindex m @r{(Calendar mode)}
1017@findex mark-diary-entries 1024@findex mark-diary-entries
@@ -1023,10 +1030,10 @@ with multiple faces is not available). @inforef{Calendar Customizing,
1023diary-entry-marker, emacs-xtra}. The command applies both to the 1030diary-entry-marker, emacs-xtra}. The command applies both to the
1024currently visible months and to other months that subsequently become 1031currently visible months and to other months that subsequently become
1025visible by scrolling. To turn marking off and erase the current marks, 1032visible by scrolling. To turn marking off and erase the current marks,
1026type @kbd{u}, which also turns off holiday marks (@pxref{Holidays}). If 1033type @kbd{u}, which also turns off holiday marks (@pxref{Holidays}).
1027the variable @code{mark-diary-entries-in-calendar} is non-@code{nil}, 1034If the variable @code{mark-diary-entries-in-calendar} is
1028diary dates are marked in the calendar when it is created (or 1035non-@code{nil}, creating or updating the calendar marks diary dates
1029recomputed). 1036automatically.
1030 1037
1031@kindex s @r{(Calendar mode)} 1038@kindex s @r{(Calendar mode)}
1032@findex show-all-diary-entries 1039@findex show-all-diary-entries
@@ -1034,14 +1041,12 @@ recomputed).
1034the @kbd{s} command. 1041the @kbd{s} command.
1035 1042
1036 Display of selected diary entries uses the selective display feature 1043 Display of selected diary entries uses the selective display feature
1037to hide entries that don't apply. 1044to hide entries that don't apply. The diary buffer as you see it is
1038 1045an illusion, so simply printing the buffer does not print what you see
1039 The diary buffer as you see it is an illusion, so simply printing the 1046on your screen. There is a special command to print hard copy of the
1040buffer does not print what you see on your screen. There is a special 1047diary buffer @emph{as it appears}; this command is @kbd{M-x
1041command to print hard copy of the diary buffer @emph{as it appears}; 1048print-diary-entries}. It sends the data directly to the printer. You
1042this command is @kbd{M-x print-diary-entries}. It sends the data 1049can customize it like @code{lpr-region} (@pxref{Hardcopy}).
1043directly to the printer. You can customize it like @code{lpr-region}
1044(@pxref{Hardcopy}).
1045 1050
1046@findex diary 1051@findex diary
1047 The command @kbd{M-x diary} displays the diary entries for the current 1052 The command @kbd{M-x diary} displays the diary entries for the current
diff --git a/man/cmdargs.texi b/man/cmdargs.texi
index 38ac3301781..d49ffba6103 100644
--- a/man/cmdargs.texi
+++ b/man/cmdargs.texi
@@ -1196,8 +1196,9 @@ appear until you deiconify it.
1196@opindex -hb 1196@opindex -hb
1197@itemx --horizontal-scroll-bars 1197@itemx --horizontal-scroll-bars
1198@opindex --horizontal-scroll-bars 1198@opindex --horizontal-scroll-bars
1199@cindex horizontal scroll bars, command-line argument 1199@c @cindex horizontal scroll bars, command-line argument
1200Enable horizontal scroll bars. 1200Enable horizontal scroll bars. Since horizontal scroll bars
1201are not yet implemented, this actually does nothing.
1201 1202
1202@item -vb 1203@item -vb
1203@opindex -vb 1204@opindex -vb
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.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/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.texi b/man/emacs.texi
index 86b42baefc6..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
diff --git a/man/files.texi b/man/files.texi
index 1e40651a4ce..a03bb2a64ea 100644
--- a/man/files.texi
+++ b/man/files.texi
@@ -238,7 +238,7 @@ 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
@@ -940,14 +940,8 @@ 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 943@xref{VC Mode Line}, for Auto Revert peculiarities in buffers that
944 Whenever Auto Revert mode reverts the buffer, it updates the version 944visit files under version control.
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 945
952@node Auto Save 946@node Auto Save
953@section Auto-Saving: Protection Against Disasters 947@section Auto-Saving: Protection Against Disasters
@@ -1272,6 +1266,10 @@ as multiple branches, are not available with SCCS. You should use
1272SCCS only if for some reason you cannot use RCS, or one of the 1266SCCS only if for some reason you cannot use RCS, or one of the
1273higher-level systems such as CVS or GNU Arch. 1267higher-level systems such as CVS or GNU Arch.
1274 1268
1269In the following, we discuss mainly RCS, SCCS and CVS. Nearly
1270everything said about CVS applies to Gnu Arch, Subversion and Meta-CVS
1271as well.
1272
1275@node VC Concepts 1273@node VC Concepts
1276@subsubsection Concepts of Version Control 1274@subsubsection Concepts of Version Control
1277 1275
@@ -1371,6 +1369,18 @@ locking is not in use). @samp{:} indicates that the file is locked, or
1371that it is modified. If the file is locked by some other user (for 1369that it is modified. If the file is locked by some other user (for
1372instance, @samp{jim}), that is displayed as @samp{RCS:jim:1.3}. 1370instance, @samp{jim}), that is displayed as @samp{RCS:jim:1.3}.
1373 1371
1372@vindex auto-revert-check-vc-info
1373 When Auto Revert mode (@pxref{Reverting}) reverts a buffer that is
1374under version control, it updates the version control information in
1375the mode line. However, Auto Revert mode may not properly update this
1376information if the version control status changes without changes to
1377the work file, from outside the current Emacs session. If you set
1378@code{auto-revert-check-vc-info} to @code{t}, Auto Revert mode updates
1379the version control status information every
1380@code{auto-revert-interval} seconds, even if the work file itself is
1381unchanged. The resulting CPU usage depends on the version control
1382system, but is usually not excessive.
1383
1374@node Basic VC Editing 1384@node Basic VC Editing
1375@subsection Basic Editing under Version Control 1385@subsection Basic Editing under Version Control
1376 1386
@@ -1472,9 +1482,9 @@ informs you if another user has checked in changes in the same file
1472since you began editing it, and when this happens, his changes will be 1482since you began editing it, and when this happens, his changes will be
1473effectively removed when you check in your version (though they will 1483effectively removed when you check in your version (though they will
1474remain in the master file, so they will not be entirely lost). You must 1484remain in the master file, so they will not be entirely lost). You must
1475therefore verify the current version is unchanged, before you check in your 1485therefore verify that the current version is unchanged, before you
1476changes. We hope to eliminate this risk and provide automatic merging 1486check in your changes. We hope to eliminate this risk and provide
1477with RCS in a future Emacs version. 1487automatic merging with RCS in a future Emacs version.
1478 1488
1479 In addition, locking is possible with RCS even in this mode, although 1489 In addition, locking is possible with RCS even in this mode, although
1480it is not required; @kbd{C-x v v} with an unmodified file locks the 1490it is not required; @kbd{C-x v v} with an unmodified file locks the
@@ -1698,13 +1708,10 @@ there is more than one system in use for a directory, Emacs uses the one
1698that appears first in @code{vc-handled-backends} (@pxref{Customizing VC}). 1708that appears first in @code{vc-handled-backends} (@pxref{Customizing VC}).
1699On the other hand, if there are no files already registered, 1709On the other hand, if there are no files already registered,
1700Emacs uses the first system from @code{vc-handled-backends} that could 1710Emacs uses the first system from @code{vc-handled-backends} that could
1701register the file---for example, you cannot register a file under CVS if 1711register the file (for example, you cannot register a file under CVS if
1702its directory is not already part of a CVS tree. 1712its directory is not already part of a CVS tree); with the default
1703 1713value of @code{vc-handled-backends}, this means that Emacs uses RCS in
1704 With the default value of @code{vc-handled-backends}, this means 1714this situation.
1705that Emacs uses RCS if there are any files under RCS control, CVS if
1706there are any files under CVS, SCCS if any files are under SCCS, or
1707RCS as the ultimate default.
1708 1715
1709 If locking is in use, @kbd{C-x v i} leaves the file unlocked and 1716 If locking is in use, @kbd{C-x v i} leaves the file unlocked and
1710read-only. Type @kbd{C-x v v} if you wish to start editing it. After 1717read-only. Type @kbd{C-x v v} if you wish to start editing it. After
@@ -1892,7 +1899,8 @@ marked files, so that you can lock or check in several files at once.
1892If it operates on more than one file, it handles each file according to 1899If it operates on more than one file, it handles each file according to
1893its current state; thus, it might lock one file, but check in another 1900its current state; thus, it might lock one file, but check in another
1894file. This could be confusing; it is up to you to avoid confusing 1901file. This could be confusing; it is up to you to avoid confusing
1895behavior by marking a set of files that are in a similar state. 1902behavior by marking a set of files that are in a similar state. If no
1903files are marked, @kbd{v v} operates on the file in the current line.
1896 1904
1897 If any files call for check-in, @kbd{v v} reads a single log entry, 1905 If any files call for check-in, @kbd{v v} reads a single log entry,
1898then uses it for all the files being checked in. This is convenient for 1906then uses it for all the files being checked in. This is convenient for
@@ -1920,8 +1928,7 @@ program in which you are gradually adding various unfinished new
1920features. Each such independent line of development is called a 1928features. Each such independent line of development is called a
1921@dfn{branch}. VC allows you to create branches, switch between 1929@dfn{branch}. VC allows you to create branches, switch between
1922different branches, and merge changes from one branch to another. 1930different branches, and merge changes from one branch to another.
1923Please note, however, that branches are only supported for RCS at the 1931Please note, however, that branches are not supported for SCCS.
1924moment.
1925 1932
1926 A file's main line of development is usually called the @dfn{trunk}. 1933 A file's main line of development is usually called the @dfn{trunk}.
1927The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc. At 1934The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc. At
@@ -2264,7 +2271,8 @@ But if you do this, the revision numbers in the RCS master no longer
2264correspond to those of CVS. Technically, this is not a problem, but 2271correspond to those of CVS. Technically, this is not a problem, but
2265it can become difficult to keep track of what is in the CVS repository 2272it can become difficult to keep track of what is in the CVS repository
2266and what is not. So we suggest that you return from time to time to 2273and what is not. So we suggest that you return from time to time to
2267CVS-only operation, using @kbd{C-u C-x v v cvs @key{RET}}. 2274CVS-only operation, by committing your local changes back to the
2275repository using @kbd{C-u C-x v v cvs @key{RET}}.
2268 2276
2269@node Snapshots 2277@node Snapshots
2270@subsection Snapshots 2278@subsection Snapshots
@@ -2552,13 +2560,11 @@ insert a suitable header string.
2552Insert headers in a file for use with your version-control system. 2560Insert headers in a file for use with your version-control system.
2553@end table 2561@end table
2554 2562
2555@vindex vc-header-alist 2563@vindex vc-@var{backend}-header
2556 The default header string is @samp{@w{$}Id$} for RCS and 2564 The default header string is @samp{@w{$}Id$} for RCS and
2557@samp{@w{%}W%} for SCCS. You can specify other headers to insert by 2565@samp{@w{%}W%} for SCCS. You can specify other headers to insert by
2558setting the variable @code{vc-header-alist}. Its value is a list of 2566setting the variables @code{vc-@var{backend}-header} where
2559elements of the form @code{(@var{program} . @var{string})} where 2567@var{backend} is @code{rcs} or @code{sccs}.
2560@var{program} is @code{RCS} or @code{SCCS} and @var{string} is the
2561string to use.
2562 2568
2563 Instead of a single string, you can specify a list of strings; then 2569 Instead of a single string, you can specify a list of strings; then
2564each string in the list is inserted as a separate header on a line of 2570each string in the list is inserted as a separate header on a line of
@@ -2586,8 +2592,8 @@ elements of the form @code{(@var{regexp} . @var{format})}. Whenever
2586@var{regexp} matches the buffer name, @var{format} is inserted as part 2592@var{regexp} matches the buffer name, @var{format} is inserted as part
2587of the header. A header line is inserted for each element that matches 2593of the header. A header line is inserted for each element that matches
2588the buffer name, and for each string specified by 2594the buffer name, and for each string specified by
2589@code{vc-header-alist}. The header line is made by processing the 2595@code{vc-@var{backend}-header}. The header line is made by processing the
2590string from @code{vc-header-alist} with the format taken from the 2596string from @code{vc-@var{backend}-header} with the format taken from the
2591element. The default value for @code{vc-static-header-alist} is as follows: 2597element. The default value for @code{vc-static-header-alist} is as follows:
2592 2598
2593@example 2599@example
@@ -2624,10 +2630,10 @@ headers.
2624@vindex vc-handled-backends 2630@vindex vc-handled-backends
2625The variable @code{vc-handled-backends} determines which version 2631The variable @code{vc-handled-backends} determines which version
2626control systems VC should handle. The default value is @code{(RCS CVS 2632control systems VC should handle. The default value is @code{(RCS CVS
2627SCCS)}, so it contains all three version systems that are currently 2633SVN SCCS Arch MCVS)}, so it contains all six version systems that are
2628supported. If you want VC to ignore one or more of these systems, 2634currently supported. If you want VC to ignore one or more of these
2629exclude its name from the list. To disable VC entirely, set this 2635systems, exclude its name from the list. To disable VC entirely, set
2630variable to @code{nil}. 2636this variable to @code{nil}.
2631 2637
2632The order of systems in the list is significant: when you visit a file 2638The order of systems in the list is significant: when you visit a file
2633registered in more than one system (@pxref{Local Version Control}), 2639registered in more than one system (@pxref{Local Version Control}),
@@ -2780,8 +2786,9 @@ pick up any recent changes from the repository first, using @kbd{C-x v m
2780@key{RET}}, @pxref{Merging}). 2786@key{RET}}, @pxref{Merging}).
2781 2787
2782@vindex vc-cvs-global-switches 2788@vindex vc-cvs-global-switches
2783 The variable @code{vc-cvs-global-switches} should be a string 2789 The variable @code{vc-cvs-global-switches}, if non-@code{nil},
2784specifying switches to pass to CVS for all CVS operations. 2790should be a string specifying switches to pass to CVS for all CVS
2791operations.
2785 2792
2786 When @code{vc-cvs-stay-local} is @code{t}, VC also makes local 2793 When @code{vc-cvs-stay-local} is @code{t}, VC also makes local
2787version backups, so that simple diff and revert operations are 2794version backups, so that simple diff and revert operations are
@@ -2900,7 +2907,7 @@ the command is finished. For more information about windows in Emacs,
2900 With a numeric argument, @code{compare-windows} ignores changes in 2907 With a numeric argument, @code{compare-windows} ignores changes in
2901whitespace. If the variable @code{compare-ignore-case} is 2908whitespace. If the variable @code{compare-ignore-case} is
2902non-@code{nil}, the comparison ignores differences in case as well. 2909non-@code{nil}, the comparison ignores differences in case as well.
2903If the variable @code{compare-ignore-whitespace} is non-nil, 2910If the variable @code{compare-ignore-whitespace} is non-@code{nil},
2904@code{compare-windows} normally ignores changes in whitespace, and a 2911@code{compare-windows} normally ignores changes in whitespace, and a
2905prefix argument turns that off. 2912prefix argument turns that off.
2906 2913
@@ -3298,6 +3305,10 @@ Clear the cache; that is, remove all file names from it.
3298@node File Conveniences 3305@node File Conveniences
3299@section Convenience Features for Finding Files 3306@section Convenience Features for Finding Files
3300 3307
3308 In this section, we introduce some convenient facilities for finding
3309recently-opened files, reading file names from a buffer, and viewing
3310image files.
3311
3301@findex recentf-mode 3312@findex recentf-mode
3302@vindex recentf-mode 3313@vindex recentf-mode
3303@findex recentf-save-list 3314@findex recentf-save-list
@@ -3308,25 +3319,22 @@ opened files. @kbd{M-x recentf-save-list} saves the current
3308@code{recent-file-list} to a file, and @kbd{M-x recentf-edit-list} 3319@code{recent-file-list} to a file, and @kbd{M-x recentf-edit-list}
3309edits it. 3320edits it.
3310 3321
3311@findex auto-image-file-mode
3312@findex mode, auto-image-file
3313@cindex images, visiting
3314@cindex visiting image files
3315@vindex image-file-name-regexps
3316@vindex image-file-name-extensions
3317 When Auto-image-file minor mode is enabled, visiting an image file
3318displays it as an image, not as text. Likewise, inserting an image
3319file into a buffer inserts it as an image. This works only when Emacs
3320can display the relevant image type. The variables
3321@code{image-file-name-extensions} or @code{image-file-name-regexps}
3322control which file names are recognized as containing images.
3323
3324 The @kbd{M-x ffap} command generalizes @code{find-file} with more 3322 The @kbd{M-x ffap} command generalizes @code{find-file} with more
3325powerful heuristic defaults (@pxref{FFAP}), often based on the text at 3323powerful heuristic defaults (@pxref{FFAP}), often based on the text at
3326point. Partial Completion mode offers other features extending 3324point. Partial Completion mode offers other features extending
3327@code{find-file}, which can be used with @code{ffap}. 3325@code{find-file}, which can be used with @code{ffap}.
3328@xref{Completion Options}. 3326@xref{Completion Options}.
3329 3327
3328@findex thumbs-mode
3329@findex mode, thumbs
3330 Thumbs mode is a major mode for viewing directories containing many
3331image files. To use it, type @kbd{M-x thumbs} and specify the
3332directory to view. The images in that directory will be displayed in
3333a @samp{Thumbs} buffer as @dfn{thumbnails}; type @kbd{RET} on a
3334thumbnail to view the full-size image. Thumbs mode requires the
3335@file{convert} program, which is part of the ImageMagick software
3336package.
3337
3330@ignore 3338@ignore
3331 arch-tag: 768d32cb-e15a-4cc1-b7bf-62c00ee12250 3339 arch-tag: 768d32cb-e15a-4cc1-b7bf-62c00ee12250
3332@end ignore 3340@end ignore
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/maintaining.texi b/man/maintaining.texi
index 231699a7d02..f8bc0de5992 100644
--- a/man/maintaining.texi
+++ b/man/maintaining.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 Maintaining, Abbrevs, Building, Top 5@node Maintaining, Abbrevs, Building, Top
5@chapter Maintaining Programs 6@chapter Maintaining Programs
@@ -8,8 +9,8 @@
8@cindex program editing 9@cindex program editing
9 10
10 This chapter describes Emacs features for maintaining programs. The 11 This chapter describes Emacs features for maintaining programs. The
11version control features (@pxref{Version Control}) are also 12version control features (@pxref{Version Control}) are also particularly
12particularly useful for this purpose. 13useful for this purpose.
13 14
14@menu 15@menu
15* Change Log:: Maintaining a change history for your program. 16* Change Log:: Maintaining a change history for your program.
@@ -51,13 +52,13 @@ permitted provided the copyright notice and this notice are preserved.
51@noindent 52@noindent
52Of course, you should substitute the proper years and copyright holder. 53Of course, you should substitute the proper years and copyright holder.
53 54
54 A change log entry starts with a header line that contains the 55 A change log entry starts with a header line that contains the current
55current date, your name, and your email address (taken from the 56date, your name, and your email address (taken from the variable
56variable @code{user-mail-address}). Aside from these header lines, 57@code{add-log-mailing-address}). Aside from these header lines, every
57every line in the change log starts with a space or a tab. The bulk 58line in the change log starts with a space or a tab. The bulk of the
58of the entry consists of @dfn{items}, each of which starts with a line 59entry consists of @dfn{items}, each of which starts with a line starting
59starting with whitespace and a star. Here are two entries, both dated 60with whitespace and a star. Here are two entries, both dated in May
60in May 1993, each with two items: 611993, each with two items:
61 62
62@iftex 63@iftex
63@medbreak 64@medbreak
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 6181003d694..f1e05cae89c 100644
--- a/man/misc.texi
+++ b/man/misc.texi
@@ -1250,10 +1250,10 @@ kills it if the file name matches the regular expression
1250@vindex server-name 1250@vindex server-name
1251 You can run multiple Emacs servers on the same machine by giving 1251 You can run multiple Emacs servers on the same machine by giving
1252each one a unique ``server name'', using the variable 1252each one a unique ``server name'', using the variable
1253@code{server-name}. For example, @kbd{M-x set-variable RET 1253@code{server-name}. For example, @kbd{M-x set-variable @key{RET}
1254server-name RET foo RET} sets the server name to @samp{foo}. The 1254server-name @key{RET} foo @key{RET}} sets the server name to
1255@code{emacsclient} program can visit a server by name using the 1255@samp{foo}. The @code{emacsclient} program can visit a server by name
1256@samp{-s} option. @xref{Invoking emacsclient}. 1256using the @samp{-s} option. @xref{Invoking emacsclient}.
1257 1257
1258 While @code{mail} or another application is waiting for 1258 While @code{mail} or another application is waiting for
1259@code{emacsclient} to finish, @code{emacsclient} does not read terminal 1259@code{emacsclient} to finish, @code{emacsclient} does not read terminal
diff --git a/man/mule.texi b/man/mule.texi
index 54952fa08fa..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
@@ -1358,6 +1376,27 @@ however, on a console terminal or in @code{xterm}, you can arrange for
1358Meta to be converted to @kbd{ESC} and still be able type 8-bit 1376Meta to be converted to @kbd{ESC} and still be able type 8-bit
1359characters present directly on the keyboard or using @kbd{Compose} or 1377characters present directly on the keyboard or using @kbd{Compose} or
1360@kbd{AltGr} keys. @xref{User Input}. 1378@kbd{AltGr} keys. @xref{User Input}.
1379
1380@kindex C-x 8
1381@cindex @code{iso-transl} library
1382@cindex compose character
1383@cindex dead character
1384@item
1385For Latin-1 only, you can use the key @kbd{C-x 8} as a ``compose
1386character'' prefix for entry of non-@acronym{ASCII} Latin-1 printing
1387characters. @kbd{C-x 8} is good for insertion (in the minibuffer as
1388well as other buffers), for searching, and in any other context where
1389a key sequence is allowed.
1390
1391@kbd{C-x 8} works by loading the @code{iso-transl} library. Once that
1392library is loaded, the @key{ALT} modifier key, if the keyboard has
1393one, serves the same purpose as @kbd{C-x 8}: use @key{ALT} together
1394with an accent character to modify the following letter. In addition,
1395if the keyboard has keys for the Latin-1 ``dead accent characters,''
1396they too are defined to compose with the following character, once
1397@code{iso-transl} is loaded.
1398
1399Use @kbd{C-x 8 C-h} to list all the available @kbd{C-x 8} translations.
1361@end itemize 1400@end itemize
1362 1401
1363@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/text.texi b/man/text.texi
index aba7496d5fc..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
diff --git a/man/xresources.texi b/man/xresources.texi
index c88ca6ad142..aaf7262d060 100644
--- a/man/xresources.texi
+++ b/man/xresources.texi
@@ -52,7 +52,8 @@ Registry, under the key @samp{HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs}
52and then under the key @samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}. 52and then under the key @samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}.
53The 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
54only customizable via the system-wide settings in the Display Control 54only customizable via the system-wide settings in the Display Control
55Panel. 55Panel. You can also set resources using the @samp{-xrm} command line
56option (see below.)
56 57
57 Programs define named resources with particular meanings. They also 58 Programs define named resources with particular meanings. They also
58define how to group resources into named classes. For instance, in 59define how to group resources into named classes. For instance, in
@@ -668,8 +669,8 @@ or just the class.
668@end table 669@end table
669 670
670@noindent 671@noindent
671You must soecify the class and the style in double-quotes, and put 672You must specify the class and the style in double-quotes, and put
672these commands at the top level in a @file{~/.gtkrc-2.0} file, like 673these commands at the top level in the GTK customization file, like
673this: 674this:
674 675
675@smallexample 676@smallexample
@@ -782,7 +783,7 @@ widget "*emacs-menuitem* style "my_menu_style"
782automatically applies only to Emacs, since other programs don't read 783automatically applies only to Emacs, since other programs don't read
783that file. For example, the drop down menu in the file dialog can not 784that file. For example, the drop down menu in the file dialog can not
784be customized by any absolute widget name, only by an absolute class 785be customized by any absolute widget name, only by an absolute class
785name. This is so because the widgets in the drop down menu do not 786name. This is because the widgets in the drop down menu do not
786have names and the menu is not contained in the Emacs GtkWindow. To 787have names and the menu is not contained in the Emacs GtkWindow. To
787have all menus in Emacs look the same, use this in 788have all menus in Emacs look the same, use this in
788@file{~/.emacs.d/gtkrc}: 789@file{~/.emacs.d/gtkrc}:
diff --git a/src/ChangeLog b/src/ChangeLog
index 4ea174bdc60..34bf8b41b45 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,6 +1,81 @@
12005-04-04 Kim F. Storm <storm@cua.dk>
2
3 * alloc.c (Fgarbage_collect): Call CHECK_CONS_LIST before and after gc.
4
5 * eval.c (Ffuncall): Always call CHECK_CONS_LIST on entry.
6 Call it again after autoload.
7
82005-04-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
9
10 * alloc.c (allocate_string_data): Call BLOCK_INPUT before calling
11 mallopt.
12
13 * ralloc.c (r_alloc_init): Ditto.
14
152005-04-01 Kenichi Handa <handa@m17n.org>
16
17 * lisp.h (Vascii_upcase_table, Vascii_canon_table,
18 Vascii_eqv_table): Extern them.
19
20 * casetab.c (set_case_table): If standard is nonzero, setup
21 Vascii_upcase_table, Vascii_canon_table, and Vascii_eqv_table.
22
23 * search.c (looking_at_1): Use current_buffer->case_canon_table,
24 not DOWNCASE_TABLE.
25 (string_match_1): Likewise.
26 (fast_c_string_match_ignore_case): Use Vascii_canon_table, not
27 Vascii_downcase_table.
28 (fast_string_match_ignore_case): Likewise.
29 (search_buffer): Fix checking of boyer-moore usability.
30 (boyer_moore): Calculate translate_prev_byte1/2/3 in advance. No
31 need of tranlating characters in PAT. Fix calculation of
32 simple_translate.
33
342005-03-31 Stefan Monnier <monnier@iro.umontreal.ca>
35
36 * xterm.c [HAVE_XAW3D]: Include ThreeD.h for XtNbeNiceToColormap.
37 (x_create_toolkit_scroll_bar): Test XtNbeNiceToColormap before using it.
38 Use XtNtopShadowPixel and XtNbottomShadowPixel.
39 (x_set_toolkit_scroll_bar_thumb): Remove ugly old hack that didn't
40 really work and that breaks with some versions of Xaw3d.
41
422005-03-31 Kenichi Handa <handa@m17n.org>
43
44 * coding.c (syms_of_coding): Fix previous change.
45
462005-03-30 Stefan Monnier <monnier@iro.umontreal.ca>
47
48 * fileio.c (search_embedded_absfilename): Fix last change.
49
502005-03-25 Kenichi Handa <handa@m17n.org>
51
52 * coding.c (syms_of_coding): Suggest to use set-coding-category in
53 the docstring of coding-category-list.
54
552005-03-31 Kim F. Storm <storm@cua.dk>
56
57 * keyboard.c (Qmouse_fixup_help_message): New var.
58 (syms_of_keyboard): Intern and staticpro it.
59 (show_help_echo): Apply mouse-fixup-help-message to help string.
60
612005-03-30 Kim F. Storm <storm@cua.dk>
62
63 * xdisp.c (display_line): Allow multiple overlay arrows in window.
64
652005-03-28 Stefan Monnier <monnier@iro.umontreal.ca>
66
67 * fileio.c (Fexpand_file_name): Use IS_DEVICE_SEP.
68 (file_name_absolute_p): New fun, extracted from Ffile_name_absolute_p.
69 (Ffile_name_absolute_p): Use it.
70 (search_embedded_absfilename): New fun, extracted from
71 Fsubstitute_in_file_name. Use file_name_absolute_p.
72 Free the pw data after use.
73 (Fsubstitute_in_file_name): Use it.
74 After cutting a prefix, re-check file-name-handler.
75
12005-03-26 Lennart Borgman <lennart.borgman.073@student.lu.se> 762005-03-26 Lennart Borgman <lennart.borgman.073@student.lu.se>
2 77
3 * w32term.h (x_output): add focus_state. 78 * w32term.h (x_output): Add focus_state.
4 79
5 * w32term.c (x_focus_changed, w32_detect_focus_change): New functions. 80 * w32term.c (x_focus_changed, w32_detect_focus_change): New functions.
6 (w32_read_socket) [WM_SETFOCUS]: Call w32_detect_focus_change. 81 (w32_read_socket) [WM_SETFOCUS]: Call w32_detect_focus_change.
diff --git a/src/alloc.c b/src/alloc.c
index dbb77f77128..c29c4c8e7f6 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -1934,14 +1934,18 @@ allocate_string_data (s, nchars, nbytes)
1934 mmap'ed data typically have an address towards the top of the 1934 mmap'ed data typically have an address towards the top of the
1935 address space, which won't fit into an EMACS_INT (at least on 1935 address space, which won't fit into an EMACS_INT (at least on
1936 32-bit systems with the current tagging scheme). --fx */ 1936 32-bit systems with the current tagging scheme). --fx */
1937 BLOCK_INPUT;
1937 mallopt (M_MMAP_MAX, 0); 1938 mallopt (M_MMAP_MAX, 0);
1939 UNBLOCK_INPUT;
1938#endif 1940#endif
1939 1941
1940 b = (struct sblock *) lisp_malloc (size + GC_STRING_EXTRA, MEM_TYPE_NON_LISP); 1942 b = (struct sblock *) lisp_malloc (size + GC_STRING_EXTRA, MEM_TYPE_NON_LISP);
1941 1943
1942#ifdef DOUG_LEA_MALLOC 1944#ifdef DOUG_LEA_MALLOC
1943 /* Back to a reasonable maximum of mmap'ed areas. */ 1945 /* Back to a reasonable maximum of mmap'ed areas. */
1946 BLOCK_INPUT;
1944 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS); 1947 mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
1948 UNBLOCK_INPUT;
1945#endif 1949#endif
1946 1950
1947 b->next_free = &b->first_data; 1951 b->next_free = &b->first_data;
@@ -4684,6 +4688,8 @@ returns nil, because real GC can't be done. */)
4684 if (pure_bytes_used_before_overflow) 4688 if (pure_bytes_used_before_overflow)
4685 return Qnil; 4689 return Qnil;
4686 4690
4691 CHECK_CONS_LIST ();
4692
4687 /* Don't keep undo information around forever. 4693 /* Don't keep undo information around forever.
4688 Do this early on, so it is no problem if the user quits. */ 4694 Do this early on, so it is no problem if the user quits. */
4689 { 4695 {
@@ -4878,6 +4884,8 @@ returns nil, because real GC can't be done. */)
4878 4884
4879 UNBLOCK_INPUT; 4885 UNBLOCK_INPUT;
4880 4886
4887 CHECK_CONS_LIST ();
4888
4881 /* clear_marks (); */ 4889 /* clear_marks (); */
4882 gc_in_progress = 0; 4890 gc_in_progress = 0;
4883 4891
diff --git a/src/casetab.c b/src/casetab.c
index 5ba025e2b5a..d7dcb420c83 100644
--- a/src/casetab.c
+++ b/src/casetab.c
@@ -162,7 +162,12 @@ set_case_table (table, standard)
162 XCHAR_TABLE (canon)->extras[2] = eqv; 162 XCHAR_TABLE (canon)->extras[2] = eqv;
163 163
164 if (standard) 164 if (standard)
165 Vascii_downcase_table = table; 165 {
166 Vascii_downcase_table = table;
167 Vascii_upcase_table = up;
168 Vascii_canon_table = canon;
169 Vascii_eqv_table = eqv;
170 }
166 else 171 else
167 { 172 {
168 current_buffer->downcase_table = table; 173 current_buffer->downcase_table = table;
diff --git a/src/coding.c b/src/coding.c
index 3b6b82aeea4..a1dd77872f5 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -7821,7 +7821,7 @@ associated with each coding-category one by one in this order. When
7821one algorithm agrees with a byte sequence of source text, the coding 7821one algorithm agrees with a byte sequence of source text, the coding
7822system bound to the corresponding coding-category is selected. 7822system bound to the corresponding coding-category is selected.
7823 7823
7824Don't modify this variable directly, but use `set-coding-category'. */); 7824Don't modify this variable directly, but use `set-coding-priority'. */);
7825 { 7825 {
7826 int i; 7826 int i;
7827 7827
diff --git a/src/editfns.c b/src/editfns.c
index 0587d66bb0f..f77b9cafc80 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
@@ -265,10 +265,7 @@ clip_to_bounds (lower, num, upper)
265 265
266DEFUN ("goto-char", Fgoto_char, Sgoto_char, 1, 1, "NGoto char: ", 266DEFUN ("goto-char", Fgoto_char, Sgoto_char, 1, 1, "NGoto char: ",
267 doc: /* Set point to POSITION, a number or marker. 267 doc: /* Set point to POSITION, a number or marker.
268Beginning of buffer is position (point-min), end is (point-max). 268Beginning of buffer is position (point-min), end is (point-max). */)
269If the position is in the middle of a multibyte form,
270the actual point is set at the head of the multibyte form
271except in the case that `enable-multibyte-characters' is nil. */)
272 (position) 269 (position)
273 register Lisp_Object position; 270 register Lisp_Object position;
274{ 271{
diff --git a/src/eval.c b/src/eval.c
index bf4fec4f8a1..8700ca222ce 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2742,6 +2742,8 @@ usage: (funcall FUNCTION &rest ARGUMENTS) */)
2742 if (debug_on_next_call) 2742 if (debug_on_next_call)
2743 do_debug_on_call (Qlambda); 2743 do_debug_on_call (Qlambda);
2744 2744
2745 CHECK_CONS_LIST ();
2746
2745 retry: 2747 retry:
2746 2748
2747 fun = args[0]; 2749 fun = args[0];
@@ -2750,9 +2752,7 @@ usage: (funcall FUNCTION &rest ARGUMENTS) */)
2750 2752
2751 if (SUBRP (fun)) 2753 if (SUBRP (fun))
2752 { 2754 {
2753 CHECK_CONS_LIST (); 2755 if (numargs < XSUBR (fun)->min_args
2754
2755 if (numargs < XSUBR (fun)->min_args
2756 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs)) 2756 || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
2757 { 2757 {
2758 XSETFASTINT (lisp_numargs, numargs); 2758 XSETFASTINT (lisp_numargs, numargs);
@@ -2844,6 +2844,7 @@ usage: (funcall FUNCTION &rest ARGUMENTS) */)
2844 else if (EQ (funcar, Qautoload)) 2844 else if (EQ (funcar, Qautoload))
2845 { 2845 {
2846 do_autoload (fun, args[0]); 2846 do_autoload (fun, args[0]);
2847 CHECK_CONS_LIST ();
2847 goto retry; 2848 goto retry;
2848 } 2849 }
2849 else 2850 else
diff --git a/src/fileio.c b/src/fileio.c
index 60d9c46b6eb..e1da0fc6918 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -1016,7 +1016,7 @@ probably use `make-temp-file' instead, except in three circumstances:
1016DEFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, 1016DEFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0,
1017 doc: /* Convert filename NAME to absolute, and canonicalize it. 1017 doc: /* Convert filename NAME to absolute, and canonicalize it.
1018Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative 1018Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative
1019 (does not start with slash); if DEFAULT-DIRECTORY is nil or missing, 1019\(does not start with slash); if DEFAULT-DIRECTORY is nil or missing,
1020the current buffer's value of default-directory is used. 1020the current buffer's value of default-directory is used.
1021File name components that are `.' are removed, and 1021File name components that are `.' are removed, and
1022so are file name components followed by `..', along with the `..' itself; 1022so are file name components followed by `..', along with the `..' itself;
@@ -1466,7 +1466,7 @@ See also the function `substitute-in-file-name'. */)
1466 indirectly by prepending newdir to nm if necessary, and using 1466 indirectly by prepending newdir to nm if necessary, and using
1467 cwd (or the wd of newdir's drive) as the new newdir. */ 1467 cwd (or the wd of newdir's drive) as the new newdir. */
1468 1468
1469 if (IS_DRIVE (newdir[0]) && newdir[1] == ':') 1469 if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1]))
1470 { 1470 {
1471 drive = newdir[0]; 1471 drive = newdir[0];
1472 newdir += 2; 1472 newdir += 2;
@@ -1489,7 +1489,7 @@ See also the function `substitute-in-file-name'. */)
1489 } 1489 }
1490 1490
1491 /* Strip off drive name from prefix, if present. */ 1491 /* Strip off drive name from prefix, if present. */
1492 if (IS_DRIVE (newdir[0]) && newdir[1] == ':') 1492 if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1]))
1493 { 1493 {
1494 drive = newdir[0]; 1494 drive = newdir[0];
1495 newdir += 2; 1495 newdir += 2;
@@ -1723,7 +1723,7 @@ See also the function `substitute-in-file-name'. */)
1723DEAFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, 1723DEAFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0,
1724 "Convert FILENAME to absolute, and canonicalize it.\n\ 1724 "Convert FILENAME to absolute, and canonicalize it.\n\
1725Second arg DEFAULT is directory to start with if FILENAME is relative\n\ 1725Second arg DEFAULT is directory to start with if FILENAME is relative\n\
1726 (does not start with slash); if DEFAULT is nil or missing,\n\ 1726\(does not start with slash); if DEFAULT is nil or missing,\n\
1727the current buffer's value of default-directory is used.\n\ 1727the current buffer's value of default-directory is used.\n\
1728Filenames containing `.' or `..' as components are simplified;\n\ 1728Filenames containing `.' or `..' as components are simplified;\n\
1729initial `~/' expands to your home directory.\n\ 1729initial `~/' expands to your home directory.\n\
@@ -2042,6 +2042,75 @@ See also the function `substitute-in-file-name'.")
2042} 2042}
2043#endif 2043#endif
2044 2044
2045/* If /~ or // appears, discard everything through first slash. */
2046static int
2047file_name_absolute_p (filename)
2048 const unsigned char *filename;
2049{
2050 return
2051 (IS_DIRECTORY_SEP (*filename) || *filename == '~'
2052#ifdef VMS
2053 /* ??? This criterion is probably wrong for '<'. */
2054 || index (filename, ':') || index (filename, '<')
2055 || (*filename == '[' && (filename[1] != '-'
2056 || (filename[2] != '.' && filename[2] != ']'))
2057 && filename[1] != '.')
2058#endif /* VMS */
2059#ifdef DOS_NT
2060 || (IS_DRIVE (*filename) && IS_DEVICE_SEP (filename[1])
2061 && IS_DIRECTORY_SEP (filename[2]))
2062#endif
2063 );
2064}
2065
2066static unsigned char *
2067search_embedded_absfilename (nm, endp)
2068 unsigned char *nm, *endp;
2069{
2070 unsigned char *p, *s;
2071
2072 for (p = nm + 1; p < endp; p++)
2073 {
2074 if ((0
2075#ifdef VMS
2076 || p[-1] == ':' || p[-1] == ']' || p[-1] == '>'
2077#endif /* VMS */
2078 || IS_DIRECTORY_SEP (p[-1]))
2079 && file_name_absolute_p (p)
2080#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN)
2081 /* // at start of file name is meaningful in Apollo,
2082 WindowsNT and Cygwin systems. */
2083 && !(IS_DIRECTORY_SEP (p[0]) && p - 1 == nm)
2084#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */
2085 )
2086 {
2087 for (s = p; *s && (!IS_DIRECTORY_SEP (*s)
2088#ifdef VMS
2089 && *s != ':'
2090#endif /* VMS */
2091 ); s++);
2092 if (p[0] == '~' && s > p + 1) /* we've got "/~something/" */
2093 {
2094 unsigned char *o = alloca (s - p + 1);
2095 struct passwd *pw;
2096 bcopy (p, o, s - p);
2097 o [s - p] = 0;
2098
2099 /* If we have ~user and `user' exists, discard
2100 everything up to ~. But if `user' does not exist, leave
2101 ~user alone, it might be a literal file name. */
2102 if ((pw = getpwnam (o + 1)))
2103 return p;
2104 else
2105 xfree (pw);
2106 }
2107 else
2108 return p;
2109 }
2110 }
2111 return NULL;
2112}
2113
2045DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name, 2114DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name,
2046 Ssubstitute_in_file_name, 1, 1, 0, 2115 Ssubstitute_in_file_name, 1, 1, 0,
2047 doc: /* Substitute environment variables referred to in FILENAME. 2116 doc: /* Substitute environment variables referred to in FILENAME.
@@ -2063,7 +2132,6 @@ duplicates what `expand-file-name' does. */)
2063 int total = 0; 2132 int total = 0;
2064 int substituted = 0; 2133 int substituted = 0;
2065 unsigned char *xnm; 2134 unsigned char *xnm;
2066 struct passwd *pw;
2067 Lisp_Object handler; 2135 Lisp_Object handler;
2068 2136
2069 CHECK_STRING (filename); 2137 CHECK_STRING (filename);
@@ -2083,61 +2151,17 @@ duplicates what `expand-file-name' does. */)
2083 endp = nm + SBYTES (filename); 2151 endp = nm + SBYTES (filename);
2084 2152
2085 /* If /~ or // appears, discard everything through first slash. */ 2153 /* If /~ or // appears, discard everything through first slash. */
2086 2154 p = search_embedded_absfilename (nm, endp);
2087 for (p = nm; p != endp; p++) 2155 if (p)
2088 { 2156 /* Start over with the new string, so we check the file-name-handler
2089 if ((p[0] == '~' 2157 again. Important with filenames like "/home/foo//:/hello///there"
2090#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) 2158 which whould substitute to "/:/hello///there" rather than "/there". */
2091 /* // at start of file name is meaningful in Apollo, 2159 return Fsubstitute_in_file_name
2092 WindowsNT and Cygwin systems. */ 2160 (make_specified_string (p, -1, endp - p,
2093 || (IS_DIRECTORY_SEP (p[0]) && p - 1 != nm) 2161 STRING_MULTIBYTE (filename)));
2094#else /* not (APOLLO || WINDOWSNT || CYGWIN) */
2095 || IS_DIRECTORY_SEP (p[0])
2096#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */
2097 )
2098 && p != nm
2099 && (0
2100#ifdef VMS
2101 || p[-1] == ':' || p[-1] == ']' || p[-1] == '>'
2102#endif /* VMS */
2103 || IS_DIRECTORY_SEP (p[-1])))
2104 {
2105 for (s = p; *s && (!IS_DIRECTORY_SEP (*s)
2106#ifdef VMS
2107 && *s != ':'
2108#endif /* VMS */
2109 ); s++);
2110 if (p[0] == '~' && s > p + 1) /* we've got "/~something/" */
2111 {
2112 o = (unsigned char *) alloca (s - p + 1);
2113 bcopy ((char *) p, o, s - p);
2114 o [s - p] = 0;
2115
2116 pw = (struct passwd *) getpwnam (o + 1);
2117 }
2118 /* If we have ~/ or ~user and `user' exists, discard
2119 everything up to ~. But if `user' does not exist, leave
2120 ~user alone, it might be a literal file name. */
2121 if (IS_DIRECTORY_SEP (p[0]) || s == p + 1 || pw)
2122 {
2123 nm = p;
2124 substituted = 1;
2125 }
2126 }
2127#ifdef DOS_NT
2128 /* see comment in expand-file-name about drive specifiers */
2129 else if (IS_DRIVE (p[0]) && p[1] == ':'
2130 && p > nm && IS_DIRECTORY_SEP (p[-1]))
2131 {
2132 nm = p;
2133 substituted = 1;
2134 }
2135#endif /* DOS_NT */
2136 }
2137 2162
2138#ifdef VMS 2163#ifdef VMS
2139 return make_specified_string (nm, -1, strlen (nm), 2164 return filename;
2140 STRING_MULTIBYTE (filename));
2141#else 2165#else
2142 2166
2143 /* See if any variables are substituted into the string 2167 /* See if any variables are substituted into the string
@@ -2263,22 +2287,11 @@ duplicates what `expand-file-name' does. */)
2263 *x = 0; 2287 *x = 0;
2264 2288
2265 /* If /~ or // appears, discard everything through first slash. */ 2289 /* If /~ or // appears, discard everything through first slash. */
2266 2290 while ((p = search_embedded_absfilename (xnm, x)))
2267 for (p = xnm; p != x; p++) 2291 /* This time we do not start over because we've already expanded envvars
2268 if ((p[0] == '~' 2292 and replaced $$ with $. Maybe we should start over as well, but we'd
2269#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) 2293 need to quote some $ to $$ first. */
2270 || (IS_DIRECTORY_SEP (p[0]) && p - 1 != xnm) 2294 xnm = p;
2271#else /* not (APOLLO || WINDOWSNT || CYGWIN) */
2272 || IS_DIRECTORY_SEP (p[0])
2273#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */
2274 )
2275 && p != xnm && IS_DIRECTORY_SEP (p[-1]))
2276 xnm = p;
2277#ifdef DOS_NT
2278 else if (IS_DRIVE (p[0]) && p[1] == ':'
2279 && p > xnm && IS_DIRECTORY_SEP (p[-1]))
2280 xnm = p;
2281#endif
2282 2295
2283 return make_specified_string (xnm, -1, x - xnm, STRING_MULTIBYTE (filename)); 2296 return make_specified_string (xnm, -1, x - xnm, STRING_MULTIBYTE (filename));
2284 2297
@@ -2961,24 +2974,8 @@ On Unix, this is a name starting with a `/' or a `~'. */)
2961 (filename) 2974 (filename)
2962 Lisp_Object filename; 2975 Lisp_Object filename;
2963{ 2976{
2964 const unsigned char *ptr;
2965
2966 CHECK_STRING (filename); 2977 CHECK_STRING (filename);
2967 ptr = SDATA (filename); 2978 return file_name_absolute_p (SDATA (filename)) ? Qt : Qnil;
2968 if (IS_DIRECTORY_SEP (*ptr) || *ptr == '~'
2969#ifdef VMS
2970/* ??? This criterion is probably wrong for '<'. */
2971 || index (ptr, ':') || index (ptr, '<')
2972 || (*ptr == '[' && (ptr[1] != '-' || (ptr[2] != '.' && ptr[2] != ']'))
2973 && ptr[1] != '.')
2974#endif /* VMS */
2975#ifdef DOS_NT
2976 || (IS_DRIVE (*ptr) && ptr[1] == ':' && IS_DIRECTORY_SEP (ptr[2]))
2977#endif
2978 )
2979 return Qt;
2980 else
2981 return Qnil;
2982} 2979}
2983 2980
2984/* Return nonzero if file FILENAME exists and can be executed. */ 2981/* Return nonzero if file FILENAME exists and can be executed. */
diff --git a/src/keyboard.c b/src/keyboard.c
index f29a7676d34..39891b1a95d 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -514,6 +514,10 @@ Lisp_Object Qmake_frame_visible;
514Lisp_Object Qselect_window; 514Lisp_Object Qselect_window;
515Lisp_Object Qhelp_echo; 515Lisp_Object Qhelp_echo;
516 516
517#ifdef HAVE_MOUSE
518Lisp_Object Qmouse_fixup_help_message;
519#endif
520
517/* Symbols to denote kinds of events. */ 521/* Symbols to denote kinds of events. */
518Lisp_Object Qfunction_key; 522Lisp_Object Qfunction_key;
519Lisp_Object Qmouse_click; 523Lisp_Object Qmouse_click;
@@ -2298,6 +2302,11 @@ show_help_echo (help, window, object, pos, ok_to_overwrite_keystroke_echo)
2298 return; 2302 return;
2299 } 2303 }
2300 2304
2305#ifdef HAVE_MOUSE
2306 if (!noninteractive && STRINGP (help))
2307 help = call1 (Qmouse_fixup_help_message, help);
2308#endif
2309
2301 if (STRINGP (help) || NILP (help)) 2310 if (STRINGP (help) || NILP (help))
2302 { 2311 {
2303 if (!NILP (Vshow_help_function)) 2312 if (!NILP (Vshow_help_function))
@@ -11010,6 +11019,11 @@ syms_of_keyboard ()
11010 Qmenu_bar = intern ("menu-bar"); 11019 Qmenu_bar = intern ("menu-bar");
11011 staticpro (&Qmenu_bar); 11020 staticpro (&Qmenu_bar);
11012 11021
11022#ifdef HAVE_MOUSE
11023 Qmouse_fixup_help_message = intern ("mouse-fixup-help-message");
11024 staticpro (&Qmouse_fixup_help_message);
11025#endif
11026
11013 Qabove_handle = intern ("above-handle"); 11027 Qabove_handle = intern ("above-handle");
11014 staticpro (&Qabove_handle); 11028 staticpro (&Qabove_handle);
11015 Qhandle = intern ("handle"); 11029 Qhandle = intern ("handle");
diff --git a/src/lisp.h b/src/lisp.h
index f770a29cf4f..e1727697802 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1861,7 +1861,8 @@ extern Lisp_Object case_temp2;
1861 NATNUMP (case_temp2)) \ 1861 NATNUMP (case_temp2)) \
1862 ? XFASTINT (case_temp2) : case_temp1) 1862 ? XFASTINT (case_temp2) : case_temp1)
1863 1863
1864extern Lisp_Object Vascii_downcase_table; 1864extern Lisp_Object Vascii_downcase_table, Vascii_upcase_table;
1865extern Lisp_Object Vascii_canon_table, Vascii_eqv_table;
1865 1866
1866/* Number of bytes of structure consed since last GC. */ 1867/* Number of bytes of structure consed since last GC. */
1867 1868
diff --git a/src/ralloc.c b/src/ralloc.c
index 75c25258a9d..fd0d62e1977 100644
--- a/src/ralloc.c
+++ b/src/ralloc.c
@@ -28,6 +28,7 @@ Boston, MA 02111-1307, USA. */
28 28
29#include <config.h> 29#include <config.h>
30#include "lisp.h" /* Needed for VALBITS. */ 30#include "lisp.h" /* Needed for VALBITS. */
31#include "blockinput.h"
31 32
32#ifdef HAVE_UNISTD_H 33#ifdef HAVE_UNISTD_H
33#include <unistd.h> 34#include <unistd.h>
@@ -1255,7 +1256,9 @@ r_alloc_init ()
1255#endif 1256#endif
1256 1257
1257#ifdef DOUG_LEA_MALLOC 1258#ifdef DOUG_LEA_MALLOC
1258 mallopt (M_TOP_PAD, 64 * 4096); 1259 BLOCK_INPUT;
1260 mallopt (M_TOP_PAD, 64 * 4096);
1261 UNBLOCK_INPUT;
1259#else 1262#else
1260#ifndef SYSTEM_MALLOC 1263#ifndef SYSTEM_MALLOC
1261 /* Give GNU malloc's morecore some hysteresis 1264 /* Give GNU malloc's morecore some hysteresis
diff --git a/src/search.c b/src/search.c
index 7e990f2bfd7..d86a7cca7b2 100644
--- a/src/search.c
+++ b/src/search.c
@@ -293,7 +293,7 @@ looking_at_1 (string, posix)
293 CHECK_STRING (string); 293 CHECK_STRING (string);
294 bufp = compile_pattern (string, &search_regs, 294 bufp = compile_pattern (string, &search_regs,
295 (!NILP (current_buffer->case_fold_search) 295 (!NILP (current_buffer->case_fold_search)
296 ? DOWNCASE_TABLE : Qnil), 296 ? current_buffer->case_canon_table : Qnil),
297 posix, 297 posix,
298 !NILP (current_buffer->enable_multibyte_characters)); 298 !NILP (current_buffer->enable_multibyte_characters));
299 299
@@ -399,7 +399,7 @@ string_match_1 (regexp, string, start, posix)
399 399
400 bufp = compile_pattern (regexp, &search_regs, 400 bufp = compile_pattern (regexp, &search_regs,
401 (!NILP (current_buffer->case_fold_search) 401 (!NILP (current_buffer->case_fold_search)
402 ? DOWNCASE_TABLE : Qnil), 402 ? current_buffer->case_canon_table : Qnil),
403 posix, 403 posix,
404 STRING_MULTIBYTE (string)); 404 STRING_MULTIBYTE (string));
405 immediate_quit = 1; 405 immediate_quit = 1;
@@ -499,7 +499,7 @@ fast_c_string_match_ignore_case (regexp, string)
499 regexp = string_make_unibyte (regexp); 499 regexp = string_make_unibyte (regexp);
500 re_match_object = Qt; 500 re_match_object = Qt;
501 bufp = compile_pattern (regexp, 0, 501 bufp = compile_pattern (regexp, 0,
502 Vascii_downcase_table, 0, 502 Vascii_canon_table, 0,
503 0); 503 0);
504 immediate_quit = 1; 504 immediate_quit = 1;
505 val = re_search (bufp, string, len, 0, len, 0); 505 val = re_search (bufp, string, len, 0, len, 0);
@@ -516,7 +516,7 @@ fast_string_match_ignore_case (regexp, string)
516 int val; 516 int val;
517 struct re_pattern_buffer *bufp; 517 struct re_pattern_buffer *bufp;
518 518
519 bufp = compile_pattern (regexp, 0, Vascii_downcase_table, 519 bufp = compile_pattern (regexp, 0, Vascii_canon_table,
520 0, STRING_MULTIBYTE (string)); 520 0, STRING_MULTIBYTE (string));
521 immediate_quit = 1; 521 immediate_quit = 1;
522 re_match_object = string; 522 re_match_object = string;
@@ -1175,7 +1175,9 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n,
1175 unsigned char *patbuf; 1175 unsigned char *patbuf;
1176 int multibyte = !NILP (current_buffer->enable_multibyte_characters); 1176 int multibyte = !NILP (current_buffer->enable_multibyte_characters);
1177 unsigned char *base_pat = SDATA (string); 1177 unsigned char *base_pat = SDATA (string);
1178 int charset_base = -1; 1178 /* Set to nozero if we find a non-ASCII char that need
1179 translation. */
1180 int charset_base = 0;
1179 int boyer_moore_ok = 1; 1181 int boyer_moore_ok = 1;
1180 1182
1181 /* MULTIBYTE says whether the text to be searched is multibyte. 1183 /* MULTIBYTE says whether the text to be searched is multibyte.
@@ -1221,9 +1223,17 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n,
1221 base_pat = raw_pattern; 1223 base_pat = raw_pattern;
1222 if (multibyte) 1224 if (multibyte)
1223 { 1225 {
1226 /* Fill patbuf by translated characters in STRING while
1227 checking if we can use boyer-moore search. If TRT is
1228 non-nil, we can use boyer-moore search only if TRT can be
1229 represented by the byte array of 256 elements. For that,
1230 all non-ASCII case-equivalents of all case-senstive
1231 characters in STRING must belong to the same charset and
1232 row. */
1233
1224 while (--len >= 0) 1234 while (--len >= 0)
1225 { 1235 {
1226 unsigned char str[MAX_MULTIBYTE_LENGTH]; 1236 unsigned char str_base[MAX_MULTIBYTE_LENGTH], *str;
1227 int c, translated, inverse; 1237 int c, translated, inverse;
1228 int in_charlen, charlen; 1238 int in_charlen, charlen;
1229 1239
@@ -1233,50 +1243,62 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n,
1233 if (RE && *base_pat == '\\') 1243 if (RE && *base_pat == '\\')
1234 { 1244 {
1235 len--; 1245 len--;
1246 raw_pattern_size--;
1236 len_byte--; 1247 len_byte--;
1237 base_pat++; 1248 base_pat++;
1238 } 1249 }
1239 1250
1240 c = STRING_CHAR_AND_LENGTH (base_pat, len_byte, in_charlen); 1251 c = STRING_CHAR_AND_LENGTH (base_pat, len_byte, in_charlen);
1241 1252
1242 /* Translate the character, if requested. */ 1253 if (NILP (trt))
1243 TRANSLATE (translated, trt, c);
1244 /* If translation changed the byte-length, go back
1245 to the original character. */
1246 charlen = CHAR_STRING (translated, str);
1247 if (in_charlen != charlen)
1248 { 1254 {
1249 translated = c; 1255 str = base_pat;
1250 charlen = CHAR_STRING (c, str); 1256 charlen = in_charlen;
1251 } 1257 }
1252 1258 else
1253 /* If we are searching for something strange,
1254 an invalid multibyte code, don't use boyer-moore. */
1255 if (! ASCII_BYTE_P (translated)
1256 && (charlen == 1 /* 8bit code */
1257 || charlen != in_charlen /* invalid multibyte code */
1258 ))
1259 boyer_moore_ok = 0;
1260
1261 TRANSLATE (inverse, inverse_trt, c);
1262
1263 /* Did this char actually get translated?
1264 Would any other char get translated into it? */
1265 if (translated != c || inverse != c)
1266 { 1259 {
1267 /* Keep track of which character set row 1260 /* Translate the character. */
1268 contains the characters that need translation. */ 1261 TRANSLATE (translated, trt, c);
1269 int charset_base_code = c & ~CHAR_FIELD3_MASK; 1262 charlen = CHAR_STRING (translated, str_base);
1270 int inverse_charset_base = inverse & ~CHAR_FIELD3_MASK; 1263 str = str_base;
1271 1264
1272 if (charset_base_code != inverse_charset_base) 1265 /* Check if C has any other case-equivalents. */
1273 boyer_moore_ok = 0; 1266 TRANSLATE (inverse, inverse_trt, c);
1274 else if (charset_base == -1) 1267 /* If so, check if we can use boyer-moore. */
1275 charset_base = charset_base_code; 1268 if (c != inverse && boyer_moore_ok)
1276 else if (charset_base != charset_base_code) 1269 {
1277 /* If two different rows appear, needing translation, 1270 /* Check if all equivalents belong to the same
1278 then we cannot use boyer_moore search. */ 1271 charset & row. Note that the check of C
1279 boyer_moore_ok = 0; 1272 itself is done by the last iteration. Note
1273 also that we don't have to check ASCII
1274 characters because boyer-moore search can
1275 always handle their translation. */
1276 while (1)
1277 {
1278 if (! ASCII_BYTE_P (inverse))
1279 {
1280 if (SINGLE_BYTE_CHAR_P (inverse))
1281 {
1282 /* Boyer-moore search can't handle a
1283 translation of an eight-bit
1284 character. */
1285 boyer_moore_ok = 0;
1286 break;
1287 }
1288 else if (charset_base == 0)
1289 charset_base = inverse & ~CHAR_FIELD3_MASK;
1290 else if ((inverse & ~CHAR_FIELD3_MASK)
1291 != charset_base)
1292 {
1293 boyer_moore_ok = 0;
1294 break;
1295 }
1296 }
1297 if (c == inverse)
1298 break;
1299 TRANSLATE (inverse, inverse_trt, inverse);
1300 }
1301 }
1280 } 1302 }
1281 1303
1282 /* Store this character into the translated pattern. */ 1304 /* Store this character into the translated pattern. */
@@ -1300,6 +1322,7 @@ search_buffer (string, pos, pos_byte, lim, lim_byte, n,
1300 if (RE && *base_pat == '\\') 1322 if (RE && *base_pat == '\\')
1301 { 1323 {
1302 len--; 1324 len--;
1325 raw_pattern_size--;
1303 base_pat++; 1326 base_pat++;
1304 } 1327 }
1305 c = *base_pat++; 1328 c = *base_pat++;
@@ -1533,16 +1556,18 @@ simple_search (n, pat, len, len_byte, trt, pos, pos_byte, lim, lim_byte)
1533 return n; 1556 return n;
1534} 1557}
1535 1558
1536/* Do Boyer-Moore search N times for the string PAT, 1559/* Do Boyer-Moore search N times for the string BASE_PAT,
1537 whose length is LEN/LEN_BYTE, 1560 whose length is LEN/LEN_BYTE,
1538 from buffer position POS/POS_BYTE until LIM/LIM_BYTE. 1561 from buffer position POS/POS_BYTE until LIM/LIM_BYTE.
1539 DIRECTION says which direction we search in. 1562 DIRECTION says which direction we search in.
1540 TRT and INVERSE_TRT are translation tables. 1563 TRT and INVERSE_TRT are translation tables.
1564 Characters in PAT are already translated by TRT.
1541 1565
1542 This kind of search works if all the characters in PAT that have 1566 This kind of search works if all the characters in BASE_PAT that
1543 nontrivial translation are the same aside from the last byte. This 1567 have nontrivial translation are the same aside from the last byte.
1544 makes it possible to translate just the last byte of a character, 1568 This makes it possible to translate just the last byte of a
1545 and do so after just a simple test of the context. 1569 character, and do so after just a simple test of the context.
1570 CHARSET_BASE is nonzero iff there is such a non-ASCII character.
1546 1571
1547 If that criterion is not satisfied, do not call this function. */ 1572 If that criterion is not satisfied, do not call this function. */
1548 1573
@@ -1569,8 +1594,13 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
1569 int multibyte = ! NILP (current_buffer->enable_multibyte_characters); 1594 int multibyte = ! NILP (current_buffer->enable_multibyte_characters);
1570 1595
1571 unsigned char simple_translate[0400]; 1596 unsigned char simple_translate[0400];
1572 int translate_prev_byte = 0; 1597 /* These are set to the preceding bytes of a byte to be translated
1573 int translate_anteprev_byte = 0; 1598 if charset_base is nonzero. As the maximum byte length of a
1599 multibyte character is 4, we have to check at most three previous
1600 bytes. */
1601 int translate_prev_byte1 = 0;
1602 int translate_prev_byte2 = 0;
1603 int translate_prev_byte3 = 0;
1574 1604
1575#ifdef C_ALLOCA 1605#ifdef C_ALLOCA
1576 int BM_tab_space[0400]; 1606 int BM_tab_space[0400];
@@ -1636,6 +1666,23 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
1636 for (i = 0; i < 0400; i++) 1666 for (i = 0; i < 0400; i++)
1637 simple_translate[i] = i; 1667 simple_translate[i] = i;
1638 1668
1669 if (charset_base)
1670 {
1671 /* Setup translate_prev_byte1/2/3 from CHARSET_BASE. Only a
1672 byte following them are the target of translation. */
1673 int sample_char = charset_base | 0x20;
1674 unsigned char str[MAX_MULTIBYTE_LENGTH];
1675 int len = CHAR_STRING (sample_char, str);
1676
1677 translate_prev_byte1 = str[len - 2];
1678 if (len > 2)
1679 {
1680 translate_prev_byte2 = str[len - 3];
1681 if (len > 3)
1682 translate_prev_byte3 = str[len - 4];
1683 }
1684 }
1685
1639 i = 0; 1686 i = 0;
1640 while (i != infinity) 1687 while (i != infinity)
1641 { 1688 {
@@ -1645,57 +1692,37 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
1645 i = infinity; 1692 i = infinity;
1646 if (! NILP (trt)) 1693 if (! NILP (trt))
1647 { 1694 {
1648 int ch; 1695 /* If the byte currently looking at is a head of a character
1649 int untranslated; 1696 to check case-equivalents, set CH to that character. An
1650 int this_translated = 1; 1697 ASCII character and a non-ASCII character matching with
1651 1698 CHARSET_BASE are to be checked. */
1652 if (multibyte 1699 int ch = -1;
1653 /* Is *PTR the last byte of a character? */ 1700
1654 && (pat_end - ptr == 1 || CHAR_HEAD_P (ptr[1]))) 1701 if (ASCII_BYTE_P (*ptr) || ! multibyte)
1702 ch = *ptr;
1703 else if (charset_base && CHAR_HEAD_P (*ptr))
1655 { 1704 {
1656 unsigned char *charstart = ptr; 1705 ch = STRING_CHAR (ptr, pat_end - ptr);
1657 while (! CHAR_HEAD_P (*charstart)) 1706 if (charset_base != (ch & ~CHAR_FIELD3_MASK))
1658 charstart--; 1707 ch = -1;
1659 untranslated = STRING_CHAR (charstart, ptr - charstart + 1);
1660 if (charset_base == (untranslated & ~CHAR_FIELD3_MASK))
1661 {
1662 TRANSLATE (ch, trt, untranslated);
1663 if (! CHAR_HEAD_P (*ptr))
1664 {
1665 translate_prev_byte = ptr[-1];
1666 if (! CHAR_HEAD_P (translate_prev_byte))
1667 translate_anteprev_byte = ptr[-2];
1668 }
1669 }
1670 else
1671 {
1672 this_translated = 0;
1673 ch = *ptr;
1674 }
1675 } 1708 }
1676 else if (!multibyte)
1677 TRANSLATE (ch, trt, *ptr);
1678 else
1679 {
1680 ch = *ptr;
1681 this_translated = 0;
1682 }
1683
1684 if (ch > 0400)
1685 j = ((unsigned char) ch) | 0200;
1686 else
1687 j = (unsigned char) ch;
1688 1709
1710 j = *ptr;
1689 if (i == infinity) 1711 if (i == infinity)
1690 stride_for_teases = BM_tab[j]; 1712 stride_for_teases = BM_tab[j];
1691 1713
1692 BM_tab[j] = dirlen - i; 1714 BM_tab[j] = dirlen - i;
1693 /* A translation table is accompanied by its inverse -- see */ 1715 /* A translation table is accompanied by its inverse -- see */
1694 /* comment following downcase_table for details */ 1716 /* comment following downcase_table for details */
1695 if (this_translated) 1717 if (ch >= 0)
1696 { 1718 {
1697 int starting_ch = ch; 1719 int starting_ch = ch;
1698 int starting_j = j; 1720 int starting_j;
1721
1722 if (ch > 0400)
1723 starting_j = ((unsigned char) ch) | 0200;
1724 else
1725 starting_j = (unsigned char) ch;
1699 while (1) 1726 while (1)
1700 { 1727 {
1701 TRANSLATE (ch, inverse_trt, ch); 1728 TRANSLATE (ch, inverse_trt, ch);
@@ -1821,9 +1848,13 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
1821 || ((cursor == tail_end_ptr 1848 || ((cursor == tail_end_ptr
1822 || CHAR_HEAD_P (cursor[1])) 1849 || CHAR_HEAD_P (cursor[1]))
1823 && (CHAR_HEAD_P (cursor[0]) 1850 && (CHAR_HEAD_P (cursor[0])
1824 || (translate_prev_byte == cursor[-1] 1851 /* Check if this is the last byte of
1825 && (CHAR_HEAD_P (translate_prev_byte) 1852 a translable character. */
1826 || translate_anteprev_byte == cursor[-2]))))) 1853 || (translate_prev_byte1 == cursor[-1]
1854 && (CHAR_HEAD_P (translate_prev_byte1)
1855 || (translate_prev_byte2 == cursor[-2]
1856 && (CHAR_HEAD_P (translate_prev_byte2)
1857 || (translate_prev_byte3 == cursor[-3]))))))))
1827 ch = simple_translate[*cursor]; 1858 ch = simple_translate[*cursor];
1828 else 1859 else
1829 ch = *cursor; 1860 ch = *cursor;
@@ -1901,9 +1932,13 @@ boyer_moore (n, base_pat, len, len_byte, trt, inverse_trt,
1901 || ((ptr == tail_end_ptr 1932 || ((ptr == tail_end_ptr
1902 || CHAR_HEAD_P (ptr[1])) 1933 || CHAR_HEAD_P (ptr[1]))
1903 && (CHAR_HEAD_P (ptr[0]) 1934 && (CHAR_HEAD_P (ptr[0])
1904 || (translate_prev_byte == ptr[-1] 1935 /* Check if this is the last byte of a
1905 && (CHAR_HEAD_P (translate_prev_byte) 1936 translable character. */
1906 || translate_anteprev_byte == ptr[-2]))))) 1937 || (translate_prev_byte1 == ptr[-1]
1938 && (CHAR_HEAD_P (translate_prev_byte1)
1939 || (translate_prev_byte2 == ptr[-2]
1940 && (CHAR_HEAD_P (translate_prev_byte2)
1941 || translate_prev_byte3 == ptr[-3])))))))
1907 ch = simple_translate[*ptr]; 1942 ch = simple_translate[*ptr];
1908 else 1943 else
1909 ch = *ptr; 1944 ch = *ptr;
diff --git a/src/xdisp.c b/src/xdisp.c
index bfb6ba5bf4c..ffbbfaaba7f 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -462,7 +462,7 @@ static Lisp_Object Vwindow_size_change_functions;
462 462
463Lisp_Object Qmenu_bar_update_hook, Vmenu_bar_update_hook; 463Lisp_Object Qmenu_bar_update_hook, Vmenu_bar_update_hook;
464 464
465/* Nonzero if overlay arrow has been displayed once in this window. */ 465/* Nonzero if an overlay arrow has been displayed in this window. */
466 466
467static int overlay_arrow_seen; 467static int overlay_arrow_seen;
468 468
@@ -15262,10 +15262,9 @@ display_line (it)
15262 mark this glyph row as the one containing the overlay arrow. 15262 mark this glyph row as the one containing the overlay arrow.
15263 This is clearly a mess with variable size fonts. It would be 15263 This is clearly a mess with variable size fonts. It would be
15264 better to let it be displayed like cursors under X. */ 15264 better to let it be displayed like cursors under X. */
15265 if (! overlay_arrow_seen 15265 if ((overlay_arrow_string
15266 && (overlay_arrow_string 15266 = overlay_arrow_at_row (it, row, &overlay_arrow_bitmap),
15267 = overlay_arrow_at_row (it, row, &overlay_arrow_bitmap), 15267 !NILP (overlay_arrow_string)))
15268 !NILP (overlay_arrow_string)))
15269 { 15268 {
15270 /* Overlay arrow in window redisplay is a fringe bitmap. */ 15269 /* Overlay arrow in window redisplay is a fringe bitmap. */
15271 if (STRINGP (overlay_arrow_string)) 15270 if (STRINGP (overlay_arrow_string))
diff --git a/src/xterm.c b/src/xterm.c
index 0c1f7ddab74..ebd0954edb7 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -129,9 +129,7 @@ extern void _XEditResCheckMessages ();
129#ifdef HAVE_XAW3D 129#ifdef HAVE_XAW3D
130#include <X11/Xaw3d/Simple.h> 130#include <X11/Xaw3d/Simple.h>
131#include <X11/Xaw3d/Scrollbar.h> 131#include <X11/Xaw3d/Scrollbar.h>
132#define ARROW_SCROLLBAR 132#include <X11/Xaw3d/ThreeD.h>
133#define XAW_ARROW_SCROLLBARS
134#include <X11/Xaw3d/ScrollbarP.h>
135#else /* !HAVE_XAW3D */ 133#else /* !HAVE_XAW3D */
136#include <X11/Xaw/Simple.h> 134#include <X11/Xaw/Simple.h>
137#include <X11/Xaw/Scrollbar.h> 135#include <X11/Xaw/Scrollbar.h>
@@ -4560,6 +4558,7 @@ x_create_toolkit_scroll_bar (f, bar)
4560 f->output_data.x->scroll_bar_bottom_shadow_pixel = pixel; 4558 f->output_data.x->scroll_bar_bottom_shadow_pixel = pixel;
4561 } 4559 }
4562 4560
4561#ifdef XtNbeNiceToColormap
4563 /* Tell the toolkit about them. */ 4562 /* Tell the toolkit about them. */
4564 if (f->output_data.x->scroll_bar_top_shadow_pixel == -1 4563 if (f->output_data.x->scroll_bar_top_shadow_pixel == -1
4565 || f->output_data.x->scroll_bar_bottom_shadow_pixel == -1) 4564 || f->output_data.x->scroll_bar_bottom_shadow_pixel == -1)
@@ -4583,16 +4582,17 @@ x_create_toolkit_scroll_bar (f, bar)
4583 pixel = f->output_data.x->scroll_bar_top_shadow_pixel; 4582 pixel = f->output_data.x->scroll_bar_top_shadow_pixel;
4584 if (pixel != -1) 4583 if (pixel != -1)
4585 { 4584 {
4586 XtSetArg (av[ac], "topShadowPixel", pixel); 4585 XtSetArg (av[ac], XtNtopShadowPixel, pixel);
4587 ++ac; 4586 ++ac;
4588 } 4587 }
4589 pixel = f->output_data.x->scroll_bar_bottom_shadow_pixel; 4588 pixel = f->output_data.x->scroll_bar_bottom_shadow_pixel;
4590 if (pixel != -1) 4589 if (pixel != -1)
4591 { 4590 {
4592 XtSetArg (av[ac], "bottomShadowPixel", pixel); 4591 XtSetArg (av[ac], XtNbottomShadowPixel, pixel);
4593 ++ac; 4592 ++ac;
4594 } 4593 }
4595 } 4594 }
4595#endif
4596 4596
4597 widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass, 4597 widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass,
4598 f->output_data.x->edit_widget, av, ac); 4598 f->output_data.x->edit_widget, av, ac);
@@ -4738,30 +4738,11 @@ x_set_toolkit_scroll_bar_thumb (bar, portion, position, whole)
4738 XawScrollbarSetThumb (widget, top, shown); 4738 XawScrollbarSetThumb (widget, top, shown);
4739 else 4739 else
4740 { 4740 {
4741#ifdef HAVE_XAW3D
4742 ScrollbarWidget sb = (ScrollbarWidget) widget;
4743 int scroll_mode = 0;
4744
4745 /* `scroll_mode' only exists with Xaw3d + ARROW_SCROLLBAR. */
4746 if (xaw3d_arrow_scroll)
4747 {
4748 /* Xaw3d stupidly ignores resize requests while dragging
4749 so we have to make it believe it's not in dragging mode. */
4750 scroll_mode = sb->scrollbar.scroll_mode;
4751 if (scroll_mode == 2)
4752 sb->scrollbar.scroll_mode = 0;
4753 }
4754#endif
4755 /* Try to make the scrolling a tad smoother. */ 4741 /* Try to make the scrolling a tad smoother. */
4756 if (!xaw3d_pick_top) 4742 if (!xaw3d_pick_top)
4757 shown = min (shown, old_shown); 4743 shown = min (shown, old_shown);
4758 4744
4759 XawScrollbarSetThumb (widget, top, shown); 4745 XawScrollbarSetThumb (widget, top, shown);
4760
4761#ifdef HAVE_XAW3D
4762 if (xaw3d_arrow_scroll && scroll_mode == 2)
4763 sb->scrollbar.scroll_mode = scroll_mode;
4764#endif
4765 } 4746 }
4766 } 4747 }
4767 } 4748 }