# HG changeset patch # User Karoly Lorentey # Date 1112632995 0 # Node ID 360860a0006fc563b9e311dc7dd804c7c0c34920 # Parent 45e5f0224d8170f8a3a4d9324b8e9a3ec78d29a7# Parent 6b09155854952d30fdf9226b7353f9e1b61651d9 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 diff -r 45e5f0224d81 -r 360860a0006f admin/ChangeLog --- a/admin/ChangeLog Mon Mar 28 04:24:51 2005 +0000 +++ b/admin/ChangeLog Mon Apr 04 16:43:15 2005 +0000 @@ -1,3 +1,16 @@ +2005-03-30 Marcelo Toledo + + * FOR-RELEASE (Documentation): Added check the Emacs Tutorial. The + first line of every tutorial must begin with a sentence saying + "Emacs Tutorial" in the respective language. This should be + followed by "See end for copying conditions", likewise in the + respective language. + +2005-03-29 Luc Teirlinck + + * FOR-RELEASE (TO BE DONE SHORTLY BEFORE RELEASE): New section. + Add `undo-ask-before-discard' to it. + 2005-03-02 Miles Bader * quick-install-emacs: Only use the mkdir --verbose option if the diff -r 45e5f0224d81 -r 360860a0006f admin/FOR-RELEASE --- a/admin/FOR-RELEASE Mon Mar 28 04:24:51 2005 +0000 +++ b/admin/FOR-RELEASE Mon Apr 04 16:43:15 2005 +0000 @@ -1,5 +1,10 @@ Tasks needed before the next release. +* TO BE DONE SHORTLY BEFORE RELEASE + +** `undo-ask-before-discard', currently set to t for debugging purposes +has to be set to nil: when t, it can leak memory and cause other problems. + * NEW FEATURES ** Face remapping. @@ -18,6 +23,8 @@ * FATAL ERRORS +** Make unexec handle memory mapping policy of the latest versions of Linux. + ** Investigate reported crashes in compact_small_strings. ** Investigate reported crashes related to using an @@ -145,7 +152,7 @@ man/buffers.texi "Luc Teirlinck" Chong Yidong man/building.texi "Ted Zlatanov" man/calendar.texi joakim@verona.se Chong Yidong -man/cmdargs.texi Chong Yidong +man/cmdargs.texi Chong Yidong "Luc Teirlinck" man/commands.texi "Luc Teirlinck" Chong Yidong man/custom.texi Chong Yidong man/dired.texi Chong Yidong joakim@verona.se @@ -211,7 +218,7 @@ lispref/functions.texi "Luc Teirlinck" Chong Yidong lispref/hash.texi "Luc Teirlinck" Chong Yidong lispref/help.texi "Luc Teirlinck" Chong Yidong -lispref/hooks.texi +lispref/hooks.texi Lute Kamstra lispref/internals.texi "Luc Teirlinck" Chong Yidong lispref/intro.texi "Luc Teirlinck" lispref/keymaps.texi "Luc Teirlinck" Chong Yidong @@ -240,6 +247,42 @@ lispref/variables.texi "Luc Teirlinck" Chong Yidong lispref/windows.texi "Luc Teirlinck" Chong Yidong +** Check the Emacs Tutorial. + +The first line of every tutorial must begin with a sentence saying +"Emacs Tutorial" in the respective language. This should be followed +by "See end for copying conditions", likewise in the respective +language. + +After each file name, on the same line or the following line, come the +names of the people who have checked it. + + +SECTION READERS +---------------------------------- +etc/TUTORIAL rms +etc/TUTORIAL.bg Ognyan Kulev +etc/TUTORIAL.cn +etc/TUTORIAL.cs +etc/TUTORIAL.de +etc/TUTORIAL.es Marcelo Toledo +etc/TUTORIAL.fr +etc/TUTORIAL.it +etc/TUTORIAL.ja +etc/TUTORIAL.ko +etc/TUTORIAL.nl Lute Kamstra +etc/TUTORIAL.pl +etc/TUTORIAL.pt_BR Marcelo Toledo +etc/TUTORIAL.ro +etc/TUTORIAL.ru +etc/TUTORIAL.sk +etc/TUTORIAL.sl +etc/TUTORIAL.sv Mats Lidell +etc/TUTORIAL.th +etc/TUTORIAL.zh + + + Local variables: mode: outline diff -r 45e5f0224d81 -r 360860a0006f etc/ChangeLog --- a/etc/ChangeLog Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/ChangeLog Mon Apr 04 16:43:15 2005 +0000 @@ -1,3 +1,48 @@ +2005-04-04 Thien-Thi Nguyen + + * TUTORIAL.ja: Update text before first period. + Reported by Kenichi Handa. + +2005-04-02 Richard M. Stallman + + * TUTORIAL.ja, TUTORIAL.cn, TUTORIAL.ru, TUTORIAL.zh: Remove the + old intro line that apparently was a longer version of "Emacs + tutorial". + + * TUTORIAL.es: Clean up line breaks. + +2005-04-01 Marcelo Toledo + + * TUTORIAL.pt_BR, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de, + * TUTORIAL.es, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja, TUTORIAL.ko, + * TUTORIAL.pl, TUTORIAL.pt_BR, TUTORIAL.ro, TUTORIAL.ru, + * TUTORIAL.sk, TUTORIAL.sl, TUTORIAL.th, TUTORIAL.zh: Fix title + line. + + * TUTORIAL.bg: Fix title line; Applied TUTORIAL changes in + revision 1.59, "Emacs" is not transliterated to cyrillic anymore; + Minor fixes; by Ognyan Kulev . + + * TUTORIAL.sv: Sync some other changes with the TUTORIAL version + 1.61 in CVS by Mats Lidell . + +2005-04-01 Lute Kamstra + + * TUTORIAL.nl: Fix title line. + +2005-03-30 Thien-Thi Nguyen + + * TUTORIAL: Add title line. + * TUTORIAL.bg, TUTORIAL.cn, TUTORIAL.cs, TUTORIAL.de, + * TUTORIAL.es, TUTORIAL.fr, TUTORIAL.it, TUTORIAL.ja, + * TUTORIAL.ko, TUTORIAL.nl, TUTORIAL.pl, TUTORIAL.pt_BR, + * TUTORIAL.ro, TUTORIAL.ru, TUTORIAL.sk, TUTORIAL.sl + * TUTORIAL.sv, TUTORIAL.th, TUTORIAL.zh: Likewise. + +2005-03-29 Reiner Steib + + * gnus-refcard.tex, gnus-logo.eps: New files. + 2005-03-23 David Ponce * NEWS: Mention recentf-keep. diff -r 45e5f0224d81 -r 360860a0006f etc/NEWS --- a/etc/NEWS Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/NEWS Mon Apr 04 16:43:15 2005 +0000 @@ -107,6 +107,20 @@ * Changes in Emacs 22.1 +** Improved Thai support. A new minor mode `thai-word-mode' (which is +automatically activated if you select Thai as a language +environment) changes key bindings of most word-oriented commands to +versions which recognize Thai words. Affected commands are + M-f (forward-word) + M-b (backward-word) + M-d (kill-word) + M-DEL (backward-kill-word) + M-t (transpose-words) + M-q (fill-paragraph) + +** iso-acc.el is now obsolete. Use one of the latin input methods instead. + +--- ** Languange environment and various default coding systems are setup more correctly according to the current locale name. If the locale name doesn't specify a charset, the default is what glibc defines. @@ -254,7 +268,10 @@ for matching the beginning and end of a symbol. A symbol is a non-empty sequence of either word or symbol constituent characters, as specified by the syntax table. - +--- +*** rx.el has new corresponding `symbol-end' and `symbol-start' elements. + ++++ ** Passing resources on the command line now works on MS Windows. You can use --xrm to pass resource settings to Emacs, overriding any existing values. For example: @@ -837,6 +854,7 @@ the current Info node name into the kill ring. With a zero prefix arg, puts the node name inside the `info' function call. +--- *** New face `info-xref-visited' distinguishes visited nodes from unvisited and a new option `Info-fontify-visited-nodes' to control this. @@ -848,6 +866,7 @@ If you prefer the old behavior, you can set the new user option `Info-hide-note-references' to nil. +--- *** Images in Info pages are supported. Info pages show embedded images, in Emacs frames with image support. Info documentation that includes images, processed with makeinfo @@ -934,6 +953,7 @@ +++ ** Under X, mouse-wheel-mode is turned on by default. ++++ ** The X resource useXIM can be used to turn off use of XIM, which may speed up Emacs with slow networking to the X server. @@ -999,6 +1019,7 @@ instead. The updated skeleton-insert docstring explains these new features along with other details of skeleton construction. +--- ** MH-E changes. Upgraded to MH-E version 7.82. There have been major changes since @@ -1232,6 +1253,7 @@ default, all trivial operations involving whole lines are performed automatically. The game uses faces for better visual feedback. +--- ** The new variable `x-select-request-type' controls how Emacs requests X selection. The default value is nil, which means that Emacs requests X selection with types COMPOUND_TEXT and UTF8_STRING, @@ -2237,17 +2259,23 @@ --- ** Perl mode has a new variable `perl-indent-continued-arguments'. +--- +** Fortran mode does more font-locking by default. Use level 3 +highlighting for the old default. + +++ ** Fortran mode has a new variable `fortran-directive-re'. Adapt this to match the format of any compiler directives you use. Lines that match are never indented, and are given distinctive font-locking. +++ -** F90 mode has new navigation commands `f90-end-of-block', -`f90-beginning-of-block', `f90-next-block', `f90-previous-block'. - ---- -** F90 mode now has support for hs-minor-mode (hideshow). +** F90 mode and Fortran mode have new navigation commands +`f90-end-of-block', `f90-beginning-of-block', `f90-next-block', +`f90-previous-block', `fortran-end-of-block', +`fortran-beginning-of-block'. + +--- +** F90 mode and Fortran mode have support for hs-minor-mode (hideshow). It cannot deal with every code format, but ought to handle a sizeable majority. @@ -2407,6 +2435,7 @@ handles the overlay property `display' specially, preserving it during temporary overlay showing in the course of an isearch operation. ++++ ** New command `recode-region' decodes the region again by a specified coding system. @@ -2414,6 +2443,17 @@ * New modes and packages in Emacs 22.1 +++ +** The new package longlines.el provides a minor mode for editing text +files composed of long lines, based on the `use-hard-newlines' +mechanism. The long lines are broken up by inserting soft newlines, +which are automatically removed when saving the file to disk or +copying into the kill ring, clipboard, etc. By default, Longlines +mode inserts soft newlines automatically during editing, a behavior +referred to as "soft word wrap" in other text editors. This is +similar to Refill mode, but more reliable. To turn the word wrap +feature off, set `longlines-auto-wrap' to nil. + ++++ ** The new package conf-mode.el handles thousands of configuration files, with varying syntaxes for comments (;, #, //, /* */ or !), assignment (var = value, var : value, var value or keyword var value) and sections ([section] or @@ -2421,10 +2461,12 @@ .config, .properties (Java), .desktop (KDE/Gnome), .ini and many others are recognized. ++++ ** The new package dns-mode.el add syntax highlight of DNS master files. The key binding C-c C-s (`dns-mode-soa-increment-serial') can be used to increment the SOA serial. ++++ ** The new package flymake.el does on-the-fly syntax checking of program source files. See the Flymake's Info manual for more details. @@ -2432,9 +2474,11 @@ of hierarchical data as an outline. For example, the tree-widget is well suited to display a hierarchy of directories and files. ++++ ** The wdired.el package allows you to use normal editing commands on Dired buffers to change filenames, permissions, etc... ++++ ** The thumbs.el package allows you to preview image files as thumbnails and can be invoked from a Dired buffer. @@ -2447,6 +2491,7 @@ ** The new global minor mode `size-indication-mode' (off by default) shows the size of accessible part of the buffer on the mode line. +--- ** GDB-Script-mode is used for files like .gdbinit. --- @@ -2502,6 +2547,7 @@ must remove older versions of cua.el or cua-mode.el as well as the loading and customization of those packages from the .emacs file. ++++ ** The new keypad setup package provides several common bindings for the numeric keypad which is available on most keyboards. The numeric keypad typically has the digits 0 to 9, a decimal point, keys marked @@ -2629,6 +2675,7 @@ ** The new package ibuffer provides a powerful, completely customizable replacement for buff-menu.el. ++++ ** The new package table.el implements editable, WYSIWYG, embedded `text tables' in Emacs buffers. It simulates the effect of putting these tables in a special major mode. The package emulates WYSIWYG @@ -2651,17 +2698,20 @@ --- ** cplus-md.el has been removed to avoid problems with Custom. ++++ ** New package benchmark.el contains simple support for convenient timing measurements of code (including the garbage collection component). --- ** The new Lisp library fringe.el controls the appearance of fringes. +--- ** `cfengine-mode' is a major mode for editing GNU Cfengine configuration files. * Incompatible Lisp Changes in Emacs 22.1 ++++ ** The new interactive-specification `G' reads a file name much like `F', but if the input is a directory name (even defaulted), it returns just the directory name. @@ -2679,6 +2729,21 @@ * Lisp Changes in Emacs 22.1 +--- +** easy-mmode-define-global-mode has been renamed to +define-global-minor-mode. The old name remains as an alias. + ++++ +** The new function `filter-buffer-substring' extracts a buffer +substring, passes it through a set of filter functions, and returns +the filtered substring. It is used instead of `buffer-substring' or +`delete-and-extract-region' when copying text into a user-accessible +data structure, like the kill-ring, X clipboard, or a register. The +list of filter function is specified by the new variable +`buffer-substring-filters'. For example, Longlines mode uses +`buffer-substring-filters' to remove soft newlines from the copied +text. + +++ ** An element of buffer-undo-list can now have the form (apply FUNNAME . ARGS), where FUNNAME is a symbol other than t or nil. That stands @@ -3201,6 +3266,7 @@ changes to mode lines, header lines, or display properties may require forcing an explicit window update. +--- ** New function `redirect-debugging-output' can be used to redirect debugging output on the stderr file handle to a file. @@ -4401,6 +4467,7 @@ display a prompt but don't use the minibuffer, now display the prompt using the text properties (esp. the face) of the prompt string. +--- ** New function x-send-client-message sends a client message when running under X. @@ -4410,6 +4477,7 @@ ** New packages: ++++ *** The new package gdb-ui.el provides an enhanced graphical interface to GDB. You can interact with GDB through the GUD buffer in the usual way, but there are also further buffers which control the execution and describe the @@ -4426,6 +4494,7 @@ binary data structures, such as network packets, to and from Lisp data structures. +--- *** The TCL package tcl-mode.el was replaced by tcl.el. This was actually done in Emacs-21.1, and was not documented. diff -r 45e5f0224d81 -r 360860a0006f etc/TUTORIAL --- a/etc/TUTORIAL Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/TUTORIAL Mon Apr 04 16:43:15 2005 +0000 @@ -1,4 +1,4 @@ -You are looking at the Emacs tutorial. See end for copying conditions. +Emacs tutorial. See end for copying conditions. Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation. Emacs commands generally involve the CONTROL key (sometimes labeled diff -r 45e5f0224d81 -r 360860a0006f etc/TUTORIAL.bg --- a/etc/TUTORIAL.bg Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/TUTORIAL.bg Mon Apr 04 16:43:15 2005 +0000 @@ -1,7 +1,7 @@ -Вие гледате въведението на Емакс. Условията за копиране са в края на текста. -Copyright (c) 1985, 1996, 1998, 2001, 2002, 2003 Free Software Foundation. +Въведение в Emacs. Условията за копиране са в края на текста. +Copyright (c) 1985,1996,1998,2001,2002,2003,2005 Free Software Foundation. -Командите на Емакс най-често включват клавишите CONTROL (понякога +Командите на Emacs най-често включват клавишите CONTROL (понякога отбелязван с CTRL или CTL) и META (понякога отбелязван с EDIT или ALT). Вместо да се изписват с пълно име всеки път, ние ще използваме следните съкращения: @@ -15,7 +15,7 @@ клавиша ESC и след това въведете <знак>. Ние записваме , за да отбележим клавиша ESC. -Важна бележка: в края на Емакс сесията въведете двата знака C-x C-c. +Важна бележка: в края на Emacs сесията въведете двата знака C-x C-c. Знаците ">>" отляво ви дават указание да изпълните команда. Например: <> >> Сега въведете C-v (Покажи следващия екран), за да се придвижите към @@ -93,7 +93,7 @@ Всеки ред от текст завършва със знак за нов ред, който служи за отделянето на реда от следващия ред. Последният ред във вашия файл -трябва да има знак за нов ред в края (но Емакс не изисква такъв, +трябва да има знак за нов ред в края (но Emacs не изисква такъв, когато прочита файла). >> Опитайте C-b в началото на ред. Това трябва да ви придвижи в края @@ -109,7 +109,7 @@ Когато се придвижвате след горния или долния край на екрана, текстът отвъд края се измества към екрана. Това се нарича "скролиране". То -позволява на Емакс да придвижва курсора към зададеното място в текста, +позволява на Emacs да придвижва курсора към зададеното място в текста, без да го изкарва извън екрана. >> Опитайте се да придвижите курсора след долния край на екрана с C-n @@ -192,7 +192,7 @@ Вие можете също да се придвижвате с клавишите-стрелки, ако вашият терминал има такива. Ние препоръчваме да научите C-b, C-f, C-n и C-p по три причини. Първо, те работят на всички видове терминали. Второ, -веднъж след като добиете практика в използването на Емакс, ще +веднъж след като добиете практика в използването на Emacs, ще откриете, че въвеждането на тези Control-знаци е по-бързо от въвеждането на клавишите стрелки, защото не трябва да премествате ръката си далеч от областта на клавишите с букви. Трето, веднъж след @@ -200,7 +200,7 @@ можете също така лесно да научите по-напредналите команди за движение на курсора. -Повечето Емакс команди приемат числов аргумент; за повечето от тях той +Повечето Emacs команди приемат числов аргумент; за повечето от тях той служи като брояч на повторения. Начинът, по който давате числов брояч, е с въвеждане на C-u, последвано от въвеждане на цифрите, и всичко това преди въвеждане на самата команда. Ако имате клавиш META @@ -232,7 +232,7 @@ Ако използвате графичен интерфейс, като X11 или MS-Windows, би трябвало да има тънка правоъгълна област, наречена плъзгач (scroll -bar), в лявата страна на прозореца на Емакс. Вие можете да скролирате +bar), в лявата страна на прозореца на Emacs. Вие можете да скролирате текста, щракайки с мишката в плъзгача. >> Опитайте да натиснете средния бутон на върха на осветената област @@ -244,10 +244,10 @@ нагоре и надолу, като движите мишката. -* КОГАТО ЕМАКС Е БЛОКИРАЛ +* КОГАТО EMACS Е БЛОКИРАЛ ------------------------- -Ако Емакс спре да отговаря на вашите команди, вие можете да го спрете +Ако Emacs спре да отговаря на вашите команди, вие можете да го спрете безопасно, като въведете C-g. Може да използвате C-g, за да спрете команда, която се изпълнява твърде дълго. @@ -264,15 +264,15 @@ * ЗАБРАНЕНИ КОМАНДИ ------------------- -Някои команди на Емакс са "забранени", така че начинаещите потребители +Някои команди на Emacs са "забранени", така че начинаещите потребители да не могат да ги употребят по погрешка. -Ако въведете някоя от забранените команди, Емакс извежда съобщение, +Ако въведете някоя от забранените команди, Emacs извежда съобщение, казвайки каква е била командата и питайки ви дали искате да продължите напред и да изпълните командата. -Ако наистина искате да изпробвате командата, въведете клавиша интервал -в отговор на въпроса. Обикновено ако не искате да изпълните +Ако наистина искате да изпробвате командата, въведете (клавиша +интервал) в отговор на въпроса. Обикновено ако не искате да изпълните забранената команда, отговаряте на въпроса с "n". >> Въведете C-x C-l (която е забранена команда), и след това въведете @@ -282,7 +282,7 @@ * ПРОЗОРЦИ ---------- -Емакс може да управлява няколко прозореца, всеки извеждайки свой +Emacs може да управлява няколко прозореца, всеки извеждайки свой собствен текст. Ние ще обясним по-късно как да използвате няколко прозореца. Точно сега ние искаме да обясним как да се отървете от допълнителни прозорци и да се върнете към основното редактиране с един @@ -312,13 +312,13 @@ ---------------------- Ако искате да вмъкнете текст, просто го въведете. Знаците, които -могат да се виждат, като А, 7, * и т.н., се възприемат от Емакс като +могат да се виждат, като А, 7, * и т.н., се възприемат от Emacs като текст и се вмъкват веднага. Въведете (клавишът за връщане в началото на реда), за да вмъкнете знак за нов ред. Може да изтриете последния знак, който сте въвели, с въвеждане на . е клавиш от клавиатурата -- същият, който -обикновено използвате извън Емакс, за да изтриете последния въведен от +обикновено използвате извън Emacs, за да изтриете последния въведен от вас знак. Обикновено е голям клавиш, на няколко реда разстояние от клавиша , и обикновено е отбелязан с "Delete", "Del" или "Backspace". @@ -358,24 +358,24 @@ >> Въведете , за да вмъкнете наново знака за нов ред, който изтрихте. -Запомнете, че на повечето команди на Емакс може да бъде зададен брояч +Запомнете, че на повечето команди на Emacs може да бъде зададен брояч на повторенията; това включва вмъкването на текстови знаци. Повтарянето на текстов знак го вмъква няколко пъти. >> Опитайте това сега -- въведете C-u 8 *, за да вмъкнете ********. -Сега вие сте научили най-основните начини за въвеждане на нещо в Емакс +Сега вие сте научили най-основните начини за въвеждане на нещо в Emacs и поправяне на грешки. Можете също така да изтривате думи или редове. Ето обобщение на изтриващите действия: - изтриване на знака точно преди курсора - C-d изтриване на знака точно след курсора + Изтриване на знака точно преди курсора + C-d Изтриване на знака точно след курсора - M- изтриване на думата непосредствено преди курсора - M-d изтриване на думата след курсора + M- Изтриване на думата непосредствено преди курсора + M-d Изтриване на думата след курсора - C-k изтриване от мястото на курсора до края на реда - M-k изтриване до края на текущото изречение + C-k Изтриване от мястото на курсора до края на реда + M-k Изтриване до края на текущото изречение Забележете, че и C-d, сравнени с M- и M-d, разширяват подобието, започнато от C-f и M-f (добре, не е @@ -385,12 +385,12 @@ Можете също да премахнете всяка част от буфера с един универсален начин. Придвижете се до единия край на частта и въведете C-@ или -C-интервал (което и да е от двете). Придвижете се до другия край на -частта и въведете C-w. Това ще изреже целия текст между тези два -края. +C- (което и да е от двете). ( е клавишът интервал.) +Придвижете се до другия край на частта и въведете C-w. Това ще изреже +целия текст между тези два края. >> Придвижете курсора до знака "М" в началото на предишния абзац. ->> Въведете C-интервал. Емакс трябва да изведе съобщение "Mark set" в +>> Въведете C-. Emacs трябва да изведе съобщение "Mark set" в долния край на екрана. >> Придвижете курсора до буквата "р" в "край" на втория ред от абзаца. >> Въведете C-w. Това ще изреже текста, започващ от "М" и завършващ @@ -420,9 +420,9 @@ Връщането обратно на текст се нарича "вмъкване". (Мислете за него като за изваждане обратно, или дръпване обратно, на текст, който е бил изрязан.) Можете да вмъквате изрязания текст или на същото място, -откъдето е бил премахнат, или на друго място в буфера, даже и в -различен файл. Можете да вмъквате един и същ текст няколко пъти; това -прави няколко копия от него. +откъдето е бил премахнат, или на друго място в редактирания текст, +даже и в различен файл. Можете да вмъквате един и същ текст няколко +пъти; това прави няколко копия от него. Командата за вмъкване е C-y. Тя вмъква наново последния изрязан текст в текущото място на курсора. @@ -501,25 +501,25 @@ --------- За да направите текста, който редактирате, постоянен, трябва да го -сложите във файл. В противен случай той ще изчезне, когато Емакс +сложите във файл. В противен случай той ще изчезне, когато Emacs приключи. За да сложите вашия текст във файл, трябва да "намерите" файла преди да въвеждате текст. (Това също се нарича "посещаване" на файла.) -Намиране на файл означава, че виждате съдържанието му в Емакс. В +Намиране на файл означава, че виждате съдържанието му в Emacs. В много случаи това е като да редактирате самия файл. Обаче промените, -които правите, използвайки Емакс, не остават постоянни, докато не +които правите, използвайки Emacs, не остават постоянни, докато не "запишете" файла. Това е така, за да се предотврати оставянето на полупроменен файл в системата, когато не искате това. Дори когато -записвате, Емакс оставя началния файл под променено име, в случай, че +записвате, Emacs оставя началния файл под променено име, в случай, че по-късно решите, че вашите промени са били грешка. Ако погледнете в дъното на екрана, ще видите ред, който започва и завършва с тирета и започва с "-R:-- TUTORIAL.bg" или нещо подобно. Тази част от екрана показва името на файла, който сте посетили. Точно сега вие сте посетили файл, наречен "TUTORIAL.bg", който е вашето -лично копие-чернова на Емакс въведението. Когато намерите файл в -Емакс, името на този файл ще се появи на същото място. +лично копие-чернова на Emacs въведението. Когато намерите файл в +Emacs, името на този файл ще се появи на същото място. Особеност на командата за намиране на файл е, че трябва да кажете името на файла, който искате. Ние го наричаме "четене на аргумент от @@ -528,10 +528,10 @@ C-x C-f Намиране на файл -Емакс ви подканя да въведете името на файла. Името на файла, което +Emacs ви подканя да въведете името на файла. Името на файла, което напишете, се появява в дъното на екрана. Редът в дъното на екрана се нарича минибуфер, когато се използва за този вид вход. Можете да -използвате обикновените команди за редактиране на Емакс, за да +използвате обикновените команди за редактиране на Emacs, за да редактирате името на файла. Когато въвеждате името на файла (или какъвто и да е вход в @@ -552,12 +552,12 @@ C-x C-s Запазване на файла -Това копира текста от Емакс във файла. Първия път, когато това се -направи, Емакс преименува началния файл с ново име, така че той да не +Това копира текста от Emacs във файла. Първия път, когато това се +направи, Emacs преименува началния файл с ново име, така че той да не се изгуби. Новото име се построява с добавяне на "~" в края на името на началния файл. -Когато запазването е свършило, Емакс извежда името на файла, който е +Когато запазването е свършило, Emacs извежда името на файла, който е бил записан. Трябва да записвате достатъчно често, така че да не изгубите много работа, ако системата се срине по някаква причина. @@ -565,19 +565,19 @@ Това трябва да изведе "Wrote ...TUTORIAL.bg" в дъното на екрана. ЗАБЕЛЕЖКА: На някои системи въвеждането на C-x C-s ще замръзи екрана и -вие няма да виждате повече изход от Емакс. Това показва, че една +вие няма да виждате повече изход от Emacs. Това показва, че една "способност" на операционната система, наричана "управление на потока" -(flow control), е прихванала C-s и не го пропуска към Емакс. За да +(flow control), е прихванала C-s и не го пропуска към Emacs. За да размразите екрана, въведете C-q. Тогава вижте секцията "Спонтанно включване на постъпково търсене" (Spontaneous Entry to Incremental -Search) в ръководството на Емакс за съвет как да се справите с тази +Search) в ръководството на Emacs за съвет как да се справите с тази "способност". Може да намерите съществуващ файл, да го разгледате и да го редактирате. Можете също да намерите файл, който не съществува. Това -е начинът за създаване на нови файлове в Емакс: намирате файла, който +е начинът за създаване на нови файлове в Emacs: намирате файла, който ще бъде в началото празен, и тогава започвате вмъкването на текста за -файла. Когато говорите за "записване" на файл, Емакс всъщност ще +файла. Когато говорите за "записване" на файл, Emacs всъщност ще създаде файла с текста, който сте въвели. Оттам нататък може да считате, че редактирате вече съществуващ файл. @@ -585,9 +585,9 @@ * БУФЕРИ -------- -Ако намерите втори файл с C-x C-f, първият файл остава в Емакс. +Ако намерите втори файл с C-x C-f, първият файл остава в Emacs. Можете да превключите обратно към него, като го намерите пак с C-x -C-f. По този начин може да получите доста на брой файлове в Емакс. +C-f. По този начин може да получите доста на брой файлове в Emacs. >> Създайте файл с име "foo", въвеждайки C-x C-f foo . Вмъкнете малко текст, редактирайте го и запазете "foo" с въвеждане @@ -595,16 +595,16 @@ Накрая въведете C-x C-f TUTORIAL.bg , за да се върнете обратно във въведението. -Емакс запазва текста на всеки файл в обект, наричан "буфер". -Намирането на файл прави нов буфер в Емакс. За да видите списък на -буферите, които в момента съществуват във вашия Емакс, въведете +Emacs запазва текста на всеки файл в обект, наричан "буфер". +Намирането на файл прави нов буфер в Emacs. За да видите списък на +буферите, които в момента съществуват във вашия Emacs, въведете C-x C-b Показване на буферите >> Опитайте C-x C-b сега. Вижте как всеки буфер има име, а понякога и име на файл за файла, -чието съдържание държи. ВСЕКИ текст, който виждате в Емакс прозорец, +чието съдържание държи. ВСЕКИ текст, който виждате в Emacs прозорец, е винаги част от някакъв буфер. >> Въведете C-x 1, за да махнете списъка с буферите. @@ -626,13 +626,13 @@ Списъкът с буферите, който правите с C-x C-b, винаги ви показва името на всеки буфер. -ВСЕКИ текст, който виждате в Емакс прозорец, е винаги част от някакъв +ВСЕКИ текст, който виждате в Emacs прозорец, е винаги част от някакъв буфер. Някои буфери не съответстват на файлове. Например буферът, именуван "*Buffer List*", не съответства на файл. Това е буферът, който съдържа списъка с буферите, които сте направили с C-x C-b. Буферът, именуван "*Messages*", също не съответства на файл; той съдържа съобщенията, които се появяват в дъното на екрана по време на -Емакс сесията. +Emacs сесията. >> Въведете C-x b *Messages* , за да видите буфера със съобщенията. След това въведете C-x C-b TUTORIAL , за да @@ -640,7 +640,7 @@ Ако направите промени в текста на един файл и тогава намерите друг файл, това няма да запише първия файл. Неговите промени остават вътре -в Емакс, в буфера на файла. Създаването или редактирането на буфера +в Emacs, в буфера на файла. Създаването или редактирането на буфера на втория файл няма ефект върху буфера на първия файл. Това е много полезно, но също означава, че се нуждаете от удобен начин да запазите буфера на първия файл. Ще е неудобно да превключите обратно с C-x @@ -659,8 +659,8 @@ * РАЗШИРЯВАНЕ НА НАБОРА КОМАНДИ ------------------------------- -Има много, много повече команди на Емакс, отколкото могат да се сложат -на всички контролни и мета знаци. Емакс заобикаля това с X (eXtended) +Има много, много повече команди на Emacs, отколкото могат да се сложат +на всички контролни и мета знаци. Emacs заобикаля това с X (eXtended) командата. Това става по два начина: C-x Знаково разширяване. Последвано от един знак. @@ -668,49 +668,49 @@ име. Тези команди са общо взето полезни, но по-малко, отколкото командите, -които досега сте научили. Вече видяхте две от тях: командите върху -файлове C-x C-f за намиране (Find) и C-x C-s за запазване (Save). -Друг пример е командата за край на Емакс сесията -- това е командата -C-x C-c. (Не се безпокойте, че може да изгубите всички промени, които -сте направили; C-x C-c предлага да запази всеки променен файл, преди -да премахне Емакс.) +които досега сте научили. Вече видяхте няколко от тях: например +командите върху файлове C-x C-f за намиране (Find) и C-x C-s за +запазване (Save). Друг пример е командата за край на Emacs сесията -- +това е командата C-x C-c. (Не се безпокойте, че може да изгубите +всички промени, които сте направили; C-x C-c предлага да запази всеки +променен файл, преди да премахне Emacs.) -C-z е командата за излизане от Емакс *временно* -- така че да можете -да се върнете към същата Емакс сесия по-късно. +C-z е командата за излизане от Emacs *временно* -- така че да можете +да се върнете към същата Emacs сесия по-късно. -На системи, които позволяват това, C-z "изоставя" (suspend) Емакс, -т.е. връща към обвивката, но не разрушава Емакс. В повечето обвивки -можете да продължите Емакс сесията с командата "fg" или с "%emacs". +На системи, които позволяват това, C-z "изоставя" (suspend) Emacs, +т.е. връща към обвивката, но не разрушава Emacs. В повечето обвивки +можете да продължите Emacs сесията с командата "fg" или с "%emacs". На системи, които не позволяват изоставяне, C-z създава нова -подобвивка, която върви под Емакс, за да ви даде шанс да стартирате -други програми и да се върнете към Емакс след това; това не е истинско -"излизане" от Емакс. В този случай командата на обвивката "exit" е -обикновеният начин да се върнете обратно към Емакс от подобвивката. +подобвивка, която върви под Emacs, за да ви даде шанс да стартирате +други програми и да се върнете към Emacs след това; това не е истинско +"излизане" от Emacs. В този случай командата на обвивката "exit" е +обикновеният начин да се върнете обратно към Emacs от подобвивката. Моментът да използвате C-x C-c е, когато искате да излезете от -системата. Това е и правилната команда за излизане, когато Емакс е +системата. Това е и правилната команда за излизане, когато Emacs е извикан от пощенска програма или други странични програми, тъй като те -може и да не знаят как да се справят с изоставянето на Емакс. При +може и да не знаят как да се справят с изоставянето на Emacs. При обикновени обстоятелства, обаче, ако не сте тръгнали да излизате от -системата, по-добре е да изоставите Емакс с C-z, вместо да излизате от -Емакс. +системата, по-добре е да изоставите Emacs с C-z, вместо да излизате от +Emacs. Има много команди C-x. Ето списък на тези, които сте научили: - C-x C-f Намиране на файл. - C-x C-s Запазване на файл. - C-x C-b Списък на буферите. - C-x C-c Излизане от Емакс. - C-x 1 Изтриване на всички прозорци освен един. - C-x u Отмяна. + C-x C-f Намиране на файл + C-x C-s Запазване на файл + C-x C-b Списък на буферите + C-x C-c Излизане от Emacs + C-x 1 Изтриване на всички прозорци, освен един + C-x u Отмяна Именуваните разширени команди са команди, които се използват даже още по-рядко, или команди, които се използват само в определени режими. Пример е командата replace-string, която заменя глобално един низ с -друг. Когато въведете M-x, Емакс ви подсказва в дъното на екрана с +друг. Когато въведете M-x, Emacs ви подсказва в дъното на екрана с M-x и вие трябва да въведете името на командата, в този случай -"replace-string". Просто въведете "repl s" и Емакс ще завърши +"replace-string". Просто въведете "repl s" и Emacs ще завърши името. ( е клавишът Tab, обикновено намиращ се над клавиша CapsLock или клавиша Shift близо до левия край на клавиатурата.) Завършете името на командата с . @@ -734,11 +734,11 @@ Когато сте направили промени във файл, но още не сте го запазили, те могат да бъдат загубени, ако компютърът внезапно се изключи. За да ви -предпази от такива ситуации, Емакс периодично запазва "автоматично +предпази от такива ситуации, Emacs периодично запазва "автоматично запазван" файл за всеки файл, който редактирате. Името на автоматично запазвания файл има # в началото и в края; например, ако вашият файл е с име "hello.c", името на неговия автоматично запазван файл ще бъде -"#hello.c#". Когато запазвате файл по обикновения начин, Емакс +"#hello.c#". Когато запазвате файл по обикновения начин, Emacs изтрива неговия автоматично записван файл. Ако компютърът зависне, може да възстановите вашата автоматично @@ -752,7 +752,7 @@ * ЕХО ОБЛАСТТА -------------- -Ако Емакс види, че въвеждате многознакови команди бавно, ще ви ги +Ако Emacs види, че въвеждате многознакови команди бавно, ще ви ги покаже в дъното на екрана, в област, наричана "ехо област". Ехо областта обхваща последния ред от екрана. @@ -763,18 +763,18 @@ Редът точно над ехо областта се нарича "ред на режима" (mode line). Той показва нещо като: --R:** TUTORIAL.bg (Fundamental)--L670--58%---------------- +-D:** TUTORIAL.bg 63% L749 (Fundamental)--------------------- -Този ред дава полезна информация за състоянието на Емакс и текста, +Този ред дава полезна информация за състоянието на Emacs и текста, който редактирате. Вече знаете какво означава името на файла -- това е файлът, който сте -намерили. -NN%-- показва вашата текуща позиция в текста; това -означава, че NN процента от текста е над върха на екрана. Ако -началото на файла е на екрана, ще се показва --Top-- (връх) вместо ---00%--. Ако края на файла е на екрана, ще се показва --Bot-- (дъно). -Ако гледате текст, който е толкова малък, че се показва изцяло на -екрана, редът на режима ще изведе --All--. +намерили. NN% показва вашата текуща позиция в текста; това означава, +че NN процента от текста е над върха на екрана. Ако началото на файла +е на екрана, ще се показва --Top-- (връх) вместо --00%--. Ако краят +на файла е на екрана, ще се показва --Bot-- (дъно). Ако гледате +текст, който е толкова малък, че се показва изцяло на екрана, редът на +режима ще изведе --All--. Знакът L и цифрите показват мястото по друг начин: това е номерът на текущия ред на точката. @@ -788,7 +788,7 @@ Fundamental (Основен), който използвате в момента. Това е пример за "главен режим" (major mode). -Емакс има много главни режими. Някои от тях са предвидени за +Emacs има много главни режими. Някои от тях са предвидени за редактиране на различни езици и/или видове текст, като например режим Лисп, режим Текст и други. Във всеки един момент от време точно един главен режим е активен и неговото име може винаги да бъде намерено в @@ -807,7 +807,7 @@ >> Въведете M-x text mode. -Не се безпокойте, никоя от Емакс командите, които сте научили, няма да +Не се безпокойте, никоя от Emacs командите, които сте научили, няма да се промени по някакъв съществен начин. Но може да забележите, че M-f и M-b сега възприемат апострофите (') като част от думите. Преди това, в основния режим (Fundamental), M-f и M-b се възприемаха като @@ -836,7 +836,7 @@ Един главен режим, който е много полезен, особено за редактиране на текст на естествен език, е режимът на автоматично запълване (Auto Fill -mode). Когато този режим е включен, Емакс автоматично разделя реда +mode). Когато този режим е включен, Emacs автоматично разделя реда при мястото между думите, когато вмъквате текст и направите ред, който е твърде дълъг. @@ -856,7 +856,7 @@ аргумент на командата. >> Въведете C-x f с аргумент 20. (C-u 2 0 C-x f). - Сега въведете някакъв текст и вижте как Емакс запълва редовете с по + Сега въведете някакъв текст и вижте как Emacs запълва редовете с по не повече от 20 знака. После върнете обратно границата на 70, използвайки C-x f отново. @@ -871,12 +871,12 @@ * ТЪРСЕНЕ --------- -Емакс може да извършва търсения на низове (това са последователности +Emacs може да извършва търсения на низове (това са последователности от знаци или думи) или напред в текста, или назад в него. Търсенето на низ е придвижваща курсора команда; тя премества курсора на следващото място, където се среща низът. -Командата за търсене на Емакс се различава от командата за търсене на +Командата за търсене на Emacs се различава от командата за търсене на повечето редактори по това, че тя е "постъпкова". Това означава, че търсенето се извършва още докато въвеждате текста, който търсите. @@ -884,7 +884,7 @@ търсене назад. НО ПОЧАКАЙТЕ! Не ги пробвайте сега. Когато въведете C-s, ще забележите, че низът "I-search" се появява -като подсказка в ехо областта. Това ви казва, че Емакс е в това, +като подсказка в ехо областта. Това ви казва, че Emacs е в това, което се нарича постъпково търсене, чакайки ви да въвеждате текста, който искате да търсите. приключва търсенето. @@ -896,19 +896,19 @@ >> Сега въведете три пъти и вижте как се придвижва курсора. >> Въведете , за да прекратите търсенето. -Забелязахте ли какво стана? Емакс, когато търси постъпково, се опитва +Забелязахте ли какво стана? Emacs, когато търси постъпково, се опитва да намери следващото съвпадение на низа, който се въвежда. За да отидете на следващото съвпадение на "търсне", просто отново въведете -C-s. Ако няма такова съвпадение, Емакс бибипва и ви казва, че +C-s. Ако няма такова съвпадение, Emacs бибипва и ви казва, че търсенето е "провалено" (failing). C-g също прекратява търсенето. ЗАБЕЛЕЖКА: На някои системи въвеждането на C-s ще замрази екрана и вие -няма да може да видите повече реакция от Емакс. Това показва, че +няма да може да видите повече реакция от Emacs. Това показва, че "способност" на операционната система, наречена "управление на потока" -(flow control), е прихванала C-s и не го пропуска до Емакс. За да +(flow control), е прихванала C-s и не го пропуска до Emacs. За да размразите екрана, въведете C-q. Тогава вижте секцията "Спонтанно включване на постъпковото търсене" (Spontaneous Entry to Incremental -Search) в ръководството на Емакс за съвет как да се справите с тази +Search) в ръководството на Emacs за съвет как да се справите с тази "способност". Ако сте в средата на постъпково търсене и въведете , ще @@ -930,9 +930,9 @@ * МНОЖЕСТВО ПРОЗОРЦИ ----------------- +-------------------- -Една от привлекателните способности на Емакс е тази, че може да +Една от привлекателните способности на Emacs е тази, че може да гледате повече от един прозорец на екрана в даден момент от време. >> Придвижете курсора до този ред и въведете C-u 0 C-l (това е @@ -943,7 +943,7 @@ остава на по-горния прозорец. >> Въведете C-M-v, за да скролирате долния прозорец. (Ако нямате - истински клавиш META, въведете ESC C-v.) + истински клавиш META, въведете C-v.) >> Въведете C-x o ("o" от "other" -- "друг"), за да придвижите курсора в долния прозорец. @@ -972,10 +972,10 @@ първи", защото и двата клавиша действат, модифицирайки знака, който сте въвели. -Ако нямате истински клавиш META и използвате ESC вместо това, редът -има значение: трябва да въвеждате ESC, последван от CONTROL-v, защото -CONTROL-ESC v няма да работи. Това е така, защото ESC е собствен -знак, а не модификатор. +Ако нямате истински клавиш META и използвате вместо това, редът +има значение: трябва да въвеждате , последван от CONTROL-v, +защото CONTROL- v няма да работи. Това е така, защото е +собствен знак, а не модификатор. >> Въведете C-x 1 (в горния прозорец), за да махнете долния прозорец. @@ -1008,13 +1008,13 @@ на главния режим. Например, може да видите [(Fundamental)] вместо (Fundamental). -За да се махнете от вложеното ниво на редактиране, въведете ESC ESC -ESC. Това е обща команда за "излизане". Може и да я използвате за -махане (скриване) на допълнителни прозорци, както и за да се махнете -от минибуфера. +За да се махнете от вложеното ниво на редактиране, въведете + . Това е обща команда за "излизане". Може и да я +използвате за махане (скриване) на допълнителни прозорци, както и за +да се махнете от минибуфера. ->> Въведете M-x, за да влезете в минибуфер; тогава въведете ESC ESC - ESC, за да излезете. +>> Въведете M-x, за да влезете в минибуфер; тогава въведете + , за да излезете. Не можете да използвате C-g, за да излезете от вложено ниво на редактиране. Това е така, защото C-g се използва за прекратяване на @@ -1025,16 +1025,16 @@ ---------------------------------- В това въведение се опитахме да осигурим достатъчно информация, за да -започнете да използвате Емакс. Има толкова много още в Емакс, че не е +започнете да използвате Emacs. Има толкова много още в Emacs, че не е възможно то да бъде обяснено всичкото тук. Обаче може да поискате да -научите повече за Емакс, тъй като той притежава още много полезни -способности. Емакс има команди за четене на документацията на Емакс +научите повече за Emacs, тъй като той притежава още много полезни +способности. Emacs има команди за четене на документацията на Emacs командите. Тези "помощни" команди всички започват със знака CONTROL-h, който се нарича "знакът за помощ". За да използвате възможностите на тази помощ, въведете знака C-h и след това знака, казващ какъв вид помощ искате. Ако НАИСТИНА сте се -изгубили, въведете C-h ? и Емакс ще ви каже с какво може да ви +изгубили, въведете C-h ? и Emacs ще ви каже с какво може да ви помогне. Ако сте въвели C-h и решите, че не се нуждаете от помощ, просто въведете C-g, за да я прекратите. @@ -1046,7 +1046,7 @@ Най-основното помощно средство е C-h c. Въведете C-h, знака c и команден знак или последователност от знаци, образуващи команда; -тогава Емакс ще изведе много кратко описание на командата. +тогава Emacs ще изведе много кратко описание на командата. >> Type C-h c C-p. @@ -1056,7 +1056,7 @@ (C-p изпълнява командата предишен-ред) Това ви казва "името на функцията". Имената на функциите се използват -най-вече за настройване и разширяване на Емакс. Но тъй като имената +най-вече за настройване и разширяване на Emacs. Но тъй като имената на функциите са избрани така, че да показват какво прави командата, те могат да служат и за много кратка документация -- достатъчна, за да ви припомни команди, които вече сте учили. @@ -1070,7 +1070,7 @@ >> Въведете C-h k C-p. Това извежда документацията на функцията, както и нейното име, в -отделен Емакс прозорец. Когато я прочетете, въведете C-x 1, за да +отделен Emacs прозорец. Когато я прочетете, въведете C-x 1, за да махнете помощния текст. Не е нужно да правите това точно сега. Може да редактирате, докато се обръщате към помощния текст за справка, и след това да въведете C-x 1. @@ -1081,14 +1081,14 @@ функцията. >> Опитайте с въвеждане на C-h f previous-line. - Това извежда цялата информация, която Емакс знае за функцията, + Това извежда цялата информация, която Emacs знае за функцията, която осъществява командата C-p. Подобна команда, C-h v, извежда документацията на променливите, които -може да променяте, за да настройвате поведението на Емакс. Трябва да -въведете името на променливата, когато Емакс ви подскаже това. +може да променяте, за да настройвате поведението на Emacs. Трябва да +въведете името на променливата, когато Emacs ви подскаже това. - C-h a Команда Апропос. Въведете ключова дума и Емакс ще + C-h a Команда Апропос. Въведете ключова дума и Emacs ще покаже списък на всички команди, чието име съдържа тази ключова дума. Тези команди могат всички да бъдат извикани чрез META-x. За някои команди командата @@ -1111,18 +1111,18 @@ специален буфер, наричан "*info*", където може да четете ръководствата на инсталираните във вашата система пакети. Въведете m emacs , за да - четете ръководството на Емакс. Ако никога преди това - не сте използвали Info, въведете ? и Емакс ще включи + четете ръководството на Emacs. Ако никога преди това + не сте използвали Info, въведете ? и Emacs ще включи въведение във възможностите на режима Инфо. Веднъж след като сте преминали това въведение, трябва да се - консултирате с Емакс Инфо ръководството като ваша + консултирате с Emacs Инфо ръководството като ваша основна документация. * ОЩЕ ВЪЗМОЖНОСТИ ----------------- -Може да научите повече за Емакс с четене на неговото ръководство, или +Може да научите повече за Emacs с четене на неговото ръководство, или като книга, или в Инфо (използвайте менюто помощ (Help) или въведете F10 h r). Две възможности, които може да желаете в началото, са довършване (completion), което спестява писане, и dired, който @@ -1130,26 +1130,26 @@ Довършването е начин да избягвате ненужно писане. Например, ако искате да превключите към буфера *Messages*, може да въведете C-x b -*M и Емакс ще запълни останалата част от името на буфера, +*M и Emacs ще запълни останалата част от името на буфера, доколкото може да се определи от това, което сте въвели. Довършването -е описано в Инфо-ръководството на Емакс в страницата "Довършване" +е описано в Инфо-ръководството на Emacs в страницата "Довършване" ("Completion"). Dired ви позволява да гледате списъка от файлове в директория (и като възможност: нейните поддиректории), да се придвижвате в този списък, да посещавате, преименувате, изтривате и изобщо действате върху -файловете. Dired е описан в Инфо-ръководството на Емакс в страницата +файловете. Dired е описан в Инфо-ръководството на Emacs в страницата "Dired". -Ръководството на Емакс описва още много други възможности на +Ръководството на Emacs описва още много други възможности на редактора. * ЗАКЛЮЧЕНИЕ ------------ -Запомнете: за да излезете безвъзвратно от Емакс, използвайте C-x C-c. -За да излезете временно в обвивка, така че да се върнете в Емакс +Запомнете: за да излезете безвъзвратно от Emacs, използвайте C-x C-c. +За да излезете временно в обвивка, така че да се върнете в Emacs по-късно, използвайте C-z. Това въведение е предвидено да бъде разбираемо за всички нови @@ -1160,17 +1160,17 @@ * КОПИРАНЕ ---------- -Това въведение произлиза от дълга поредица въведения в Емакс, -започвайки от едно, написано от Стюърт Кракрафт за началния Емакс. +Това въведение произлиза от дълга поредица въведения в Emacs, +започвайки от едно, написано от Стюърт Кракрафт за началния Emacs. -Тази версия на въведението, както и ГНУ Емакс, е защитена с авторски +Тази версия на въведението, както и GNU Emacs, е защитена с авторски права и идва с разрешение да разпространявате копия при следните условия: This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: -Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation +Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the @@ -1183,8 +1183,8 @@ under the above conditions, provided also that they carry prominent notices stating who last altered them. -Условията за копиране на самия Емакс са по-сложни, но в същия дух. -Моля, прочетете файла COPYING и тогава давайте копия на ГНУ Емакс на +Условията за копиране на самия Emacs са по-сложни, но в същия дух. +Моля, прочетете файла COPYING и тогава давайте копия на GNU Emacs на свои приятели. Помогнете да спрем затвореността на програмите ("притежанието"), като използваме, пишем и споделяме свободен софтуер! diff -r 45e5f0224d81 -r 360860a0006f etc/TUTORIAL.cn --- a/etc/TUTORIAL.cn Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/TUTORIAL.cn Mon Apr 04 16:43:15 2005 +0000 @@ -1,4 +1,4 @@ -ДъХэФЪФД¶Б Emacs їмЛЩЦёДПЈЁ Emacs tutorial Ј©ЎЈЗлјыТіОІУР№ШёґЦЖМхјюЎЈ +Emacs їмЛЩЦёДП. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. Emacs ЦёБоНЁіЈ°ьє¬УР CONTROL јьЈЁУРК±єтТФ CTRL »т CTL Аґ±кКѕЈ©»тКЗ diff -r 45e5f0224d81 -r 360860a0006f etc/TUTORIAL.cs --- a/etc/TUTORIAL.cs Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/TUTORIAL.cs Mon Apr 04 16:43:15 2005 +0000 @@ -1,3 +1,4 @@ +tutoriбl k Emacsu. Copyright (c) 1985 Free Software Foundation, Inc; podmнnky viz na konci. Do иe№tiny pшeloѕil Milan Zamazal . diff -r 45e5f0224d81 -r 360860a0006f etc/TUTORIAL.es --- a/etc/TUTORIAL.es Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/TUTORIAL.es Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,5 @@ -Usted esta viendo el tutorial de Emacs. Vea al final las condiciones -de copiado. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software -Foundation. +Tutorial de Emacs. Vea al final las condiciones de copiado. +Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. Generalmente los comandos de Emacs involucran la tecla CONTROL (algunas veces llamada CTRL O CTL) o la tecla meta (algunas veces diff -r 45e5f0224d81 -r 360860a0006f etc/TUTORIAL.ja --- a/etc/TUTORIAL.ja Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/TUTORIAL.ja Mon Apr 04 16:43:15 2005 +0000 @@ -1,4 +1,4 @@ -$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 +Emacs $BF~Lg%,%$%I(B. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. Emacs $B$N%3%^%s%I$rF~NO$9$k$K$O!"0lHL$K%3%s%H%m!<%k%-!, vocк percebera que o ultimo caractere da pesquisa serб apagado e a -pesquisa voltara para o ultimo lugar da pesquisa. Por instancia, imagine +pesquisa voltara para o ultimo lugar da pesquisa. Por exemplo, imagine que vocк tenha digitado "c", para pesquisar a primeira ocorrкncia de "c". Agora se vocк digitar "u", o cursor ira mover para a primeira ocorrкncia de "cu". Agora digite . Isso ira apagar o "u" da diff -r 45e5f0224d81 -r 360860a0006f etc/TUTORIAL.ro --- a/etc/TUTORIAL.ro Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/TUTORIAL.ro Mon Apr 04 16:43:15 2005 +0000 @@ -1,3 +1,4 @@ +tutorialului de Emacs. Copyright (c) 1998 Free Software Foundation -*-coding: latin-2;-*- Traducere din englezг de Tudor Hulubei . Mulюumiri Aidei Hulubei pentru corecturi єi sugestii. diff -r 45e5f0224d81 -r 360860a0006f etc/TUTORIAL.ru --- a/etc/TUTORIAL.ru Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/TUTORIAL.ru Mon Apr 04 16:43:15 2005 +0000 @@ -1,4 +1,4 @@ -чЩ ЮЙФБЕФЕ ХЮЕВОЙЛ Emacs. хУМПЧЙС ЛПРЙТПЧБОЙС Ч ЛПОГЕ ЖБКМБ. +ХЮЕВОЙЛ Emacs. Copyright (c) 1985, 1996, 2004 Free Software Foundation, Inc. дМС ХРТБЧМЕОЙС Emacs ПВЩЮОП ЙУРПМШЪХЕФУС ЛМАЮ (УПЮЕФБОЙЕ ЛМБЧЙЫ ЛМБЧЙБФХТЩ diff -r 45e5f0224d81 -r 360860a0006f etc/TUTORIAL.sk --- a/etc/TUTORIAL.sk Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/TUTORIAL.sk Mon Apr 04 16:43:15 2005 +0000 @@ -1,3 +1,4 @@ +tъtorial k Emacsu. Copyright (c) 1985 Free Software Foundation, Inc; podmienky pozri na konci. Do иe№tiny preloѕil Milan Zamazal , do slovenиiny Miroslav Va№ko . diff -r 45e5f0224d81 -r 360860a0006f etc/TUTORIAL.sv --- a/etc/TUTORIAL.sv Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/TUTORIAL.sv Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ -Detta дr den Svenska anvдndarhandledningen till Emacs. I slutet finns -kopieringsvillkoren. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free -Software Foundation, Inc. +Emacs anvдndarhandledning. I slutet finns kopieringsvillkoren. +Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software +Foundation, Inc. Emacs-kommandon innebдr ofta anvдndning av kontrolltangenten (vanligen mдrkt CTRL eller CTL) eller META-tangenten (pе vissa tangentbord mдrkt @@ -49,6 +49,10 @@ Hitta markцren igen och notera att det дr samma text som stеr kring markцren nu. +Du kan ocksе anvдnda PageUp och PageDn tangenterna, om din terminal +har dem, fцr att flytta en hel skдrmbild еt gеngen, men du redigerar +effektivare om du anvдnder C-v och M-v. + * GRUNDLДGGANDE MARKЦRRЦRELSER ------------------------------ @@ -56,12 +60,10 @@ Att flytta sig frеn skдrmbild till skдrmbild kan vara bra, men hur fцrflyttar man sig till en speciell plats pе skдrmen? -Det finns flera sдtt att gцra detta pе. Det vanligaste дr att anvдnda -kommandona C-p, C-b, C-f och C-n. Vart och ett av dessa kommandon -flyttar markцren en rad eller en kolumn i en bestдmd riktning pе -skдrmen. Hдr visas dessa fyra kommandon och i vilken riktning de -flyttar markцren: - +Det finns flera sдtt att gцra detta. Du kan anvдnda piltangenterna, +men det дr mer effektivt att ha hдnderna i standardlдget och anvдnda +kommandona C-p, C-b, C-f och C-n. Dessa tecken дr likvдrdiga med de +fyra piltangenterna. Sе hдr: Fцregеende rad, C-p : @@ -75,11 +77,10 @@ och C-p. Anvдnd sedan C-l fцr att centrera diagrammet pе skдrmbilden. -Detta дr sдkert lite enklare att fцrstе om du tдnker pе dessa -fцrkortningar: P fцr fцregеende (previous), N fцr nдsta (next), B fцr -bakеt (backward) och F fцr framеt (forward). Detta дr de grundlдggande -kommandona fцr att flytta markцren och du kommer sдkert att anvдnda -dem hela tiden, sе det дr en stor fцrdel om du lдr dig dem nu. +Detta дr enklare att komma ihеg om du tдnker pе dessa fцrkortningar: P +fцr fцregеende (previous), N fцr nдsta (next), B fцr bakеt (backward) +och F fцr framеt (forward). Dessa дr de grundlдggande kommandona fцr +att flytta markцren och du kommer att anvдnda dem hela tiden. >> Gцr nеgra C-n sе att du kommer ned till den hдr raden. @@ -309,17 +310,23 @@ sдtts in direkt. Skriv (retur-tangenten) fцr att sдtta in en radbrytning. -Du kan radera det sista tecknet du skrev genom att trycka . - дr en tangent pе tangentbordet, som kan vara mдrkt "Del". I -nеgra fall fungerar ocksе "backsteg" som men inte alltid! +Du kan radera det sista tecknet du skrev genom att trycka . + дr en tangent pе tangentbordet -- samma som du normalt +anvдnder utanfцr Emacs fцr att ta bort det senaste tecknet du skrivit. +Det дr vanligen en stor tangent nеgra rader ovanfцr retur-tangenten, +och den дr vanligtvis mдrkt "Delete, "Del" eller "Backspace". -Generellt raderar tecknet precis fцre den aktuella +Om den stora tangenten дr mдrkt med "Backspace" sе дr det den du +anvдnder fцr . Det kan finnas en annan tangent som дr mдrkt +med "Delete" men det дr inte . + +Generellt raderar tecknet precis fцre den aktuella markцrspositionen. >> Gцr detta nu: Skriv in nеgra tecken och ta bort dem genom att - anvдnda . Var inte rдdd fцr att skriva i den hдr filen, du - kommer inte att kunna fцrдndra originalet till vдgledningen. Detta - дr bara en lokal kopia. + anvдnda . Var inte rдdd fцr att skriva i den hдr filen, + du kommer inte att kunna fцrдndra originalet till vдgledningen. + Detta дr bara en lokal kopia. Nдr en rad blir fцr lеng fцr att rymmas pе en skдrmbredd sе fortsдtter den pе raden under. Ett bakstreck ("\") (eller om du kцr under ett @@ -330,7 +337,7 @@ fortsдtt att skriva lite till. Du kommer dе att se hur fortsдttningstecknet ser ut. ->> Anvдnd fцr att radera texten tills raden ryms pе en +>> Anvдnd fцr att radera texten tills raden ryms pе en skдrmbredd igen. Fortsдttningstecknet kommer dе att fцrsvinna. Du kan radera radbrytning precis som andra tecken. Genom att radera @@ -338,7 +345,7 @@ resultatet av denna sammanslagning blir fцr stor fцr att passa inom en skдrmbredd, sе kommer den att visas med ett fortsдttningstecken. ->> Flytta markцren till bцrjan av en rad och tryck . +>> Flytta markцren till bцrjan av en rad och tryck . Detta kommer att klistra ihop raden med raden цver. >> Tryck fцr att sдtta in radbrytningen du tog bort. @@ -353,21 +360,21 @@ Emacs och att rдtta fel. Du kan radera ord och rader ocksе. Hдr дr en цversikt цver kommandon fцr radering: - raderar tecknet som stеr precis fцre markцren - C-d raderar tecknet som stеr precis under markцren + Raderar tecknet som stеr precis fцre markцren + C-d Raderar tecknet som stеr precis under markцren - M- raderar ordet precis fцre markцren - M-d raderar ordet precis efter markцren + M- Raderar ordet precis fцre markцren + M-d Raderar ordet precis efter markцren - C-k raderar frеn markцren till slutet av raden - M-k raderar till slutet av stycket + C-k Raderar frеn markцren till slutet av raden + M-k Raderar till slutet av stycket -Lдgg mдrke till att och C-d kontra M- och M-d fцljer -mцnstret som bцrjade med C-f och M-f. ( дr inte precis +Lдgg mдrke till att och C-d kontra M- och M-d +fцljer mцnstret som bцrjade med C-f och M-f. ( дr inte precis ett kontrolltecken men lеt oss inte bry oss om det.) C-k och M-k fungerar pе samma sдtt som C-e och M-e (nдstan). -Du kan ocksе ta bort vilken del som helst av bufferten med hjдlp av +Du kan ocksе ta bort vilken del som helst av texten med hjдlp av fцljande allmдnna metod. Flytta till ena дnden av det omrеde du vill ta bort och tryck C-@ eller C-mellanslag. Flytta till andra дnden av omrеdet och tryck C-w. Detta tar bort all text mellan de tvе @@ -401,13 +408,13 @@ en repetition av kommandot. C-u 2 C-k raderar tvе rader samt de tomma raderna, medan C-k tvе gеnger inte kommer att gцra det. -Att sдtta in borttagen text kallas att "еterhдmta" den (yanking). +Att sдtta in borttagen text kallas att "еterhдmta" den (yanking). (Tдnk pе det som att du rycker, eller drar, tillbaka nеgon text som tagits bort.) Du kan antingen hдmta tillbaka borttagen text till samma plats som dдr den blev borttagen, eller sе kan du sдtta in den pе en -annan plats i bufferten eller till och med i en helt annan fil. Du kan -ocksе hдmta tillbaka den flera gеnger sе att du fеr flera lika -fцrekomster av den. +annan plats i texten du redigerar eller till och med i en helt annan +fil. Du kan ocksе hдmta tillbaka samma text flera gеnger sе att du fеr +flera lika fцrekomster av den. Kommandot fцr att hдmta tillbaka text дr C-y. Kommandot hдmtar tillbaka den sist borttagna texten och placerar den dдr markцren дr. @@ -496,8 +503,8 @@ Om du tittar nдstan lдngst ner pе skдrmbilden sе kommer du se en rad som bцrjar och slutar med minustecken, och som innehеller texten -"--:-- TUTORIAL.se". Denna del av skдrmbilden visar alltid namnet pе -filen du besцker. Just nu дr du inne i en fil som heter "TUTORIAL.se" +"--:-- TUTORIAL.sv". Denna del av skдrmbilden visar alltid namnet pе +filen du besцker. Just nu дr du inne i en fil som heter "TUTORIAL.sv" och som дr en personlig kopia av vдgledningen till Emacs. Vilken fil du дn дr inne i sе kommer filnamnet stе dдr. @@ -540,7 +547,7 @@ systemet kraschar. >> Skriv C-x C-s fцr att spara en kopia av denna vдgledning. - Detta skall leda till att "Wrote ...TUTORIAL.se" skrivs ut nederst + Detta skall leda till att "Wrote ...TUTORIAL.sv" skrivs ut nederst pе skдrmbilden. Observera: Pе vissa system leder C-x C-s till att skдrmen lеser @@ -569,7 +576,7 @@ >> Skapa en fil med namnet "foo" genom att trycka C-x C-f foo . Skriv in lite text, redigera den och spara "foo" genom att anvдnda - C-x C-s. Skriv till slut C-x C-f TUTORIAL.se fцr att komma + C-x C-s. Skriv till slut C-x C-f TUTORIAL.sv fцr att komma tillbaka till den hдr vдgledningen. Emacs sparar texten fцr varje fil i ett objekt kallat "buffert". Nдr @@ -581,13 +588,37 @@ >> Prova C-x C-b nu. Se hur varje buffert har ett namn och att de ocksе kan ha namnet pе -den fil som innehеllet kommer frеn. En del buffertar дr inte knutna -till nеgon fil, till exempel bufferten "*Buffer List*". Det дr den -buffert som innehеller buffertlistan som skapades med C-x C-b. Vilken -text du дn ser i ett Emacs-fцnster sе tillhцr den alltid en buffert. +den fil som innehеllet kommer frеn. Vilken text du дn ser i ett +Emacs-fцnster sе tillhцr den alltid en buffert. >> Skriv C-x 1 fцr att bli kvitt buffertlistan. +Nдr du har flera buffertar sе дr bara en av dem "gдllande" еt gеngen. +Det дr den buffert du redigerar. Om du vill redigera en annan buffert +sе mеste du byta till den. Om du vill byta till en buffert som +motsvarar en fil kan du gцra det genom att besцka den igen med C-x +C-f. Det finns dock ett enklare sдtt: anvдnd C-x b kommandot. I det +kommandot anger du buffertens namn. + +>> Skriv C-x b foo fцr att gе tillbaka till bufferten "foo" + som innehеller texten i filen "foo". Skriv sedan C-x b TUTORIAL.sv + fцr att komma tillbaka till den hдr handledningen. + +Mestadels дr buffertens namn densamma som filens namn (utan +katalogdel.) Det дr dock inte alltid sе. Bufferlistan du skapar med +C-x C-b visar alltid namnen pе varje buffert. + +All text du ser i ett Emacsfцnster дr alltid del av nеgon buffert. En +del buffertar дr inte knutna till nеgon fil, till exempel bufferten +"*Buffer List*". Det дr den buffert som innehеller buffertlistan som +skapades med C-x C-b. Bufferten "*Messages*" motsvarar inte heller +nеgon fil. Den innehеller de meddelanden som visas pе den nedersta +raden i Emacs sessionen. + +>> Skriv C-x b *Messages* fцr att se meddelandebufferten. + Skriv sedan C-x b TUTORIAL.sv fцr att еtergе till den hдr + handledningen. + Om du дndrar texten till en fil och sedan цppnar en ny fil, sе kommer inte den fцrsta filen sparas. Fцrдndringen ligger kvar i bufferten. Skapande och redigering av den nya filen pеverkar inte den @@ -603,7 +634,7 @@ >> Sдtt in en rad med text och spara med C-x s Du skall nu fе frеgan om du цnskar spara bufferten - TUTORIAL.se. Svara ja pе frеgan genom att trycka "y" (yes). + TUTORIAL.sv. Svara ja pе frеgan genom att trycka "y" (yes). * UTVIDGNING AV KOMMANDOMДNGDEN @@ -618,9 +649,9 @@ kommandonamn. Detta дr kommandon som дr bra att ha men anvдnds mer sдllan дn de -kommandon du redan har lдrt dig. Du har redan sett tvе av dem, C-x C-f -fцr finn, och C-x C-s fцr spara. Ett annat exempel дr kommandot fцr -att avsluta Emacs som дr C-x C-c. Var inte rдdd fцr att fцrlora +kommandon du redan har lдrt dig. Du har redan sett nеgra av dem, C-x +C-f fцr finn, och C-x C-s fцr spara. Ett annat exempel дr kommandot +fцr att avsluta Emacs som дr C-x C-c. Var inte rдdd fцr att fцrlora fцrдndringar du har gjort. C-x C-c erbjuder dig att spara fцrдndringar innan Emacs avslutas. @@ -646,12 +677,14 @@ Det finns mеnga C-x kommandon. Hдr дr en lista цver de du har lдrt dig hittills: - C-x C-f Finn fil. - C-x C-s Spara fil. - C-x C-b Lista buffertar. - C-x C-c Avsluta Emacs. - C-x 1 Ta bort alla utom ett fцnster. - C-x u Еngra. + C-x C-f Finn fil + C-x C-s Spara fil + C-x s Spara nеgra buffertar + C-x C-b Lista buffertar + C-x b Byt buffert + C-x C-c Avsluta Emacs + C-x 1 Ta bort alla utom ett fцnster + C-x u Еngra Namngivna utvidgade kommandon дr kommandon som anvдnds mycket sдllan eller bara i vissa lдgen. Ett exempel pе ett sеdant kommando дr @@ -708,16 +741,16 @@ Raden precis цver ekoomrеdet kallas "lдgesrad" (mode line). Den ser ungefдr ut sе hдr: ---:** TUTORIAL (Fundamental)--L670--58%---------------- +--:** TUTORIAL 63% L749 (Fundamental)----------------------- Raden innehеller information om Emacs och texten du redigerar. -Du vet redan vad filnamnet betyder, det дr den fil du har funnit. --NN%-- visar den aktuella positionen i texten, dvs. NN procent av -texten befinner sig цver toppen av skдrmbilden. Om toppen av filen дr -i skдrmbilden kommer det stе --Top-- istдllet fцr --00%-- och om -slutet av filen дr i skдrmbilden kommer det stе --Bot--. Om du ser pе -en fil dдr hela texten passar in pе en sida kommer det stе --All--. +Du vet redan vad filnamnet betyder, det дr den fil du har funnit. NN% +visar den aktuella positionen i texten, dvs. NN procent av texten +befinner sig цver toppen av skдrmbilden. Om toppen av filen дr i +skдrmbilden kommer det stе "Top" istдllet fцr " 0%" och om slutet av +filen дr i skдrmbilden kommer det stе "Bot". Om du ser pе en fil dдr +hela texten passar in pе en sida kommer det stе "All". Bokstaven L fцljd av siffror anger positionen pе ett annat sдtt. Siffrorna visar vilken rad som markцren befinner sig pе. @@ -831,7 +864,7 @@ har du sцkt efter ordet "markцr" en gеng. >> Skriv C-s en gеng till fцr att sцka efter nдsta fцrekomst av ordet "markцr". ->> Tryck nu pе fyra gеnger och se hur markцren flyttar sig +>> Tryck nu pе fyra gеnger och se hur markцren flyttar sig >> Tryck fцr att avsluta sцkandet. Sеg du vad som hдnde? Under inkrementell sцkning fцrsцker Emacs att gе @@ -847,12 +880,12 @@ fall avsnittet "Spontaneous Entry to Incremental Search" i Emacs-manualen fцr rеd om hur detta kan undvikas. -Om du дr inne i en inkrementell sцkning och trycker kommer du -lдgga mдrke till att den sista bokstaven i sцkstrдngen blir raderad +Om du дr inne i en inkrementell sцkning och trycker kommer +du lдgga mдrke till att den sista bokstaven i sцkstrдngen blir raderad och sцkandet hoppar tillbaka till en tidigare fцrekomst. Om du till exempel skriver "m" fцr att sцka efter den fцrsta fцrekomsten av "m", och sedan trycker "a" sе kommer markцren flytta sig till fцrsta -fцrekomsten av "ma". Tryck nu . Detta avlдgsnar "a" frеn +fцrekomsten av "ma". Tryck nu . Detta avlдgsnar "a" frеn sцkstrдngen, och markцren flyttar sig tillbaka till den fцrsta fцrekomsten av "m". @@ -880,7 +913,7 @@ det цvre fцnstret. >> Skriv C-M-v fцr att rulla det nedre fцnstret. - (Om du inte har META-tangenten trycker du ESC C-v.) + (Om du inte har META-tangenten trycker du C-v.) >> Skriv C-x o (o fцr other) fцr att flytta markцren till det nedre fцnstret. @@ -910,10 +943,10 @@ KONTROLL och META som trycks fцrst, fцr bдgge fungerar sе att de "modifierar" de andra tangenterna du trycker. -Om du inte har META-tangenten och anvдnder ESC istдllet дr -ordningsfцljden viktig. Du mеste trycka ESC fцljt av KONTROLL-v, -KONTROLL-ESC v fungerar inte. Det дr fцr att ESC дr ett tecken i sig -och inte en дkta "modifierare". +Om du inte har META-tangenten och anvдnder istдllet дr +ordningsfцljden viktig. Du mеste trycka fцljt av KONTROLL-v, +KONTROLL- v fungerar inte. Det дr fцr att дr ett tecken i +sig och inte en дkta "modifierare". >> Skriv C-x 1 i det цvre fцnstret fцr att bli kvitt det nedre fцnstret. @@ -946,12 +979,12 @@ huvudlдget i lдgesraden. Till exempel kan det stе [(Fundamental)] istдllet fцr (Fundamental). -Fцr att komma ur rekursiv redigering trycker du ESC ESC ESC. Detta дr -ett generellt brytkommando. Du kan ocksе anvдnda det fцr att bli kvitt -extra fцnster och fцr att komma ut ur minibufferten. +Fцr att komma ur rekursiv redigering trycker du . +Detta дr ett generellt brytkommando. Du kan ocksе anvдnda det fцr att +bli kvitt extra fцnster och fцr att komma ut ur minibufferten. ->> Skriv M-x fцr att komma in i minibufferten. Skriv sе ESC ESC ESC - fцr att komma ut. +>> Skriv M-x fцr att komma in i minibufferten. Skriv sе + fцr att komma ut. Du kan inte anvдnda C-g fцr att komma ut ur rekursiv redigering. Detta дr fцr att C-g anvдnds fцr att avbryta kommandon och argument @@ -985,7 +1018,8 @@ och en knappsekvens. Emacs ger dе en beskrivning av kommandot. >> Skriv C-h c C-p. - Meddelandet skall dе bli nеgot i stil med + +Meddelandet skall dе bli nеgot i stil med: C-p runs the command previous-line @@ -1061,6 +1095,29 @@ ett mail och klaga! +* MER FUNKTIONER +---------------- + +Du kan lдra dig mer om Emacs genom att lдsa dess manual, antingen i +bokform eller on-line i Info (anvдnd Hjдlp-menyn eller skriv F10 h r). +Tvе finesser som du kan komma att gilla speciellt дr komplettering +(completion), som spar tangenttryckningar, och dired, som fцrenklar +filhantering. + +Komplettering дr ett sдtt att undvika onцdiga tangenttryckningar. Till +exempel, om du vill byta till *Messages* bufferten, kan du du skriva +C-x b *M och Emacs kommer fylla i resten av buffertnamnet sе +lеngt den kan rдkna ut det frеn det du redan skrivit. Komplettering +finns beskrivet i Emacs-manualen i noden "Completion". + +Dired gцr det mцjligt att lista filer i en katalog (och дven dess +subkataloger), flytta runt i listan, besцka, byta namn, ta bort och +operera pе olika sдtt pе filerna. Dired finns beskrivet i Info i +Emacs-manualen i noden "Dired". + +Manualen beskriver дven mеnga andra Emacs funktioner. + + * KOPIERING ----------- @@ -1071,7 +1128,7 @@ This version of the tutorial, like GNU Emacs, is copyrighted, and comes with permission to distribute copies on certain conditions: -Copyright (c) 1985, 1996 Free Software Foundation +Copyright (c) 1985, 1996, 1998, 2001, 2002, 2005 Free Software Foundation Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the diff -r 45e5f0224d81 -r 360860a0006f etc/TUTORIAL.th --- a/etc/TUTORIAL.th Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/TUTORIAL.th Mon Apr 04 16:43:15 2005 +0000 @@ -1,3 +1,4 @@ +0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B. ,TJ'G90ET1"0JT1708Tl1(B ,T>(B.,TH(B. 2528 ,Tb4B:0CT10IQ17?0CU1+M?05l1aG0Cl1?RG09l1`40*Q19(B (Free Software Foundation, Inc); ,T!0CX13R0HV1!IR`0'Wh1M9d"5M907i1RB:7(B. 0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B (Emacs tutorial) ,TM0BYh1c9"3P09Ui1(B. diff -r 45e5f0224d81 -r 360860a0006f etc/TUTORIAL.zh --- a/etc/TUTORIAL.zh Mon Mar 28 04:24:51 2005 +0000 +++ b/etc/TUTORIAL.zh Mon Apr 04 16:43:15 2005 +0000 @@ -1,4 +1,4 @@ -±zҐї¦bѕ\ЕЄ Emacs §Ціt«ь«nЎ] Emacs tutorial Ў^ЎCЅРЁЈ­¶§А¦іГцЅЖ»s±шҐуЎC +Emacs §Ціt«ь«nЎ]. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation. Emacs «ьҐOіq±`Ґ]§t¦і CONTROL БдЎ]¦і®Й­ФҐH CTRL ©О CTL ЁУјРҐЬЎ^©О¬O diff -r 45e5f0224d81 -r 360860a0006f etc/gnus-logo.eps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/gnus-logo.eps Mon Apr 04 16:43:15 2005 +0000 @@ -0,0 +1,1055 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: gnuslogo1.ps +%%Creator: XV Version 3.00 Rev: 3/30/93 - by John Bradley +%%BoundingBox: 0 0 493 505 +%%Pages: 1 +%%DocumentFonts: +%%EndComments +%%EndProlog + +%%Page: 1 1 + +% remember original state +/origstate save def + +% build a temporary dictionary +20 dict begin + +% define string to hold a scanline's worth of data +/pix 62 string def + +% lower left corner +0 0 translate + +% size of image (on paper, in 1/72inch coords) +493.0 505.0 scale + +% dimensions of data +493 505 1 + +% mapping matrix +[493 0 0 -505 0 505] + +{currentfile pix readhexstring pop} +image +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff01fffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff8003ffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff0000ffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff8000007ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff0000003ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe0000000ffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff000000003fff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffff000000000fff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffc0000000007ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff80000000003ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffff00000000001ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffe00000000000ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffc00000000000ff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff8000000000007f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0000000000003f8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff0000000000003f8 +fffffffffffffffffffffffffff800ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffe0000000000001f8 +fffffffffffffffffffffffffff0001fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc0000000000000f8 +ffffffffffffffffffffffffffc00007ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc0000000000000f8 +ffffffffffffffffffffffffff000001ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff8000000000000078 +fffffffffffffffffffffffffe0000003ffffffffffff0001fffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffff0000000000000038 +fffffffffffffffffffffffffc0000001fffffffffffe00007ffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffe0000000000000038 +fffffffffffffffffffffffff800000007ffffffffff800001ffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffe0000000000000038 +fffffffffffffffffffffffff000000003fffffffffe0000003fffffffffffffffffffff +fffffffffffffffffffffffffffffffffffc0000000000000018 +ffffffffffffffffffffffffe000000001fffffffff80000000fffffffffffffffffffff +fffffffffffffffffffffffffffffffffffc0000000000000018 +ffffffffffffffffffffffffc000000000ffffffffe000000003ffffffffffffffffffff +fffffffffffffffffffffffffffffffffff80000000000000018 +ffffffffffffffffffffffff80000000007fffffff8000000000ffffffffffffffffffff +fffffffffffffffffffffffffffffffffff80000000000000008 +ffffffffffffffffffffffff00000000003fffffff00000000007fffffffffffffffffff +fffffffffffffffffffffffffffffffffff00000000000000008 +fffffffffffffffffffffffe00000000001ffffffe00000000001fffffffffffffffffff +fffffffffffffffffffffffffffffffffff00000000000000008 +fffffffffffffffffffffffc00000000000ffffff8000000000007ffffffffffffffffff +ffffffffffffffffffffffffffffffffffe00000000000000008 +fffffffffffffffffffffff8000000000007fffff0000000000007ffffffffffffffffff +ffffffffffffffffffffffffffffffffffe00000000000000008 +fffffffffffffffffffffff0000000000001ffffe0000000000000ffffffffffffffffff +ffffffffffffffffffffffffffffffffffc00000000000000000 +ffffffffffffffffffffffe0000000000000ffffc00000000000007fffffffffffffffff +ffffffffffffffffffffffffffffffffffc00000000000000000 +ffffffffffffffffffffffc00000000000007fff800000000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffff800000000000000000 +ffffffffffffffffffffff800000000000003fff000000000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffff800000000000000000 +ffffffffffffffffffffff000000000000003fff0000000000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffff000040000000000000 +fffffffffffffffffffffe000000000000000ffe0000000000000001ffffffffffffffff +ffffffffffffffffffffffffffffffffff0007ffc00000000000 +fffffffffffffffffffffc000000000000000ffc0000000000000000ffffffffffffffff +fffffffffffffffffffffffffffffffffe001ffffc0000000000 +fffffffffffffffffffffc0000000000000007fc00000000000000007fffffffffffffff +fffffffffffffffffffffffffffffffffc003ffffe0000000000 +fffffffffffffffffffff80000000000000007f800000000000000003fffffffffffffff +fffffffffffffffffffffffffffffffffc007fffffc000000000 +fffffffffffffffffffff00000000000000001f000000000000000001fffffffffffffff +fffffffffffffffffffffffffffffffff800fffffff000000000 +ffffffffffffffffffffe00000000000000001f000000000000000000fffffffffffffff +fffffffffffffffffffffffffffffffff801fffffff800000000 +ffffffffffffffffffffc00000000000000000e0000000000000000007ffffffffffffff +fffffffffffffffffffffffffffffffff003ffffffff00000000 +ffffffffffffffffffff800000000000000000c0000000000000000003ffffffffffffff +fffffffffffffffffffffffffffffffff007ffffffff00000000 +ffffffffffffffffffff00000000000000000000000000000000000000ffffffffffffff +ffffffffffffffffffffffffffffffffe00fffffffff80000000 +fffffffffffffffffffe00000000000000000000000000000000000000ffffffffffffff +ffffffffffffffffffffffffffffffffe01fffffffffc0000008 +fffffffffffffffffffc000000000000000000000000000000000000007fffffffffffff +ffffffffffffffffffffffffffffffffc03fffffffffc0000008 +fffffffffffffffffff8000000000000000000000000000000000000001fffffffffffff +ffffffffffffffffffffffffffffffffc07ffffffffff0000000 +fff9fffffffffffffff800000fe00000000000000000000000000000001fffffffffffff +ffffffffffffffffffffffffffffffff807ffffffffff0000000 +fff9fffffffffffffff000001ff80000000000000000000000000000000fffffffffffff +ffffffffffffffffffffffffffffffff80fffffffffff0000008 +fff0ffffffffffffffc000007ffc00000000000000000000000000000007ffffffffffff +ffffffffffffffffffffffffffffffff81fffffffffff8000008 +fff0ffffffffffffffc00000fffc00000000000000000000000000000003ffffffffffff +ffffffffffffffffffffffffffffffff01fffffffffff8000008 +ffe07fffffffffffff800001ffff00000000000000000000000000000001ffffffffffff +ffffffffffffffffffffffffffffffff03fffffffffffc000008 +ffe07fffffffffffff00000fffffc0000000000000000000000000000000ffffffffffff +fffffffffffffffffffffffffffffffe03fffffffffffc000008 +ffe03ffffffffffffc00001fffffe00000000000000000000000000000007fffffffffff +fffffffffffffffffffffffffffffffe07fffffffffffe000008 +ffe03ffffffffffff800003ffffff00000000000000000000000000000003fffffffffff +fffffffffffffffffffffffffffffffe07fffffffffffe000008 +ffc03ffffffffffff000007ffffff80000000000000f80000000000000003fffffffffff +fffffffffffffffffffffffffffffffe0ffffffffffffe000008 +ffc01fffffffffffe00001fffffffe000000000000fffe000000000000001fffffffffff +fffffffffffffffffffffffffffffffc0ffffffffffffe000008 +ffc00fffffffffffc00003ffffffff000000000001ffff800000000000000fffffffffff +fffffffffffffffffffffffffffffffc1fffffffffffff000008 +ff800fffffffffff800003ffffffff800000000007ffffc000000000000007ffffffffff +fffffffffffffffffffffffffffffffc3fffffffffffff000008 +ff8007fffffffffe00000fffffffffc0000000001ffffffc00000000000003ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff8007fffffffffc00000fffffffffe0000000005ffffffe00000000000001ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff8003fffffffff800001ffffffffff000000000ffffffffc0000000000000ffffffffff +fffffffffffffffffffffffffffffff87fffffffffffff000008 +ff0001fffffffff000003ffffffffffc00000007fffffffff80000000000007fffffffff +fffffffffffffffffffffffffffffff8ffffffffffffff000008 +ff0000ffffffffe000003ffffffffffc0000000ffffffffffc0000000000007fffffffff +fffffffffffffffffffffffffffffffcffffffffffffff000008 +fe00007fffffff800000ffffffffffff0000001ffffffffffe0000000000001fffffffff +ffffffffffffffffffffffffffffe7fdffffffffffffff000008 +fe00007fffffff000001ffffffffffff8000003fffffffffff0000000000001fffffffff +ffffffffffffffffffffffffffffe7fdffffffffffffff000008 +fc00001ffffffc000003ffffffffffffc000007fffffffffffe0000000000007ffffffff +ffffffffffffffffffffffffffffc7ffffffffffffffff000008 +fc00001ffffff0000003ffffffffffffe00000fffffffffffff0000000000007ffffffff +fffffffffeffffffffffffffffff87ffffffffffffffff000008 +f800000fffffe0000007fffffffffffff00000fffffffffffff8000000000003ffffffff +fffffffffcffffffffffffffffff87ffffffffffffffff000008 +f8000003ffff0000000ffffffffffffff80001fffffffffffffc000000000001ffffffff +fffffffff8ffffffffffffffffff07ffffffffffffffff000008 +f8000001fffe0000001ffffffffffffff80001ffffffffffffff000000000000ffffffff +fffffffff8fffffffffffffffffe0fffffffffffffffff000008 +f0000000fff00000003ffffffffffffffc0001ffffffffffffff8000000000007fffffff +fffffffff0fffffffffffffffffe0fffffffffffffffff000018 +e00000001a000000007ffffffffffffffe0003ffffffffffffffc000000000003fffffff +fffffffff0fffffffffffffffffc0fffffffffffffffff000018 +e000000000000000007fffffffffffffff0003ffffffffffffffc000000000003fffffff +ffffffffe0fffffffffffffffffc1fffffffffffffffff000018 +c00000000000000000ffffffffffffffff0007ffffffffffffffe000000000001fffffff +ffffffffe0fffffffffffffffff81fffffffffffffffff000018 +c00000000000000001ffffffffffffffff0007fffffffffffffff0000000000007ffffff +ffffffffc0fffffffffffffffff83fffffffffffffffff000018 +800000000000000007ffffffffffffffff800ffffffffffffffffc000000000003ffffff +ffffffff01fffffffffffffffff03fffffffffffffffff000038 +800000000000000007ffffffffffffffff800ffffffffffffffffe000000000001ffffff +ffffffff01fffffffffffffffff03fffffffffffffffff800038 +00000000000000000fffffffffffffffffc00fffffffffffffffff000000000000ffffff +fffffffe03ffffffffffffffffe07fffffffffffffffff800038 +00000000000000001fffffffffffffffffc01fffffffffffffffff8000000000007fffff +fffffffc03ffffffffffffffffe07fffffffffffffffff800038 +00000000000000003fffffffffffffffffe03fffffffffffffffffc000000000003fffff +fffffff803ffffffffffffffffc07fffffffffffffffff800038 +00000000000000007ffffffffffffffffff03fffffffffffffffffe000000000000fffff +fffffff007ffffffffffffffffc0ffffffffffffffffff800038 +0000000000000000fffffffffffffffffff07ffffffffffffffffff000000000000fffff +fffffff007ffffffffffffffff80ffffffffffffffffff800078 +0000000000000003ffffffffffffffff8ff87ffffffffffffffffff8000000000001ffff +ffffffc00fffffffffffffffff81ffffffffffffffffff800078 +8000000000000007ffffffffffffffff0ff8fffffffffffffffffffc000000000000ffff +ffffffc00fffffffffffffffff01ffffffffffffffffff8000f8 +8000000000000007fffffffffffffffe0ffffffffffffffffffffffe0000000000007fff +ffffff801fffffffffffffffff03ffffffffffffffffff8000f8 +c00000000000001ffffffffffffffffc0fffffffffffffffffffffff0000000000001fff +fffffe001ffffffffffffffffe07ffffffffffffffffff8000f8 +e00000000000007ffffffffffffffff83fffffffffffffffffffffffc0000000000007ff +fffff8003ffffffffffffffffc07ffffffffffffffffff8000f8 +f00000000000007ffffffffffffffff03fffffffffffffffffffffffc0000000000001ff +fffff0003ffffffffffffffff80fffffffffffffffffff8000f8 +f0000000000000fffffffffffffffff07fffffffffffffffffffffffe0000000000000ff +ffffe0003ffffffffffffffff00fffffffffffffffffff8001f8 +f8000000000003ffffffffffffffffe07ffffffffffffffffffffffff00000000000000f +ffff00007fffffffffffffffe01fffffffffffffffffff0001f8 +fc000000000007ffffffffffffffffc07ffffffffffffffffffffffff800000000000007 +fffc00007fffffffffffffffc01fffffffffffffffffff0001f8 +fc000000000007ffffffffffffffffc0fffffffffffffffffffffffff800000000000000 +ffe000007ffffbffffffffff801fffffffffffffffffff0001f8 +fe00000000001fffffffffffffffff03fffffffffffffffffffffffffe00000000000000 +00000000fffff3ffffffffff003fffffffffffffffffff0001f8 +fe00000000003fffffffffffffffff03ffffffffffffffffffffffffff00000000000000 +00000001fffff1fffffffffe003fffffffffffffffffff0003f8 +ff00000000007ffffffffffffffffe03ffffffffffffffffffffffffff00000000000000 +00000001ffffe1fffffffffc007fffffffffffffffffff0003f8 +ff8000000001fffffffffffffffffc07ffffffffffffffffffffffffff80000000000000 +00000003ffffe0fffffffff0007fffffffffffffffffff0003f8 +ffc000000003fffffffffffffffffc0fffffffffffffffffffffffffffc0000000000000 +00000003ffffc0ffffffffe0007fffffffffffffffffff0003f8 +ffe00000000ffffffffffffffffff81fffffffffffffffffffffffffffe0000000000000 +00000007ffffc07fffffff8000ffffffffffffffffffff0003f8 +fff00000003ffffffffffffffffff01ffffffffffffffffffffffffffff0000000000000 +00000007ffff803fffffff0000fffffffffffffffffffe0007f8 +fff8000000ffffffffffffffffffe03ffffffffffffffffffffffffffff8000000000000 +00000007ffff801ffffffc0001fffffffffffffffffffe0007f8 +fffc000001ffffffffffffffffffe07ffffffffffffffffffffffffffffc000000000000 +0000000fffff000ffffff80003fffffffffffffffffffe0007f8 +fffe00000fffffffffffffffffffc07ffffffffffffffffffffffffffffc000000000000 +0000000fffff0007ffffe00003fffffffffffffffffffe0007f8 +ffff80007fffffffffffffffffff80fffffffffffffffffffffffffffffe000000000000 +0000001ffffe0001ffff800007fffffffffffffffffffe000ff8 +ffffe007ffffffffffffffffffff80ffffffffffffffffffffffffffffff000000000000 +0000001ffffe0000fffc000007fffffffffffffffffffe000ff8 +ffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffff800000000000 +0000003ffffe0000000000000ffffffffffffffffffffe000ff8 +fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffc00000000000 +0000003ffffc0000000000000ffffffffffffffffffffe000ff8 +fffffffffffffffffffffffffffe03ffffffffffffffffffffffffffffffe00000000000 +0000007ffff80000000000001ffffffffffffffffffffe001ff8 +fffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffff00000000000 +0000007ffff80000000000001ffffffffffffffffffffe001ff8 +fffffffffffffffffffffffffff807fffffffffffffffffffffffffffffff80000000000 +000000fffff80000000000003ffffffffffffffffffffc001ff8 +fffffffffffffffffffffffffff80ffffffffffffffffffffffffffffffffc0000000000 +000003fffff00000000000007ffffffffffffffffffffc001ff8 +fffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffe0000000000 +000007ffffe00000000000007ffffffffffffffffffffe003ff8 +fffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffff0000000000 +000007ffffe0000000000000fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffff8000000000 +00001fffffc0000000000001fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07fffffffffffffffffffffffffffffffffe000000000 +00001fffffc0000000000003fffffffffffffffffffffc003ff8 +ffffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffff000000000 +00003fffff80000000000003fffffffffffffffffffffc007ff8 +ffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffff800000000 +00007fffff80000000000007fffffffffffffffffffffc007ff8 +ffffffffffffffffffffffffff03fffffffffffffffffffffffffffffffffffc00000000 +0000ffffff0000000000000ffffffffffffffffffffffc007ff8 +fffffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffc00000000 +0001ffffff0000000000001ffffffffffffffffffffffc007ff8 +fffffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffff00000000 +0003fffffe0000000000001ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffff80000000 +0007fffffe0000000000003ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffff0000000 +001ffffffc0000000000007ffffffffffffffffffffff800fff8 +fffffffffffffffffffffffff03ffffffffffffffffffffffffffffffffffffff8000000 +003ffffffc000000000000fffffffffffffffffffffff800fff8 +ffffffffffffffffffffffffe07ffffffffffffffffffffffffffffffffffffffe000000 +00fffffff8000000000003fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffff800000 +03fffffff8000000000003fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffffc0ffffffffffffffffffffffffffffffffffffffffc00000 +07fffffff0000000000007fffffffffffffffffffffff001fff8 +ffffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffc0000 +3ffffffff000000000000ffffffffffffffffffffffff003fff8 +ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffe03f +fffffffff000000000003ffffffffffffffffffffffff003fff8 +ffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffff +fffffffff800000000007ffffffffffffffffffffffff003fff8 +fffffffffffffffffffffffe03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffff80000000000ffffffffffffffffffffffffe003fff8 +fffffffffffffffffffffffc07ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffc0000000003ffffffffffffffffffffffffe007fff8 +fffffffffffffffffffffffc0fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffe0000000007ffffffffffffffffffffffffe007fff8 +fffffffffffffffffffffff81fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffe000000000fffffffffffffffffffffffffe00ffff8 +fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff +ffffffffff000000001fffffffffffffffffffffffffe00ffff8 +ffffffffffffffffffffffe03ffffffffffffffffffffffffbffffffffffffffffffffff +ffffffffff800000007fffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffe07ffffffffffffffffffdfffff1ffffffffffffffffffffff +ffffffffffc0000000ffffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffe07ffffffffffffffffff9fffff07fffffffffffffffffffff +ffffffffffe0000001ffffffffffffffffffffffffffc00ffff8 +ffffffffffffffffffffffc0ffffffffffffffffffe3ffffe03fffffffffffffffffffff +fffffffffff800001fffffffffffffffffffffffffffc01ffff8 +ffffffffffffffffffffff81ffffffffffffffffffc7ffffc00fffffffffffffffffffff +fffffffffffe00007fffffffffffffffffffffffffffc01ffff8 +ffffffffffffffffffffff81ffffffffffffffffff87ffffc007ffffffffffffffffffff +ffffffffffff8003ffffffffffffffffffffffffffff801ffff8 +ffffffffffffffffffffff03ffffffffffffffffff0fffff8007ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffe07fffffffffffffffffe0fffff8001ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffe07fffffffffffffffffc1fffff0000ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff803ffff8 +fffffffffffffffffffffc0ffffffffffffffffff83ffffe00007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff81fffffffffffffffffe03ffffe00007fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff83fffffffffffffffffc07ffffc00003fffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffff007ffff8 +fffffffffffffffffffff03fffffffffffffffff80fffff800001fffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffe07fffffffffffffffff00fffff800000fffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffe0fffffffffffffffffe01fffff0000007ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffffc0fffffffffffffffffc01ffffe0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe00fffff8 +ffffffffffffffffffff81fffffffffffffffff803ffffe0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffe01fffff8 +ffffffffffffffffffff81ffffffffffffffffe007ffffc0000003ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +ffffffffffffffffffff83ffffffffffffffffe007ffffc0000001ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +ffffffffffffffffffff07ffffffffffffffff800fffff80000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc01fffff8 +fffffffffffffffffffe07ffffffffffffffff800fffff00000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffc03fffff8 +fffffffffffffffffffc0ffffffffffffffffe001fffff00000000ffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff803fffff8 +fffffffffffffffffffc0ffffffffffffffffc003ffffe000000007fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff803fffff8 +fffffffffffffffffff81ffffffffffffffff0003ffffc000000007fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +fffffffffffffffffff01fffffffffffffffe0007ffffc000000003fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +fffffffffffffffffff03fffffffffffffffe000fffff8000000001fffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffff007fffff8 +ffffffffffffffffffe07fffffffffffffff8000fffff0000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffffc07fffffffffffffff0001fffff0000000001fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffffc0fffffffffffffffe0001ffffe0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe00ffffff8 +ffffffffffffffffff80fffffffffffffff80003ffffe0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffe01ffffff8 +ffffffffffffffffff81fffffffffffffff00007ffffc0000000000fffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc01ffffff8 +ffffffffffffffffff81ffffffffffffffe00007ffffc00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc01ffffff8 +ffffffffffffffffff03ffffffffffffffc0000fffffc00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc03ffffff8 +fffffffffffffffffe03ffffffffffffff00000fffffe00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff803ffffff8 +fffffffffffffffffc07fffffffffffffe00001ffffff00000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff803ffffff8 +fffffffffffffffffc07fffffffffffffc00007ffffffc0000000007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff807ffffff8 +fffffffffffffffff807fffffffffffff00001fffffffe0000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff807ffffff8 +fffffffffffffffff807ffffffffffffe00003ffffffff0000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff007ffffff8 +fffffffffffffffff00fffffffffffff800007ffffffff8000000003ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00fffffff8 +fffffffffffffffff00fffffffffffff00000fffffffffc000000001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffff00fffffff8 +ffffffffffffffffe00ffffffffffffc00003fffffffffe000000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffffe00ffffffffffff800007ffffffffff000000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffffc00ffffffffffff00000fffffffffff800000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe01fffffff8 +ffffffffffffffff800fffffffffffc00001fffffffffffc00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe03fffffff8 +ffffffffffffffff800fffffffffff000007fffffffffffe00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffe03fffffff8 +ffffffffffffffff001ffffffffffe00000fffffffffffff00000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffc07fffffff8 +ffffffffffffffff001ffffffffffc00001fffffffffffff80000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffc07fffffff8 +fffffffffffffffe000fffffffffe000003fffffffffffff80000001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff807fffffff8 +fffffffffffffffe000fffffffffc000007fffffffffffffc0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff807fffffff8 +fffffffffffffffc000fffffffff800000ffffffffffffffe0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff80ffffffff8 +fffffffffffffffc0007fffffffe000001fffffffffffffff0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff80ffffffff8 +fffffffffffffffc0003fffffffc000003fffffffffffffff0000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff80001fffffff8000007fffffffffffffff8000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff80000ffffffc000001ffffffffffffffff8000000ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffff01ffffffff8 +fffffffffffffff800003fffff0000003ffffffffffffffffc000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe01ffffffff8 +fffffffffffffff000000000000000007ffffffffffffffffc000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe03ffffffff8 +ffffffffffffffe00000000000000000fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe03ffffffff8 +ffffffffffffffe00000000000000001fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc00000000000000003fffffffffffffffffe000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc00000000000000007ffffffffffffffffff000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc07ffffffff8 +ffffffffffffffc0000000000000000fffffffffffffffffff000000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc0fffffffff8 +ffffffffffffff80000000000000003fffffffffffffffffff800000ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc0fffffffff8 +ffffffffffffff80000000000000007fffffffffffffffffff800001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff80fffffffff8 +ffffffffffffff8000000000000001ffffffffffffffffffff800001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff81fffffffff8 +ffffffffffffff8000000000000001ffffffffffffffffffffc00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff81fffffffff8 +ffffffffffffff8000000000000003ffffffffffffffffffffe00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff01fffffffff8 +ffffffffffffff000000000000000fffffffffffffffffffffe00001ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffff03fffffffff8 +ffffffffffffff000000000000001ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffe000000000000003ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffe000000000000007ffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe03fffffffff8 +fffffffffffffc00000000000001fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffe07fffffffff8 +fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc07fffffffff8 +fffffffffffffc00000000000007fffffffffffffffffffffff00001ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc07fffffffff8 +fffffffffffffc0000000000003ffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc0ffffffffff8 +fffffffffffffc0000000000007ffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffc0ffffffffff8 +fffffffffffffc000000000000fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff80ffffffffff8 +fffffffffffffc000000000003fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff80ffffffffff8 +fffffffffffffc000000000007fffffffffffffffffffffffff80003ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff00ffffffffff8 +fffffffffffffc00000000001ffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff01ffffffffff8 +fffffffffffffe00000000001ffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffffffffffffffffffffff01ffffffffff8 +fffffffffffffe0000000000fffffffffffffffffffffffffff80007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffe01ffffffffff8 +ffffffffffffff0000000001fffffffffffffffffffffffffff80007ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffe03ffffffffff8 +ffffffffffffff000000000ffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffffdffffffffffffffffffe03ffffffffff8 +ffffffffffffff800000003ffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffff9ffffffffffffffffffc03ffffffffff8 +ffffffffffffffe0000001fffffffffffffffffffffffffffff80007ffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffff0000001fffffffffffffffffffffffffffff8000fffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffff800000ffffffffffffffffffffffffffffffc000fffffffffffffffff +fffffffffffffffffff1ffffffffffffffffff807ffffffffff8 +fffffffffffffffe0003fffffffffffffffffffffffffffffffc000fffffffffffffffff +ffffffffffffffffffe1ffffffffffffffffff807ffffffffff8 +ffffffffffffffff4007fffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffffc1ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff83ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff83ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff03ffffffffffffffffff00fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc001fffffffffffffffff +ffffffffffffffffff03ffffffffffffffffff01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +ffffffffffffffffff07ffffffffffffffffff01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +fffffffffffffffffe07fffffffffffffffffe01fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003fffffffffffffffff +fffffffffffffffffc07fffffffffffffffffe03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff +fffffffffffffffffc07fffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe007fffffffffffffffff +fffffffffffffffff80ffffffffffffffffffc03fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff +fffffffffffffffff03ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe00ffffffffffffffffff +ffffffffffffffffe01ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff +ffffffffffffffffe03ffffffffffffffffff807fffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffff +ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff +ffffffffffffffffc07ffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe03ffffffffffffffffff +ffffffffffffffff80fffffffffffffffffff00ffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffffffff +ffffffffffffffff80fffffffffffffffffff00ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff +ffffffffffffffff00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff07ffffffffffffffffff +fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff +fffffffffffffffe00ffffffffffffffffffe01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff0fffffffffffffffffff +fffffffffffffffc01ffffffffffffffffffc01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffffffffff +fffffffffffffffc03ffffffffffffffffffc01ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffff +fffffffffffffffc03ffffffffffffffffffc03ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffff +fffffffffffffff807ffffffffffffffffffc03ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff807ffffffffffffffffff803ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff00fffffffffffffffffff803ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff00fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffe01fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffe03fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffc03fffffffffffffffffff807ffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff807fffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff807fffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00ffffffffffffffffffff00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff00fffffffffffffffffffe00fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffe01fffffffffffffffffffe01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffe03fffffffffffffffffffe01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffc03fffffffffffffffffffc01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffc07fffffffffffffffffffc01fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff807fffffffffffffffffffc03fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff00ffffffffffffffffffffc03fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff00ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe01ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe01ffffffffffffffffffff803fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc03ffffffffffffffffffff807fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc03ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff807ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff807ffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffff00fffffffffffffffffffff007fffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffe00ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffe01ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fffffffffffff +fffffffffffc01ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff +fffffffffffc03ffffffffffffffffffffe00ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1fffffffffffff +fffffffffff803ffffffffffffffffffffc00ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1fffffffffffff +fffffffffff807ffffffffffffffffffffc00ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fffffffffffff +fffffffffff00fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3fffffffffffff +fffffffffff00fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fffffffffffff +ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffffc01fffffffffffffffffffffc01ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffff801fffffffffffffffffffff801ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff07fffffffffffff +ffffffffff803fffffffffffffffffffff801ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffff +ffffffffff003fffffffffffffffffffff803ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ffffffffffffff +fffffffffe007fffffffffffffffffffff803ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1ffffffffffffff +fffffffffc007fffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ffffffffffffff +fffffffffc00ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff +fffffffff800ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffff +fffffffff801ffffffffffffffffffffff003ffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff03ffffffffffffff +fffffffff803ffffffffffffffffffffff007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffe07ffffffffffffff +fffffffff003fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffffc07ffffffffffffff +ffffffffe007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff807ffffffffffffff +ffffffffc007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff007ffffffffffffff +ffffffffc007fffffffffffffffffffffe007ffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff +ffffffff800ffffffffffffffffffffffe00fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffff +ffffffff000ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffe00fffffffffffffff +fffffffe001ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff +fffffffc003ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc01fffffffffffffff +9ffffffc003ffffffffffffffffffffffe00fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff803fffffffffffffff +0ffffff8003ffffffffffffffffffffffc01fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe +07fffff0007ffffffffffffffffffffffc01fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffff003ffffffffffffffe +07ffffe000fffffffffffffffffffffffc01fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff8 +03ffffc000fffffffffffffffffffffffc01fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffe007ffffffffffffff0 +03ffff8001fffffffffffffffffffffff801fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffffc007ffffffffffffff0 +01ffff0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0 +00fffe0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffe0 +00fffe0003fffffffffffffffffffffff803fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffff001ffffffffffffffc0 +003ffc0007fffffffffffffffffffffff003fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff80 +001fe0001ffffffffffffffffffffffff003fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffe003ffffffffffffff00 +000fc0001ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe00 +000000001ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff8007fffffffffffffe00 +000000003ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff800ffffffffffffffc00 +000000003ffffffffffffffffffffffff007fffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffff800 +000000007fffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff800 +000000007fffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffe001ffffffffffffff000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffffc007fffffffffffffe000 +00000001ffffffffffffffffffffffffe007fffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffc000 +00000003ffffffffffffffffffffffffc00ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffff000ffffffffffffffc000 +00000003ffffffffffffffffffffffffc00ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff8000 +00000007ffffffffffffffffffffffffc00ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff0000 +0000000fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffffc003ffffffffffffff0000 +0000001fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffff8003fffffffffffffe0000 +0000001fffffffffffffffffffffffffc01ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffff0007fffffffffffffe0000 +0000003fffffffffffffffffffffffffc01ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffc0000 +0000007fffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffff80000 +0000007fffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffffc001ffffffffffffff80000 +000000ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff00000 +000001ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000 +000001ffffffffffffffffffffffffff801ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff00000 +000003ffffffffffffffffffffffffff801ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe00000 +000003ffffffffffffffffffffffffff801ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffe000ffffffffffffffe00000 +000007ffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffc00000 +00000fffffffffffffffffffffffffff003ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff8001ffffffffffffff800000 +00000fffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff0003ffffffffffffff800000 +00001fffffffffffffffffffffffffff803ffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffff0007ffffffffffffff000200 +00003fffffffffffffffffffffffffff007ffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffe0007fffffffffffffe000700 +00007fffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe001f80 +0000ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe001f80 +0001ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffc003fc0 +0001ffffffffffffffffffffffffffff00fffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffff8007fe0 +0003ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff0007fe0 +0007ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffe0007ffffffffffffff000fff0 +0007ffffffffffffffffffffffffffff01fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffffc000ffffffffffffffe003fff8 +001fffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffc +007fffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff8000ffffffffffffffe003fffe +00ffffffffffffffffffffffffffffff07fffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffff0001ffffffffffffffc007ffff +dfffffffffffffffffffffffffffffff0ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffff800fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff800fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffff001fffff +fffffffffffffffffffffffffffffffe1ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff003fffff +fffffffffffffffffffffffffffffffe3ffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffe003fffff +ffffffffffffffffffffffffffffffff3ffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffc007fffff +ffffffffffffffffffffffffffffffff3ffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffe0003ffffffffffffffc007fffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffffc0007ffffffffffffffc00ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff800ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffff8000fffffffffffffff801ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffe0000fffffffffffffff001ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff003ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffe007ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff80007ffffffffffffffe007ffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffff0000fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffe0001fffffffffffffffc00fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffff801fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffffc0003fffffffffffffff801fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffff80003fffffffffffffff003fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffff007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc007fffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffffc0001fffffffffffffffc00ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffc01ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff801ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffe0001ffffffffffffffff801ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff803ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffffc0003ffffffffffffffff803ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff80003fffffffffffffffe007ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff80007fffffffffffffffe007ffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffe00fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffc00fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffff801fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff803fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff80003ffffffffffffffff003fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff003fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffe007fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffe0000ffffffffffffffffc007fffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffffc0001ffffffffffffffffc00ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff80007ffffffffffffffffc00ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffff00007ffffffffffffffff801ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffe0000fffffffffffffffff003ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffffc0001fffffffffffffffff003ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffff80003ffffffffffffffffe007ffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe00007ffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffffe0000fffffffffffffffffc00fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff80001fffffffffffffffff801fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff00003fffffffffffffffff801fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffff00007fffffffffffffffff003fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffe00007fffffffffffffffff007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffc0000ffffffffffffffffff007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffffc0001fffffffffffffffffc007fffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff80003fffffffffffffffffc00ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff80007fffffffffffffffffc01ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff00007fffffffffffffffff801ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffff0000ffffffffffffffffff801ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffffc0001ffffffffffffffffff803ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff80003ffffffffffffffffff803ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffff00007ffffffffffffffffff007ffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffe0000ffffffffffffffffffe00fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffc0000ffffffffffffffffffe00fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffffc0001ffffffffffffffffffe01fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffff80003ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffff00007ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc03fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffe00007ffffffffffffffffffc07fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffffc0001fffffffffffffffffff807fffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff80003fffffffffffffffffff80ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffff00007fffffffffffffffffff81ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffe0000ffffffffffffffffffff01ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffe0001ffffffffffffffffffff03ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffffc0003ffffffffffffffffffff03ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffff80003fffffffffffffffffffe07ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffff00007fffffffffffffffffffe07ffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe00007fffffffffffffffffffe0fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc0fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffe0000ffffffffffffffffffffc1fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffffc0001ffffffffffffffffffffc1fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffff80007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffff00007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffe00007ffffffffffffffffffff83fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffe0000fffffffffffffffffffff87fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffc0001fffffffffffffffffffff87fffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffffc0001fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff80003fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff00007fffffffffffffffffffff0ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffff0000ffffffffffffffffffffff1ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffe0000fffffffffffffffffffffe1ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffffc0001fffffffffffffffffffffe3ffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff80003fffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff00007fffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffe0001ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffc0003ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffffc0007ffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffff0000fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffe0001fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0003fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffffc0007fffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff8000ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff8001ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0001ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffff0003ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffe0007ffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffffc000fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8001fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8003fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff8007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffff0007fffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffe001ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc001ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc007ffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc00fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffffc01fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff801fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff003fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffe00ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffffc03ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff807ffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff80fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +fffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe03fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffffc3ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff83ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff87ffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 +ffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffff8 + + +showpage + +% stop using temporary dictionary +end + +% restore original state +origstate restore + +%%Trailer diff -r 45e5f0224d81 -r 360860a0006f etc/gnus-refcard.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/gnus-refcard.tex Mon Apr 04 16:43:15 2005 +0000 @@ -0,0 +1,1427 @@ +\documentclass{article} + +% Previously we had five input LaTeX files (booklet.tex bk-lt.tex bk-a4.tex +% refcard.tex gnusref.tex) and two logo files (gnuslogo-refcard.eps and +% gnuslogo-booklet.eps). +% +% From this LaTeX file (gnus-refcard.tex) plus a single logo (gnus-logo.eps), +% we can generate the refcard and the booklet version. Appropriate Makefile +% rules were added. This simplifies to distribute the refcard with Emacs. +% +% (Reiner Steib, March 2005) + +\usepackage{ifthen} +\ifthenelse{\isundefined{\booklettrue}}{ + \typeout{Creating reference card...} +}{ + \typeout{Creating reference booklet...}} + +\usepackage{supertabular} + +\newlength{\logowidth} \setlength{\logowidth} {6.861in} +\newlength{\logoheight} \setlength{\logoheight}{7.013in} + +\usepackage{graphicx} + +\usepackage{geometry} + +\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Reference Card + + \def\Guide{Card}\def\guide{card} + \def\logoscale{0.25} + + % Page setup for the refcard: + + % \setlength{\textwidth}{7.26in} \setlength{\textheight}{10in} + % \setlength{\topmargin}{-1.0in} + % % the same settings work for A4, although there is a bit of space at the + % % top and bottom of the page. + % \setlength{\oddsidemargin}{-0.5in} \setlength{\evensidemargin}{-0.5in} + + \ifthenelse{\isundefined{\letterpapertrue}}{ + \geometry{a4paper,hmargin=10mm,tmargin=10mm,bmargin=35mm} + }{ + \geometry{hmargin=20mm,tmargin=10mm,bmargin=12mm} + } + +}{ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Reference Booklet + + \def\Guide{Booklet}\def\guide{booklet} + \def\logoscale{0.5}% FIXME: too large for 2up printing? --rsteib + + % FIXME: Use geometry package. --rsteib +% \ifthenelse{\isundefined{\letterpapertrue}}{ +% \textwidth 4.9in \textheight 7.35in \topmargin -1.0in +% }{ +% \textwidth 4.5in \textheight 7.5in \topmargin -1.0in +% } +% \oddsidemargin -0.5in \evensidemargin -0.5in + \ifthenelse{\isundefined{\letterpapertrue}}{ + \geometry{a5paper,hmargin=10mm,tmargin=10mm,bmargin=4mm} + }{ + % FIXME: Use geometry package. --rsteib + \geometry{a5paper,hmargin=20mm,tmargin=10mm,bmargin=4mm} + } + + \def\sec{\section} + \def\subsec{\subsection} + \def\subsubsec{\subsubsection} + \def\blankpage{\vspace*{\fill}\par + %\centerline{(This page intentionally left blank.)} + \par\vspace*{\fill}\pagebreak} +}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% \input{gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % % +%% include file for the Gnus refcard and booklet + +\def\progver{5.10}\def\refver{5.10-2} % program and refcard versions +\def\date{Mar, 2005} +\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$} + +%% +\newlength{\keycolwidth} +\newenvironment{keys}[1]% #1 is the widest key +{\nopagebreak%\noindent% + \settowidth{\keycolwidth}{#1}% + \addtolength{\keycolwidth}{\tabcolsep}% + \addtolength{\keycolwidth}{-\columnwidth}% + \begin{supertabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}% + {\end{supertabular}\\} + +%% uncomment the first definition if you do not want pagebreaks in maps +%%\newcommand{\esamepage}{\samepage} +\newcommand{\esamepage}{} + +\newcommand*{\B}[1]{{\bf#1})} % bold l)etter + +\newcommand{\Title}{% + \begin{center} + {\bf\LARGE Gnus \progver\ Reference \Guide\\} + %{\normalsize \Guide\ version \refver} + \end{center} + } + +% \newcommand*{\LogoOLD}[1]{\centerline{% +% \makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight +% {\vfill\epsfig{figure=gnuslogo-#1}}\vspace{-\baselineskip}}}} + +\newcommand*{\Logo}[1]{\centerline{% + \includegraphics[width=\logoscale\logowidth]{gnus-logo}}} + +\newcommand{\Copyright}{% + \begin{center} + Copyright \copyright\ 1995 Free Software Foundation, Inc.\\* + Copyright \copyright\ 1995 Vladimir Alexiev + $<$vladimir@cs.ualberta.ca$>$.\\* + Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\* + Copyright \copyright\ 2001, 2002, 2003, 2005 \author.\\* + Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne + Ingebrigtsen.\\* + and the Emacs Help Bindings feature (C-h b).\\* + Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\* + \end{center} + + Permission is granted to make and distribute copies of this reference + \guide{} provided the copyright notice and this permission are preserved on + all copies. Please send corrections, additions and suggestions to the + current maintainer's email address. \Guide{} last edited on \date. + } + +\newcommand{\Notes}{% + \subsection*{Notes} + {\esamepage + Gnus is complex. Currently it has some 876 interactive (user-callable) + functions. Of these 618 are in the two major modes (Group and + Summary/Article). Many of these functions have more than one binding, some + have 3 or even 4 bindings. The total number of keybindings is 677. So in + order to save 40\% space, every function is listed only once on this + \guide, under the ``more logical'' binding. Alternative bindings are given + in parentheses in the beginning of the description. + + Many Gnus commands are affected by the numeric prefix. Normally you enter a + prefix by holding the Meta key and typing a number, but in most Gnus modes + you don't need to use Meta since the digits are not self-inserting. The + prefixed behavior of commands is given in [brackets]. Often the prefix is + used to specify: + + \quad [distance] How many objects to move the point over. + + \quad [scope] How many objects to operate on (including the current one). + + \quad [p/p] The ``Process/Prefix Convention'': If a prefix is given then it + determines how many objects to operate on. Else if there are some objects + marked with the process mark \#, these are operated on. Else only the + current object is affected. + + \quad [level] A group subscribedness level. Only groups with a lower or + equal level will be affected by the operation. If no prefix is given, + `gnus-group-default-list-level' is used. If + `gnus-group-use-permanent-levels', then a prefix to the `g' and `l' + commands will also set the default level. + + \quad [score] An article score. If no prefix is given, + `gnus-summary-default-score' is used. \\*[\baselineskip] + % some keys + Gnus startup-commands:\\* + \begin{keys}{M-x gnus-unplugged} + M-x gnus & start Gnus. \\ + M-x gnus-no-server & start Gnus without connecting to server + (i.e. to read mail). \\ + \end{keys} + Additionally, there are the two commands \texttt{gnus-plugged} and + \texttt{gnus-unplugged}, which are only used if you want to download + news and/or read previously downloaded news offline (see C-c C-i g Gnus + Unplugged RET). Note: \texttt{gnus-no-server} ignores the stuff in + \texttt{gnus-agent-directory}, and thus does not allow you to use Gnus + Unplugged. + % + \begin{keys}{C-c C-i} + C-c C-i & Go to the Gnus online {\bf info}.\\ + C-c C-b & Send a Gnus {\bf bug} report.\\ + \end{keys} + }} + +\newcommand{\GroupLevels}{% + The table below assumes that you use the default Gnus levels. + Fill your user-specific levels in the blank cells.\\[1\baselineskip] + \begin{tabular}{|c|l|l|} + \hline + Level & Groups & Status \\ + \hline + 1 & draft/mail groups & \\ + 2 & mail groups & \\ + 3 & & subscribed \\ + 4 & & \\ + 5 & default list level & \\ + \hline + 6 & & unsubscribed \\ + 7 & & \\ + \hline + 8 & & zombies \\ + \hline + 9 & & killed \\ + \hline + \end{tabular}} + +\newcommand{\MarkCharacters}{% + {\esamepage If a command directly sets a mark, it is shown in parentheses.\\* + \newlength{\markcolwidth} + \settowidth{\markcolwidth}{` '}% widest character + \addtolength{\markcolwidth}{4\tabcolsep} + \addtolength{\markcolwidth}{-\columnwidth} + \newlength{\markdblcolwidth} + \setlength{\markdblcolwidth}{\columnwidth} + \addtolength{\markdblcolwidth}{-2\tabcolsep} + \begin{tabular}{|c|p{-\markcolwidth}|} + \hline + \multicolumn{2}{|p{\markdblcolwidth}|}{{\bf ``Read'' Marks.} + All these marks appear in the first column of the summary line, and so + are mutually exclusive.}\\ + \hline + ` ' & (M-u, M SPC, M c) Not read.\\ + ! & (!, M !, M t) Ticked (interesting).\\ + ? & (?, M ?) Dormant (only followups are interesting).\\ + E & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\ + G & (C, B DEL) Canceled article (or deleted in mailgroups).\\ + \$ & (M-d, M s x, S x). Marked as spam.\\ + \hline\hline + \multicolumn{2}{|p{\markdblcolwidth}|} + {The marks below mean that the article + is read (killed, uninteresting), and have more or less the same effect. + Some commands however explicitly differentiate between them (e.g.\ M + M-C-r, adaptive scoring).}\\ + \hline + r & (d, M d, M r) Deleted (marked as {\bf read}).\\ + C & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\ + F & SOUPed article. See the manual.\\ + O & {\bf Old} (read in a previous session).\\ + K & (k, M k; C-k, M K) {\bf Killed}.\\ + M & Article marked as read by duplicate suppression.\\ + Q & Article is part of a sparse thread (see ``Threading'' + in the manual).\\ + R & {\bf Read} (viewed in actuality).\\ + X & Killed by a kill file.\\ + Y & Killed due to low score.\\ + \hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline + \multicolumn{2}{|p{\markdblcolwidth}|} + {{\bf Marks not affecting visibility}}\\ + \hline + \# & (\#, M \#, M P p) Processable (will be affected by the next operation). + [2]\\ + A & {\bf Answered} (followed-up or replied). [2]\\ + F & Forwarded. [2]\\ + $\ast$ & Cached. [2]\\ + S & Saved. [2]\\ + N & Recently arrived. [2]\\ + . & Unseen. [2]\\ + + & Over default score. [3]\\ + $-$ & Under default score. [3]\\ + $=$ & Has children (thread underneath it). Add `\%e' to + `gnus-summary-line-format'. [3]\\ + \hline + \end{tabular} + }} + +\newcommand{\GroupModeGeneral}{% + \begin{keys}{C-c M-C-x} + RET & (=) Enter this group. [Prefix: how many (read) articles to fetch. + Positive: newest articles, negative: oldest ones; non-numerical: + view all articles, not just unread]\\ + M-RET & Enter group quickly.\\ + M-SPC & Same as RET but does not expunge and hide dormants.\\ + M-C-RET & Enter group without any processing, changes will not be permanent.\\ + SPC & Select this group and display the first (unread) article. [Same + prefix as above.]\\ + ? & Give a very short help message.\\ + $<$ & Go to the beginning of the Group buffer.\\ + $>$ & Go to the end of the Group buffer.\\ + , & Jump to the lowest-level group with unread articles.\\ + . & Jump to the first group with unread articles.\\ + \^{} & Enter the Server buffer mode.\\ + a & Post an {\bf article} to a group + [Prefix: use group under point to find posting-style].\\ + b & Find {\bf bogus} groups and delete them.\\ + c & Mark all unticked articles in this group as read ({\bf catch-up}). + [p/p]\\ + g & Check the server for new articles ({\bf get}). [level]\\ + M-g & Check the server for new articles in this group ({\bf get}). [p/p]\\ + j & {\bf Jump} to a group.\\ + m & {\bf Mail} a message to someone + [Prefix: use group under point to find posting-style].\\ + n & Go to the {\bf next} group with unread articles. [distance]\\ + M-n & Go to the {\bf next} group on the same or lower level. + [distance]\\ + p & (DEL) Go to the {\bf previous} group with unread articles. + [distance]\\ + M-p & Go to the {\bf previous} group on the same or lower level. [distance]\\ + q & {\bf Quit} Gnus.\\ + r & Re-read the init file ({\bf reset}).\\ + s & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if + `gnus-save-newsrc-file').\\ + z & Suspend (kill all buffers of) Gnus.\\ + B & {\bf Browse} a foreign server.\\ + C & Mark all articles in this group as read ({\bf Catch-up}). [p/p]\\ + F & {\bf Find} new groups and process them.\\ + N & Go to the {\bf next} group. [distance]\\ + P & Go to the {\bf previous} group. [distance]\\ + Q & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\ + R & {\bf Restart} Gnus.\\ + Z & Clear the dribble buffer.\\ + M-c & Clear data from group (marks and list of read articles). \\ + C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level + (depending on `gnus-group-sort-function').\\ + C-c C-x & Run all expirable articles in this group through the {\bf expiry} + process.\\ + C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\ + C-c M-g & Activate all {\bf groups}.\\ + C-c C-i & Gnus online-manual ({\bf info}).\\ + C-x C-t & {\bf Transpose} two groups.\\ + H f & Fetch this group's {\bf FAQ} (using ange-ftp).\\ + H c & Display this group's {\bf charter}. [Prefix: query for group]\\ + H C & Display this group's {\bf control message} (using + ange-ftp). [Prefix: query for group]\\ + H v & (V) Display the Gnus {\bf version} number.\\ + H d & (C-c C-d) Show the {\bf description} of this group + [Prefix: re-read from server].\\ + M-d & {\bf Describe} all groups. [Prefix: re-read from server]\\ + D g & Regenerate a Sieve script from group parameters.\\ + D u & Regenerate Sieve script and {\bf upload} to server.\\ + \end{keys} + } + +\newcommand{\ListGroups}{% + {\esamepage + \begin{keys}{A M} + A d & (C-c C-M-a) List all groups whose names or {\bf descriptions} match a regexp.\\ + A k & (C-c C-l) List all {\bf killed} groups. + [Prefix: look at active-file from server]\\ + A l & List all groups on a specific level. + [Prefix: also list groups with no unread articles]\\ + A a & (C-c C-a) List all groups whose names match a regexp + ({\bf apropos}).\\ + A A & List the server's active-file.\\ + A M & List groups that {\bf match} a regexp.\\ + A m & List groups that {\bf match} a regexp and have unread articles. + [level]\\ + A s & (l) List all {\bf subscribed} groups with unread articles. + [level; 5 and lower is the default]\\ + A u & (L) List all groups (including read and {\bf unsubscribed}). + [level; 7 and lower is the default]\\ + A z & List all {\bf zombie} groups.\\ + A c & List all groups with cached articles. [level]\\ + A ? & List all groups with dormant articles. [level]\\ + \end{keys} + } + + \newcommand{\CreateEditGroups}{% + {\esamepage + The select methods are indicated in parentheses.\\* + \begin{keys}{G DEL} + G a & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\ + G c & {\bf Customize} this group's parameters.\\ + G d & Make a {\bf directory} group (every file must be a posting and files + must have numeric names). (nndir)\\ + G D & Enter a {\bf directory} as a (temporary) group. + (nneething without recording articles read)\\ + G e & (M-e) {\bf Edit} this group's select method.\\ + G E & {\bf Edit} this group's info (select method, articles read, etc).\\ + G f & Make a group based on a {\bf file}. (nndoc)\\ + G h & Make the Gnus {\bf help} (documentation) group. (nndoc)\\ + G k & Make a {\bf kiboze} group. (nnkiboze)\\ + G m & {\bf Make} a new group.\\ + G p & Edit this group's {\bf parameters}.\\ + G r & Rename this group (does not work with read-only groups!).\\ + G u & Create one of the groups mentioned in gnus-{\bf useful}-groups.\\ + G v & Add this group to a {\bf virtual} group. [p/p]\\ + G V & Make a new empty {\bf virtual} group. (nnvirtual)\\ + G w & Create ephemeral group based on web-search. [Prefix: make solid group + instead]\\ + G R & Make an {\bf RSS} group.\\ + G DEL & {\bf Delete} group [Prefix: delete all articles as well].\\ + G x & Expunge all deleted articles in an nnimap mailbox.\\ + G l & Edit ACL (Access Control {\bf List}) for an nnimap mailbox.\\ + \end{keys} + You can also create mail-groups and read your mail with Gnus (very useful + if you are subscribed to mailing lists), using one of the methods + nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info + (C-c C-i g Reading Mail RET). + }} + + % TODO: + \newcommand{\SoupCommands}{% + \begin{keys}{G s w} + G s b & gnus-group-brew-soup: not documented.\\ + G s p & gnus-soup-pack-packet: not documented.\\ + G s r & nnsoup-pack-replies: not documented.\\ + G s s & gnus-soup-send-replies: not documented.\\ + G s w & gnus-soup-save-areas: not documented.\\ + \end{keys}} + + \newcommand{\MarkGroups}{% + \begin{keys}{M m} + M m & (\#) Set the process {\bf mark} on this group. [scope]\\ + M r & Mark all groups matching regular expression.\\ + M u & (M-\#) Remove the process mark from this group ({\bf unmark}). + [scope]\\ + M U & Remove the process mark from all groups (\textbf{umark all}).\\ + M w & Mark all groups in the current region. [prefix: unmark]\\ + M b & Mark all groups in the {\bf buffer}. [prefix: unmark]\\ + \end{keys}} + + \newcommand{\GroupTopicsGeneral}{% + {\esamepage + Topics are ``categories'' for groups. Press t in the group-buffer to + toggle gnus-topic-mode (C-c C-i g Group Topics RET).\\* + \begin{keys}{C-c C-x} + T n & Prompt for topic {\bf name} and create it.\\ + T m & {\bf Move} the current group to some other topic [p/p].\\ + T j & {\bf Jump} to a topic.\\ + T c & {\bf Copy} the current group to some other topic [p/p].\\ + T D & Remove (not delete) the current group [p/p].\\ + T M & {\bf Move} all groups matching a regexp to a topic.\\ + T C & {\bf Copy} all groups matching a regexp to a topic.\\ + T H & Toggle {\bf hiding} of empty topics.\\ + T r & {\bf Rename} a topic.\\ + T DEL & Delete an empty topic.\\ + T \# & Mark all groups in the current topic with the process-mark.\\ + T M-\# & Remove the process-mark from all groups in the current topic.\\ + T TAB & (TAB) Indent current topic [Prefix: unindent].\\ + M-TAB & Unindent the current topic.\\ + RET & (SPC) Either unfold topic or enter group [level].\\ + T s & {\bf Show} the current topic. [Prefix: show permanently]\\ + T h & {\bf Hide} the current topic. [Prefix: hide permanently]\\ + C-c C-x & Expire all articles in current group or topic.\\ + C-k & {\bf Kill} a group or topic.\\ + C-y & {\bf Yank} a group or topic.\\ + A T & List active-file using {\bf topics}.\\ + G p & Edit topic-{\bf parameters}.\\ + T M-n & Go to {\bf next} topic. [distance]\\ + T M-p & Go to {\bf previous} topic. [distance]\\ + \end{keys} + } + } + + \newcommand{\TopicSorting}{% + {\esamepage + \begin{keys}{T S m} + T S a & Sort {\bf alphabetically}.\\ + T S u & Sort by number of {\bf unread} articles.\\ + T S l & Sort by group {\bf level}.\\ + T S v & Sort by group score ({\bf value}).\\ + T S r & Sort by group {\bf rank}.\\ + T S m & Sort by {\bf method}.\\ + T S e & Sort by {\bf server} name.\\ + T S s & Sort according to `gnus-group-sort-function'.\\ + \end{keys} + With a prefix these commands will sort in reverse order. + } + } + + \newcommand{\SubscribeKillYankGroups}{% + {\esamepage + \begin{keys}{S C-k} + S k & (C-k) {\bf Kill} this group.\\ + S l & Set the {\bf level} of this group. [p/p]\\ + S s & (U) Prompt for a group and toggle its {\bf subscription}.\\ + S t & (u) {\bf Toggle} subscription to this group. [p/p]\\ + S w & (C-w) Kill all groups in the region.\\ + S y & (C-y) {\bf Yank} the last killed group.\\ + S z & Kill all {\bf zombie} groups.\\ + S C-k & Kill all groups on a certain level.\\ + \end{keys} + } + } + + \newcommand{\SummaryModeGeneral}{% + {\esamepage + \begin{keys}{M-RET} + SPC & (A SPC, A n) Select an article, scroll it one page, move to the + next one.\\ + DEL & (A DEL, A p, b) Scroll this article one page back. [distance]\\ + RET & (A RET) Scroll this article one line forward. [distance]\\ + M-RET & (A M-RET) Scroll this article one line backward. [distance]\\ + = & Expand the Summary window (fullsize). + [Prefix: shrink to display article window]\\ + % + \& & Execute a command on all articles whose header matches a regexp. + [Prefix: move backwards]\\ + M-\& & Execute a command on all articles having the process mark.\\ + % + M-n & (G M-n) Go to the {\bf next} summary line of an unread article. + [distance]\\ + M-p & (G M-p) Go to the {\bf previous} summary line of an unread article. + [distance]\\ + M-s & {\bf Search} through all subsequent articles for a regexp.\\ + M-r & Search through all previous articles for a regexp.\\ + % + A P & {\bf Postscript}-print current buffer.\\ + % + M-k & Edit this group's {\bf kill} file.\\ + M-K & Edit the general {\bf kill} file.\\ + % + C-t & Toggle {\bf truncation} of summary lines.\\ + Y g & Regenerate the summary-buffer.\\ + Y c & Insert all cached articles into the summary-buffer.\\ + % + M-C-e & {\bf Edit} the group-parameters.\\ + M-C-a & Customize the group-parameters.\\ + % + % article handling + % + A $<$ & ($<$, A b) Scroll to the beginning of this article.\\ + A $>$ & ($>$, A e) Scroll to the end of this article.\\ + A s & (s) Perform an i{\bf search} in the article buffer.\\ + % + A D & (C-d) Un{\bf digestify} this article into a separate group. + [Prefix: force digest]\\ + M-C-d & Like C-d, but open several documents in nndoc-groups, wrapped + in an nnvirtual group [p/p]\\ + % + A g & (g) (Re)fetch this article ({\bf get}). [Prefix: get raw version]\\ + A r & (\^{}, A \^{}) Fetch the parent(s) of this article. + [Prefix: if positive fetch \textit{n} ancestors; + negative: fetch only the \textit{n}th ancestor]\\ + A t & {\bf Translate} this article.\\ + A R & Fetch all articles mentioned in the {\bf References}-header.\\ + A T & Fetch full \textbf{thread} in which the current article appears.\\ + M-\^{} & Fetch the article with a given Message-ID.\\ + S y & {\bf Yank} the current article into an existing message-buffer. + [p/p]\\ + A M & Setup group parameters for {\bf mailing} lists from + headers. [Prefix: replace old settings]\\ + \end{keys} + } + } + + \newcommand{\MIMESummary}{% + {\esamepage + For the commands operating on one MIME part (a subset of gnus-article-*), a + prefix selects which part to operate on. If the point is placed over a + MIME button in the article buffer, use the corresponding bindings for the + article buffer instead. + + \begin{keys}{W M w} + K v & (b, W M b) {\bf View} the MIME-part.\\ + K o & {\bf Save} the MIME part.\\ + K c & {\bf Copy} the MIME part.\\ + K e & View the MIME part {\bf externally}.\\ + K i & View the MIME part {\bf internally}.\\ + K $\mid$ & Pipe the MIME part to an external command.\\ + K b & Make all the MIME parts have buttons in front of them.\\ + K m & Try to repair {\bf multipart-headers}.\\ + K C & View the MIME part using a different {\bf charset}.\\ + X m & Save all parts matching a MIME type to a directory. [p/p]\\ + M-t & Toggle the buttonized display of the article buffer.\\ + W M w & Decode RFC2047-encoded words in the article headers.\\ + W M c & Decode encoded article bodies. [Prefix: prompt for charset]\\ + W M v & View all MIME parts in the current article.\\ + \end{keys} + } + } + + \newcommand{\SortSummary}{% + {\esamepage + \begin{keys}{C-c C-s C-a} + C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\ + % C-c C-s C-t & Sort the summary-buffer by {\bf recipient}.\\ % No Gnus + C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\ + C-c C-s C-i & Sort the summary-buffer by article score.\\ + C-c C-s C-l & Sort the summary-buffer by amount of {\bf lines}.\\ + C-c C-s C-c & Sort the summary-buffer by length.\\ + C-c C-s C-n & Sort the summary-buffer by article {\bf number}.\\ + C-c C-s C-s & Sort the summary-buffer by {\bf subject}.\\ + C-c C-s C-r & Sort the summary-buffer {\bf randomly}.\\ + C-c C-s C-o & Sort the summary-buffer using the default method.\\ + \end{keys} + With a prefix these functions sort in reverse order. + } + } + + \newcommand{\MailGroups}{% formerly \Bsubmap + {\esamepage + These commands (except `B c') are only valid in a mail group.\\* + \begin{keys}{B M-C-e} + B DEL & (B backspace, B delete) {\bf Delete} the mail article from disk (!). + [p/p]\\ + B B & Crosspost this article to another group.\\ + B c & {\bf Copy} this article from any group to a mail group. [p/p]\\ + B e & {\bf Expire} all expirable articles in this group. [p/p]\\ + B i & {\bf Import} a random file into this group.\\ + B I & Create an empty article in this group.\\ + B m & {\bf Move} the article from one mail group to another. [p/p]\\ + B p & Query whether the article was {\bf posted} as well.\\ + B q & {\bf Query} where the article will end up after fancy splitting\\ + B r & {\bf Respool} this mail article. [p/p]\\ + B t & {\bf Trace} the fancy splitting patterns applied to this article.\\ + B w & (e) Edit this article.\\ + B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this group + (!). [p/p]\\ + K E & {\bf Encrypt} article body. [p/p]\\ + \end{keys} + } + } + + \newcommand{\DraftGroup}{% formerly \Dsubmap + {\esamepage + The ``drafts''-group contains messages that have been saved but not sent + and rejected articles. \\* + \begin{keys}{B DEL} + D e & \textbf{edit} message.\\ + D s & \textbf{Send} message. [p/p]\\ + D S & \textbf{Send} all messages.\\ + D t & \textbf{Toggle} sending (mark as unsendable).\\ + B DEL & \textbf{Delete} message (like in mailgroup).\\ + \end{keys} + } + } + + \newcommand{\SelectArticles}{% formerly \Gsubmap + {\esamepage + These commands select the target article. They do not understand the prefix.\\* + \begin{keys}{G C-n} + h & Enter article-buffer.\\ + G b & (,) Go to the {\bf best} article (the one with highest score).\\ + G f & (.) Go to the {\bf first} unread article.\\ + G n & (n) Go to the {\bf next} unread article.\\ + G p & (p) Go to the {\bf previous} unread article.\\ + % + G N & (N) Go to {\bf the} next article.\\ + G P & (P) Go to the {\bf previous} article.\\ + % + G C-n & (M-C-n) Go to the {\bf next} article with the same subject.\\ + G C-p & (M-C-p) Go to the {\bf previous} article with the same subject.\\ + % + G l & (l) Go to the previously read article ({\bf last-read-article}).\\ + G o & Pop an article off the summary history and go to it.\\ + % + G g & Search an article via subject.\\ + G j & (j) Search an article via Message-Id or subject.\\ + \end{keys} + } + } + + \newcommand{\ArticleModeGeneral}{% + {\esamepage + The normal navigation keys work in Article mode. Some additional keys are:\\ + \begin{keys}{C-c RET} + C-c \^{} & Get the article with the Message-ID near point.\\ + C-c RET & Send reply to address near point.\\ + h & Go to the \textbf{header}-line of the article in the + summary-buffer.\\ + s & Go to \textbf{summary}-buffer.\\ + RET & (middle mouse button) Activate the button at point to follow + an URL or Message-ID.\\ + TAB & Move the point to the next button.\\ + M-TAB & Move point to previous button.\\ + \end{keys} + } + } + + \newcommand{\WashArticle}{% formerly \Wsubmap + {\esamepage + \begin{keys}{W W H} + W 6 & Translate a base64 article.\\ + W a & Strip certain {\bf headers} from body.\\ + W b & Make Message-IDs and URLs in the article mouse-clickable + {\bf buttons}.\\ + W c & Translate CRLF-pairs to LF and then the remaining CR's to LF's.\\ + W d & Treat {\bf dumbquotes}.\\ + W e & Treat {\bf emphasized} text.\\ + W h & Treat {\bf HTML}.\\ + W l & (w) Remove page breaks ({\bf\^{}L}) from the article.\\ + W m & {\bf Morse} decode article.\\ + W o & Treat {\bf overstrike} or underline (\^{}H\_) in the article.\\ + W p & Verify X-{\bf PGP}-Sig header.\\ + W q & Treat {\bf quoted}-printable in the article.\\ + W r & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\ + W s & Verify (and decrypt) a {\bf signed} message.\\ + W t & (t) {\bf Toggle} display of all headers.\\ + W u & {\bf Unsplit} broken URLs.\\ + W v & (v) Toggle permanent {\bf verbose} displaying of all headers.\\ + W w & Do word {\bf wrap} in the article.\\ + W B & Add clickable {\bf buttons} to the article headers.\\ + W C & {\bf Capitalize} first word in each sentence.\\ + W Q & Fill long lines.\\ + W Z & Translate a HZ-encoded article.\\ + % + W G u & {\bf Unfold} folded header lines.\\ + W G f & {\bf Fold} all header lines.\\ + W G n & Unfold {\bf Newsgroups:} and Follow-Up-To:.\\ + % + W Y c & Repair broken {\bf citations}.\\ + W Y a & Repair broken {\bf attribution} lines.\\ + W Y u & {\bf Unwrap} broken citation lines.\\ + W Y f & Do a {\bf full} deuglification (W Y c, W Y a, W Y u).\\ + \end{keys} + } + } + + \newcommand{\BlankAndWhitespace}{% + {\esamepage + \begin{keys}{W E w} + W E l & Strip blank {\bf lines} from the beginning of the article.\\ + W E m & Replace blank lines with empty lines and remove {\bf multiple} + blank lines.\\ + W E t & Remove {\bf trailing} blank lines.\\ + W E a & Strip blank lines at the beginning and the end + (W E l, W E m and W E t).\\ + W E A & Strip {\bf all} blank lines.\\ + W E s & Strip leading blank lines from the article body.\\ + W E e & Strip trailing blank lines from the article body.\\ + W E w & Remove leading {\bf whitespace} from all headers.\\ + \end{keys} + } + } + + \newcommand{\Picons}{% + {\esamepage + \begin{keys}{W D D} + W D s & (W g) Display {\bf smilies}.\\ + W D x & (W f) Look for and display any X-{\bf Face} headers.\\ + W D d & Display any Face headers.\\ + W D n & Toggle picons in {\bf Newsgroups} and Followup-To.\\ + W D m & Toggle picons in {\bf mail} headers (To and Cc).\\ + W D f & Toggle picons in {\bf From}.\\ + W D D & Remove all images from the article buffer.\\ + \end{keys} + } + } + + \newcommand{\TimeAndDate}{% + {\esamepage + \begin{keys}{W T u} + W T u & (W T z) Display the article timestamp in GMT ({\bf UT, ZULU}).\\ + W T i & Display the article timestamp in {\bf ISO} 8601.\\ + W T l & Display the article timestamp in the {\bf local} timezone.\\ + W T s & Display according to `gnus-article-time-format'.\\ + W T e & Display the time {\bf elapsed} since it was sent.\\ + W T o & Display the {\bf original} timestamp.\\ + W T p & Display the date in format that's {\bf + pronounceable} in English.\\ + \end{keys} + } + } + + \newcommand{\HideHighlightArticle}{% + {\esamepage + \begin{keys}{W W C-c} + W W a & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\ + W W h & Hide article {\bf headers}.\\ + W W b & Hide {\bf boring} headers.\\ + W W s & Hide {\bf signature}.\\ + W W l & Hide {\bf list} identifiers in subject-header.\\ + W W P & Hide {\bf PEM} (privacy enhanced messages).\\ + W W B & Hide banner specified by group parameter.\\ + W W c & Hide {\bf citation}.\\ + W W C-c & Hide {\bf citation} using a more intelligent algorithm.\\ + W W C & Hide cited text in articles that aren't roots.\\ + W H a & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\ + W H c & Highlight article {\bf citations}.\\ + W H h & Highlight article {\bf headers}.\\ + W H s & Highlight article {\bf signature}.\\ + \end{keys} + For all hiding-commands: A positive prefix always hides, and a negative + prefix will show what was previously hidden. + }} + + \newcommand{\MIMEArticleMode}{% + {\esamepage + \begin{keys}{RET} + RET & (BUTTON-2) Toggle display of the MIME object.\\ + v & Prompt for a method and then view object using this method.\\ + o & Prompt for a filename and save the MIME object.\\ + C-o & Prompt for a filename to save the MIME object to and remove it.\\ + d & {\bf Delete} the MIME object.\\ + c & {\bf Copy} the MIME object to a new buffer and display this buffer.\\ + i & Display the MIME object in this buffer.\\ + C & Copy the MIME object to a new buffer and display this buffer using {\bf Charset} \\ + E & View internally. \\ + e & View {\bf externally}. \\ + t & View the MIME object as a different {\bf type}.\\ + p & {\bf Print} the MIME object.\\ + $\mid$ & Pipe the MIME object to a process.\\ + . & Take action on the MIME object.\\ + \end{keys} + } + } + + %% end of article mode for reading .......................................... + + \newcommand{\MarkArticlesGeneral}{% formerly \Msubmap + {\esamepage + \begin{keys}{M M-C-r} + d & (M d, M r) Mark this article as read and move to the next one. + [scope]\\ + D & Mark this article as read and move to the previous one. [scope]\\ + ! & (u, M !, M t) Tick this article (mark it as interesting) and move + to the next one. [scope]\\ + U & Tick this article and move to the previous one. [scope]\\ + M ? & (?) Mark this article as dormant (only followups are + interesting). [scope]\\ + M D & Show all {\bf dormant} articles (normally they are hidden unless they + have any followups).\\ + M M-D & Hide all {\bf dormant} articles.\\ + C-w & Mark all articles between point and mark as read.\\ + M-u & (M SPC, M c) Clear all marks from this article and move to the next + one. [scope]\\ + M-U & Clear all marks from this article and move to the previous one. + [scope]\\ + % + M e & (E, M x) Mark this article as {\bf expirable}. [scope]\\ + % + M k & (k) {\bf Kill} all articles with the same subject then select the + next unread one.\\ + M K & (C-k) {\bf Kill} all articles with the same subject as this one.\\ + % + M C & {\bf Catch-up} the articles that are not ticked and not dormant.\\ + M C-c & {\bf Catch-up} all articles in this group.\\ + M H & {\bf Catch-up} (mark read) this group to point (to-{\bf here}).\\ + % + M b & Set a {\bf bookmark} in this article.\\ + M B & Remove the {\bf bookmark} from this article.\\ + % + M M-r & (x) Expunge all {\bf read} articles from this group.\\ + M M-C-r & Expunge all articles having a given mark.\\ + M S & (C-c M-C-s) {\bf Show} all expunged articles.\\ + M M C-h & Displays some more keys doing ticking slightly differently.\\ + \end{keys} + The variable `gnus-summary-goto-unread' controls what happens after a mark + has been set (C-x C-i g Setting Marks RET) + }} + + \newcommand{\MarkByScore}{% + \begin{keys}{M V m} + M V c & {\bf Clear} all marks from all high-scored articles. [score]\\ + M V k & {\bf Kill} all low-scored articles. [score]\\ + M V m & Mark all high-scored articles with a given {\bf mark}. [score]\\ + M V u & Mark all high-scored articles as interesting (tick them). [score]\\ + \end{keys} + } + } + +\newcommand{\ProcessMark}{% + {\esamepage + These commands set and remove the process mark (\#). You only need to use + it if the set of articles you want to operate on is non-contiguous. Else + use a numeric prefix.\\* + \begin{keys}{M P R} + M P p & (\#, M \#) Mark this article.\\ + M P u & (M-\#, M M-\#) \textbf{unmark} this article.\\ + M P b & Mark all articles in {\bf buffer}.\\ + M P r & Mark all articles in the {\bf region}.\\ + M P g & Unmark all articles in the region.\\ + M P R & Mark all articles matching a {\bf regexp}.\\ + M P G & Unmark all articles matching a regexp.\\ + M P t & Mark all articles in this (sub){\bf thread}.\\ + M P T & Unmark all articles in this (sub){\bf thread}.\\ + M P s & Mark all articles in the current {\bf series}.\\ + M P S & Mark all {\bf series} that already contain a marked article.\\ + M P a & Mark {\bf all} articles (in series order).\\ + M P U & \textbf{unmark} all articles.\\ + M P i & {\bf Invert} the list of process-marked articles.\\ + M P k & Push the current process-mark set onto stack and unmark + all articles.\\ + M P y & Pop process-mark set from stack and restore it.\\ + M P w & Push process-mark set on the stack.\\ + M P v & Mark all articles with score over the default score. [Prefix: score]\\ + \end{keys} + } + } + +\newcommand{\Limiting}{% + {\esamepage + \begin{keys}{/M} + // & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\ + /a & Limit the summary-buffer to articles matching {\bf author}.\\ + /x & Limit depending on ``extra'' headers.\\ + /u & (x) Limit to {\bf unread} articles. + [Prefix: also exclude ticked and dormant articles]\\ + /. & Limit to unseen articles.\\ + /m & Limit to articles marked with specified {\bf mark}.\\ + /t & Ask for a number and exclude articles younger than that many days. + [Prefix: exclude older articles]\\ + /n & Limit to current article. [p/p]\\ + /w & Pop the previous limit off the stack and restore it. + [Prefix: pop all limits]\\ + /v & Limit to score. [score]\\ + /E & (M S) Include all expunged articles in the limit.\\ + /D & Include all dormant articles in the limit.\\ + /* & Limit to cached articles.\\ + Y C & Include all cached articles in the limit.\\ + /d & Exclude all dormant articles from the limit.\\ + /M & Exclude all marked articles.\\ + /T & Include all articles from the current thread in the limit.\\ + /c & Exclude all dormant articles that have no children from the limit.\\ + /C & Mark all excluded unread articles as read. + [Prefix: also mark ticked and dormant articles]\\ + /o & Insert all {\bf old} articles. [Prefix: how many]\\ + /N & Insert all {\bf new} articles.\\ + /p & Limit to articles {\bf predicated} in the `display' group parameter.\\ + % /r & Limit to {\bf replied} articles. [Prefix: unreplied]\\ % No Gnus + \end{keys} + } + } + +\newcommand{\OutputArticles}{% formerly \Osubmap + {\esamepage + \begin{keys}{O m} + O o & (o, C-o) Save this article using the default article saver. [p/p]\\ + O b & Save this article's {\bf body} in plain file format [p/p]\\ + O f & Save this article in plain {\bf file} format. [p/p]\\ + O F & like O f, but overwrite file's contents. [p/p]\\ + O h & Save this article in {\bf mh} folder format. [p/p]\\ + O m & Save this article in {\bf mail} format. [p/p]\\ + O r & Save this article in {\bf rmail} format. [p/p]\\ + O v & Save this article in {\bf vm} format. [p/p]\\ + O p & ($\mid$) {\bf Pipe} this article to a shell command. [p/p]\\ + O P & \textbf{Print} this article using Muttprint. [p/p]\\ + \end{keys} + } + } + +\newcommand{\PostReplyetc}{% formerly \Ssubmap + {\esamepage + These commands put you in a separate news or mail buffer. See the section + about composing messages for more information.\\* + %After + %editing the article, send it by pressing C-c C-c. If you are in a + %foreign group and want to post the article using the foreign server, give + %a prefix to C-c C-c.\\* + \begin{keys}{S O m} + S p & (a) {\bf Post} an article to this group.\\ + S f & (f) Post a {\bf followup} to this article.\\ + S F & (F) Post a {\bf followup} and include the original. [p/p]\\ + S o p & Forward this article as a {\bf post} to a newsgroup.\\ + S M-c & Send a complaint about excessive crossposting to the author of this + article. [p/p]\\ + % + S m & (m) Send a {\bf mail} to some other person.\\ + S r & (r) Mail a {\bf reply} to the author of this article.\\ + S R & (R) Mail a {\bf reply} and include the original. [p/p]\\ + S B r & Like S r but ignore the Reply-To: header.\\ + S B R & Like S R but ignore the Reply-To: header.\\ + S w & Mail a {\bf wide} reply to this article.\\ + S W & Mail a {\bf wide} reply to this article and include + the original.\\ + S v & Mail a {\bf very} wide reply to this article.\\ + S V & Mail a {\bf very} wide reply to this article and include the original.\\ + S o m & (C-c C-f) Forward this article by {\bf mail} to a person.\\ + S D b & Resend {\bf bounced} mail.\\ + S D r & {\bf Resend} mail to a different person.\\ + S D e & {\bf Edit} and resend.\\ + % + S n & Post a followup via {\bf news} even if you got the message + through mail.\\ + S N & Post a followup via {\bf news} and include the original mail. + [p/p]\\ + % + S c & (C) {\bf Cancel} this article (only works if it is + your own). [p/p]\\ + S s & {\bf Supersede} this article with a new one (only for own + articles).\\ + % + S O m & Digest these series and forward by {\bf mail}. [p/p]\\ + S O p & Digest these series and forward as a {\bf post} to a newsgroup. + [p/p]\\ + % + S u & {\bf Uuencode} a file and post it as a series.\\ + \end{keys} + If you want to cancel or supersede an article you just posted (before it + has appeared on the server), go to the *post-news* buffer, change + `Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c. + }} + +\newcommand{\Threading}{% formerly \Tsubmap + {\esamepage + \begin{keys}{T M-\#} + T \# & Mark this thread with the process mark.\\ + T M-\# & Remove process-marks from this thread.\\ + % + T t & Re-{\bf thread} the current article's thread.\\ + T \^{} & Make the current article child of the marked (or previous) article.\\ + % movement + T n & (M-C-f, M-down) Go to the {\bf next} thread. [distance]\\ + T p & (M-C-b, M-up) Go to the {\bf previous} thread. [distance]\\ + T d & {\bf Descend} this thread. [distance]\\ + T u & Ascend this thread ({\bf up}-thread). [distance]\\ + T o & Go to the top of this thread.\\ + % + T s & {\bf Show} the thread hidden under this article.\\ + T h & {\bf Hide} this (sub)thread.\\ + % + T i & {\bf Increase} the score of this thread.\\ + T l & (M-C-l) {\bf Lower} the score of this thread.\\ + % + T k & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix: + tick it, positive prefix: unmark it.]\\ + % + T H & {\bf Hide} all threads.\\ + T S & {\bf Show} all hidden threads.\\ + T T & (M-C-t) {\bf Toggle} threading.\\ + \end{keys} + } + } + +\newcommand{\Scoring}{% formerly \Vsubmap + {\esamepage + Read about Adaptive Scoring in the online info.\\* + \begin{keys}{\bf A p m l} + V a & {\bf Add} a new score entry, specifying all elements.\\ + V c & Specify a new score file as {\bf current}.\\ + V e & {\bf Edit} the current score alist.\\ + V f & Edit a score {\bf file} and make it the current one.\\ + V m & {\bf Mark} all articles below a given score as read.\\ + V s & Set the {\bf score} of this article.\\ + V t & Display all score rules applied to this article ({\bf track}).\\ + W w & List {\bf words} used in scoring.\\ + V x & {\bf Expunge} all low-scored articles. [score]\\ + V C & {\bf Customize} the current score file through a user-friendly + interface.\\ + V F & {\bf Flush} the cache of score files.\\ + V R & {\bf Re-score} the summary buffer.\\ + V S & Display the {\bf score} of this article.\\ + \bf A p m l& Make a scoring entry based on this article.\\ + \end{keys} + The four letters stand for:\\* + \quad \B{A}ction: I)ncrease, L)ower;\\* + \quad \B{p}art: a)uthor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines, + message-i)d, t)references (parent), f)ollowup, b)ody, h)ead (all headers);\\* + \quad \B{m}atch type:\\* + \qquad string: s)ubstring, e)xact, r)egexp, f)uzzy,\\* + \qquad date: b)efore, a)t, n)this,\\* + \qquad number: $<$, =, $>$;\\* + \quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate. + + If you type the second letter in uppercase, the remaining two are assumed + to be s)ubstring and t)emporary. + If you type the third letter in uppercase, the last one is assumed to be + t)emporary. + + \quad Extra keys for manual editing of a score file:\\* + \begin{keys}{C-c C-c} + C-c C-c & Finish editing the score file.\\ + C-c C-d & Insert the current {\bf date} as number of days.\\ + \end{keys} + } + } + +\newcommand{\ExtractSeries}{% formerly \Xsubmap + {\esamepage + Gnus recognizes if the current article is part of a series (multipart + posting whose parts are identified by numbers in their subjects, e.g.{} + 1/10\dots10/10) and processes the series accordingly. You can mark and + process more than one series at a time. If the posting contains any + archives, they are expanded and gathered in a new group.\\* + \begin{keys}{X p} + X b & Un-{\bf binhex} these series. [p/p]\\ + X o & Simply {\bf output} these series (no decoding). [p/p]\\ + X p & Unpack these {\bf postscript} series. [p/p]\\ + X s & Un-{\bf shar} these series. [p/p]\\ + X u & {\bf Uudecode} these series. [p/p]\\ + \end{keys} + + Each one of these commands has four variants:\\* + \begin{keys}{X v \bf Z} + X \bf z & Decode these series. [p/p]\\ + X \bf Z & Decode and save these series. [p/p]\\ + X v \bf z & Decode and view these series. [p/p]\\ + X v \bf Z & Decode, save and view these series. [p/p]\\ + \end{keys} + where {\bf z} or {\bf Z} identifies the decoding method (b, o, p, s, u). + + An alternative binding for the most-often used of these commands is\\* + \begin{keys}{C-c C-v C-v} + C-c C-v C-v & (X v u) Uudecode and view these series. [p/p]\\ + \end{keys} + }} + +\newcommand{\ExitSummary}{% formerly \Zsubmap + {\esamepage + \begin{keys}{Z G} + Z Z & (q, Z Q) Exit this group.\\ + Z E & (Q) {\bf Exit} without updating the group information.\\ + % + Z c & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\ + Z C & Mark all articles as read ({\bf catch-up}) and exit.\\ + % + Z n & Mark all articles as read and go to the {\bf next} group.\\ + Z N & Exit and go to {\bf the} next group.\\ + Z P & Exit and go to the {\bf previous} group.\\ + % + Z G & (M-g) Check for new articles in this group ({\bf get}).\\ + Z R & (C-x C-s) Exit this group, and then enter it again ({\bf reenter}). + [Prefix: select all articles, read and unread.]\\ + Z s & Update and save the dribble buffer. [Prefix: save .newsrc* as well]\\ + \end{keys} + } + } + +\newcommand{\MsgCompositionGeneral}{% + Press C-c ? in the composition-buffer to get this information.\\* + {\esamepage + \begin{keys}{C-c C-m} + % sending + C-c C-c & Send message and exit. [Prefix: send via foreign server]\\ + C-c C-s & Send message. [Prefix: send via foreign server]\\ + C-c C-d & Don't send message (save as \textbf{draft}).\\ + C-c C-k & \textbf{Kill} message-buffer.\\ + C-c C-m & {\bf Mail} reply to the address near point. + [Prefix: include the original]\\ + % modify headers/body + C-c C-o & Sort headers.\\ + C-c C-e & \textbf{Elide} region.\\ + C-c C-v & Kill everything outside region.\\ + C-c C-r & Do a \textbf{Rot-13} on the body.\\ + C-c C-w & Insert signature (from `message-signature-file').\\ + C-c C-z & Kill everything up to signature.\\ + C-c C-y & \textbf{Yank} original message.\\ + C-c C-q & Fill the yanked message.\\ + C-c M-C-y & \textbf{Yank} a buffer and quote it.\\ + M-RET & Insert four newlines and format quoted text. [Prefix: + justify as well]\\ + C-c M-r & \textbf{Rename} message buffer. [Prefix: ask for new name]\\ + \end{keys} + } + } + +\newcommand{\MsgCompositionMovementArticle}{% + The following functions create the header-field if necessary.\\* + {\esamepage + \begin{keys}{C-c C-f C-u} + C-c TAB & Move to \textbf{signature}.\\ + C-c C-b & Move to \textbf{body}.\\ + C-c C-f C-t & (C-c C-t) Move to \textbf{To:}.\\ + C-c C-f C-c & Move to \textbf{Cc:}.\\ + C-c C-f C-b & Move to \textbf{Bcc:}.\\ + C-c C-f C-w & Move to \textbf{Fcc:}.\\ + C-c C-f C-s & Move to \textbf{Subject:}.\\ + C-c C-f C-r & Move to \textbf{Reply-To:}.\\ + C-c C-f C-f & Move to \textbf{Followup-To:}.\\ + C-c C-f C-n & (C-c C-n) Move to \textbf{Newsgroups:}.\\ + C-c C-f C-u & Move to \textbf{Summary:}.\\ + C-c C-f C-k & Move to \textbf{Keywords:}.\\ + C-c C-f C-d & Move to \textbf{Distribution:}.\\ + C-c C-f C-m & Move to \textbf{Mail-Followup-To:}.\\ + C-c C-f C-o & Move to \textbf{From:}.\\ + C-c C-f C-a & Insert a reasonable \textbf{Mail-Followup-To:} for + an unsubscribed list. [Prefix: include addresses in \textbf{Cc:}]\\ + C-c C-f TAB & (C-c C-u) Move to \textbf{Importance:}.\\ + C-c M-n & Insert \textbf{Disposition-Notification-To:} + (request receipt).\\ + \end{keys} + } + } + +\newcommand{\MsgCompositionMML}{% + {\esamepage + \begin{keys}{C-c C-m P} + C-c C-m f & (C-c C-a) Attach \textbf{file}.\\ + C-c C-m b & Attach contents of \textbf{buffer}.\\ + C-c C-m e & Attach \textbf{external} file (ftp..).\\ + C-c C-m P & Create MIME-\textbf{preview} (new + buffer). [Prefix: show raw MIME preview]\\ + C-c C-m v & \textbf{Validate} article.\\ + C-c C-m p & Insert \textbf{part}.\\ + C-c C-m m & Insert \textbf{multi}-part.\\ + C-c C-m q & \textbf{Quote} region.\\ + C-c C-m c s & Encrypt message using \textbf{S/MIME}.\\ + C-c C-m c o & Encrypt message using PGP.\\ + C-c C-m c p & Encrypt message using \textbf{PGP/MIME}.\\ + C-c C-m s s & Sign message using \textbf{S/MIME}.\\ + C-c C-m s o & Sign message using PGP.\\ + C-c C-m s p & Sign message using \textbf{PGP/MIME}.\\ + C-c C-m C-n & Remove security related MML tags from message.\\ + % TODO: narrow headers (C-c C-m n) ? + \end{keys} + } + } + +%% TODO: +\newcommand{\ServerMode}{% + {\esamepage + To enter this mode, press \^{} while in Group mode.\\* + \begin{keys}{SPC} + SPC & (RET) Browse this server.\\ + a & {\bf Add} a new server.\\ + c & {\bf Copy} this server.\\ + e & {\bf Edit} a server.\\ + k & {\bf Kill} this server. [scope]\\ + l & {\bf List} all servers.\\ + q & Return to the group buffer ({\bf quit}).\\ + s & Request that the server scan its sources for new articles.\\ + g & Request that the server regenerate its data.\\ + y & {\bf Yank} the previously killed server.\\ + O & Try to {\bf open} a connection to this server.\\ + C & {\bf Close} connection to this server.\\ + D & Mark this server as unreachable ({\bf deny}).\\ + M-o & {\bf Open} the connection to all servers.\\ + M-c & {\bf Close} the connection to all servers.\\ + R & Make all denied servers into closed servers.\\ + L & Set server status to offline.\\ + \end{keys} + } + } + +\newcommand{\BrowseServer}{% + {\esamepage + To enter this mode, press `B' while in Group mode.\\* + \begin{keys}{RET} + RET & Enter the current group.\\ + SPC & Enter the current group and display the first article.\\ + ? & Give a very short help message.\\ + n & Go to the {\bf next} group. [distance]\\ + p & Go to the {\bf previous} group. [distance]\\ + q & (l) {\bf Quit} browse mode.\\ + u & Subscribe to the current group. [scope]\\ + \end{keys} + } + } + +\newcommand{\GroupUnplugged}{% + {\esamepage + \begin{keys}{J S} + J j & Toggle plugged-state.\\ + J s & Fetch articles from all groups for offline-reading.\\ + J u & Fetch all eligible articles from this group.\\ + J S & \textbf{Send} all sendable messages in the drafts group.\\ + % + J c & Enter \textbf{category} buffer.\\ + J a & \textbf{Add} this group to an Agent category [p/p].\\ + J r & \textbf{Remove} this group from its Agent category [p/p].\\ + J Y & Synchronize flags changed while unplugged with remote server.\\ + \end{keys} + } + } + +\newcommand{\SummaryUnplugged}{% + {\esamepage + \begin{keys}{J M-\#} + J \# & \textbf{Mark} the article for downloading.\\ + J M-\# & \textbf{Unmark} the article for downloading.\\ + @ & \textbf{Toggle} whether to download the article.\\ + J c & Mark all undownloaded articles as read (\textbf{catch-up}).\\ + J u & Download all downloadable articles from group.\\ + \end{keys} + } + } + +\newcommand{\ServerUnplugged}{% + {\esamepage + \begin{keys}{J a} + J a & \textbf{Add} the current server to the list of servers covered + by the agent.\\ + J r & \textbf{Remove} the current server from the list of servers covered + by the agent.\\ + \end{keys} + } + } + +% end {gnusref} % % % % % % % % % % % % % % % % % % % % % % % % % % + + +% o some things might not be updated: scoring and server modes, maybe more +% o Gnus Unplugged category-buffer commands need to be written + +\begin{document} + +\def\progver{5.10}\def\refver{5.10-1} % program and refcard versions +\def\date{Jan 10th, 2004} +\def\author{Gnus Bugfixing Girls + Boys $<$bugs@gnus.org$>$} + +\ifthenelse{\isundefined{\booklettrue}}{ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \raggedbottom\raggedright + \twocolumn + % use \tiny to shrink it to 4 pages (needs a high-resolution printer though) + % \tiny + \scriptsize + \pagestyle{plain} + \Title + \par + \Logo{refcard} +}{ + \setcounter{page}{0} + \thispagestyle{empty} + \vspace*{\fill} + \Title + \vspace{0.4in} + \Logo{booklet} + \vspace*{\fill} + \pagebreak +}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% TODO: how does this work ? +%\tableofcontents + +\Notes +% + +\section*{Group-Mode} +\GroupModeGeneral + \subsection*{Group Subscribedness-Levels} + \GroupLevels + \subsection*{List Groups} + \ListGroups + \subsection*{Create/Edit Foreign Groups} + \CreateEditGroups + \subsection*{Unsubscribe, Kill and Yank Groups} + \SubscribeKillYankGroups + \subsection*{Mark Groups} + \MarkGroups + \subsection*{Group-Unplugged} + \GroupUnplugged +% topics in group-mode + \subsection*{Group Topics} + \GroupTopicsGeneral + \subsubsection*{Topic Sorting} + \TopicSorting + +% \ifthenelse{\isundefined{\booklettrue}}{}{\pagebreak} + +% summary-mode +\section*{Summary Mode} +\SummaryModeGeneral + \subsection*{Select Articles} + \SelectArticles +% + \subsection*{Threading} + \Threading +% + \subsection*{Limiting} + \Limiting + \subsection*{Sort the Summary-Buffer} + \SortSummary + \subsection*{Score (Value) Commands} + \Scoring + +\ifthenelse{\isundefined{\booklettrue}}{% ifcard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \subsection*{Output Articles} + \OutputArticles + \subsection*{Extract Series (Uudecode etc)} + \ExtractSeries +}{}%ifcard% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + \subsection*{MIME operations from the Summary-Buffer} + \MIMESummary + +\ifthenelse{\isundefined{\booklettrue}}{}{% ifbooklet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \subsection*{Extract Series (Uudecode etc)} + \ExtractSeries + \subsection*{Output Articles} + \OutputArticles +}%ifbooklet% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% + \subsection*{Post, Followup, Reply, Forward, Cancel} + \PostReplyetc + +\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% newpage ifcard + + \subsection*{Message Composition} + + \MsgCompositionGeneral + \subsubsection*{Jumping in message-buffer} + \MsgCompositionMovementArticle + \subsubsection*{Attachments/MML} + \MsgCompositionMML +% marking articles + \subsection*{Mark Articles} + \MarkArticlesGeneral + \subsubsection*{Mark Based on Score} + \MarkByScore + \subsubsection*{The Process Mark} + \ProcessMark + \subsubsection*{Mark Indication-Characters} + \MarkCharacters +% +\ifthenelse{\isundefined{\booklettrue}}{\newpage}{}% + + \subsection*{Summary-Unplugged} + \SummaryUnplugged + \subsection*{Mail-Group Commands} + \MailGroups + \subsection*{Draft-Group Commands} + \DraftGroup +% exiting + \subsection*{Exit the Summary-Buffer} + \ExitSummary +% +% +\section*{Article Mode (reading)} +\ArticleModeGeneral + \subsection*{Wash the Article-Buffer} + \WashArticle + \subsubsection*{Blank Lines and Whitespace} + \BlankAndWhitespace + \subsubsection*{Picons, X-faces, Smileys} + \Picons + \subsubsection*{Time and Date} + \TimeAndDate + \subsection*{Hide/Highlight Parts of the Article} + \HideHighlightArticle + \subsection*{MIME operations from the Article-Buffer (reading)} + \MIMEArticleMode +% +% +\section*{Server Mode} +\ServerMode + \subsection*{Unplugged-Server} + \ServerUnplugged +% +% +\section*{Browse Server Mode} +\BrowseServer + +%\pagebreak +\vspace*{\fill} +\Copyright + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% End: + +% arch-tag: be438b0e-6832-4afb-8c56-5f84743e5cd1 diff -r 45e5f0224d81 -r 360860a0006f lisp/ChangeLog --- a/lisp/ChangeLog Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/ChangeLog Mon Apr 04 16:43:15 2005 +0000 @@ -1,3 +1,482 @@ +2005-04-04 Lute Kamstra + + * autorevert.el (auto-revert-mode): Specify :group. + * battery.el (display-battery-mode): Specify :group. + * diff-mode.el (diff-minor-mode): Specify :group. + * font-core.el (font-lock-mode): Specify :group. + * hl-line.el (hl-line-mode): Specify :group. + * iimage.el (iimage): New customization group. + (iimage-mode): Specify :group. + * longlines.el (longlines-mode): Specify :group. + * master.el: Don't require easy-mmode. + (master): New customization group. + (master-mode): Specify :group. + * msb.el (msb-mode): Specify :group. + * reveal.el (reveal-mode): Specify :group. + * simple.el (next-error-follow-minor-mode): Specify :group. + * smerge-mode.el (smerge-mode): Specify :group. + * emacs-lisp/eldoc.el (eldoc-mode): Specify :group. + * emulation/cua-base.el (cua-mode): Specify :group. + * international/encoded-kb.el (encoded-kbd-mode): Specify :group. + * language/thai-util.el (thai-auto-composition-mode) + (thai-word-mode): Specify :group. + * mail/supercite.el (sc-minor-mode): Specify :group. + * progmodes/cwarn.el (cwarn-mode): Specify :group. + * progmodes/flymake.el (flymake-mode): Specify :group. + * progmodes/glasses.el (glasses-mode): Specify :group. + * progmodes/hideif.el (hide-ifdef-mode): Specify :group. + * textmodes/enriched.el (enriched-mode): Specify :group. + * textmodes/refill.el (refill-mode): Specify :group. + + * add-log.el (change-log-font-lock-keywords): Names in + parenthesized lists can contain spaces. + +2005-04-04 Thien-Thi Nguyen + + * startup.el (fancy-splash-text): Shorten default text of + "Emacs Tutorial" line. Also, if the current language env + indicates an available tutorial file other than TUTORIAL, + extract its title and append it to the line in parentheses. + (fancy-splash-insert): If arg is a thunk, funcall it. + +2005-04-04 Jay Belanger + + * calc.el (calc-language-alist): Add tags to customization type. + +2005-04-03 Luc Teirlinck + + * xt-mouse.el (xterm-mouse-mode): Add explicit Custom group, mouse. + Doc fix. + +2005-04-03 Marcelo Toledo + + * add-log.el (change-log-font-lock-keywords): The manual + describing a Change Log entry, says: (...) "Aside from these + header lines, every line in the change log starts with a space or + a tab.". The font-lock was not highlighting lines started with + spaces, added support for it. + +2005-04-03 Roland Winkler + + * textmodes/bibtex.el (bibtex-url): Use format to generate the url. + (bibtex-generate-url-list): Update docstring accordingly. Put the + complex example in the docstring. + (bibtex-font-lock-url): Use pop. + +2005-04-03 Stefan Monnier + + * progmodes/tcl.el (tcl-set-font-lock-keywords): Use new \_< ops. + + * pcvs.el (cvs-checkout): Prompt for cvsroot as well. + +2005-04-03 Glenn Morris + + * filesets.el (filesets-set-default): Doc fix. + +2005-04-03 Lute Kamstra + + * generic.el (define-generic-mode): Add argument to specify + keywords for defcustom. + (default-generic-mode): Specify :group. + + * generic-x.el: Specify :group for all generic modes. + + * desktop.el (desktop-no-desktop-file-hook) + (desktop-after-read-hook): Fix docstring. + +2005-04-02 Luc Teirlinck + + * simple.el (visible-mode): Use explicit :group keyword. + This changes the group of `visible-mode-hook' from paren-blinking + to editing-basics. + +2005-04-02 Sergey Poznyakoff (tiny change) + + * mail/rmail.el (rmail-parse-url): Bugfix. Parse traditional + mailbox specifications as well as URLs. + (rmail-insert-inbox-text): Remove unused conditional branches. + +2005-04-01 Jay Belanger + + * calc/calc-graph.el (calc-gnuplot-name, calc-gnuplot-plot-command) + (calc-gnuplot-print-command): Move definitions to calc.el. + + * calc/calc-embed.el (calc-embedded-announce-formula) + (calc-embedded-open-formula, calc-embedded-close-formula) + (calc-embedded-open-word, calc-embedded-close-word) + (calc-embedded-open-plain, calc-embedded-close-plain) + (calc-embedded-open-new-formula, calc-embedded-close-new-formula) + (calc-embedded-open-mode, calc-embedded-close-mode): + Move definitions to calc.el. + + * calc/calc.el (calc-settings-file, calc-language-alist): + Make customizable. + (calc-embedded-announce-formula, calc-embedded-open-formula) + (calc-embedded-close-formula, calc-embedded-open-word) + (calc-embedded-close-word, calc-embedded-open-plain) + (calc-embedded-close-plain, calc-embedded-open-new-formula) + (calc-embedded-close-new-formula, calc-embedded-open-mode) + (calc-embedded-close-mode, calc-gnuplot-name) + (calc-gnuplot-plot-command, calc-gnuplot-print-command): Move here + from other files and make customizable. + +2005-04-01 Stefan Monnier + + * pcvs.el (cvs-temp-buffer, cvs-mode-kill-process, cvs-buffer-check): + Use buffer-live-p. + (cvs-mode-run): Don't call cvs-update-header here. + (cvs-run-process): Call cvs-update-header. + Use process properties for cvs-postprocess and cvs-buffer so that + the sentinel can behave better if the temp buffer is killed. + Use a pipe rather than a tty, to better handle unexpected prompts. + (cvs-sentinel): Rewrite. Call cvs-update-header. + +2005-04-01 Andre Spiegel + + * vc-hooks.el (vc-workfile-unchanged-p): Disable mtime check when + we go via Tramp or Ange-FTP. Suggested by Kai Grossjohann. + +2005-03-31 Stefan Monnier + + * generic.el (define-generic-mode): Add indentation rule. + +2005-03-31 Luc Teirlinck + + * files.el (mode-require-final-newline): Make Custom correctly + report a nil value and allow to set it to nil via Custom. + Doc fix. + +2005-04-01 Kenichi Handa + + * international/characters.el: Enable the correct case setting for + dotless-i and dotted-I. + +2005-04-01 Kim F. Storm + + * ido.el (ido-file-internal): Fall back to non-ido command if + initial directory is on slow ftp (or tramp) host. + +2005-03-31 Richard M. Stallman + + * emacs-lisp/autoload.el (make-autoload): + Handle define-global-minor-mode. + + * emacs-lisp/easy-mmode.el (define-global-minor-mode): + Rename from easy-mmode-define-global-mode. + (easy-mmode-define-global-mode): Alias for define-global-minor-mode. + + * progmodes/scheme.el (scheme-mode-syntax-table): + Update syntax of | and # for two-character comment syntax. + +2005-03-31 Lute Kamstra + + * emacs-lisp/easy-mmode.el (easy-mmode-define-global-mode) + (define-minor-mode): Call custom-current-group at load-time. + + * generic.el (define-generic-mode): Add debug declaration. + Add defcustom for the mode hook. + (generic-mode-internal): Use run-mode-hooks. + +2005-03-31 Kim F. Storm + + * mouse.el (mouse-1-click-follows-link): Increase to 450 ms. + (mouse-fixup-help-message): New defun called by show_help_echo + to fixup mouse-2 prefix in help messages when applicable. + + * tooltip.el (tooltip-show-help-function): Don't fixup message here. + +2005-03-31 Kenichi Handa + + * language/thai-word.el (thai-find-word-ends): Pay attention to + the case that we reach the end of buffer. + + * textmodes/fill.el (fill-text-properties-at): New function. + (fill-newline): Use fill-text-properties-at instead of + text-properties-at. + +2005-03-31 Karl Berry + + * textmodes/tex-mode.el (tex-compile): shell-quote-argument, + not comint-quote-filename. + +2005-03-31 Olive Lin (tiny change) + + * textmodes/tex-mode.el (tex-start-tex) shell-quote-argument, + not comint-quote-filename. + +2005-03-31 Thien-Thi Nguyen + + * help-fns.el (help-with-tutorial): Revert last change. + +2005-03-31 Kim F. Storm + + * emulation/cua-base.el (cua-scroll-down): Add CUA property. + +2005-03-30 Paul Eggert + + * calendar/cal-china.el: Update reference to "Calendrical + Calculations" book; there's a new edition. + * calendar/cal-coptic.el: Likewise. + * calendar/cal-french.el: Likewise. + * calendar/cal-hebrew.el: Likewise. + * calendar/cal-islam.el: Likewise. + * calendar/cal-iso.el: Likewise. + * calendar/cal-julian.el: Likewise. + * calendar/cal-mayan.el: Likewise. + * calendar/cal-persia.el: Likewise. + * calendar/calendar.el: Likewise. + * calendar/holidays.el: Likewise. + * calendar/lunar.el: Likewise. + * calendar/solar.el: Likewise. + + * calendar/calendar.el (calendar-day-abbrev-array): Remove trailing + white space from doc string. + +2005-03-30 Jay Belanger + + * calc/calc-help.el (calc-full-help): Remove email address. + +2005-03-30 Thien-Thi Nguyen + + * help-fns.el (help-with-tutorial): Delete title line. + +2005-03-30 Glenn Morris + + * calendar/cal-x.el (calendar-one-frame-setup) + (calendar-only-one-frame-setup, calendar-two-frame-setup): Use t + rather than 'symbol for set-window-dedicated-p. + + * calendar/appt.el (appt-buffer-name): Make it a constant. + (appt-add): Doc fix. + + * filesets.el (filesets-menu-path, filesets-menu-before) + (filesets-menu-in-menu): Doc fix. Now valid in GNU Emacs. + (filesets-menu-cache-file): Use directory ~/.emacs.d. + (filesets-add-submenu): Delete and use add-submenu instead. + +2005-03-30 Carsten Dominik + + * org.el (org-agenda-phases-of-moon, org-agenda-sunrise-sunset) + (org-agenda-convert-date, org-agenda-goto-calendar): New commands. + (org-diary-default-entry): New function. + (org-get-entries-from-diary): Better parsing of diary entries. + (org-agenda-check-no-diary): New function. + ("diary-lib"): Advice to function `add-to-diary-list', to allow + linking to diary entries. + (org-agenda-execute-calendar-command): New function. + (org-agenda): Improve visible section in window. + Use `org-fit-agenda-window'. + (org-fit-agenda-window): New option. + (org-move-subtree-down): Better handling of empty lines + at end of subtree. + (org-cycle): Numeric prefix is interpreted now as show-subtree N + levels up. + (org-fontify-done-headline): New option. + (org-headline-done-face): New face. + (org-set-font-lock-defaults): Use `org-headline-done-face'. + (org-table-copy-down): Rename from `org-table-copy-from-above'. + When current field is non-empty, it is copied to next row. + (org-table-copy-from-above): Fix bug which made it + impossible to copy fields containing only a single non-white character. + +2005-03-30 Kim F. Storm + + * kmacro.el (kmacro-end-macro): Isearch may store this command + into the macro -- so ignore it when executing keyboard macro. + +2005-03-30 Nick Roberts + + * tooltip.el (tooltip-gud-display): Use gud-overlay-arrow-position. + +2005-03-29 Kenichi Handa + + * language/thai.el ("Thai"): Set setup-function and exit-function + for Thai language environment. + + * language/thai-util.el: Require thai-word. + (thai-word-mode-map): New variable. + (thai-word-mode): New minor mode. + (setup-thai-language-environment-internal): New function. + (exit-thai-language-environment-internal): New function. + + * language/thai-word.el (thai-word-table): Declare it by defvar, + use dolist to initialize it. + (thai-kill-word, thai-backward-kill-word, thai-transpose-words) + (thai-fill-find-break-point): New functions. + +2005-03-29 Richard M. Stallman + + * simple.el (idle-update-delay): Move definition up. + (set-mark): Doc fix. + +2005-03-29 Chong Yidong + + * longlines.el: New file. + + * simple.el (buffer-substring-filters): New variable. + (filter-buffer-substring): New function. + (kill-region, copy-region-as-kill): Use it. + + * register.el (copy-to-register, append-to-register) + (prepend-to-register): Use filter-buffer-substring. + +2005-03-30 Nick Roberts + + * progmodes/gud.el (gdb): (Re)-initialise gud-filter-pending-text. + (gud-filter-pending-text): Move in front of gdb. + (gud-overlay-arrow-position): New variable. + (gud-sentinel, gud-display-line): Use it in place of + overlay-arrow-position. + +2005-03-29 Glenn Morris + + * progmodes/fortran.el (fortran-if-indent): Doc fix. + (fortran-font-lock-keywords-2): Add "where", "elsewhere". + (fortran-font-lock-keywords-4): New variable. + (fortran-blocks-re, fortran-end-block-re) + (fortran-start-block-re): New constants, for hideshow. + (hs-special-modes-alist): Add a Fortran entry. + (fortran-mode-map): Bind fortran-end-of-block, + fortran-beginning-of-block to \M-\C-n, \M-\C-p. + (fortran-mode): Doc fix. Add fortran-font-lock-keywords-4. + (fortran-looking-at-if-then, fortran-end-of-block) + (fortran-beginning-of-block): New functions, for hideshow. + + * progmodes/f90.el (f90-end-block-re, f90-start-block-re): Doc + fix. Tweak regexp. + (f90-beginning-of-block): Push mark first. + +2005-03-29 Jay Belanger + + * calc/calc.el: Update copyright date. + (calc-version): Increase to 2.1. + (calc-version-date): Remove. + + * calc/calc-help.el: Update copyright date. + (calc-full-help): Remove reference to calc-version-date. + Update copyright date. + +2005-03-29 Stefan Monnier + + * vc.el (vc-do-command): Use a pipe for async processes, so password + prompts don't show up at places where the user can't reply. + +2005-03-29 Olive Lin (tiny change) + + * textmodes/tex-mode.el (tex-send-command): shell-quote-argument + on the file name we pass to the inferior shell. + +2005-03-29 Stephan Stahl (tiny change) + + * progmodes/which-func.el (which-function): Be robust in the face of an + imenu--make-index-alist failure. + +2005-03-29 Stefan Monnier + + * reveal.el (reveal-mode-map): Don't override C-a and C-e. + + * progmodes/python.el (python-preoutput-filter): Fix last change. + +2005-03-29 Lute Kamstra + + * emacs-lisp/debug.el (debug-on-entry): Handle autoloaded + functions and compiled macros. + (debug-convert-byte-code): Handle macros too. + (debug-on-entry-1): Don't signal an error when trying to clear a + function that is not set to debug on entry. + +2005-03-29 Jay Belanger + + * calc/calc-lang.el: Add functions to math-function-table + properties of tex and math. + +2005-03-29 Kenichi Handa + + * ps-mule.el (ps-mule-plot-string): Translate characters by + ps-print-translation-table. + (ps-mule-begin-job): Call find-charset-region/string with + ps-print-translation-table. + (ps-mule-printable-p): Return t if CHARSET is ascii or latin-iso8859-1. + + * ps-print.el (ps-print-translation-table): New variable. + (ps-plot-region): Translate characters by ps-print-translation-table. + +2005-03-29 Juri Linkov + + * simple.el (next-error-highlight-timer): New variable. + + * progmodes/compile.el (compilation-goto-locus): + Use `next-error-highlight-timer' instead of `sit-for'. + +2005-03-28 Stefan Monnier + + * mail/supercite.el (sc-mail-field): Use assoc-string. + (sc-get-address): Simplify regexps. + + * files.el (minibuffer-with-setup-hook): New macro. + (find-file-read-args): Use it to avoid let-binding + minibuffer-with-setup-hook (which breaks turning on/off + file-name-shadow-mode while in the prompt). + + * complete.el (PC-read-include-file-name-internal): Use test-completion. + +2005-03-28 Luc Teirlinck + + * font-lock.el: Bind `font-lock-fontify-block' to M-o M-o. + +2005-03-28 Stefan Monnier + + * window.el (window-buffer-height): Use count-screen-lines. + + * progmodes/python.el (python-preoutput-leftover): New var. + (python-preoutput-filter): Use it. + (python-send-receive): Loop until all the result has been received. + +2005-03-28 Juri Linkov + + * dired.el (dired-mode-map): Add ellipsis to "Compare directories". + + * menu-bar.el (menu-bar-file-menu): Remove ellipsis from + "Recover Crashed Session". + (menu-bar-search-menu): Add ellipsis to "Search tagged files". + (menu-bar-replace-menu): Add ellipsis to "Replace in tagged files". + (menu-bar-goto-menu): Add ellipsis to "Set Tags File Name". + (menu-bar-goto-menu): Add ellipsis to "Tags Apropos". + (menu-bar-options-menu): Add ellipsis to "Set Font/Fontset". + (menu-bar-manuals-menu): Add ellipsis to "Find Command in Manual". + (menu-bar-manuals-menu): Add ellipsis to "Find Key in Manual". + (menu-bar-help-menu): Remove ellipsis from "Find Emacs Packages". + + * ediff-hook.el (menu-bar-ediff-misc-menu, ediff-misc-menu): + Remove ellipsis from "Ediff Manual", "Customize Ediff", "List + Ediff Sessions", "Toggle use of separate control buffer frame", + "Use separate frame for Ediff control buffer". + + * bookmark.el (menu-bar-bookmark-map): Add ellipsis to "Jump to + Bookmark", "Set Bookmark", "Insert Contents", "Insert Location", + "Rename Bookmark", "Delete Bookmark". + + * info.el (Info-mode-menu): Remove ellipsis from "Index". + Add ellipsis to "Lookup a String", "Lookup a string in all indices". + Add `:active Info-index-alternatives' to "Next Matching Item". + + * wdired.el (wdired-change-to-wdired-mode): + Mention `wdired-abort-changes' key in the initial message. + + * international/mule.el (auto-coding-alist): Associate non-ascii + image filename extensions with `no-conversion'. + +2005-03-27 Stefan Monnier + + * international/iso-acc.el: + * obsolete/iso-acc.el: Move iso-acc to the obsolete subdir. + +2005-03-26 Luc Teirlinck + + * textmodes/sgml-mode.el (html-mode): Doc update. + + * autorevert.el (auto-revert-check-vc-info): Minor doc fix. + 2005-03-26 Dan Nicolaescu * term.el (term-move-columns): Fix face after extending a line. @@ -345,8 +824,7 @@ 2005-03-21 Lute Kamstra - * generic.el: Fix commentary section. Don't require cl for - compilation. + * generic.el: Fix commentary section. Don't require cl for compilation. (generic-mode-list): Add autoload cookie. (generic-use-find-file-hook, generic-lines-to-scan) (generic-find-file-regexp, generic-ignore-files-regexp) @@ -396,20 +874,27 @@ * tramp-smb.el (all): Remove debug construct for `with-parsed-tramp-file-name'. - (tramp-smb-prompt): Prompt can contain spaces inside directory - names. + (tramp-smb-prompt): Prompt can contain spaces inside directory names. (tramp-smb-handle-delete-directory, tramp-smb-handle-delete-file): No error message if DIRECTORY or FILENAME doesn't exist. (tramp-smb-open-connection): Check existence of `tramp-smb-program'. +2005-03-20 Stefan Monnier + + * progmodes/perl-mode.el (perl-font-lock-syntactic-face-function): + Properly handle the case where the `m' or `s' command's argument is not + yet terminated. + (perl-indent-new-calculate): New function. + (perl-indent-line): Use it. + 2005-03-20 Miles Bader * progmodes/gdb-ui.el (gdb-put-breakpoint-icon): Use breakpoint faces in text-mode too. Change to new face names. - (breakpoint-enabled): Renamed from `breakpoint-enabled-bitmap-face'. + (breakpoint-enabled): Rename from `breakpoint-enabled-bitmap-face'. Add `:weight bold' attribute. - (breakpoint-disabled): Renamed from `breakpoint-disabled-bitmap-face'. + (breakpoint-disabled): Rename from `breakpoint-disabled-bitmap-face'. 2005-03-19 Juri Linkov @@ -426,8 +911,7 @@ 2005-03-19 Yoichi NAKAYAMA (tiny changes) - * finder.el (finder-current-item): Throw an error on an empty - line. + * finder.el (finder-current-item): Throw an error on an empty line. * man.el (Man-follow-manual-reference): If current-word returns nil, use "". @@ -466,8 +950,8 @@ 2005-03-19 Vinicius Jose Latorre - * ps-print.el (ps-generate-string-list, ps-generate-header-line): Use - functionp instead of symbolp and fboundp. Reported by Drkm + * ps-print.el (ps-generate-string-list, ps-generate-header-line): + Use functionp instead of symbolp and fboundp. Reported by Drkm . (ps-print-version): New version 6.6.6. @@ -2290,7 +2774,7 @@ * simple.el (eval-expression-print-format): Avoid warning about edebug-active. -2005-01-15 "James R. Van Zandt" (Tiny change) +2005-01-15 James R. Van Zandt (Tiny change) * progmodes/sh-script.el: Code copied from make-mode.el with small changes, @@ -7012,8 +7496,7 @@ 2004-09-21 Kenichi Handa - * descr-text.el (describe-char): Checking of quail activation - fixed. + * descr-text.el (describe-char): Checking of quail activation fixed. 2004-09-21 Jay Belanger diff -r 45e5f0224d81 -r 360860a0006f lisp/add-log.el --- a/lisp/add-log.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/add-log.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,7 +1,7 @@ ;;; add-log.el --- change log maintenance commands for Emacs -;; Copyright (C) 1985, 86, 88, 93, 94, 97, 98, 2000, 03, 2004 -;; Free Software Foundation, Inc. +;; Copyright (C) 1985, 1986, 1988, 1993, 1994, 1997, 1998, 2000, 2003, +;; 2004, 2005 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: tools @@ -225,20 +225,20 @@ (2 'change-log-email-face))) ;; ;; File names. - ("^\t\\* \\([^ ,:([\n]+\\)" + ("^\\(?: +\\|\t\\)\\* \\([^ ,:([\n]+\\)" (1 'change-log-file-face) ;; Possibly further names in a list: ("\\=, \\([^ ,:([\n]+\\)" nil nil (1 'change-log-file-face)) ;; Possibly a parenthesized list of names: - ("\\= (\\([^() ,\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" + ("\\= (\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil (1 'change-log-list-face)) - ("\\=, *\\([^() ,\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" + ("\\=, *\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil (1 'change-log-list-face))) ;; ;; Function or variable names. - ("^\t(\\([^() ,\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" + ("^\t(\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" (1 'change-log-list-face) - ("\\=, *\\([^() ,\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil + ("\\=, *\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil (1 'change-log-list-face))) ;; ;; Conditionals. diff -r 45e5f0224d81 -r 360860a0006f lisp/autorevert.el --- a/lisp/autorevert.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/autorevert.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; autorevert.el --- revert buffers when files on disk change -;; Copyright (C) 1997, 1998, 1999, 2001, 2004 Free Software Foundation, Inc. +;; Copyright (C) 1997, 1998, 1999, 2001, 2004, 2005 Free Software Foundation, Inc. ;; Author: Anders Lindgren ;; Keywords: convenience @@ -246,7 +246,7 @@ control info every `auto-revert-interval' seconds. Nevertheless, it should not cause excessive CPU usage on a reasonably fast machine, if it does not apply to too many version controlled -buffers. CPU usage depends on the version control system" +buffers. CPU usage depends on the version control system." :group 'auto-revert :type 'boolean :version "22.1") @@ -290,7 +290,7 @@ Use `global-auto-revert-mode' to automatically revert all buffers. Use `auto-revert-tail-mode' if you know that the file will only grow without being changed in the part that is already in the buffer." - nil auto-revert-mode-text nil + :group 'auto-revert :lighter auto-revert-mode-text (if auto-revert-mode (if (not (memq (current-buffer) auto-revert-buffer-list)) (push (current-buffer) auto-revert-buffer-list)) diff -r 45e5f0224d81 -r 360860a0006f lisp/battery.el --- a/lisp/battery.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/battery.el Mon Apr 04 16:43:15 2005 +0000 @@ -114,7 +114,7 @@ `battery-mode-line-format' and `battery-status-function'. The mode line will be updated automatically every `battery-update-interval' seconds." - :global t + :global t :group 'battery (setq battery-mode-line-string "") (or global-mode-string (setq global-mode-string '(""))) (and battery-update-timer (cancel-timer battery-update-timer)) diff -r 45e5f0224d81 -r 360860a0006f lisp/bookmark.el --- a/lisp/bookmark.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/bookmark.el Mon Apr 04 16:43:15 2005 +0000 @@ -2111,12 +2111,12 @@ (define-key map [write] '("Save Bookmarks As..." . bookmark-write)) (define-key map [save] '("Save Bookmarks" . bookmark-save)) (define-key map [edit] '("Edit Bookmark List" . bookmark-bmenu-list)) - (define-key map [delete] '("Delete Bookmark" . bookmark-delete)) - (define-key map [rename] '("Rename Bookmark" . bookmark-rename)) - (define-key map [locate] '("Insert Location" . bookmark-locate)) - (define-key map [insert] '("Insert Contents" . bookmark-insert)) - (define-key map [set] '("Set Bookmark" . bookmark-set)) - (define-key map [jump] '("Jump to Bookmark" . bookmark-jump)) + (define-key map [delete] '("Delete Bookmark..." . bookmark-delete)) + (define-key map [rename] '("Rename Bookmark..." . bookmark-rename)) + (define-key map [locate] '("Insert Location..." . bookmark-locate)) + (define-key map [insert] '("Insert Contents..." . bookmark-insert)) + (define-key map [set] '("Set Bookmark..." . bookmark-set)) + (define-key map [jump] '("Jump to Bookmark..." . bookmark-jump)) map)) ;;;###autoload diff -r 45e5f0224d81 -r 360860a0006f lisp/calc/calc-embed.el --- a/lisp/calc/calc-embed.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calc/calc-embed.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; calc-embed.el --- embed Calc in a buffer -;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2005 Free Software Foundation, Inc. ;; Author: David Gillespie ;; Maintainer: Jay Belanger @@ -48,48 +48,18 @@ (defvar calc-embedded-some-active nil) (make-variable-buffer-local 'calc-embedded-some-active) -(defvar calc-embedded-open-formula "\\`\\|^\n\\|\\$\\$?\\|\\\\\\[\\|^\\\\begin[^{].*\n\\|^\\\\begin{.*[^x]}.*\n\\|^@.*\n\\|^\\.EQ.*\n\\|\\\\(\\|^%\n\\|^\\.\\\\\"\n" - "*A regular expression for the opening delimiter of a formula used by -calc-embedded.") - -(defvar calc-embedded-close-formula "\\'\\|\n$\\|\\$\\$?\\|\\\\]\\|^\\\\end[^{].*\n\\|^\\\\end{.*[^x]}.*\n\\|^@.*\n\\|^\\.EN.*\n\\|\\\\)\\|\n%\n\\|^\\.\\\\\"\n" - "*A regular expression for the closing delimiter of a formula used by -calc-embedded.") - -(defvar calc-embedded-open-word "^\\|[^-+0-9.eE]" - "*A regular expression for the opening delimiter of a formula used by -calc-embedded-word.") - -(defvar calc-embedded-close-word "$\\|[^-+0-9.eE]" - "*A regular expression for the closing delimiter of a formula used by -calc-embedded-word.") - -(defvar calc-embedded-open-plain "%%% " - "*A string which is the opening delimiter for a \"plain\" formula. -If calc-show-plain mode is enabled, this is inserted at the front of -each formula.") - -(defvar calc-embedded-close-plain " %%%\n" - "*A string which is the closing delimiter for a \"plain\" formula. -See calc-embedded-open-plain.") - -(defvar calc-embedded-open-new-formula "\n\n" - "*A string which is inserted at front of formula by calc-embedded-new-formula.") - -(defvar calc-embedded-close-new-formula "\n\n" - "*A string which is inserted at end of formula by calc-embedded-new-formula.") - -(defvar calc-embedded-announce-formula "%Embed\n\\(% .*\n\\)*" - "*A regular expression which is sure to be followed by a calc-embedded formula." ) - -(defvar calc-embedded-open-mode "% " - "*A string which should precede calc-embedded mode annotations. -This is not required to be present for user-written mode annotations.") - -(defvar calc-embedded-close-mode "\n" - "*A string which should follow calc-embedded mode annotations. -This is not required to be present for user-written mode annotations.") - +;; The following variables are customizable and defined in calc.el. +(defvar calc-embedded-announce-formula) +(defvar calc-embedded-open-formula) +(defvar calc-embedded-close-formula) +(defvar calc-embedded-open-word) +(defvar calc-embedded-close-word) +(defvar calc-embedded-open-plain) +(defvar calc-embedded-close-plain) +(defvar calc-embedded-open-new-formula) +(defvar calc-embedded-close-new-formula) +(defvar calc-embedded-open-mode) +(defvar calc-embedded-close-mode) (defconst calc-embedded-mode-vars '(("precision" . calc-internal-prec) ("word-size" . calc-word-size) diff -r 45e5f0224d81 -r 360860a0006f lisp/calc/calc-graph.el --- a/lisp/calc/calc-graph.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calc/calc-graph.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; calc-graph.el --- graph output functions for Calc -;; Copyright (C) 1990, 1991, 1992, 1993, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2005 Free Software Foundation, Inc. ;; Author: David Gillespie ;; Maintainer: Jay Belanger @@ -33,14 +33,10 @@ ;;; Graphics -(defvar calc-gnuplot-name "gnuplot" - "*Name of GNUPLOT program, for calc-graph features.") - -(defvar calc-gnuplot-plot-command nil - "*Name of command for displaying GNUPLOT output; %s = file name to print.") - -(defvar calc-gnuplot-print-command "lp %s" - "*Name of command for printing GNUPLOT output; %s = file name to print.") +;; The following three variables are customizable and defined in calc.el. +(defvar calc-gnuplot-name) +(defvar calc-gnuplot-plot-command) +(defvar calc-gnuplot-print-command) (defvar calc-gnuplot-tempfile "calc") diff -r 45e5f0224d81 -r 360860a0006f lisp/calc/calc-help.el --- a/lisp/calc/calc-help.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calc/calc-help.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; calc-help.el --- help display functions for Calc, -;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2004 +;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: David Gillespie @@ -409,10 +409,10 @@ (defun calc-full-help () (interactive) (with-output-to-temp-buffer "*Help*" - (princ (format "GNU Emacs Calculator version %s of %s.\n" - calc-version calc-version-date)) - (princ " By Dave Gillespie, daveg@synaptics.com.\n") - (princ " Copyright (C) 1990, 1993 Free Software Foundation, Inc.\n\n") + (princ (format "GNU Emacs Calculator version %s.\n" + calc-version)) + (princ " By Dave Gillespie.\n") + (princ " Copyright (C) 2005 Free Software Foundation, Inc.\n\n") (princ "Type `h s' for a more detailed summary.\n") (princ "Or type `h i' to read the full Calc manual on-line.\n\n") (princ "Basic keys:\n") diff -r 45e5f0224d81 -r 360860a0006f lisp/calc/calc-lang.el --- a/lisp/calc/calc-lang.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calc/calc-lang.el Mon Apr 04 16:43:15 2005 +0000 @@ -388,6 +388,9 @@ ( \\arg . calcFunc-arg ) ( \\cos . calcFunc-cos ) ( \\cosh . calcFunc-cosh ) + ( \\cot . calcFunc-cot ) + ( \\coth . calcFunc-coth ) + ( \\csc . calcFunc-csc ) ( \\det . calcFunc-det ) ( \\exp . calcFunc-exp ) ( \\gcd . calcFunc-gcd ) @@ -395,10 +398,11 @@ ( \\log . calcFunc-log10 ) ( \\max . calcFunc-max ) ( \\min . calcFunc-min ) - ( \\tan . calcFunc-tan ) + ( \\sec . calcFunc-sec ) ( \\sin . calcFunc-sin ) ( \\sinh . calcFunc-sinh ) ( \\sqrt . calcFunc-sqrt ) + ( \\tan . calcFunc-tan ) ( \\tanh . calcFunc-tanh ) ( \\phi . calcFunc-totient ) ( \\mu . calcFunc-moebius ))) @@ -686,6 +690,10 @@ ( Conjugate . calcFunc-conj ) ( Cos . calcFunc-cos ) ( Cosh . calcFunc-cosh ) + ( Cot . calcFunc-cot ) + ( Coth . calcFunc-coth ) + ( Csc . calcFunc-csc ) + ( Csch . calcFunc-csch ) ( D . calcFunc-deriv ) ( Dt . calcFunc-tderiv ) ( Det . calcFunc-det ) @@ -708,6 +716,8 @@ ( Random . calcFunc-random ) ( Round . calcFunc-round ) ( Re . calcFunc-re ) + ( Sec . calcFunc-sec ) + ( Sech . calcFunc-sech ) ( Sign . calcFunc-sign ) ( Sin . calcFunc-sin ) ( Sinh . calcFunc-sinh ) diff -r 45e5f0224d81 -r 360860a0006f lisp/calc/calc.el --- a/lisp/calc/calc.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calc/calc.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,7 @@ ;;; calc.el --- the GNU Emacs calculator -;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +;; Copyright (C) 1990, 1991, 1992, 1993, 2001, 2002, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: David Gillespie ;; Maintainer: Jay Belanger @@ -205,9 +206,122 @@ (require 'calc-macs) +(defgroup calc nil + "GNU Calc" + :prefix "calc-" + :tag "Calc") + ;;;###autoload -(defvar calc-settings-file (convert-standard-filename "~/.calc.el") - "*File in which to record permanent settings.") +(defcustom calc-settings-file + (convert-standard-filename "~/.calc.el") + "*File in which to record permanent settings." + :group 'calc + :type '(file)) + +(defcustom calc-language-alist + '((latex-mode . latex) + (tex-mode . tex) + (plain-tex-mode . tex) + (context-mode . tex) + (nroff-mode . eqn) + (pascal-mode . pascal) + (c-mode . c) + (c++-mode . c) + (fortran-mode . fortran) + (f90-mode . fortran)) + "*Alist of major modes with appropriate Calc languages." + :group 'calc + :type '(alist :key-type (symbol :tag "Major mode") + :value-type (symbol :tag "Calc language"))) + +(defcustom calc-embedded-announce-formula + "%Embed\n\\(% .*\n\\)*" + "*A regular expression which is sure to be followed by a calc-embedded formula." + :group 'calc + :type '(regexp)) + +(defcustom calc-embedded-open-formula + "\\`\\|^\n\\|\\$\\$?\\|\\\\\\[\\|^\\\\begin[^{].*\n\\|^\\\\begin{.*[^x]}.*\n\\|^@.*\n\\|^\\.EQ.*\n\\|\\\\(\\|^%\n\\|^\\.\\\\\"\n" + "*A regular expression for the opening delimiter of a formula used by calc-embedded." + :group 'calc + :type '(regexp)) + +(defcustom calc-embedded-close-formula + "\\'\\|\n$\\|\\$\\$?\\|\\\\]\\|^\\\\end[^{].*\n\\|^\\\\end{.*[^x]}.*\n\\|^@.*\n\\|^\\.EN.*\n\\|\\\\)\\|\n%\n\\|^\\.\\\\\"\n" + "*A regular expression for the closing delimiter of a formula used by calc-embedded." + :group 'calc + :type '(regexp)) + +(defcustom calc-embedded-open-word + "^\\|[^-+0-9.eE]" + "*A regular expression for the opening delimiter of a formula used by calc-embedded-word." + :group 'calc + :type '(regexp)) + +(defcustom calc-embedded-close-word + "$\\|[^-+0-9.eE]" + "*A regular expression for the closing delimiter of a formula used by calc-embedded-word." + :group 'calc + :type '(regexp)) + +(defcustom calc-embedded-open-plain + "%%% " + "*A string which is the opening delimiter for a \"plain\" formula. +If calc-show-plain mode is enabled, this is inserted at the front of +each formula." + :group 'calc + :type '(string)) + +(defcustom calc-embedded-close-plain + " %%%\n" + "*A string which is the closing delimiter for a \"plain\" formula. +See calc-embedded-open-plain." + :group 'calc + :type '(string)) + +(defcustom calc-embedded-open-new-formula + "\n\n" + "*A string which is inserted at front of formula by calc-embedded-new-formula." + :group 'calc + :type '(string)) + +(defcustom calc-embedded-close-new-formula + "\n\n" + "*A string which is inserted at end of formula by calc-embedded-new-formula." + :group 'calc + :type '(string)) + +(defcustom calc-embedded-open-mode + "% " + "*A string which should precede calc-embedded mode annotations. +This is not required to be present for user-written mode annotations." + :group 'calc + :type '(string)) + +(defcustom calc-embedded-close-mode + "\n" + "*A string which should follow calc-embedded mode annotations. +This is not required to be present for user-written mode annotations." + :group 'calc + :type '(string)) + +(defcustom calc-gnuplot-name + "gnuplot" + "*Name of GNUPLOT program, for calc-graph features." + :group 'calc + :type '(string)) + +(defcustom calc-gnuplot-plot-command + nil + "*Name of command for displaying GNUPLOT output; %s = file name to print." + :group 'calc + :type '(choice (string) (sexp))) + +(defcustom calc-gnuplot-print-command + "lp %s" + "*Name of command for printing GNUPLOT output; %s = file name to print." + :group 'calc + :type '(choice (string) (sexp))) (defvar calc-bug-address "belanger@truman.edu" "Address of the author of Calc, for use by `report-calc-bug'.") @@ -656,8 +770,7 @@ (put 'math-underflow 'error-conditions '(error math-underflow calc-error)) (put 'math-underflow 'error-message "Floating-point underflow occurred") -(defconst calc-version "2.02g") -(defconst calc-version-date "Mon Nov 19 2001") +(defconst calc-version "2.1") (defvar calc-trail-pointer nil) ; "Current" entry in trail buffer. (defvar calc-trail-overlay nil) ; Value of overlay-arrow-string. (defvar calc-undo-list nil) ; List of previous operations for undo. diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/appt.el --- a/lisp/calendar/appt.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/appt.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,9 +1,9 @@ ;;; appt.el --- appointment notification functions -;; Copyright (C) 1989, 1990, 1994, 1998, 2004 Free Software Foundation, Inc. +;; Copyright (C) 1989, 1990, 1994, 1998, 2004 Free Software Foundation, Inc. ;; Author: Neil Mager -;; Maintainer: FSF +;; Maintainer: Glenn Morris ;; Keywords: calendar ;; This file is part of GNU Emacs. @@ -181,7 +181,7 @@ ;;; Internal variables below this point. -(defvar appt-buffer-name " *appt-buf*" +(defconst appt-buffer-name " *appt-buf*" "Name of the appointments buffer.") (defvar appt-time-msg-list nil @@ -486,9 +486,8 @@ ;;;###autoload (defun appt-add (new-appt-time new-appt-msg) - "Add an appointment for the day at NEW-APPT-TIME and issue message NEW-APPT-MSG. + "Add an appointment for today at NEW-APPT-TIME with message NEW-APPT-MSG. The time should be in either 24 hour format or am/pm format." - (interactive "sTime (hh:mm[am/pm]): \nsMessage: ") (unless (string-match "[0-9]?[0-9][:.][0-9][0-9]\\(am\\|pm\\)?" new-appt-time) diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/cal-china.el --- a/lisp/calendar/cal-china.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/cal-china.el Mon Apr 04 16:43:15 2005 +0000 @@ -38,8 +38,8 @@ ;; The date of Chinese New Year is correct from 1644-2051. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; Edward M. Reingold Department of Computer Science diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/cal-coptic.el --- a/lisp/calendar/cal-coptic.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/cal-coptic.el Mon Apr 04 16:43:15 2005 +0000 @@ -29,8 +29,8 @@ ;; diary.el that deal with the Coptic and Ethiopic calendars. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; Edward M. Reingold Department of Computer Science diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/cal-french.el --- a/lisp/calendar/cal-french.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/cal-french.el Mon Apr 04 16:43:15 2005 +0000 @@ -29,8 +29,8 @@ ;; diary.el that deal with the French Revolutionary calendar. ;; Technical details of the French Revolutionary calendar can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997), and in +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001), and in ;; ``Calendrical Calculations, Part II: Three Historical Calendars'' by ;; E. M. Reingold, N. Dershowitz, and S. M. Clamen, Software--Practice and ;; Experience, Volume 23, Number 4 (April, 1993), pages 383-404. diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/cal-hebrew.el --- a/lisp/calendar/cal-hebrew.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/cal-hebrew.el Mon Apr 04 16:43:15 2005 +0000 @@ -30,8 +30,8 @@ ;; diary.el that deal with the Hebrew calendar. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; Edward M. Reingold Department of Computer Science diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/cal-islam.el --- a/lisp/calendar/cal-islam.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/cal-islam.el Mon Apr 04 16:43:15 2005 +0000 @@ -29,8 +29,8 @@ ;; diary.el that deal with the Islamic calendar. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; Edward M. Reingold Department of Computer Science diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/cal-iso.el --- a/lisp/calendar/cal-iso.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/cal-iso.el Mon Apr 04 16:43:15 2005 +0000 @@ -30,8 +30,8 @@ ;; diary.el that deal with the ISO calendar. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; Edward M. Reingold Department of Computer Science diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/cal-julian.el --- a/lisp/calendar/cal-julian.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/cal-julian.el Mon Apr 04 16:43:15 2005 +0000 @@ -29,8 +29,8 @@ ;; diary.el that deal with the Julian calendar. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; Edward M. Reingold Department of Computer Science diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/cal-mayan.el --- a/lisp/calendar/cal-mayan.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/cal-mayan.el Mon Apr 04 16:43:15 2005 +0000 @@ -44,8 +44,8 @@ ;; Comments, improvements, and bug reports should be sent to Reingold. ;; Technical details of the Mayan calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997), and in +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001), and in ;; ``Calendrical Calculations, Part II: Three Historical Calendars'' ;; by E. M. Reingold, N. Dershowitz, and S. M. Clamen, ;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993), diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/cal-persia.el --- a/lisp/calendar/cal-persia.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/cal-persia.el Mon Apr 04 16:43:15 2005 +0000 @@ -29,8 +29,8 @@ ;; diary.el that deal with the Persian calendar. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; Edward M. Reingold Department of Computer Science diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/cal-x.el --- a/lisp/calendar/cal-x.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/cal-x.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,9 +1,10 @@ ;;; cal-x.el --- calendar windows in dedicated frames in X -;; Copyright (C) 1994, 1995 Free Software Foundation, Inc. +;; Copyright (C) 1994, 1995, 2005 Free Software Foundation, Inc. ;; Author: Michael Kifer ;; Edward M. Reingold +;; Maintainer: Glenn Morris ;; Keywords: calendar ;; Human-Keywords: calendar, dedicated frames, X Window System @@ -88,7 +89,7 @@ (frame-parameters calendar-frame)))) (iconify-or-deiconify-frame)) (calendar-basic-setup arg) - (set-window-dedicated-p (selected-window) 'calendar) + (set-window-dedicated-p (selected-window) t) (set-window-dedicated-p (display-buffer (if (not (memq 'fancy-diary-display diary-display-hook)) @@ -96,7 +97,7 @@ (if (not (bufferp (get-buffer fancy-diary-buffer))) (make-fancy-diary-buffer)) fancy-diary-buffer)) - 'diary)))))) + t)))))) (defun calendar-only-one-frame-setup (&optional arg) "Start calendar and display it in a dedicated frame. @@ -117,7 +118,7 @@ (frame-parameters calendar-frame)))) (iconify-or-deiconify-frame)) (calendar-basic-setup arg) - (set-window-dedicated-p (selected-window) 'calendar)))))) + (set-window-dedicated-p (selected-window) t)))))) (defun calendar-two-frame-setup (&optional arg) "Start calendar and diary in separate, dedicated frames. @@ -139,7 +140,7 @@ (frame-parameters calendar-frame)))) (iconify-or-deiconify-frame)) (display-buffer calendar-buffer) - (set-window-dedicated-p (selected-window) 'calendar) + (set-window-dedicated-p (selected-window) t) (setq diary-frame (make-frame diary-frame-parameters)) (run-hooks 'calendar-after-frame-setup-hooks) (select-frame diary-frame) @@ -154,7 +155,7 @@ (if (not (bufferp (get-buffer fancy-diary-buffer))) (make-fancy-diary-buffer)) fancy-diary-buffer)) - 'diary))))) + t))))) ;; Formerly (get-file-buffer diary-file) was added to the list here, ;; but that isn't clean, and the value could even be nil. diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/calendar.el --- a/lisp/calendar/calendar.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/calendar.el Mon Apr 04 16:43:15 2005 +0000 @@ -75,13 +75,13 @@ ;; solar.el Sunrise/sunset, equinoxes/solstices ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; An earlier version of the technical details appeared in ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, ;; Software--Practice and Experience, Volume 20, Number 9 (September, 1990), -;; pages 899-928. ``Calendrical Calculations, Part II: Three Historical +;; pages 899-928, and in ``Calendrical Calculations, Part II: Three Historical ;; Calendars'' by E. M. Reingold, N. Dershowitz, and S. M. Clamen, ;; Software--Practice and Experience, Volume 23, Number 4 (April, 1993), ;; pages 383-404. @@ -2763,7 +2763,7 @@ instead of the full names in the diary file. Do not include a trailing `.' in the strings specified in this variable, though you may use such in the diary file. If any element of this array -is nil, then the abbreviation will be constructed as the first +is nil, then the abbreviation will be constructed as the first `calendar-abbrev-length' characters of the corresponding full name.") (defvar calendar-month-name-array diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/holidays.el --- a/lisp/calendar/holidays.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/holidays.el Mon Apr 04 16:43:15 2005 +0000 @@ -30,8 +30,8 @@ ;; in calendar.el. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; An earlier version of the technical details appeared in ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/lunar.el --- a/lisp/calendar/lunar.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/lunar.el Mon Apr 04 16:43:15 2005 +0000 @@ -38,8 +38,8 @@ ;; person rewrite the code for the lunar calculations in this file! ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; Edward M. Reingold Department of Computer Science diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/solar.el --- a/lisp/calendar/solar.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/solar.el Mon Apr 04 16:43:15 2005 +0000 @@ -48,8 +48,8 @@ ;; 1951--2050. For other years the times will be within +/- 1 minute. ;; Technical details of all the calendrical calculations can be found in -;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold, -;; Cambridge University Press (1997). +;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold +;; and Nachum Dershowitz, Cambridge University Press (2001). ;; Comments, corrections, and improvements should be sent to ;; Edward M. Reingold Department of Computer Science diff -r 45e5f0224d81 -r 360860a0006f lisp/calendar/time-date.el --- a/lisp/calendar/time-date.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/calendar/time-date.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,5 +1,5 @@ -;;; time-date.el --- date and time handling functions -;; Copyright (C) 1998, 1999, 2000, 2004, 2005 Free Software Foundation, Inc. +;;; time-date.el --- Date and time handling functions +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Masanobu Umeda diff -r 45e5f0224d81 -r 360860a0006f lisp/complete.el --- a/lisp/complete.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/complete.el Mon Apr 04 16:43:15 2005 +0000 @@ -937,12 +937,11 @@ ((not completion-table) nil) ((eq action nil) (try-completion str2 completion-table nil)) ((eq action t) (all-completions str2 completion-table nil)) - ((eq action 'lambda) - (eq (try-completion str2 completion-table nil) t)))) + ((eq action 'lambda) (test-completion str2 completion-table nil)))) (funcall PC-old-read-file-name-internal string dir action))) (provide 'complete) -;;; arch-tag: fc7e2768-ff44-4e22-b579-4d825b968458 +;; arch-tag: fc7e2768-ff44-4e22-b579-4d825b968458 ;;; complete.el ends here diff -r 45e5f0224d81 -r 360860a0006f lisp/desktop.el --- a/lisp/desktop.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/desktop.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; desktop.el --- save partial status of Emacs when killed -;; Copyright (C) 1993, 1994, 1995, 1997, 2000, 2001 +;; Copyright (C) 1993, 1994, 1995, 1997, 2000, 2001, 2005 ;; Free Software Foundation, Inc. ;; Author: Morten Welinder @@ -158,14 +158,14 @@ (defcustom desktop-no-desktop-file-hook nil "Normal hook run when `desktop-read' can't find a desktop file. -May e.g. be used to show a dired buffer." +May be used to show a dired buffer." :type 'hook :group 'desktop :version "22.1") (defcustom desktop-after-read-hook nil "Normal hook run after a successful `desktop-read'. -May e.g. be used to show a buffer list." +May be used to show a buffer list." :type 'hook :group 'desktop :version "22.1") diff -r 45e5f0224d81 -r 360860a0006f lisp/diff-mode.el --- a/lisp/diff-mode.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/diff-mode.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,7 +1,7 @@ ;;; diff-mode.el --- a mode for viewing/editing context diffs -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 -;; Free Software Foundation, Inc. +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Stefan Monnier ;; Keywords: convenience patch diff @@ -263,7 +263,7 @@ (save-excursion (while (re-search-backward re start t) (replace-match "" t t))))))) - + (defvar diff-font-lock-keywords `(("^\\(@@ -[0-9,]+ \\+[0-9,]+ @@\\)\\(.*\\)$" ;unified @@ -484,7 +484,7 @@ (let ((fs (diff-hunk-file-names old))) (unless fs (error "No file name to look for")) (push (cons fs name) diff-remembered-files-alist))) - + (defun diff-hunk-file-names (&optional old) "Give the list of file names textually mentioned for the current hunk." (save-excursion @@ -952,7 +952,7 @@ (define-minor-mode diff-minor-mode "Minor mode for viewing/editing context diffs. \\{diff-minor-mode-map}" - nil " Diff" nil + :group 'diff-mode :lighter " Diff" ;; FIXME: setup font-lock ;; setup change hooks (if (not diff-update-on-the-fly) diff -r 45e5f0224d81 -r 360860a0006f lisp/dired.el --- a/lisp/dired.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/dired.el Mon Apr 04 16:43:15 2005 +0000 @@ -1252,7 +1252,7 @@ '("--")) (define-key map [menu-bar immediate compare-directories] - '(menu-item "Compare directories" dired-compare-directories + '(menu-item "Compare directories..." dired-compare-directories :help "Mark files with different attributes in two dired buffers")) (define-key map [menu-bar immediate backup-diff] '(menu-item "Compare with Backup" dired-backup-diff diff -r 45e5f0224d81 -r 360860a0006f lisp/ediff-hook.el --- a/lisp/ediff-hook.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/ediff-hook.el Mon Apr 04 16:43:15 2005 +0000 @@ -131,10 +131,10 @@ )) (defvar ediff-misc-menu '("Ediff Miscellanea" - ["Ediff Manual..." ediff-documentation t] - ["Customize Ediff..." ediff-customize t] - ["List Ediff Sessions..." ediff-show-registry t] - ["Use separate frame for Ediff control buffer..." + ["Ediff Manual" ediff-documentation t] + ["Customize Ediff" ediff-customize t] + ["List Ediff Sessions" ediff-show-registry t] + ["Use separate frame for Ediff control buffer" ediff-toggle-multiframe :style toggle :selected (if (and (featurep 'ediff-util) @@ -242,14 +242,14 @@ ;; define ediff miscellanea (define-key menu-bar-ediff-misc-menu [emultiframe] - '("Toggle use of separate control buffer frame..." + '("Toggle use of separate control buffer frame" . ediff-toggle-multiframe)) (define-key menu-bar-ediff-misc-menu [eregistry] - '("List Ediff Sessions..." . ediff-show-registry)) + '("List Ediff Sessions" . ediff-show-registry)) (define-key menu-bar-ediff-misc-menu [ediff-cust] - '("Customize Ediff..." . ediff-customize)) + '("Customize Ediff" . ediff-customize)) (define-key menu-bar-ediff-misc-menu [ediff-doc] - '("Ediff Manual..." . ediff-documentation)) + '("Ediff Manual" . ediff-documentation)) ) ) ; emacs case diff -r 45e5f0224d81 -r 360860a0006f lisp/emacs-lisp/autoload.el --- a/lisp/emacs-lisp/autoload.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/emacs-lisp/autoload.el Mon Apr 04 16:43:15 2005 +0000 @@ -72,7 +72,7 @@ (let ((car (car-safe form)) expand) (cond ;; For complex cases, try again on the macro-expansion. - ((and (memq car '(easy-mmode-define-global-mode + ((and (memq car '(easy-mmode-define-global-mode define-global-minor-mode easy-mmode-define-minor-mode define-minor-mode)) (setq expand (let ((load-file-name file)) (macroexpand form))) (eq (car expand) 'progn) diff -r 45e5f0224d81 -r 360860a0006f lisp/emacs-lisp/debug.el --- a/lisp/emacs-lisp/debug.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/emacs-lisp/debug.el Mon Apr 04 16:43:15 2005 +0000 @@ -632,24 +632,31 @@ Use \\[cancel-debug-on-entry] to cancel the effect of this command. Redefining FUNCTION also cancels it." (interactive "aDebug on entry (to function): ") - ;; Handle a function that has been aliased to some other function. - (if (and (subrp (symbol-function function)) - (eq (cdr (subr-arity (symbol-function function))) 'unevalled)) - (error "Function %s is a special form" function)) - (if (or (symbolp (symbol-function function)) + (when (and (subrp (symbol-function function)) + (eq (cdr (subr-arity (symbol-function function))) 'unevalled)) + (error "Function %s is a special form" function)) + (if (or (symbolp (symbol-function function)) (subrp (symbol-function function))) - ;; Create a wrapper in which we can then add the necessary debug call. + ;; The function is built-in or aliased to another function. + ;; Create a wrapper in which we can add the debug call. (fset function `(lambda (&rest debug-on-entry-args) ,(interactive-form (symbol-function function)) - (apply ',(symbol-function function) - debug-on-entry-args)))) - (or (consp (symbol-function function)) - (debug-convert-byte-code function)) - (or (consp (symbol-function function)) - (error "Definition of %s is not a list" function)) + (apply ',(symbol-function function) + debug-on-entry-args))) + (when (eq (car-safe (symbol-function function)) 'autoload) + ;; The function is autoloaded. Load its real definition. + (load (cadr (symbol-function function)) nil noninteractive nil t)) + (when (or (not (consp (symbol-function function))) + (and (eq (car (symbol-function function)) 'macro) + (not (consp (cdr (symbol-function function)))))) + ;; The function is byte-compiled. Create a wrapper in which + ;; we can add the debug call. + (debug-convert-byte-code function))) + (unless (consp (symbol-function function)) + (error "Definition of %s is not a list" function)) (fset function (debug-on-entry-1 function t)) - (or (memq function debug-function-list) - (push function debug-function-list)) + (unless (memq function debug-function-list) + (push function debug-function-list)) function) ;;;###autoload @@ -664,45 +671,52 @@ (if name (intern name))))) (if (and function (not (string= function ""))) (progn - (let ((f (debug-on-entry-1 function nil))) + (let ((defn (debug-on-entry-1 function nil))) (condition-case nil - (if (and (equal (nth 1 f) '(&rest debug-on-entry-args)) - (eq (car (nth 3 f)) 'apply)) - ;; `f' is a wrapper introduced in debug-on-entry. - ;; Get rid of it since we don't need it any more. - (setq f (nth 1 (nth 1 (nth 3 f))))) + (when (and (equal (nth 1 defn) '(&rest debug-on-entry-args)) + (eq (car (nth 3 defn)) 'apply)) + ;; `defn' is a wrapper introduced in debug-on-entry. + ;; Get rid of it since we don't need it any more. + (setq defn (nth 1 (nth 1 (nth 3 defn))))) (error nil)) - (fset function f)) + (fset function defn)) (setq debug-function-list (delq function debug-function-list)) function) (message "Cancelling debug-on-entry for all functions") (mapcar 'cancel-debug-on-entry debug-function-list))) (defun debug-convert-byte-code (function) - (let ((defn (symbol-function function))) - (if (not (consp defn)) - ;; Assume a compiled code object. - (let* ((contents (append defn nil)) - (body - (list (list 'byte-code (nth 1 contents) - (nth 2 contents) (nth 3 contents))))) - (if (nthcdr 5 contents) - (setq body (cons (list 'interactive (nth 5 contents)) body))) - (if (nth 4 contents) - ;; Use `documentation' here, to get the actual string, - ;; in case the compiled function has a reference - ;; to the .elc file. - (setq body (cons (documentation function) body))) - (fset function (cons 'lambda (cons (car contents) body))))))) + (let* ((defn (symbol-function function)) + (macro (eq (car-safe defn) 'macro))) + (when macro (setq defn (cdr defn))) + (unless (consp defn) + ;; Assume a compiled code object. + (let* ((contents (append defn nil)) + (body + (list (list 'byte-code (nth 1 contents) + (nth 2 contents) (nth 3 contents))))) + (if (nthcdr 5 contents) + (setq body (cons (list 'interactive (nth 5 contents)) body))) + (if (nth 4 contents) + ;; Use `documentation' here, to get the actual string, + ;; in case the compiled function has a reference + ;; to the .elc file. + (setq body (cons (documentation function) body))) + (setq defn (cons 'lambda (cons (car contents) body)))) + (when macro (setq defn (cons 'macro defn))) + (fset function defn)))) (defun debug-on-entry-1 (function flag) (let* ((defn (symbol-function function)) (tail defn)) - (if (subrp tail) - (error "%s is a built-in function" function) - (if (eq (car tail) 'macro) (setq tail (cdr tail))) - (if (eq (car tail) 'lambda) (setq tail (cdr tail)) - (error "%s not user-defined Lisp function" function)) + (when (eq (car-safe tail) 'macro) + (setq tail (cdr tail))) + (if (not (eq (car-safe tail) 'lambda)) + ;; Only signal an error when we try to set debug-on-entry. + ;; When we try to clear debug-on-entry, we are now done. + (when flag + (error "%s is not a user-defined Lisp function" function)) + (setq tail (cdr tail)) ;; Skip the docstring. (when (and (stringp (cadr tail)) (cddr tail)) (setq tail (cdr tail))) @@ -713,8 +727,8 @@ ;; Add/remove debug statement as needed. (if flag (setcdr tail (cons '(implement-debug-on-entry) (cdr tail))) - (setcdr tail (cddr tail)))) - defn))) + (setcdr tail (cddr tail))))) + defn)) (defun debugger-list-functions () "Display a list of all the functions now set to debug on entry." diff -r 45e5f0224d81 -r 360860a0006f lisp/emacs-lisp/easy-mmode.el --- a/lisp/emacs-lisp/easy-mmode.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/emacs-lisp/easy-mmode.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,7 @@ ;;; easy-mmode.el --- easy definition for major and minor modes -;; Copyright (C) 1997,2000,01,02,03,2004 Free Software Foundation, Inc. +;; Copyright (C) 1997, 2000, 2001, 2002, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Author: Georges Brun-Cottan ;; Maintainer: Stefan Monnier @@ -152,8 +153,8 @@ (unless group ;; We might as well provide a best-guess default group. (setq group - `(:group ',(or (custom-current-group) - (intern (replace-regexp-in-string + `(:group (or (custom-current-group) + ',(intern (replace-regexp-in-string "-mode\\'" "" mode-name)))))) `(progn @@ -253,8 +254,9 @@ ;;; ;;;###autoload -(defmacro easy-mmode-define-global-mode (global-mode mode turn-on - &rest keys) +(defalias 'easy-mmode-define-global-mode 'define-global-minor-mode) +;;;###autoload +(defmacro define-global-minor-mode (global-mode mode turn-on &rest keys) "Make GLOBAL-MODE out of the buffer-local minor MODE. TURN-ON is a function that will be called with no args in every buffer and that should try to turn MODE on if applicable for that buffer. @@ -278,8 +280,8 @@ (unless group ;; We might as well provide a best-guess default group. (setq group - `(:group ',(or (custom-current-group) - (intern (replace-regexp-in-string + `(:group (or (custom-current-group) + ',(intern (replace-regexp-in-string "-mode\\'" "" (symbol-name mode))))))) `(progn diff -r 45e5f0224d81 -r 360860a0006f lisp/emacs-lisp/eldoc.el --- a/lisp/emacs-lisp/eldoc.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/emacs-lisp/eldoc.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,7 @@ ;;; eldoc.el --- show function arglist or variable docstring in echo area -;; Copyright (C) 1996, 97, 98, 99, 2000, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2003, 2005 +;; Free Software Foundation, Inc. ;; Author: Noah Friedman ;; Maintainer: friedman@splode.com @@ -150,7 +151,7 @@ instead. With prefix ARG, turn ElDoc mode on if and only if ARG is positive." - nil eldoc-minor-mode-string nil + :group 'eldoc :lighter eldoc-minor-mode-string (setq eldoc-last-message nil) (if eldoc-mode (progn diff -r 45e5f0224d81 -r 360860a0006f lisp/emulation/cua-base.el --- a/lisp/emulation/cua-base.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/emulation/cua-base.el Mon Apr 04 16:43:15 2005 +0000 @@ -1016,7 +1016,7 @@ (scroll-down arg) (beginning-of-buffer (goto-char (point-min))))))) -(put 'cua-scroll-up 'CUA 'move) +(put 'cua-scroll-down 'CUA 'move) ;;; Cursor indications @@ -1307,6 +1307,7 @@ the active selection. C-z, C-x, C-c, and C-v will undo, cut, copy, and paste (in addition to the normal emacs bindings)." :global t + :group 'cua :set-after '(cua-enable-modeline-indications cua-use-hyper-key) :require 'cua-base :link '(emacs-commentary-link "cua-base.el") diff -r 45e5f0224d81 -r 360860a0006f lisp/files.el --- a/lisp/files.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/files.el Mon Apr 04 16:43:15 2005 +0000 @@ -291,7 +291,7 @@ :group 'editing-basics) (defcustom mode-require-final-newline t - "*Whether to add a newline at the end of the file, in certain major modes. + "*Whether to add a newline at end of file, in certain major modes. Those modes set `require-final-newline' to this value when you enable them. They do so because they are used for files that are supposed to end in newlines, and the question is how to arrange that. @@ -299,10 +299,16 @@ A value of t means do this only when the file is about to be saved. A value of `visit' means do this right after the file is visited. A value of `visit-save' means do it at both of those times. -Any other non-nil value means ask user whether to add a newline, when saving." +Any other non-nil value means ask user whether to add a newline, when saving. +nil means don't add newlines. + +You will have to be careful if you set this to nil: you will have +to remember to manually add a final newline whenever you finish a +file that really needs one." :type '(choice (const :tag "When visiting" visit) (const :tag "When saving" t) (const :tag "When visiting or saving" visit-save) + (const :tag "Never" nil) (other :tag "Ask" ask)) :group 'editing-basics :version "22.1") @@ -928,20 +934,31 @@ (defvar find-file-default nil "Used within `find-file-read-args'.") +(defmacro minibuffer-with-setup-hook (fun &rest body) + "Add FUN to `minibuffer-setup-hook' while executing BODY. +BODY should use the minibuffer at most once. +Recursive uses of the minibuffer will not be affected." + (declare (indent 1) (debug t)) + (let ((hook (make-symbol "setup-hook"))) + `(let ((,hook + (lambda () + ;; Clear out this hook so it does not interfere + ;; with any recursive minibuffer usage. + (remove-hook 'minibuffer-setup-hook ,hook) + (,fun)))) + (unwind-protect + (progn + (add-hook 'minibuffer-setup-hook ,hook) + ,@body) + (remove-hook 'minibuffer-setup-hook ,hook))))) + (defun find-file-read-args (prompt mustmatch) (list (let ((find-file-default (and buffer-file-name - (abbreviate-file-name buffer-file-name))) - (munge-default-fun - (lambda () - (setq minibuffer-default find-file-default) - ;; Clear out this hook so it does not interfere - ;; with any recursive minibuffer usage. - (pop minibuffer-setup-hook))) - (minibuffer-setup-hook - minibuffer-setup-hook)) - (add-hook 'minibuffer-setup-hook munge-default-fun) - (read-file-name prompt nil default-directory mustmatch)) + (abbreviate-file-name buffer-file-name)))) + (minibuffer-with-setup-hook + (lambda () (setq minibuffer-default find-file-default)) + (read-file-name prompt nil default-directory mustmatch))) t)) (defun find-file (filename &optional wildcards) diff -r 45e5f0224d81 -r 360860a0006f lisp/filesets.el --- a/lisp/filesets.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/filesets.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; filesets.el --- handle group of files -;; Copyright (C) 2002 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2005 Free Software Foundation, Inc. ;; Author: Thomas Link ;; Maintainer: FSF @@ -250,8 +250,15 @@ ; (customize-set-variable var val)) ; (filesets-build-menu)) +;; It seems this is a workaround for the XEmacs issue described in the +;; doc-string of filesets-menu-ensure-use-cached. Under Emacs this is +;; essentially just `set-default'. (defun filesets-set-default (sym val &optional init-flag) - "Set-default wrapper function used in conjunction with `defcustom'." + "Set-default wrapper function used in conjunction with `defcustom'. +If SYM is in the list `filesets-ignore-next-set-default', delete +it from that list, and return nil. Otherwise, set the value of +SYM to VAL and return t. If INIT-FLAG is non-nil, set with +`custom-initialize-set', otherwise with `set-default'." (let ((ignore-flag (member sym filesets-ignore-next-set-default))) (if ignore-flag (setq filesets-ignore-next-set-default @@ -304,31 +311,26 @@ :type 'sexp :group 'filesets) -(if filesets-running-xemacs - (progn - (defcustom filesets-menu-path nil - "*The menu under which the filesets menu should be inserted. -XEmacs specific; see `add-submenu' for documentation." - :set (function filesets-set-default) - :type 'sexp - :group 'filesets) +(defcustom filesets-menu-path nil + "*The menu under which the filesets menu should be inserted. +See `add-submenu' for documentation." + :set (function filesets-set-default) + :type 'sexp + :group 'filesets) - (defcustom filesets-menu-before "File" - "*The name of a menu before which this menu should be added. -XEmacs specific; see `add-submenu' for documentation." - :set (function filesets-set-default) - :type 'sexp - :group 'filesets) +(defcustom filesets-menu-before "File" + "*The name of a menu before which this menu should be added. +See `add-submenu' for documentation." + :set (function filesets-set-default) + :type 'sexp + :group 'filesets) - (defcustom filesets-menu-in-menu nil - "*Use that instead of `current-menubar' as the menu to change. -XEmacs specific; see `add-submenu' for documentation." - :set (function filesets-set-default) - :type 'sexp - :group 'filesets)) - (defvar filesets-menu-path nil) - (defvar filesets-menu-before nil) - (defvar filesets-menu-in-menu nil)) +(defcustom filesets-menu-in-menu nil + "*Use that instead of `current-menubar' as the menu to change. +See `add-submenu' for documentation." + :set (function filesets-set-default) + :type 'sexp + :group 'filesets) (defcustom filesets-menu-shortcuts-flag t "*Non-nil means to prepend menus with hopefully unique shortcuts." @@ -351,7 +353,7 @@ (defcustom filesets-menu-cache-file (if filesets-running-xemacs "~/.xemacs/filesets-cache.el" - "~/.filesets-cache.el") + "~/.emacs.d/filesets-cache.el") "*File to be used for saving the filesets menu between sessions. Set this to \"\", to disable caching of menus. Don't forget to check out `filesets-menu-ensure-use-cached'." @@ -1070,9 +1072,7 @@ ;;; Emacs compatibility (eval-and-compile (if filesets-running-xemacs - (progn - (fset 'filesets-error 'error) - (fset 'filesets-add-submenu 'add-submenu)) + (fset 'filesets-error 'error) (require 'easymenu) @@ -1080,12 +1080,6 @@ "`error' wrapper." (error (mapconcat 'identity args " "))) - ;; This should work for 21.1 Emacs - (defun filesets-add-submenu (menu-path submenu &optional - before in-menu) - "`easy-menu-define' wrapper." - (easy-menu-define - filesets-submenu global-map "Filesets menu" submenu)) )) (defun filesets-filter-dir-names (lst &optional negative) @@ -2339,7 +2333,7 @@ (filesets-menu-cache-file-save-maybe))) (let ((cb (current-buffer))) (when (not (member cb filesets-updated-buffers)) - (filesets-add-submenu + (add-submenu filesets-menu-path `(,filesets-menu-name ("# Filesets" diff -r 45e5f0224d81 -r 360860a0006f lisp/font-core.el --- a/lisp/font-core.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/font-core.el Mon Apr 04 16:43:15 2005 +0000 @@ -148,7 +148,7 @@ The above is the default behavior of `font-lock-mode'; you may specify your own function which is called when `font-lock-mode' is toggled via `font-lock-function'. " - nil nil nil + :group 'font-lock ;; Don't turn on Font Lock mode if we don't have a display (we're running a ;; batch job) or if the buffer is invisible (the name starts with a space). (when (or noninteractive (eq (aref (buffer-name) 0) ?\ )) diff -r 45e5f0224d81 -r 360860a0006f lisp/font-lock.el --- a/lisp/font-lock.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/font-lock.el Mon Apr 04 16:43:15 2005 +0000 @@ -1097,7 +1097,7 @@ ((error quit) (message "Fontifying block...%s" error-data))))))) (if (boundp 'facemenu-keymap) - (define-key facemenu-keymap "\M-g" 'font-lock-fontify-block)) + (define-key facemenu-keymap "\M-o" 'font-lock-fontify-block)) ;;; End of Fontification functions. diff -r 45e5f0224d81 -r 360860a0006f lisp/generic-x.el --- a/lisp/generic-x.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/generic-x.el Mon Apr 04 16:43:15 2005 +0000 @@ -170,7 +170,8 @@ '((nil "^\\([-A-Za-z0-9_]+\\)" 1) ("*Directories*" "^\\s-*]+\\)>" 1) ("*Locations*" "^\\s-*]+\\)>" 1)))))) - "Generic mode for Apache or HTTPD configuration files.")) + "Generic mode for Apache or HTTPD configuration files." + :group 'generic-x)) (when (memq 'apache-log-generic-mode generic-extras-enable-list) @@ -183,7 +184,8 @@ (2 font-lock-variable-name-face))) '("access_log\\'") nil - "Mode for Apache log files")) + "Mode for Apache log files" + :group 'generic-x)) ;;; Samba (when (memq 'samba-generic-mode generic-extras-enable-list) @@ -197,7 +199,8 @@ (2 font-lock-type-face))) '("smb\\.conf\\'") '(generic-bracket-support) - "Generic mode for Samba configuration files.")) + "Generic mode for Samba configuration files." + :group 'generic-x)) ;;; Fvwm ;; This is pretty basic. Also, modes for other window managers could @@ -222,7 +225,8 @@ nil '("\\.fvwmrc\\'" "\\.fvwm2rc\\'") nil - "Generic mode for FVWM configuration files.")) + "Generic mode for FVWM configuration files." + :group 'generic-x)) ;;; X Resource ;; I'm pretty sure I've seen an actual mode to do this, but I don't @@ -235,7 +239,8 @@ '(("^\\([^:\n]+:\\)" 1 font-lock-variable-name-face)) '("\\.Xdefaults\\'" "\\.Xresources\\'" "\\.Xenvironment\\'" "\\.ad\\'") nil - "Generic mode for X Resource configuration files.")) + "Generic mode for X Resource configuration files." + :group 'generic-x)) ;;; Hosts (when (memq 'hosts-generic-mode generic-extras-enable-list) @@ -246,7 +251,8 @@ '(("\\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\\)" 1 font-lock-constant-face)) '("[hH][oO][sS][tT][sS]\\'") nil - "Generic mode for HOSTS files.")) + "Generic mode for HOSTS files." + :group 'generic-x)) ;;; Windows INF files (when (memq 'inf-generic-mode generic-extras-enable-list) @@ -257,7 +263,8 @@ '(("^\\(\\[.*\\]\\)" 1 font-lock-constant-face)) '("\\.[iI][nN][fF]\\'") '(generic-bracket-support) - "Generic mode for MS-Windows INF files.")) + "Generic mode for MS-Windows INF files." + :group 'generic-x)) ;;; Windows INI files ;; Should define escape character as well! @@ -277,7 +284,8 @@ (setq imenu-generic-expression '((nil "^\\[\\(.*\\)\\]" 1) ("*Variables*" "^\\s-*\\([^=]+\\)\\s-*=" 1)))))) - "Generic mode for MS-Windows INI files.")) + "Generic mode for MS-Windows INI files." + :group 'generic-x)) ;;; Windows REG files ;;; Unfortunately, Windows 95 and Windows NT have different REG file syntax! @@ -294,7 +302,8 @@ (lambda () (setq imenu-generic-expression '((nil "^\\s-*\\(.*\\)\\s-*=" 1)))))) - "Generic mode for MS-Windows Registry files.")) + "Generic mode for MS-Windows Registry files." + :group 'generic-x)) ;;; DOS/Windows BAT files (when (memq 'bat-generic-mode generic-extras-enable-list) @@ -368,7 +377,8 @@ "\\`[cC][oO][nN][fF][iI][gG]\\." "\\`[aA][uU][tT][oO][eE][xX][eE][cC]\\.") '(generic-bat-mode-setup-function) - "Generic mode for MS-Windows BAT files.") + "Generic mode for MS-Windows BAT files." + :group 'generic-x) (defvar bat-generic-mode-syntax-table nil "Syntax table in use in bat-generic-mode buffers.") @@ -446,7 +456,8 @@ (lambda () (setq imenu-generic-expression '((nil "\\s-/\\([^/]+\\)/[i, \t\n]" 1)))))) - "Mode for Mailagent rules files.")) + "Mode for Mailagent rules files." + :group 'generic-x)) ;; Solaris/Sys V prototype files (when (memq 'prototype-generic-mode generic-extras-enable-list) @@ -469,7 +480,8 @@ (2 font-lock-variable-name-face))) '("prototype\\'") nil - "Mode for Sys V prototype files.")) + "Mode for Sys V prototype files." + :group 'generic-x)) ;; Solaris/Sys V pkginfo files (when (memq 'pkginfo-generic-mode generic-extras-enable-list) @@ -482,7 +494,8 @@ (2 font-lock-variable-name-face))) '("pkginfo\\'") nil - "Mode for Sys V pkginfo files.")) + "Mode for Sys V pkginfo files." + :group 'generic-x)) ;; Javascript mode ;; Includes extra keywords from Armando Singer [asinger@MAIL.COLGATE.EDU] @@ -559,7 +572,8 @@ (setq imenu-generic-expression '((nil "^function\\s-+\\([A-Za-z0-9_]+\\)" 1) ("*Variables*" "^var\\s-+\\([A-Za-z0-9_]+\\)" 1)))))) - "Mode for JavaScript files.") + "Mode for JavaScript files." + :group 'generic-x) ;; VRML files (define-generic-mode vrml-generic-mode @@ -610,7 +624,8 @@ ("*Definitions*" "DEF\\s-+\\([-A-Za-z0-9_]+\\)\\s-+\\([A-Za-z0-9]+\\)\\s-*{" 1)))))) - "Generic Mode for VRML files.") + "Generic Mode for VRML files." + :group 'generic-x) ;; Java Manifests (define-generic-mode java-manifest-generic-mode @@ -629,7 +644,8 @@ (2 font-lock-constant-face))) '("[mM][aA][nN][iI][fF][eE][sS][tT]\\.[mM][fF]\\'") nil - "Mode for Java Manifest files") + "Mode for Java Manifest files" + :group 'generic-x) ;; Java properties files (define-generic-mode java-properties-generic-mode @@ -659,7 +675,8 @@ (lambda () (setq imenu-generic-expression '((nil "^\\([^#! \t\n\r=:]+\\)" 1)))))) - "Mode for Java properties files.") + "Mode for Java properties files." + :group 'generic-x) ;; C shell alias definitions (when (memq 'alias-generic-mode generic-extras-enable-list) @@ -677,7 +694,8 @@ (lambda () (setq imenu-generic-expression '((nil "^\\(alias\\|unalias\\)\\s-+\\([-a-zA-Z0-9_]+\\)" 2)))))) - "Mode for C Shell alias files.")) + "Mode for C Shell alias files." + :group 'generic-x)) ;;; Windows RC files ;; Contributed by ACorreir@pervasive-sw.com (Alfred Correira) @@ -769,7 +787,8 @@ (2 font-lock-variable-name-face nil t)))) '("\\.[rR][cC]$") nil - "Generic mode for MS-Windows Resource files.")) + "Generic mode for MS-Windows Resource files." + :group 'generic-x)) ;; InstallShield RUL files ;; Contributed by Alfred.Correira@Pervasive.Com @@ -1389,7 +1408,8 @@ font-lock-variable-name-face "[^_]" "[^_]"))) ; is this face the best choice? '("\\.[rR][uU][lL]$") '(generic-rul-mode-setup-function) - "Generic mode for InstallShield RUL files.") + "Generic mode for InstallShield RUL files." + :group 'generic-x) (define-skeleton rul-if "Insert an if statement." @@ -1437,7 +1457,8 @@ (2 font-lock-variable-name-face))) '("\\.mailrc\\'") nil - "Mode for mailrc files.") + "Mode for mailrc files." + :group 'generic-x) ;; Inetd.conf (when (memq 'inetd-conf-generic-mode generic-extras-enable-list) @@ -1457,7 +1478,8 @@ (function (lambda () (setq imenu-generic-expression - '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))))))) + '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))))) + :group 'generic-x)) ;; Services (when (memq 'etc-services-generic-mode generic-extras-enable-list) @@ -1475,7 +1497,8 @@ (function (lambda () (setq imenu-generic-expression - '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))))))) + '((nil "^\\([-A-Za-z0-9_]+\\)" 1)))))) + :group 'generic-x)) ;; Password and Group files (when (memq 'etc-passwd-generic-mode generic-extras-enable-list) @@ -1517,7 +1540,8 @@ (function (lambda () (setq imenu-generic-expression - '((nil "^\\([-A-Za-z0-9_]+\\):" 1)))))))) + '((nil "^\\([-A-Za-z0-9_]+\\):" 1)))))) + :group 'generic-x)) ;; Fstab (when (memq 'etc-fstab-generic-mode generic-extras-enable-list) @@ -1567,7 +1591,8 @@ (function (lambda () (setq imenu-generic-expression - '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1)))))))) + '((nil "^\\([/-A-Za-z0-9_]+\\)\\s-+" 1)))))) + :group 'generic-x)) ;; From Jacques Duthen (eval-when-compile @@ -1609,7 +1634,8 @@ nil ;; no auto-mode-alist ;; '(show-tabs-generic-mode-hook-fun) nil - "Generic mode to show tabs and trailing spaces") + "Generic mode to show tabs and trailing spaces" + :group 'generic-x) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; DNS modes @@ -1630,7 +1656,8 @@ ;; List of additional automode-alist expressions '("/etc/named.boot\\'") ;; List of set up functions to call - nil) + nil + :group 'generic-x) (define-generic-mode named-database-generic-mode ;; List of comment characters @@ -1643,7 +1670,8 @@ ;; List of additional automode-alist expressions nil ;; List of set up functions to call - nil) + nil + :group 'generic-x) (defvar named-database-time-string "%Y%m%d%H" "Timestring for named serial numbers.") @@ -1663,7 +1691,8 @@ ;; List of additional automode-alist expressions '("/etc/resolv[e]?.conf\\'") ;; List of set up functions to call - nil) + nil + :group 'generic-x) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Modes for spice and common electrical engineering circuit netlist formats @@ -1705,7 +1734,8 @@ (function (lambda() (setq font-lock-defaults '(generic-font-lock-keywords nil t))))) - "Generic mode for SPICE circuit netlist files.") + "Generic mode for SPICE circuit netlist files." + :group 'generic-x) (define-generic-mode ibis-generic-mode '(?|) @@ -1714,7 +1744,8 @@ ("\\(\\(_\\|\\w\\)+\\)\\s-*=" 1 font-lock-variable-name-face)) '("\\.[iI][bB][sS]\\'") '(generic-bracket-support) - "Generic mode for IBIS circuit netlist files.") + "Generic mode for IBIS circuit netlist files." + :group 'generic-x) (define-generic-mode astap-generic-mode nil @@ -1749,7 +1780,8 @@ (function (lambda() (setq font-lock-defaults '(generic-font-lock-keywords nil t))))) - "Generic mode for ASTAP circuit netlist files.") + "Generic mode for ASTAP circuit netlist files." + :group 'generic-x) (define-generic-mode etc-modules-conf-generic-mode ;; List of comment characters @@ -1791,7 +1823,8 @@ ;; List of additional automode-alist expressions '("/etc/modules.conf" "/etc/conf.modules") ;; List of set up functions to call - nil) + nil + :group 'generic-x) (provide 'generic-x) diff -r 45e5f0224d81 -r 360860a0006f lisp/generic.el --- a/lisp/generic.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/generic.el Mon Apr 04 16:43:15 2005 +0000 @@ -185,7 +185,8 @@ ;;;###autoload (defmacro define-generic-mode (mode comment-list keyword-list font-lock-list auto-mode-list - function-list &optional docstring) + function-list &optional docstring + &rest custom-keyword-args) "Create a new generic mode MODE. MODE is the name of the command for the generic mode; it need not @@ -216,59 +217,90 @@ FUNCTION-LIST is a list of functions to call to do some additional setup. +The optional CUSTOM-KEYWORD-ARGS are pairs of keywords and +values. They will be passed to the generated `defcustom' form of +the mode hook variable MODE-hook. You can specify keyword +arguments without specifying a docstring. + See the file generic-x.el for some examples of `define-generic-mode'." - (let* ((name-unquoted (if (eq (car-safe mode) 'quote) ; Backward compatibility. - (eval mode) - mode)) - (name-string (symbol-name name-unquoted)) + (declare (debug (sexp def-form def-form def-form form def-form + &optional stringp)) + (indent 1)) + + ;; Backward compatibility. + (when (eq (car-safe mode) 'quote) + (setq mode (eval mode))) + + (when (and docstring (not (stringp docstring))) + ;; DOCSTRING is not a string so we assume that it's actually the + ;; first keyword of CUSTOM-KEYWORD-ARGS. + (push docstring custom-keyword-args) + (setq docstring nil)) + + (let* ((mode-name (symbol-name mode)) (pretty-name (capitalize (replace-regexp-in-string - "-mode\\'" "" name-string)))) + "-mode\\'" "" mode-name))) + (mode-hook (intern (concat mode-name "-hook")))) + + (unless (plist-get custom-keyword-args :group) + (setq custom-keyword-args + (plist-put custom-keyword-args + :group `(or (custom-current-group) + ',(intern (replace-regexp-in-string + "-mode\\'" "" mode-name)))))) `(progn ;; Add a new entry. - (add-to-list 'generic-mode-list ,name-string) + (add-to-list 'generic-mode-list ,mode-name) ;; Add it to auto-mode-alist (dolist (re ,auto-mode-list) - (add-to-list 'auto-mode-alist (cons re ',name-unquoted))) + (add-to-list 'auto-mode-alist (cons re ',mode))) - (defun ,name-unquoted () + (defcustom ,mode-hook nil + ,(concat "Hook run when entering " pretty-name " mode.") + :type 'hook + ,@custom-keyword-args) + + (defun ,mode () ,(or docstring (concat pretty-name " mode.\n" "This a generic mode defined with `define-generic-mode'.")) (interactive) - (generic-mode-internal ',name-unquoted ,comment-list ,keyword-list + (generic-mode-internal ',mode ,comment-list ,keyword-list ,font-lock-list ,function-list))))) ;;;###autoload -(defun generic-mode-internal (mode comments keywords font-lock-list funs) +(defun generic-mode-internal (mode comment-list keyword-list + font-lock-list function-list) "Go into the generic mode MODE." - (let* ((modename (symbol-name mode)) - (generic-mode-hooks (intern (concat modename "-hook"))) + (let* ((mode-name (symbol-name mode)) (pretty-name (capitalize (replace-regexp-in-string - "-mode\\'" "" modename)))) + "-mode\\'" "" mode-name))) + (mode-hook (intern (concat mode-name "-hook")))) (kill-all-local-variables) (setq major-mode mode mode-name pretty-name) - (generic-mode-set-comments comments) + (generic-mode-set-comments comment-list) ;; Font-lock functionality. ;; Font-lock-defaults is always set even if there are no keywords ;; or font-lock expressions, so comments can be highlighted. (setq generic-font-lock-keywords (append - (when keywords - (list (generic-make-keywords-list keywords font-lock-keyword-face))) + (when keyword-list + (list (generic-make-keywords-list keyword-list + font-lock-keyword-face))) font-lock-list)) (setq font-lock-defaults '(generic-font-lock-keywords nil)) ;; Call a list of functions - (mapcar 'funcall funs) + (mapcar 'funcall function-list) - (run-hooks generic-mode-hooks))) + (run-mode-hooks mode-hook))) ;;;###autoload (defun generic-mode (mode) @@ -359,7 +391,7 @@ imenu-case-fold-search t)) ;; This generic mode is always defined -(define-generic-mode default-generic-mode (list ?#) nil nil nil nil) +(define-generic-mode default-generic-mode (list ?#) nil nil nil nil :group 'generic) ;; A more general solution would allow us to enter generic-mode for ;; *any* comment character, but would require us to synthesize a new @@ -392,7 +424,7 @@ (defun generic-mode-ini-file-find-file-hook () "Hook function to enter Default-Generic mode automatically for INI files. -Done if the first few lines of a file in Fundamental mode look like an +Done if the first few lines of a file in Fundamental mode look like an INI file. This hook is NOT installed by default." (and (eq major-mode 'fundamental-mode) (save-excursion diff -r 45e5f0224d81 -r 360860a0006f lisp/gnus/ChangeLog --- a/lisp/gnus/ChangeLog Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/gnus/ChangeLog Mon Apr 04 16:43:15 2005 +0000 @@ -1,3 +1,99 @@ +2005-04-03 Katsumi Yamaoka + + * gnus-sum.el (gnus-summary-make-menu-bar): Fix an + "unrecognised menu descriptor" error. + +2005-03-25 Katsumi Yamaoka + + * message.el (message-resend): Bind rfc2047-encode-encoded-words. + + * mm-util.el (mm-replace-in-string): New function. + (mm-xemacs-find-mime-charset-1): Ignore errors while loading + latin-unity, which cannot be used with XEmacs 21.1. + + * rfc2047.el (rfc2047-encode-function-alist): Rename from + rfc2047-encoding-function-alist in order to avoid conflicting with + the old version. + (rfc2047-encode-message-header): Remove useless goto-char. + (rfc2047-encodable-p): Don't move point. + (rfc2047-syntax-table): Treat `(' and `)' as is. + (rfc2047-encode-region): Concatenate words containing non-ASCII + characters in structured fields; don't encode space-delimited + ASCII words even in unstructured fields; don't break words at + char-category boundaries; encode encoded words in structured + fields; treat text within parentheses as special; show the + original text when error has occurred; move point to the end of + the region after encoding, suggested by IRIE Tetsuya + ; treat backslash-quoted characters as + non-special; check carefully whether to encode special characters; + fix some kind of misconfigured headers; signal a real error if + debug-on-quit or debug-on-error is non-nil; don't infloop, + suggested by Hiroshi Fujishima ; assume + the close parenthesis may be included in the encoded word; encode + bogus delimiters. + (rfc2047-encode-string): Use mm-with-multibyte-buffer. + (rfc2047-encode-max-chars): New variable. + (rfc2047-encode-1): New function. + (rfc2047-encode): Use it; encode text so that it occupies the + maximum width within 76-column; work correctly on Q encoding for + iso-2022-* charsets; fold the line before encoding; don't append a + space if the encoded word includes close parenthesis. + (rfc2047-fold-region): Use existing whitespace for LWSP; make it + sure not to break a line just after the header name. + (rfc2047-b-encode-region): Remove. + (rfc2047-b-encode-string): New function. + (rfc2047-q-encode-region): Remove. + (rfc2047-q-encode-string): New function. + (rfc2047-encode-parameter): New function. + (rfc2047-encoded-word-regexp): Don't use shy group. + (rfc2047-decode-region): Follow rfc2047-encoded-word-regexp change. + (rfc2047-parse-and-decode): Ditto. + (rfc2047-decode): Treat the ascii coding-system as raw-text by + default. + +2005-03-25 Lars Magne Ingebrigtsen + + * rfc2047.el (rfc2047-encode-encoded-words): New variable. + (rfc2047-field-value): Strip props. + (rfc2047-encode-message-header): Disabled header folding -- not + all headers can be folded, and this should be done by the message + composition mode. Probably. I think. + (rfc2047-encodable-p): Say that =? needs encoding. + (rfc2047-encode-region): Encode =? strings. + +2005-03-25 Jesper Harder + + * rfc2047.el (rfc2047-encoded-word-regexp): Support RFC 2231 + language tags; remove unnecessary '+'. Reported by Stefan Wiens + . + (rfc2047-decode-string): Don't cons a string unnecessarily. + (rfc2047-parse-and-decode, rfc2047-decode): Use a character for + the encoding to avoid consing a string. + (rfc2047-decode): Use mm-subst-char-in-string instead of + mm-replace-chars-in-string. + +2005-03-25 TSUCHIYA Masatoshi + + * rfc2047.el (rfc2047-encode): Use uppercase letters to specify + encodings of MIME-encoded words, in order to improve + interoperability with several broken MUAs. + +2005-03-21 Reiner Steib + + * gnus-srvr.el (gnus-browse-select-group): Add NUMBER argument and + pass it to `gnus-browse-read-group'. + (gnus-browse-read-group): Add NUMBER argument and pass it to + `gnus-group-read-ephemeral-group'. + + * gnus-group.el (gnus-group-read-ephemeral-group): Add NUMBER + argument and pass it to `gnus-group-read-group'. + +2005-03-19 Aidan Kehoe + + * mm-util.el (mm-xemacs-find-mime-charset): Only call + mm-xemacs-find-mime-charset-1 if we have the mule feature + available at runtime. + 2005-03-25 Werner Lemberg * nnmaildir.el: Replace `illegal' with `invalid'. @@ -618,7 +714,7 @@ unless plugged. Disable the agent so that an open failure causes an error. -2004-10-18 Kevin Greiner for Reiner Steib +2004-10-18 Reiner Steib * gnus-agent.el (gnus-agent-fetched-hook): Add :version. (gnus-agent-go-online): Change :version. @@ -660,21 +756,21 @@ (gnus-convert-mark-converter-prompt) (gnus-convert-converter-needs-prompt): Fix use of property list. -2004-10-18 Kevin Greiner for Katsumi Yamaoka +2004-10-18 Katsumi Yamaoka * gnus-agent.el (gnus-agent-restore-gcc): Use ^ and regexp-quote. -2004-10-18 Kevin Greiner for Lars Magne Ingebrigtsen +2004-10-18 Lars Magne Ingebrigtsen * gnus-start.el (gnus-get-unread-articles-in-group): Don't do stuff for non-living groups. -2004-10-18 Kevin Greiner for Lars Magne Ingebrigtsen +2004-10-18 Lars Magne Ingebrigtsen * gnus-agent.el (gnus-agent-synchronize-flags): Default to nil. (gnus-agent-regenerate-group): Using nil messages aren't valid. -2004-10-18 Kevin Greiner for Lars Magne Ingebrigtsen +2004-10-18 Lars Magne Ingebrigtsen * gnus-agent.el (gnus-agent-read-agentview): Inline gnus-uncompress-range. @@ -691,7 +787,7 @@ message-send-mail-function. The change makes the agent real-time responsive to user changes to message-send-mail-function. -2004-10-18 Kevin Greiner for Reiner Steib +2004-10-18 Reiner Steib * gnus-start.el (gnus-get-unread-articles): Fix last commit. @@ -732,12 +828,12 @@ * gnus-util.el (gnus-rename-file): New function. -2004-10-18 Kevin Greiner for Katsumi Yamaoka +2004-10-18 Katsumi Yamaoka * gnus-agent.el (gnus-agent-regenerate-group): Activate the group when the group's active is not available. -2004-10-18 Kevin Greiner for Katsumi Yamaoka +2004-10-18 Katsumi Yamaoka * gnus-agent.el (gnus-agent-read-agentview): Add a missing arg to error. diff -r 45e5f0224d81 -r 360860a0006f lisp/gnus/gnus-group.el --- a/lisp/gnus/gnus-group.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/gnus/gnus-group.el Mon Apr 04 16:43:15 2005 +0000 @@ -1984,7 +1984,8 @@ (defun gnus-group-read-ephemeral-group (group method &optional activate quit-config request-only select-articles - parameters) + parameters + number) "Read GROUP from METHOD as an ephemeral group. If ACTIVATE, request the group first. If QUIT-CONFIG, use that window configuration when exiting from the @@ -1992,6 +1993,7 @@ If REQUEST-ONLY, don't actually read the group; just request it. If SELECT-ARTICLES, only select those articles. If PARAMETERS, use those as the group parameters. +If NUMBER, fetch this number of articles. Return the name of the group if selection was successful." (interactive @@ -2039,7 +2041,7 @@ (when (let ((gnus-large-newsgroup gnus-large-ephemeral-newsgroup) (gnus-fetch-old-headers gnus-fetch-old-ephemeral-headers)) - (gnus-group-read-group t t group select-articles)) + (gnus-group-read-group (or number t) t group select-articles)) group) ;;(error nil) (quit diff -r 45e5f0224d81 -r 360860a0006f lisp/gnus/gnus-srvr.el --- a/lisp/gnus/gnus-srvr.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/gnus/gnus-srvr.el Mon Apr 04 16:43:15 2005 +0000 @@ -851,23 +851,26 @@ (setq buffer-read-only t) (gnus-run-hooks 'gnus-browse-mode-hook)) -(defun gnus-browse-read-group (&optional no-article) - "Enter the group at the current line." - (interactive) +(defun gnus-browse-read-group (&optional no-article number) + "Enter the group at the current line. +If NUMBER, fetch this number of articles." + (interactive "P") (let ((group (gnus-browse-group-name))) (if (or (not (gnus-get-info group)) (gnus-ephemeral-group-p group)) (unless (gnus-group-read-ephemeral-group group gnus-browse-current-method nil - (cons (current-buffer) 'browse)) + (cons (current-buffer) 'browse) + nil nil nil number) (error "Couldn't enter %s" group)) (unless (gnus-group-read-group nil no-article group) (error "Couldn't enter %s" group))))) -(defun gnus-browse-select-group () - "Select the current group." - (interactive) - (gnus-browse-read-group 'no)) +(defun gnus-browse-select-group (&optional number) + "Select the current group. +If NUMBER, fetch this number of articles." + (interactive "P") + (gnus-browse-read-group 'no number)) (defun gnus-browse-next-group (n) "Go to the next group." diff -r 45e5f0224d81 -r 360860a0006f lisp/gnus/gnus-sum.el --- a/lisp/gnus/gnus-sum.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/gnus/gnus-sum.el Mon Apr 04 16:43:15 2005 +0000 @@ -2250,7 +2250,7 @@ ,@(if (featurep 'xemacs) '(t) '(:help "Generate and print a PostScript image"))]) ("Copy, move,... (Backend)" - ,@(if (featurep 'xemacs) '(t) + ,@(if (featurep 'xemacs) nil '(:help "Copying, moving, expiring articles...")) ["Respool article..." gnus-summary-respool-article t] ["Move article..." gnus-summary-move-article diff -r 45e5f0224d81 -r 360860a0006f lisp/gnus/message.el --- a/lisp/gnus/message.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/gnus/message.el Mon Apr 04 16:43:15 2005 +0000 @@ -6364,7 +6364,8 @@ (replace-match "X-From-Line: ")) ;; Send it. (let ((message-inhibit-body-encoding t) - message-required-mail-headers) + message-required-mail-headers + rfc2047-encode-encoded-words) (message-send-mail)) (kill-buffer (current-buffer))) (message "Resending message to %s...done" address))) diff -r 45e5f0224d81 -r 360860a0006f lisp/gnus/mm-util.el --- a/lisp/gnus/mm-util.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/gnus/mm-util.el Mon Apr 04 16:43:15 2005 +0000 @@ -86,6 +86,32 @@ (multibyte-char-to-unibyte . identity)))) (eval-and-compile + (cond + ((fboundp 'replace-in-string) + (defalias 'mm-replace-in-string 'replace-in-string)) + ((fboundp 'replace-regexp-in-string) + (defun mm-replace-in-string (string regexp newtext &optional literal) + "Replace all matches for REGEXP with NEWTEXT in STRING. +If LITERAL is non-nil, insert NEWTEXT literally. Return a new +string containing the replacements. + +This is a compatibility function for different Emacsen." + (replace-regexp-in-string regexp newtext string nil literal))) + (t + (defun mm-replace-in-string (string regexp newtext &optional literal) + "Replace all matches for REGEXP with NEWTEXT in STRING. +If LITERAL is non-nil, insert NEWTEXT literally. Return a new +string containing the replacements. + +This is a compatibility function for different Emacsen." + (let ((start 0) tail) + (while (string-match regexp string start) + (setq tail (- (length string) (match-end 0))) + (setq string (replace-match newtext nil literal string)) + (setq start (- (length string) tail)))) + string)))) + +(eval-and-compile (defalias 'mm-char-or-char-int-p (cond ((fboundp 'char-or-char-int-p) 'char-or-char-int-p) @@ -606,7 +632,7 @@ ;; Load the Latin Unity library, if available. (when (and (not (featurep 'latin-unity)) (locate-library "latin-unity")) - (require 'latin-unity)) + (ignore-errors (require 'latin-unity))) ;; Now, can we use it? (if (featurep 'latin-unity) @@ -651,7 +677,7 @@ (defmacro mm-xemacs-find-mime-charset (begin end) (when (featurep 'xemacs) - `(mm-xemacs-find-mime-charset-1 ,begin ,end))) + `(and (featurep 'mule) (mm-xemacs-find-mime-charset-1 ,begin ,end)))) (defun mm-find-mime-charset-region (b e &optional hack-charsets) "Return the MIME charsets needed to encode the region between B and E. diff -r 45e5f0224d81 -r 360860a0006f lisp/gnus/rfc2047.el --- a/lisp/gnus/rfc2047.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/gnus/rfc2047.el Mon Apr 04 16:43:15 2005 +0000 @@ -119,12 +119,15 @@ Valid encodings are nil, `Q' and `B'. These indicate binary (no) encoding, quoted-printable and base64 respectively.") -(defvar rfc2047-encoding-function-alist - '((Q . rfc2047-q-encode-region) - (B . rfc2047-b-encode-region) - (nil . ignore)) +(defvar rfc2047-encode-function-alist + '((Q . rfc2047-q-encode-string) + (B . rfc2047-b-encode-string) + (nil . identity)) "Alist of RFC2047 encodings to encoding functions.") +(defvar rfc2047-encode-encoded-words t + "Whether encoded words should be encoded again.") + ;;; ;;; Functions for encoding RFC2047 messages ;;; @@ -166,7 +169,7 @@ (save-restriction (rfc2047-narrow-to-field) (re-search-forward ":[ \t\n]*" nil t) - (buffer-substring (point) (point-max))))) + (buffer-substring-no-properties (point) (point-max))))) (defvar rfc2047-encoding-type 'address-mime "The type of encoding done by `rfc2047-encode-region'. @@ -186,24 +189,25 @@ (rfc2047-narrow-to-field) (if (not (rfc2047-encodable-p)) (prog1 - (if (and (eq (mm-body-7-or-8) '8bit) - (mm-multibyte-p) - (mm-coding-system-p - (car message-posting-charset))) - ;; 8 bit must be decoded. - (mm-encode-coding-region - (point-min) (point-max) - (mm-charset-to-coding-system - (car message-posting-charset)))) + (if (and (eq (mm-body-7-or-8) '8bit) + (mm-multibyte-p) + (mm-coding-system-p + (car message-posting-charset))) + ;; 8 bit must be decoded. + (mm-encode-coding-region + (point-min) (point-max) + (mm-charset-to-coding-system + (car message-posting-charset)))) ;; No encoding necessary, but folding is nice - (rfc2047-fold-region - (save-excursion - (goto-char (point-min)) - (skip-chars-forward "^:") - (when (looking-at ": ") - (forward-char 2)) - (point)) - (point-max))) + (when nil + (rfc2047-fold-region + (save-excursion + (goto-char (point-min)) + (skip-chars-forward "^:") + (when (looking-at ": ") + (forward-char 2)) + (point)) + (point-max)))) ;; We found something that may perhaps be encoded. (setq method nil alist rfc2047-header-encoding-alist) @@ -213,7 +217,6 @@ (eq (car elem) t)) (setq alist nil method (cdr elem)))) - (goto-char (point-min)) (re-search-forward "^[^:]+: *" nil t) (cond ((eq method 'address-mime) @@ -267,8 +270,13 @@ (require 'message) ; for message-posting-charset (let ((charsets (mm-find-mime-charset-region (point-min) (point-max)))) - (and charsets - (not (equal charsets (list (car message-posting-charset))))))) + (goto-char (point-min)) + (or (and rfc2047-encode-encoded-words + (prog1 + (search-forward "=?" nil t) + (goto-char (point-min)))) + (and charsets + (not (equal charsets (list (car message-posting-charset)))))))) ;; Use this syntax table when parsing into regions that may need ;; encoding. Double quotes are string delimiters, backslash is @@ -292,8 +300,8 @@ table)))) (modify-syntax-entry ?\\ "\\" table) (modify-syntax-entry ?\" "\"" table) - (modify-syntax-entry ?\( "." table) - (modify-syntax-entry ?\) "." table) + (modify-syntax-entry ?\( "(" table) + (modify-syntax-entry ?\) ")" table) (modify-syntax-entry ?\< "." table) (modify-syntax-entry ?\> "." table) (modify-syntax-entry ?\[ "." table) @@ -310,183 +318,341 @@ Dynamically bind `rfc2047-encoding-type' to change that." (save-restriction (narrow-to-region b e) - (if (eq 'mime rfc2047-encoding-type) - ;; Simple case. Treat as single word after any initial ASCII - ;; part and before any tailing ASCII part. The leading ASCII - ;; is relevant for instance in Subject headers with `Re:' for - ;; interoperability with non-MIME clients, and we might as - ;; well avoid the tail too. - (progn + (let ((encodable-regexp (if rfc2047-encode-encoded-words + "[^\000-\177]+\\|=\\?" + "[^\000-\177]+")) + start ; start of current token + end begin csyntax + ;; Whether there's an encoded word before the current token, + ;; either immediately or separated by space. + last-encoded + (orig-text (buffer-substring-no-properties b e))) + (if (eq 'mime rfc2047-encoding-type) + ;; Simple case. Continuous words in which all those contain + ;; non-ASCII characters are encoded collectively. Encoding + ;; ASCII words, including `Re:' used in Subject headers, is + ;; avoided for interoperability with non-MIME clients and + ;; for making it easy to find keywords. + (progn + (goto-char (point-min)) + (while (progn (skip-chars-forward " \t\n") + (not (eobp))) + (setq start (point)) + (while (and (looking-at "[ \t\n]*\\([^ \t\n]+\\)") + (progn + (setq end (match-end 0)) + (re-search-forward encodable-regexp end t))) + (goto-char end)) + (if (> (point) start) + (rfc2047-encode start (point)) + (goto-char end)))) + ;; `address-mime' case -- take care of quoted words, comments. + (with-syntax-table rfc2047-syntax-table (goto-char (point-min)) - ;; Does it need encoding? - (skip-chars-forward "\000-\177") - (unless (eobp) - (skip-chars-backward "^ \n") ; beginning of space-delimited word - (rfc2047-encode (point) (progn - (goto-char e) - (skip-chars-backward "\000-\177") - (skip-chars-forward "^ \n") - ;; end of space-delimited word - (point))))) - ;; `address-mime' case -- take care of quoted words, comments. - (with-syntax-table rfc2047-syntax-table - (let ((start) ; start of current token - end ; end of current token - ;; Whether there's an encoded word before the current - ;; token, either immediately or separated by space. - last-encoded) - (goto-char (point-min)) - (condition-case nil ; in case of unbalanced quotes + (condition-case err ; in case of unbalanced quotes ;; Look for rfc2822-style: sequences of atoms, quoted ;; strings, specials, whitespace. (Specials mustn't be ;; encoded.) (while (not (eobp)) + ;; Skip whitespace. + (skip-chars-forward " \t\n") (setq start (point)) - ;; Skip whitespace. - (unless (= 0 (skip-chars-forward " \t\n")) - (setq start (point))) (cond ((not (char-after))) ; eob ;; else token start - ((eq ?\" (char-syntax (char-after))) + ((eq ?\" (setq csyntax (char-syntax (char-after)))) ;; Quoted word. (forward-sexp) (setq end (point)) ;; Does it need encoding? (goto-char start) - (skip-chars-forward "\000-\177" end) - (if (= end (point)) - (setq last-encoded nil) - ;; It needs encoding. Strip the quotes first, - ;; since encoded words can't occur in quotes. - (goto-char end) - (delete-backward-char 1) - (goto-char start) - (delete-char 1) - (when last-encoded - ;; There was a preceding quoted word. We need - ;; to include any separating whitespace in this - ;; word to avoid it getting lost. - (skip-chars-backward " \t") - ;; A space is needed between the encoded words. - (insert ? ) - (setq start (point) - end (1+ end))) - ;; Adjust the end position for the deleted quotes. - (rfc2047-encode start (- end 2)) - (setq last-encoded t))) ; record that it was encoded - ((eq ?. (char-syntax (char-after))) + (if (re-search-forward encodable-regexp end 'move) + ;; It needs encoding. Strip the quotes first, + ;; since encoded words can't occur in quotes. + (progn + (goto-char end) + (delete-backward-char 1) + (goto-char start) + (delete-char 1) + (when last-encoded + ;; There was a preceding quoted word. We need + ;; to include any separating whitespace in this + ;; word to avoid it getting lost. + (skip-chars-backward " \t") + ;; A space is needed between the encoded words. + (insert ? ) + (setq start (point) + end (1+ end))) + ;; Adjust the end position for the deleted quotes. + (rfc2047-encode start (- end 2)) + (setq last-encoded t)) ; record that it was encoded + (setq last-encoded nil))) + ((eq ?. csyntax) ;; Skip other delimiters, but record that they've ;; potentially separated quoted words. (forward-char) (setq last-encoded nil)) + ((eq ?\) csyntax) + (error "Unbalanced parentheses")) + ((eq ?\( csyntax) + ;; Look for the end of parentheses. + (forward-list) + ;; Encode text as an unstructured field. + (let ((rfc2047-encoding-type 'mime)) + (rfc2047-encode-region (1+ start) (1- (point)))) + (skip-chars-forward ")")) (t ; normal token/whitespace sequence ;; Find the end. - (forward-word 1) - (skip-chars-backward " \t") + ;; Skip one ASCII word, or encode continuous words + ;; in which all those contain non-ASCII characters. + (setq end nil) + (while (not (or end (eobp))) + (when (looking-at "[\000-\177]+") + (setq begin (point) + end (match-end 0)) + (when (progn + (while (and (or (re-search-forward + "[ \t\n]\\|\\Sw" end 'move) + (setq end nil)) + (eq ?\\ (char-syntax (char-before)))) + ;; Skip backslash-quoted characters. + (forward-char)) + end) + (setq end (match-beginning 0)) + (if rfc2047-encode-encoded-words + (progn + (goto-char begin) + (when (search-forward "=?" end 'move) + (goto-char (match-beginning 0)) + (setq end nil))) + (goto-char end)))) + ;; Where the value nil of `end' means there may be + ;; text to have to be encoded following the point. + ;; Otherwise, the point reached to the end of ASCII + ;; words separated by whitespace or a special char. + (unless end + (when (looking-at encodable-regexp) + (goto-char (setq begin (match-end 0))) + (while (and (looking-at "[ \t\n]+\\([^ \t\n]+\\)") + (setq end (match-end 0)) + (progn + (while (re-search-forward + encodable-regexp end t)) + (< begin (point))) + (goto-char begin) + (or (not (re-search-forward "\\Sw" end t)) + (progn + (goto-char (match-beginning 0)) + nil))) + (goto-char end)) + (when (looking-at "[^ \t\n]+") + (setq end (match-end 0)) + (if (re-search-forward "\\Sw+" end t) + ;; There are special characters better + ;; to be encoded so that MTAs may parse + ;; them safely. + (cond ((= end (point))) + ((looking-at (concat "\\sw*\\(" + encodable-regexp + "\\)")) + (setq end nil)) + (t + (goto-char (1- (match-end 0))) + (unless (= (point) (match-beginning 0)) + ;; Separate encodable text and + ;; delimiter. + (insert " ")))) + (goto-char end) + (skip-chars-forward " \t\n") + (if (and (looking-at "[^ \t\n]+") + (string-match encodable-regexp + (match-string 0))) + (setq end nil) + (goto-char end))))))) + (skip-chars-backward " \t\n") (setq end (point)) - ;; Deal with encoding and leading space as for - ;; quoted words. (goto-char start) - (skip-chars-forward "\000-\177" end) - (if (= end (point)) - (setq last-encoded nil) - (when last-encoded - (goto-char start) - (skip-chars-backward " \t") - (insert ? ) - (setq start (point) - end (1+ end))) - (rfc2047-encode start end) - (setq last-encoded t))))) + (if (re-search-forward encodable-regexp end 'move) + (progn + (unless (memq (char-before start) '(nil ?\t ? )) + (if (progn + (goto-char start) + (skip-chars-backward "^ \t\n") + (and (looking-at "\\Sw+") + (= (match-end 0) start))) + ;; Also encode bogus delimiters. + (setq start (point)) + ;; Separate encodable text and delimiter. + (goto-char start) + (insert " ") + (setq start (1+ start) + end (1+ end)))) + (rfc2047-encode start end) + (setq last-encoded t)) + (setq last-encoded nil))))) (error - (error "Invalid data for rfc2047 encoding: %s" - (buffer-substring b e))))))) - (rfc2047-fold-region b (point)))) + (if (or debug-on-quit debug-on-error) + (signal (car err) (cdr err)) + (error "Invalid data for rfc2047 encoding: %s" + (mm-replace-in-string orig-text "[ \t\n]+" " ")))))))) + (rfc2047-fold-region b (point)) + (goto-char (point-max)))) (defun rfc2047-encode-string (string) "Encode words in STRING. By default, the string is treated as containing addresses (see `rfc2047-encoding-type')." - (with-temp-buffer + (mm-with-multibyte-buffer (insert string) (rfc2047-encode-region (point-min) (point-max)) (buffer-string))) +(defvar rfc2047-encode-max-chars 76 + "Maximum characters of each header line that contain encoded-words. +If it is nil, encoded-words will not be folded. Too small value may +cause an error. Don't change this for no particular reason.") + +(defun rfc2047-encode-1 (column string cs encoder start crest tail + &optional eword) + "Subroutine used by `rfc2047-encode'." + (cond ((string-equal string "") + (or eword "")) + ((not rfc2047-encode-max-chars) + (concat start + (funcall encoder (if cs + (mm-encode-coding-string string cs) + string)) + "?=")) + ((>= column rfc2047-encode-max-chars) + (when eword + (cond ((string-match "\n[ \t]+\\'" eword) + ;; Reomove a superfluous empty line. + (setq eword (substring eword 0 (match-beginning 0)))) + ((string-match "(+\\'" eword) + ;; Break the line before the open parenthesis. + (setq crest (concat crest (match-string 0 eword)) + eword (substring eword 0 (match-beginning 0)))))) + (rfc2047-encode-1 (length crest) string cs encoder start " " tail + (concat eword "\n" crest))) + (t + (let ((index 0) + (limit (1- (length string))) + (prev "") + next len) + (while (and prev + (<= index limit)) + (setq next (concat start + (funcall encoder + (if cs + (mm-encode-coding-string + (substring string 0 (1+ index)) + cs) + (substring string 0 (1+ index)))) + "?=") + len (+ column (length next))) + (if (> len rfc2047-encode-max-chars) + (setq next prev + prev nil) + (if (or (< index limit) + (<= (+ len (or (string-match "\n" tail) + (length tail))) + rfc2047-encode-max-chars)) + (setq prev next + index (1+ index)) + (if (string-match "\\`)+" tail) + ;; Break the line after the close parenthesis. + (setq tail (concat (substring tail 0 (match-end 0)) + "\n " + (substring tail (match-end 0))) + prev next + index (1+ index)) + (setq next prev + prev nil))))) + (if (> index limit) + (concat eword next tail) + (if (= 0 index) + (if (and eword + (string-match "(+\\'" eword)) + (setq crest (concat crest (match-string 0 eword)) + eword (substring eword 0 (match-beginning 0))) + (setq eword (concat eword next))) + (setq crest " " + eword (concat eword next))) + (when (string-match "\n[ \t]+\\'" eword) + ;; Reomove a superfluous empty line. + (setq eword (substring eword 0 (match-beginning 0)))) + (rfc2047-encode-1 (length crest) (substring string index) + cs encoder start " " tail + (concat eword "\n" crest))))))) + (defun rfc2047-encode (b e) "Encode the word(s) in the region B to E. -By default, the region is treated as containing addresses (see -`rfc2047-encoding-type')." - (let* ((mime-charset (mm-find-mime-charset-region b e)) - (cs (if (> (length mime-charset) 1) - ;; Fixme: Instead of this, try to break region into - ;; parts that can be encoded separately. - (error "Can't rfc2047-encode `%s'" - (buffer-substring b e)) - (setq mime-charset (car mime-charset)) - (mm-charset-to-coding-system mime-charset))) - ;; Fixme: Better, calculate the number of non-ASCII - ;; characters, at least for 8-bit charsets. - (encoding (or (cdr (assq mime-charset +Point moves to the end of the region." + (let ((mime-charset (or (mm-find-mime-charset-region b e) (list 'us-ascii))) + cs encoding tail crest eword) + (cond ((> (length mime-charset) 1) + (error "Can't rfc2047-encode `%s'" + (buffer-substring-no-properties b e))) + ((= (length mime-charset) 1) + (setq mime-charset (car mime-charset) + cs (mm-charset-to-coding-system mime-charset)) + (unless (and (mm-multibyte-p) + (mm-coding-system-p cs)) + (setq cs nil)) + (save-restriction + (narrow-to-region b e) + (setq encoding + (or (cdr (assq mime-charset rfc2047-charset-encoding-alist)) ;; For the charsets that don't have a preferred ;; encoding, choose the one that's shorter. - (save-restriction - (narrow-to-region b e) - (if (eq (rfc2047-qp-or-base64) 'base64) - 'B - 'Q)))) - (start (concat - "=?" (downcase (symbol-name mime-charset)) "?" - (downcase (symbol-name encoding)) "?")) - (factor (case mime-charset - ((iso-8859-5 iso-8859-7 iso-8859-8 koi8-r) 1) - ((big5 gb2312 euc-kr) 2) - (utf-8 4) - (t 8))) - (pre (- b (save-restriction - (widen) - (rfc2047-point-at-bol)))) - ;; encoded-words must not be longer than 75 characters, - ;; including charset, encoding etc. This leaves us with - ;; 75 - (length start) - 2 - 2 characters. The last 2 is for - ;; possible base64 padding. In the worst case (iso-2022-*) - ;; each character expands to 8 bytes which is expanded by a - ;; factor of 4/3 by base64 encoding. - (length (floor (- 75 (length start) 4) (* factor (/ 4.0 3.0)))) - ;; Limit line length to 76 characters. - (length1 (max 1 (floor (- 76 (length start) 4 pre) - (* factor (/ 4.0 3.0))))) - (first t)) - (if mime-charset - (save-restriction - (narrow-to-region b e) - (when (eq encoding 'B) - ;; break into lines before encoding - (goto-char (point-min)) - (while (not (eobp)) - (if first - (progn - (goto-char (min (point-max) (+ length1 (point)))) - (setq first nil)) - (goto-char (min (point-max) (+ length (point))))) - (unless (eobp) - (insert ?\n))) - (setq first t)) - (if (and (mm-multibyte-p) - (mm-coding-system-p cs)) - (mm-encode-coding-region (point-min) (point-max) cs)) - (funcall (cdr (assq encoding rfc2047-encoding-function-alist)) - (point-min) (point-max)) - (goto-char (point-min)) - (while (not (eobp)) - (unless first - (insert ? )) - (setq first nil) - (insert start) - (end-of-line) - (insert "?=") - (forward-line 1)))))) + (if (eq (rfc2047-qp-or-base64) 'base64) + 'B + 'Q))) + (widen) + (goto-char e) + (skip-chars-forward "^ \t\n") + ;; `tail' may contain a close parenthesis. + (setq tail (buffer-substring-no-properties e (point))) + (goto-char b) + (setq b (point-marker) + e (set-marker (make-marker) e)) + (rfc2047-fold-region (rfc2047-point-at-bol) b) + (goto-char b) + (skip-chars-backward "^ \t\n") + (unless (= 0 (skip-chars-backward " \t")) + ;; `crest' may contain whitespace and an open parenthesis. + (setq crest (buffer-substring-no-properties (point) b))) + (setq eword (rfc2047-encode-1 + (- b (rfc2047-point-at-bol)) + (mm-replace-in-string + (buffer-substring-no-properties b e) + "\n\\([ \t]?\\)" "\\1") + cs + (or (cdr (assq encoding + rfc2047-encode-function-alist)) + 'identity) + (concat "=?" (downcase (symbol-name mime-charset)) + "?" (upcase (symbol-name encoding)) "?") + (or crest " ") + tail)) + (delete-region (if (eq (aref eword 0) ?\n) + (if (bolp) + ;; The line was folded before encoding. + (1- (point)) + (point)) + (goto-char b)) + (+ e (length tail))) + ;; `eword' contains `crest' and `tail'. + (insert eword) + (set-marker b nil) + (set-marker e nil) + (unless (or (/= 0 (length tail)) + (eobp) + (looking-at "[ \t\n)]")) + (insert " ")))) + (t + (goto-char e))))) (defun rfc2047-fold-field () "Fold the current header field." @@ -512,6 +678,7 @@ (goto-char (or break qword-break)) (setq break nil qword-break nil) + (skip-chars-backward " \t") (if (looking-at "[ \t]") (insert ?\n) (insert "\n ")) @@ -533,10 +700,8 @@ (forward-char 1)) ((memq (char-after) '(? ?\t)) (skip-chars-forward " \t") - (if first - ;; Don't break just after the header name. - (setq first nil) - (setq break (1- (point))))) + (unless first ;; Don't break just after the header name. + (setq break (point)))) ((not break) (if (not (looking-at "=\\?[^=]")) (if (eq (char-after) ?=) @@ -547,15 +712,17 @@ (setq qword-break (point))) (skip-chars-forward "^ \t\n\r"))) (t - (skip-chars-forward "^ \t\n\r")))) + (skip-chars-forward "^ \t\n\r"))) + (setq first nil)) (when (and (or break qword-break) (> (- (point) bol) 76)) (goto-char (or break qword-break)) (setq break nil qword-break nil) - (if (looking-at "[ \t]") - (insert ?\n) - (insert "\n ")) + (if (or (> 0 (skip-chars-backward " \t")) + (looking-at "[ \t]")) + (insert ?\n) + (insert "\n ")) (setq bol (1- (point))) ;; Don't break before the first non-LWSP characters. (skip-chars-forward " \t") @@ -590,48 +757,48 @@ (setq eol (rfc2047-point-at-eol)) (forward-line 1))))) -(defun rfc2047-b-encode-region (b e) - "Base64-encode the header contained in region B to E." - (save-restriction - (narrow-to-region (goto-char b) e) - (while (not (eobp)) - (base64-encode-region (point) (progn (end-of-line) (point)) t) - (if (and (bolp) (eolp)) - (delete-backward-char 1)) - (forward-line)))) +(defun rfc2047-b-encode-string (string) + "Base64-encode the header contained in STRING." + (base64-encode-string string t)) -(defun rfc2047-q-encode-region (b e) - "Quoted-printable-encode the header in region B to E." - (save-excursion - (save-restriction - (narrow-to-region (goto-char b) e) - (let ((bol (save-restriction - (widen) - (rfc2047-point-at-bol)))) - (quoted-printable-encode-region - b e nil - ;; = (\075), _ (\137), ? (\077) are used in the encoded word. - ;; Avoid using 8bit characters. - ;; This list excludes `especials' (see the RFC2047 syntax), - ;; meaning that some characters in non-structured fields will - ;; get encoded when they con't need to be. The following is - ;; what it used to be. -;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?" -;;; "\010\012\014\040-\074\076\100-\136\140-\177") - "-\b\n\f !#-'*+0-9A-Z\\^`-~\d") - (subst-char-in-region (point-min) (point-max) ? ?_) - ;; The size of QP encapsulation is about 20, so set limit to - ;; 56=76-20. - (unless (< (- (point-max) (point-min)) 56) - ;; Don't break if it could fit in one line. - ;; Let rfc2047-encode-region break it later. - (goto-char (1+ (point-min))) - (while (and (not (bobp)) (not (eobp))) - (goto-char (min (point-max) (+ 56 bol))) - (search-backward "=" (- (point) 2) t) - (unless (or (bobp) (eobp)) - (insert ?\n) - (setq bol (point))))))))) +(defun rfc2047-q-encode-string (string) + "Quoted-printable-encode the header in STRING." + (mm-with-unibyte-buffer + (insert string) + (quoted-printable-encode-region + (point-min) (point-max) nil + ;; = (\075), _ (\137), ? (\077) are used in the encoded word. + ;; Avoid using 8bit characters. + ;; This list excludes `especials' (see the RFC2047 syntax), + ;; meaning that some characters in non-structured fields will + ;; get encoded when they con't need to be. The following is + ;; what it used to be. + ;;; ;; Equivalent to "^\000-\007\011\013\015-\037\200-\377=_?" + ;;; "\010\012\014\040-\074\076\100-\136\140-\177") + "-\b\n\f !#-'*+0-9A-Z\\^`-~\d") + (subst-char-in-region (point-min) (point-max) ? ?_) + (buffer-string))) + +(defun rfc2047-encode-parameter (param value) + "Return and PARAM=VALUE string encoded in the RFC2047-like style. +This is a replacement for the `rfc2231-encode-string' function. + +When attaching files as MIME parts, we should use the RFC2231 encoding +to specify the file names containing non-ASCII characters. However, +many mail softwares don't support it in practice and recipients won't +be able to extract files with correct names. Instead, the RFC2047-like +encoding is acceptable generally. This function provides the very +RFC2047-like encoding, resigning to such a regrettable trend. To use +it, put the following line in your ~/.gnus.el file: + +\(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter) +" + (let* ((rfc2047-encoding-type 'mime) + (rfc2047-encode-max-chars nil) + (string (rfc2047-encode-string value))) + (if (string-match (concat "[" ietf-drums-tspecials "]") string) + (format "%s=%S" param string) + (concat param "=" string)))) ;;; ;;; Functions for decoding RFC2047 messages @@ -639,8 +806,8 @@ (eval-and-compile (defconst rfc2047-encoded-word-regexp - "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\ -\\?\\([!->@-~ +]*\\)\\?=")) + "=\\?\\([^][\000-\040()<>@,\;:*\\\"/?.=]+\\)\\(\\*[^?]+\\)?\ +\\?\\(B\\|Q\\)\\?\\([!->@-~ ]*\\)\\?=")) (defvar rfc2047-quote-decoded-words-containing-tspecials nil "If non-nil, quote decoded words containing special characters.") @@ -671,7 +838,7 @@ "\\(\n?[ \t]\\)+" "\\(" rfc2047-encoded-word-regexp "\\)")) nil t) - (delete-region (goto-char (match-end 1)) (match-beginning 6))) + (delete-region (goto-char (match-end 1)) (match-beginning 7))) ;; Decode the encoded words. (setq b (goto-char (point-min))) (while (re-search-forward rfc2047-encoded-word-regexp nil t) @@ -774,7 +941,20 @@ mail-parse-charset (not (eq mail-parse-charset 'us-ascii)) (not (eq mail-parse-charset 'gnus-decoded))) - (mm-decode-coding-string string mail-parse-charset) + ;; `decode-coding-string' in Emacs offers a third optional + ;; arg NOCOPY to avoid consing a new string if the decoding + ;; is "trivial". Unfortunately it currently doesn't + ;; consider anything else than a `nil' coding system + ;; trivial. + ;; `rfc2047-decode-string' is called multiple times for each + ;; article during summary buffer generation, and we really + ;; want to avoid unnecessary consing. So we bypass + ;; `decode-coding-string' if the string is purely ASCII. + (if (and (fboundp 'detect-coding-string) + ;; string is purely ASCII + (eq (detect-coding-string string t) 'undecided)) + string + (mm-decode-coding-string string mail-parse-charset)) (mm-string-as-multibyte string))))) (defun rfc2047-parse-and-decode (word) @@ -787,8 +967,8 @@ (condition-case nil (rfc2047-decode (match-string 1 word) - (upcase (match-string 2 word)) - (match-string 3 word)) + (string-to-char (match-string 3 word)) + (match-string 4 word)) (error word)) word))) ; un-decodable @@ -809,7 +989,7 @@ (defun rfc2047-decode (charset encoding string) "Decode STRING from the given MIME CHARSET in the given ENCODING. -Valid ENCODINGs are \"B\" and \"Q\". +Valid ENCODINGs are the characters \"B\" and \"Q\". If your Emacs implementation can't decode CHARSET, return nil." (if (stringp charset) (setq charset (intern (downcase charset)))) @@ -824,18 +1004,17 @@ (memq 'gnus-unknown mail-parse-ignored-charsets)) (setq cs (mm-charset-to-coding-system mail-parse-charset))) (when cs - (when (and (eq cs 'ascii) - mail-parse-charset) - (setq cs mail-parse-charset)) + (when (eq cs 'ascii) + (setq cs (or mail-parse-charset 'raw-text))) (mm-decode-coding-string (cond - ((equal "B" encoding) + ((char-equal ?B encoding) (base64-decode-string (rfc2047-pad-base64 string))) - ((equal "Q" encoding) + ((char-equal ?Q encoding) (quoted-printable-decode-string - (mm-replace-chars-in-string string ?_ ? ))) - (t (error "Invalid encoding: %s" encoding))) + (mm-subst-char-in-string ?_ ? string t))) + (t (error "Invalid encoding: %c" encoding))) cs)))) (provide 'rfc2047) diff -r 45e5f0224d81 -r 360860a0006f lisp/hl-line.el --- a/lisp/hl-line.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/hl-line.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; hl-line.el --- highlight the current line -;; Copyright (C) 1998, 2000, 2001, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1998, 2000, 2001, 2003, 2005 Free Software Foundation, Inc. ;; Author: Dave Love ;; Maintainer: FSF @@ -113,7 +113,7 @@ line about point in the selected window only. In this case, it uses the function `hl-line-unhighlight' on `pre-command-hook' in addition to `hl-line-highlight' on `post-command-hook'." - nil nil nil + :group 'hl-line (if hl-line-mode (progn ;; In case `kill-all-local-variables' is called. diff -r 45e5f0224d81 -r 360860a0006f lisp/ido.el --- a/lisp/ido.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/ido.el Mon Apr 04 16:43:15 2005 +0000 @@ -1935,19 +1935,21 @@ ;; Internal function for ido-find-file and friends (unless item (setq item 'file)) - (let* ((ido-current-directory (ido-expand-directory default)) - (ido-directory-nonreadable (ido-nonreadable-directory-p ido-current-directory)) - (ido-directory-too-big (and (not ido-directory-nonreadable) - (ido-directory-too-big-p ido-current-directory))) - (ido-context-switch-command switch-cmd) - filename) - - (cond - ((or (not ido-mode) (ido-is-slow-ftp-host)) - (setq filename t - ido-exit 'fallback)) - - ((and (eq item 'file) + (let ((ido-current-directory (ido-expand-directory default)) + (ido-context-switch-command switch-cmd) + ido-directory-nonreadable ido-directory-too-big + filename) + + (if (or (not ido-mode) (ido-is-slow-ftp-host)) + (setq filename t + ido-exit 'fallback) + (setq ido-directory-nonreadable + (ido-nonreadable-directory-p ido-current-directory) + ido-directory-too-big + (and (not ido-directory-nonreadable) + (ido-directory-too-big-p ido-current-directory)))) + + (when (and (eq item 'file) (or ido-use-url-at-point ido-use-filename-at-point)) (let (fn d) (require 'ffap) @@ -1966,7 +1968,7 @@ (setq d (file-name-directory fn)) (file-directory-p d)) (setq ido-current-directory d) - (setq initial (file-name-nondirectory fn))))))) + (setq initial (file-name-nondirectory fn)))))) (let (ido-saved-vc-hb (vc-handled-backends (and (boundp 'vc-handled-backends) vc-handled-backends)) diff -r 45e5f0224d81 -r 360860a0006f lisp/iimage.el --- a/lisp/iimage.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/iimage.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; iimage.el --- Inline image minor mode. -;; Copyright (C) 2004 Free Software Foundation +;; Copyright (C) 2004, 2005 Free Software Foundation ;; Author: KOSEKI Yoshinori ;; Maintainer: KOSEKI Yoshinori @@ -51,6 +51,11 @@ (eval-when-compile (require 'image-file)) +(defgroup iimage nil + "Support for inline images." + :version "22.1" + :group 'image) + (defconst iimage-version "1.1") (defvar iimage-mode nil) (defvar iimage-mode-map nil) @@ -137,7 +142,7 @@ ;;;###autoload (define-minor-mode iimage-mode "Toggle inline image minor mode." - nil " iImg" iimage-mode-map + :group 'iimage :lighter " iImg" :keymap iimage-mode-map (run-hooks 'iimage-mode-hook) (iimage-mode-buffer iimage-mode)) diff -r 45e5f0224d81 -r 360860a0006f lisp/info.el --- a/lisp/info.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/info.el Mon Apr 04 16:43:15 2005 +0000 @@ -3026,12 +3026,12 @@ :help "Go to menu of visited nodes"] ["Table of Contents" Info-toc :help "Go to table of contents"] - ("Index..." - ["Lookup a String" Info-index + ("Index" + ["Lookup a String..." Info-index :help "Look for a string in the index items"] - ["Next Matching Item" Info-index-next + ["Next Matching Item" Info-index-next :active Info-index-alternatives :help "Look for another occurrence of previous item"] - ["Lookup a string in all indices" info-apropos + ["Lookup a string in all indices..." info-apropos :help "Look for a string in the indices of all manuals"]) ["Edit" Info-edit :help "Edit contents of this node" :active Info-enable-edit] diff -r 45e5f0224d81 -r 360860a0006f lisp/international/characters.el --- a/lisp/international/characters.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/international/characters.el Mon Apr 04 16:43:15 2005 +0000 @@ -884,8 +884,8 @@ (set-case-syntax-pair (decode-char 'ucs (1- c)) (decode-char 'ucs c) tbl)) (setq c (1+ c))) - ;;(set-downcase-syntax ?$,1 P(B ?i tbl) - ;;(set-upcase-syntax ?I ?$,1 Q(B tbl) + (set-downcase-syntax ?$,1 P(B ?i tbl) + (set-upcase-syntax ?I ?$,1 Q(B tbl) (set-case-syntax-pair ?$,1 R(B ?$,1 S(B tbl) (set-case-syntax-pair ?$,1 T(B ?$,1 U(B tbl) (set-case-syntax-pair ?$,1 V(B ?$,1 W(B tbl) diff -r 45e5f0224d81 -r 360860a0006f lisp/international/encoded-kb.el --- a/lisp/international/encoded-kb.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/international/encoded-kb.el Mon Apr 04 16:43:15 2005 +0000 @@ -269,7 +269,7 @@ In Encoded-kbd mode, a text sent from keyboard is accepted as a multilingual text encoded in a coding system set by \\[set-keyboard-coding-system]." - :global t + :global t :group 'keyboard :group 'mule (if encoded-kbd-mode ;; We are turning on Encoded-kbd mode. diff -r 45e5f0224d81 -r 360860a0006f lisp/international/iso-acc.el --- a/lisp/international/iso-acc.el Mon Mar 28 04:24:51 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,491 +0,0 @@ -;;; iso-acc.el --- minor mode providing electric accent keys - -;; Copyright (C) 1993, 1994, 1996, 2001 Free Software Foundation, Inc. - -;; Author: Johan Vromans -;; Maintainer: FSF -;; Keywords: i18n - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Commentary: - -;; Function `iso-accents-mode' activates a minor mode in which -;; typewriter "dead keys" are emulated. The purpose of this emulation -;; is to provide a simple means for inserting accented characters -;; according to the ISO-8859-1...3 character sets. -;; -;; In `iso-accents-mode', pseudo accent characters are used to -;; introduce accented keys. The pseudo-accent characters are: -;; -;; ' (minute) -> actue accent -;; ` (backtick) -> grave accent -;; " (second) -> diaeresis -;; ^ (caret) -> circumflex -;; ~ (tilde) -> tilde over the character -;; / (slash) -> slash through the character. -;; Also: /A is A-with-ring and /E is AE ligature. -;; These two are enabled only if you set iso-accents-enable -;; to include them: -;; . (period) -> dot over the character (some languages only) -;; , (cedilla) -> cedilla under the character (some languages only) -;; -;; The action taken depends on the key that follows the pseudo accent. -;; In general: -;; -;; pseudo-accent + appropriate letter -> accented letter -;; pseudo-accent + space -> pseudo-accent (except comma and period) -;; pseudo-accent + pseudo-accent -> accent (if available) -;; pseudo-accent + other -> pseudo-accent + other -;; -;; If the pseudo-accent is followed by anything else than a -;; self-insert-command, the dead-key code is terminated, the -;; pseudo-accent inserted 'as is' and the bell is rung to signal this. -;; -;; Function `iso-accents-mode' can be used to enable the iso accents -;; minor mode, or disable it. - -;; If you want only some of these characters to serve as accents, -;; add a language to `iso-languages' which specifies the accent characters -;; that you want, then select the language with `iso-accents-customize'. - -;;; Code: - -(provide 'iso-acc) - -(defgroup iso-acc nil - "Minor mode providing electric accent keys." - :prefix "iso-accents-" - :group 'i18n) - -(defcustom iso-accents-insert-offset nonascii-insert-offset - "*Offset added by ISO Accents mode to character codes 0200 and above." - :type 'integer - :group 'iso-acc) - -(defvar iso-languages - '(("catalan" - ;; Note this includes some extra characters used in Spanish, - ;; on the idea that someone who uses Catalan is likely to use Spanish - ;; as well. - (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332) - (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372) - (?\ . ?')) - (?` (?A . ?\300) (?E . ?\310) (?O . ?\322) - (?a . ?\340) (?e . ?\350) (?o . ?\362) - (?\ . ?`)) - (?\" (?I . ?\317) (?U . ?\334) (?i . ?\357) (?u . ?\374) - (?\ . ?\")) - (?~ (?C . ?\307) (?N . ?\321) (?c . ?\347) (?n . ?\361) - (?> . ?\273) (?< . ?\253) (?! . ?\241) (?? . ?\277) - (?\ . ?\~))) - - ("esperanto" - (?^ (?H . ?\246) (?J . ?\254) (?h . ?\266) (?j . ?\274) (?C . ?\306) - (?G . ?\330) (?S . ?\336) (?c . ?\346) (?g . ?\370) (?s . ?\376) - (?^ . ?^) (?\ . ?^)) - (?~ (?U . ?\335) (?u . ?\375) (?\ . ?~))) - - ("french" - (?' (?E . ?\311) (?C . ?\307) (?e . ?\351) (?c . ?\347) - (?\ . ?')) - (?` (?A . ?\300) (?E . ?\310) (?U . ?\331) - (?a . ?\340) (?e . ?\350) (?u . ?\371) - (?\ . ?`)) - (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333) - (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373) - (?\ . ?^)) - (?\" (?E . ?\313) (?I . ?\317) - (?e . ?\353) (?i . ?\357) - (?\ . ?\")) - (?~ (?< . ?\253) (?> . ?\273) (?C . ?\307) (?c . ?\347) - (?\ . ?~)) - (?, (?C . ?\307) (?c . ?\347) (?\ . ?\,))) - - ("german" - (?\" (?A . ?\304) (?O . ?\326) (?U . ?\334) - (?a . ?\344) (?o . ?\366) (?u . ?\374) (?s . ?\337) (?\ . ?\"))) - - ("irish" - (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332) - (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372) - (?\ . ?'))) - - ("portuguese" - (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332) - (?C . ?\307) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) - (?u . ?\372) (?c . ?\347) - (?\ . ?')) - (?` (?A . ?\300) (?a . ?\340) - (?\ . ?`)) - (?^ (?A . ?\302) (?E . ?\312) (?O . ?\324) - (?a . ?\342) (?e . ?\352) (?o . ?\364) - (?\ . ?^)) - (?\" (?U . ?\334) (?u . ?\374) - (?\ . ?\")) - (?~ (?A . ?\303) (?O . ?\325) (?a . ?\343) (?o . ?\365) - (?C . ?\307) (?N . ?\321) (?c . ?\347) (?n . ?\361) - (?\ . ?~)) - (?, (?c . ?\347) (?C . ?\307) (?, . ?,))) - - ("spanish" - (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332) - (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372) - (?\ . ?')) - (?\" (?U . ?\334) (?u . ?\374) (?\ . ?\")) - (?\~ (?N . ?\321) (?n . ?\361) (?> . ?\273) (?< . ?\253) (?! . ?\241) - (?? . ?\277) (?\ . ?\~))) - - ("latin-1" - (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332) - (?Y . ?\335) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) - (?u . ?\372) (?y . ?\375) (?' . ?\264) - (?\ . ?')) - (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322) (?U . ?\331) - (?a . ?\340) (?e . ?\350) (?i . ?\354) (?o . ?\362) (?u . ?\371) - (?` . ?`) (?\ . ?`)) - (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333) - (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373) - (?^ . ?^) (?\ . ?^)) - (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326) (?U . ?\334) - (?a . ?\344) (?e . ?\353) (?i . ?\357) (?o . ?\366) (?s . ?\337) - (?u . ?\374) (?y . ?\377) - (?\" . ?\250) (?\ . ?\")) - (?~ (?A . ?\303) (?C . ?\307) (?D . ?\320) (?N . ?\321) (?O . ?\325) - (?T . ?\336) (?a . ?\343) (?c . ?\347) (?d . ?\360) (?n . ?\361) - (?o . ?\365) (?t . ?\376) - (?> . ?\273) (?< . ?\253) (?! . ?\241) (?? . ?\277) - (?\~ . ?\270) (?\ . ?~)) - (?/ (?A . ?\305) (?E . ?\306) (?O . ?\330) (?a . ?\345) (?e . ?\346) - (?o . ?\370) - (?/ . ?\260) (?\ . ?/))) - - ("latin-2" latin-iso8859-2 - (?' (?A . ?\301) (?C . ?\306) (?D . ?\320) (?E . ?\311) (?I . ?\315) - (?L . ?\305) (?N . ?\321) (?O . ?\323) (?R . ?\300) (?S . ?\246) - (?U . ?\332) (?Y . ?\335) (?Z . ?\254) - (?a . ?\341) (?c . ?\346) (?d . ?\360) (?e . ?\351) (?i . ?\355) - (?l . ?\345) (?n . ?\361) (?o . ?\363) (?r . ?\340) (?s . ?\266) - (?u . ?\372) (?y . ?\375) (?z . ?\274) - (?' . ?\264) (?\ . ?')) - (?` (?A . ?\241) (?C . ?\307) (?E . ?\312) (?L . ?\243) (?S . ?\252) - (?T . ?\336) (?Z . ?\257) - (?a . ?\261) (?l . ?\263) (?c . ?\347) (?e . ?\352) (?s . ?\272) - (?t . ?\376) (?z . ?\277) - (?` . ?\252) - (?. . ?\377) (?\ . ?`)) - (?^ (?A . ?\302) (?I . ?\316) (?O . ?\324) - (?a . ?\342) (?i . ?\356) (?o . ?\364) - (?^ . ?^) ; no special code? - (?\ . ?^)) - (?\" (?A . ?\304) (?E . ?\313) (?O . ?\326) (?U . ?\334) - (?a . ?\344) (?e . ?\353) (?o . ?\366) (?s . ?\337) (?u . ?\374) - (?\" . ?\250) - (?\ . ?\")) - (?~ (?A . ?\303) (?C . ?\310) (?D . ?\317) (?L . ?\245) (?N . ?\322) - (?O . ?\325) (?R . ?\330) (?S . ?\251) (?T . ?\253) (?U . ?\333) - (?Z . ?\256) - (?a . ?\343) (?c . ?\350) (?d . ?\357) (?l . ?\265) (?n . ?\362) - (?o . ?\365) (?r . ?\370) (?s . ?\271) (?t . ?\273) (?u . ?\373) - (?z . ?\276) - (?v . ?\242) ; v accent - (?\~ . ?\242) ; v accent - (?\. . ?\270) ; cedilla accent - (?\ . ?~))) - - ("latin-3" latin-iso8859-3 - (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332) - (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372) - (?' . ?\264) (?\ . ?')) - (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322) (?U . ?\331) - (?a . ?\340) (?e . ?\350) (?i . ?\354) (?o . ?\362) (?u . ?\371) - (?` . ?`) (?\ . ?`)) - (?^ (?A . ?\302) (?C . ?\306) (?E . ?\312) (?G . ?\330) (?H . ?\246) - (?I . ?\316) (?J . ?\254) (?O . ?\324) (?S . ?\336) (?U . ?\333) - (?a . ?\342) (?c . ?\346) (?e . ?\352) (?g . ?\370) (?h . ?\266) - (?i . ?\356) (?j . ?\274) (?o . ?\364) (?s . ?\376) (?u . ?\373) - (?^ . ?^) (?\ . ?^)) - (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326) (?U . ?\334) - (?a . ?\344) (?e . ?\353) (?i . ?\357) (?o . ?\366) (?u . ?\374) - (?s . ?\337) - (?\" . ?\250) (?\ . ?\")) - (?~ (?A . ?\303) (?C . ?\307) (?D . ?\320) (?N . ?\321) (?O . ?\325) - (?a . ?\343) (?c . ?\347) (?d . ?\360) (?n . ?\361) (?o . ?\365) - (?$ . ?\245) (?S . ?\252) (?s . ?\272) (?G . ?\253) (?g . ?\273) - (?U . ?\335) (?u . ?\375) (?` . ?\242) - (?~ . ?\270) (?\ . ?~)) - (?/ (?C . ?\305) (?G . ?\325) (?H . ?\241) (?I . ?\251) (?Z . ?\257) - (?c . ?\345) (?g . ?\365) (?h . ?\261) (?i . ?\271) (?z . ?\277) - (?r . ?\256) - (?. . ?\377) (?# . ?\243) (?$ . ?\244) - (?/ . ?\260) (?\ . ?/)) - (?. (?C . ?\305) (?G . ?\325) (?I . ?\251) (?Z . ?\257) - (?c . ?\345) (?g . ?\365) (?z . ?\277)))) - "List of language-specific customizations for the ISO Accents mode. - -Each element of the list is of the form - - (LANGUAGE [CHARSET] - (PSEUDO-ACCENT MAPPINGS) - (PSEUDO-ACCENT MAPPINGS) - ...) - -LANGUAGE is a string naming the language. -CHARSET (which may be omitted) is the symbol name - of the character set used in this language. - If CHARSET is omitted, latin-iso8859-1 is the default. -PSEUDO-ACCENT is a char specifying an accent key. -MAPPINGS are cons cells of the form (CHAR . ISO-CHAR). - -The net effect is that the key sequence PSEUDO-ACCENT CHAR is mapped -to ISO-CHAR on input.") - -(defvar iso-language nil - "Language for which ISO Accents mode is currently customized. -Change it with the `iso-accents-customize' function.") - -(defvar iso-accents-list nil - "Association list for ISO accent combinations, for the chosen language.") - -(defcustom iso-accents-mode nil - "*Non-nil enables ISO Accents mode. -Setting this variable makes it local to the current buffer. -See the function `iso-accents-mode'." - :type 'boolean - :group 'iso-acc) -(make-variable-buffer-local 'iso-accents-mode) - -(defcustom iso-accents-enable '(?' ?` ?^ ?\" ?~ ?/) - "*List of accent keys that become prefixes in ISO Accents mode. -The default is (?' ?` ?^ ?\" ?~ ?/), which contains all the supported -accent keys. If you set this variable to a list in which some of those -characters are missing, the missing ones do not act as accents. - -Note that if you specify a language with `iso-accents-customize', -that can also turn off certain prefixes (whichever ones are not needed in -the language you choose)." - :type '(repeat character) - :group 'iso-acc) - -(defun iso-accents-accent-key (prompt) - "Modify the following character by adding an accent to it." - ;; Pick up the accent character. - (if (and iso-accents-mode - (memq last-input-char iso-accents-enable)) - (iso-accents-compose prompt) - (vector last-input-char))) - - -;; The iso-accents-compose function is called deep inside Emacs' read -;; key sequence machinery, so the call to read-event below actually -;; recurses into that machinery. Doing that does not cause any -;; problem on its own, but read-event will have marked the window's -;; display matrix to be accurate -- which is broken by the subsequent -;; call to delete-region. Therefore, we must call force-window-update -;; after delete-region to explicitly clear the accurate state of the -;; window's display matrix. - -(defun iso-accents-compose (prompt) - (let* ((first-char last-input-char) - (list (assq first-char iso-accents-list)) - ;; Wait for the second key and look up the combination. - (second-char (if (or prompt - (not (eq (key-binding "a") - 'self-insert-command)) - ;; Not at start of a key sequence. - (> (length (this-single-command-keys)) 1) - ;; Called from anything but the command loop. - this-command) - (progn - (message "%s%c" - (or prompt "Compose with ") - first-char) - (read-event)) - (insert first-char) - (prog1 (read-event) - (delete-region (1- (point)) (point)) - ;; Display is no longer up-to-date. - (force-window-update (selected-window))))) - (entry (cdr (assq second-char list)))) - (if entry - ;; Found it: return the mapped char - (vector - (if (and enable-multibyte-characters - (>= entry ?\200)) - (+ iso-accents-insert-offset entry) - entry)) - ;; Otherwise, advance and schedule the second key for execution. - (push second-char unread-command-events) - (vector first-char)))) - -;; It is a matter of taste if you want the minor mode indicated -;; in the mode line... -;; If so, uncomment the next four lines. -;; (or (assq 'iso-accents-mode minor-mode-alist) -;; (setq minor-mode-alist -;; (append minor-mode-alist -;; '((iso-accents-mode " ISO-Acc"))))) - -;;;###autoload -(defun iso-accents-mode (&optional arg) - "Toggle ISO Accents mode, in which accents modify the following letter. -This permits easy insertion of accented characters according to ISO-8859-1. -When Iso-accents mode is enabled, accent character keys -\(`, ', \", ^, / and ~) do not self-insert; instead, they modify the following -letter key so that it inserts an ISO accented letter. - -You can customize ISO Accents mode to a particular language -with the command `iso-accents-customize'. - -Special combinations: ~c gives a c with cedilla, -~d gives an Icelandic eth (d with dash). -~t gives an Icelandic thorn. -\"s gives German sharp s. -/a gives a with ring. -/e gives an a-e ligature. -~< and ~> give guillemots. -~! gives an inverted exclamation mark. -~? gives an inverted question mark. - -With an argument, a positive argument enables ISO Accents mode, -and a negative argument disables it." - - (interactive "P") - - (if (if arg - ;; Negative arg means switch it off. - (<= (prefix-numeric-value arg) 0) - ;; No arg means toggle. - iso-accents-mode) - (setq iso-accents-mode nil) - - ;; Enable electric accents. - (setq iso-accents-mode t))) - -(defun iso-accents-customize (language) - "Customize the ISO accents machinery for a particular language. -It selects the customization based on the specifications in the -`iso-languages' variable." - (interactive (list (completing-read "Language: " iso-languages nil t))) - (let ((table (cdr (assoc language iso-languages))) - all-accents tail) - (if (not table) - (error "Unknown language `%s'" language) - (setq iso-accents-insert-offset (- (make-char (if (symbolp (car table)) - (car table) - 'latin-iso8859-1)) - 128)) - (if (symbolp (car table)) - (setq table (cdr table))) - (setq iso-language language - iso-accents-list table) - (if key-translation-map - (substitute-key-definition - 'iso-accents-accent-key nil key-translation-map) - (setq key-translation-map (make-sparse-keymap))) - ;; Set up translations for all the characters that are used as - ;; accent prefixes in this language. - (setq tail iso-accents-list) - (while tail - (define-key key-translation-map (vector (car (car tail))) - 'iso-accents-accent-key) - (setq tail (cdr tail)))))) - -(defun iso-accentuate (start end) - "Convert two-character sequences in region into accented characters. -Noninteractively, this operates on text from START to END. -This uses the same conversion that ISO Accents mode uses for type-in." - (interactive "r") - (save-excursion - (save-restriction - (narrow-to-region start end) - (goto-char start) - (forward-char 1) - (let (entry) - (while (< (point) end) - (if (and (memq (preceding-char) iso-accents-enable) - (setq entry (cdr (assq (following-char) (assq (preceding-char) iso-accents-list))))) - (progn - (forward-char -1) - (delete-char 2) - (insert entry) - (setq end (1- end))) - (forward-char 1))))))) - -(defun iso-accent-rassoc-unit (value alist) - (let (elt acc) - (while (and alist (not elt)) - (setq acc (car (car alist)) - elt (car (rassq value (cdr (car alist)))) - alist (cdr alist))) - (if elt - (cons acc elt)))) - -(defun iso-unaccentuate (start end) - "Convert accented characters in the region into two-character sequences. -Noninteractively, this operates on text from START to END. -This uses the opposite of the conversion done by ISO Accents mode for type-in." - (interactive "r") - (save-excursion - (save-restriction - (narrow-to-region start end) - (goto-char start) - (let (entry) - (while (< (point) end) - (if (and (> (following-char) 127) - (setq entry (iso-accent-rassoc-unit (following-char) - iso-accents-list))) - (progn - (delete-char 1) - (insert (car entry) (cdr entry)) - (setq end (1+ end))) - (forward-char 1))))))) - -(defun iso-deaccentuate (start end) - "Convert accented characters in the region into unaccented characters. -Noninteractively, this operates on text from START to END." - (interactive "r") - (save-excursion - (save-restriction - (narrow-to-region start end) - (goto-char start) - (let (entry) - (while (< (point) end) - (if (and (> (following-char) 127) - (setq entry (iso-accent-rassoc-unit (following-char) - iso-accents-list))) - (progn - (delete-char 1) - (insert (cdr entry))) - (forward-char 1))))))) - -;; Set up the default settings. -(iso-accents-customize "latin-1") - -;; Use Iso-Accents mode in the minibuffer -;; if it was in use in the previous buffer. -(defun iso-acc-minibuf-setup () - (setq iso-accents-mode - (save-excursion - (set-buffer (window-buffer minibuffer-scroll-window)) - iso-accents-mode))) - -(add-hook 'minibuffer-setup-hook 'iso-acc-minibuf-setup) - -;;; arch-tag: 149ff409-7c3e-4574-9b5d-ac038939c0a6 -;;; iso-acc.el ends here diff -r 45e5f0224d81 -r 360860a0006f lisp/international/mule-cmds.el --- a/lisp/international/mule-cmds.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/international/mule-cmds.el Mon Apr 04 16:43:15 2005 +0000 @@ -384,6 +384,7 @@ ;; CODING-SYSTEM is no-conversion or undecided. (error "Can't prefer the coding system `%s'" coding-system)) (set coding-category (or base coding-system)) + ;; Changing the binding of a coding category requires this call. (update-coding-systems-internal) (or (eq coding-category (car coding-category-list)) ;; We must change the order. @@ -1691,6 +1692,7 @@ coding-category-ccl coding-category-binary)) + ;; Changing the binding of a coding category requires this call. (update-coding-systems-internal) (set-default-coding-systems nil) @@ -1904,6 +1906,7 @@ (while priority (set (car categories) (car priority)) (setq priority (cdr priority) categories (cdr categories))) + ;; Changing the binding of a coding category requires this call. (update-coding-systems-internal))))) (defsubst princ-list (&rest args) diff -r 45e5f0224d81 -r 360860a0006f lisp/international/mule-util.el --- a/lisp/international/mule-util.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/international/mule-util.el Mon Apr 04 16:43:15 2005 +0000 @@ -327,6 +327,7 @@ (mapc (function (lambda (x) (set (car x) (cdr x)))) prio-list) (set-coding-priority (mapcar #'car prio-list)) + ;; Changing the binding of a coding category requires this call. (update-coding-systems-internal) (detect-coding-region ,from ,to)) ;; We must restore the internal database. diff -r 45e5f0224d81 -r 360860a0006f lisp/international/mule.el --- a/lisp/international/mule.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/international/mule.el Mon Apr 04 16:43:15 2005 +0000 @@ -1546,6 +1546,7 @@ ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\|[JEW]AR\\|XPI\\)\\'" . no-conversion) ("\\.\\(sx[dmicw]\\|tar\\|tgz\\)\\'" . no-conversion) ("\\.\\(gz\\|Z\\|bz\\|bz2\\|gpg\\)\\'" . no-conversion) + ("\\.\\(jpe?g\\|png\\|gif\\|tiff?\\|p[bpgn]m\\)\\'" . no-conversion) ("/#[^/]+#\\'" . emacs-mule)) "Alist of filename patterns vs corresponding coding systems. Each element looks like (REGEXP . CODING-SYSTEM). diff -r 45e5f0224d81 -r 360860a0006f lisp/kmacro.el --- a/lisp/kmacro.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/kmacro.el Mon Apr 04 16:43:15 2005 +0000 @@ -614,10 +614,13 @@ counting the definition just completed as the first repetition. An argument of zero means repeat until error." (interactive "P") - (end-kbd-macro arg #'kmacro-loop-setup-function) - (when (and last-kbd-macro (= (length last-kbd-macro) 0)) - (message "Ignore empty macro") - (kmacro-pop-ring))) + ;; Isearch may push the kmacro-end-macro key sequence onto the macro. + ;; Just ignore it when executing the macro. + (unless executing-kbd-macro + (end-kbd-macro arg #'kmacro-loop-setup-function) + (when (and last-kbd-macro (= (length last-kbd-macro) 0)) + (message "Ignore empty macro") + (kmacro-pop-ring)))) ;;;###autoload diff -r 45e5f0224d81 -r 360860a0006f lisp/language/thai-util.el --- a/lisp/language/thai-util.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/language/thai-util.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,10 +1,9 @@ ;;; thai-util.el --- utilities for Thai -*- coding: iso-2022-7bit; -*- -;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. -;; Licensed to the Free Software Foundation. -;; Copyright (C) 2005 +;; Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2005 ;; National Institute of Advanced Industrial Science and Technology (AIST) ;; Registration Number H14PRO021 +;; Copyright (C) 2000, 2001 Free Software Foundation, Inc. ;; Keywords: mule, multilingual, thai @@ -279,7 +278,7 @@ (defun thai-compose-syllable (beg end &optional category-set string) (or category-set - (setq category-set + (setq category-set (char-category-set (if string (aref string beg) (char-after beg))))) (if (aref category-set ?c) ;; Starting with a consonant. We do relative composition. @@ -288,9 +287,9 @@ (compose-region beg end)) ;; Vowel tone sequence. (if string - (compose-string string beg end (list (aref string beg) '(Bc . Bc) + (compose-string string beg end (list (aref string beg) '(Bc . Bc) (aref string (1+ beg)))) - (compose-region beg end (list (char-after beg) '(Bc . Bc) + (compose-region beg end (list (char-after beg) '(Bc . Bc) (char-after (1+ beg)))))) (- end beg)) @@ -348,7 +347,7 @@ (if string (if (eq (string-match thai-composition-pattern string from) from) (thai-compose-syllable from (match-end 0) nil string)) - (if (save-excursion + (if (save-excursion (goto-char from) (and (looking-at thai-composition-pattern) (setq to (match-end 0)))) @@ -376,12 +375,48 @@ ;;;###autoload (define-minor-mode thai-auto-composition-mode "Minor mode for automatically correct Thai character composition." - nil nil nil + :group 'mule (cond ((null thai-auto-composition-mode) (remove-hook 'after-change-functions 'thai-auto-composition)) (t (add-hook 'after-change-functions 'thai-auto-composition)))) +;; Thai-word-mode requires functions in the feature `thai-word'. +(require 'thai-word) + +(defvar thai-word-mode-map + (let ((map (make-sparse-keymap))) + (define-key map [remap forward-word] 'thai-forward-word) + (define-key map [remap backward-word] 'thai-backward-word) + (define-key map [remap kill-word] 'thai-kill-word) + (define-key map [remap backward-kill-word] 'thai-backward-kill-word) + (define-key map [remap transpose-words] 'thai-transpose-words) + map) + "Keymap for `thai-word-mode'.") + +(define-minor-mode thai-word-mode + "Minor mode to make word-oriented commands aware of Thai words. +The commands affected are \\[forward-word], \\[backward-word], \\[kill-word], \\[backward-kill-word], \\[transpose-words], and \\[fill-paragraph]." + :global t :group 'mule + (cond (thai-word-mode + ;; This enables linebreak between Thai characters. + (modify-category-entry (make-char 'thai-tis620) ?|) + ;; This enables linebreak at a Thai word boundary. + (put-charset-property 'thai-tis620 'fill-find-break-point-function + 'thai-fill-find-break-point)) + (t + (modify-category-entry (make-char 'thai-tis620) ?| nil t) + (put-charset-property 'thai-tis620 'fill-find-break-point-function + nil)))) + +;; Function to call on entering the Thai language environment. +(defun setup-thai-language-environment-internal () + (thai-word-mode 1)) + +;; Function to call on exiting the Thai language environment. +(defun exit-thai-language-environment-internal () + (thai-word-mode -1)) + ;; (provide 'thai-util) diff -r 45e5f0224d81 -r 360860a0006f lisp/language/thai-word.el --- a/lisp/language/thai-word.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/language/thai-word.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,7 +1,8 @@ ;;; thai-word.el -- find Thai word boundaries -;; Copyright (C) 2000, 2001, 2002, 2003, 2004 -;; Electrotechnical Laboratory, JAPAN. +;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 +;; National Institute of Advanced Industrial Science and Technology (AIST) +;; Registration Number H14PRO021 ;; Author: Kenichi HANDA @@ -72,13 +73,10 @@ ;; which means that you can easily index the list character by ;; character. -(defconst thai-word-table nil) - - -;; Set up `thai-word-table'. - -(let - ((l +(defvar thai-word-table + (let ((table (list 'thai-words))) + (dolist (elt + ;;; The following is indented as this to minimize this file size. '("ЎЎ" "ЎЎЕ" "ЎЎШёАСі±м" @@ -10732,11 +10730,10 @@ "дОвЎГБФаµНГм" "дОвґГ¤ТГмєН№" "дОвЕ" - ))) - (setq thai-word-table (list 'thai-words)) - (while l - (set-nested-alist (car l) 1 thai-word-table) - (setq l (cdr l)))) + )) + (set-nested-alist elt 1 table)) + table) + "Nested alist of Thai words.") (defun thai-update-word-table (file &optional append) @@ -10783,7 +10780,7 @@ ;; character by character. (while this (setq pos (1+ pos) - char (char-after pos) + char (or (char-after pos) 0) category-set (char-category-set char)) ;; If the current sequence is recorded in `thai-word-table' ;; (i.e. (car THIS) is 1) and the following Thai character is @@ -11042,6 +11039,33 @@ (thai-forward-word (- count))) +(defun thai-kill-word (arg) + "Like kill-word but pay attention to Thai word boundaries. +With argument, do this that many times." + (interactive "p") + (kill-region (point) (progn (thai-forward-word arg) (point)))) + + +(defun thai-backward-kill-word (arg) + "Like backward-kill-word but pay attention to Thai word boundaries." + (interactive "p") + (thai-kill-word (- arg))) + + +(defun thai-transpose-words (arg) + "Like transpose-words but pay attention to Thai word boundaries." + (interactive "*p") + (transpose-subr 'thai-forward-word arg)) + +(defun thai-fill-find-break-point (linebeg) + "Go to a line breaking position near point considering Thai word boundaries." + (let ((pos (point))) + (thai-forward-word -1) + (when (<= (point) linebeg) + (goto-char pos) + (thai-forward-word 1)) + (kinsoku linebeg))) + (provide 'thai-word) diff -r 45e5f0224d81 -r 360860a0006f lisp/language/thai.el --- a/lisp/language/thai.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/language/thai.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,10 +1,9 @@ ;;; thai.el --- support for Thai -*- coding: iso-2022-7bit; no-byte-compile: t -*- -;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN. -;; Licensed to the Free Software Foundation. -;; Copyright (C) 2005 +;; Copyright (C) 1995, 1997, 1998, 1999, 2000, 2002, 2005 ;; National Institute of Advanced Industrial Science and Technology (AIST) ;; Registration Number H14PRO021 +;; Copyright (C) 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. ;; Keywords: multilingual, Thai @@ -53,6 +52,8 @@ (input-method . "thai-kesmanee") (unibyte-display . thai-tis620) (features thai-util) + (setup-function . setup-thai-language-environment-internal) + (exit-function . exit-thai-language-environment-internal) (sample-text . (thai-compose-string (copy-sequence "Thai (,T@RIRd7B(B) ,TJ0GQ1J04U1$0CQ1:(B, ,TJ0GQ1J04U10$h1P(B"))) diff -r 45e5f0224d81 -r 360860a0006f lisp/longlines.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/longlines.el Mon Apr 04 16:43:15 2005 +0000 @@ -0,0 +1,393 @@ +;;; longlines.el --- automatically wrap long lines + +;; Copyright (C) 2000, 2001, 2004, 2005 by Free Software Foundation, Inc. + +;; Authors: Kai Grossjohann +;; Alex Schroeder +;; Chong Yidong +;; Maintainer: Chong Yidong +;; Keywords: convenience + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; Some text editors save text files with long lines, and they +;; automatically break these lines at whitespace, without actually +;; inserting any newline characters. When doing `M-q' in Emacs, you +;; are inserting newline characters. Longlines mode provides a file +;; format which wraps the long lines when reading a file and unwraps +;; the lines when saving the file. It can also wrap and unwrap +;; automatically as editing takes place. + +;; Special thanks to Rod Smith for many useful bug reports. + +;;; Code: + +(require 'easy-mmode) + +(defgroup longlines nil + "Automatic wrapping of long lines when loading files." + :group 'fill) + +(defcustom longlines-auto-wrap t + "*Non-nil means long lines are automatically wrapped after each command. +Otherwise, you can perform filling using `fill-paragraph' or +`auto-fill-mode'. In any case, the soft newlines will be removed +when the file is saved to disk." + :group 'longlines + :type 'boolean) + +(defcustom longlines-wrap-follows-window-size nil + "*Non-nil means wrapping and filling happen at the edge of the window. +Otherwise, `fill-column' is used, regardless of the window size. This +does not work well when the buffer is displayed in multiple windows +with differing widths." + :group 'longlines + :type 'boolean) + +(defcustom longlines-show-hard-newlines nil + "*Non-nil means each hard newline is marked with a symbol. +You can also enable the display temporarily, using the command +`longlines-show-hard-newlines'" + :group 'longlines + :type 'boolean) + +(defcustom longlines-show-effect (propertize "|\n" 'face 'escape-glyph) + "*A string to display when showing hard newlines. +This is used when `longlines-show-hard-newlines' is on." + :group 'longlines + :type 'string) + +;; Internal variables + +(defvar longlines-wrap-beg nil) +(defvar longlines-wrap-end nil) +(defvar longlines-wrap-point nil) +(defvar longlines-showing nil) + +(make-variable-buffer-local 'longlines-wrap-beg) +(make-variable-buffer-local 'longlines-wrap-end) +(make-variable-buffer-local 'longlines-wrap-point) +(make-variable-buffer-local 'longlines-showing) + +;; Mode + +;;;###autoload +(define-minor-mode longlines-mode + "Toggle Long Lines mode. +In Long Lines mode, long lines are wrapped if they extend beyond +`fill-column'. The soft newlines used for line wrapping will not +show up when the text is yanked or saved to disk. + +If `longlines-auto-wrap' is non-nil, lines are automatically +wrapped whenever the buffer is changed. You can always call +`fill-paragraph' to fill individual paragraphs. + +If `longlines-show-hard-newlines' is non-nil, hard newlines will +be marked by a symbol." + :group 'longlines :lighter " ll" + (if longlines-mode + ;; Turn on longlines mode + (progn + (use-hard-newlines 1 'never) + (set (make-local-variable 'require-final-newline) nil) + (add-to-list 'buffer-file-format 'longlines) + (add-hook 'change-major-mode-hook 'longlines-mode-off nil t) + (make-local-variable 'buffer-substring-filters) + (add-to-list 'buffer-substring-filters 'longlines-encode-string) + (when longlines-wrap-follows-window-size + (set (make-local-variable 'fill-column) + (- (window-width) window-min-width)) + (add-hook 'window-configuration-change-hook + 'longlines-window-change-function nil t)) + (let ((buffer-undo-list t) + (mod (buffer-modified-p))) + ;; Turning off undo is OK since (spaces + newlines) is + ;; conserved, except for a corner case in + ;; longlines-wrap-lines that we'll never encounter from here + (longlines-decode-region (point-min) (point-max)) + (longlines-wrap-region (point-min) (point-max)) + (set-buffer-modified-p mod)) + (when (and longlines-show-hard-newlines + (not longlines-showing)) + (longlines-show-hard-newlines)) + (when longlines-auto-wrap + (auto-fill-mode 0) + (add-hook 'after-change-functions + 'longlines-after-change-function nil t) + (add-hook 'post-command-hook + 'longlines-post-command-function nil t))) + ;; Turn off longlines mode + (setq buffer-file-format (delete 'longlines buffer-file-format)) + (if longlines-showing + (longlines-unshow-hard-newlines)) + (let ((buffer-undo-list t)) + (longlines-encode-region (point-min) (point-max))) + (remove-hook 'change-major-mode-hook 'longlines-mode-off t) + (remove-hook 'before-kill-functions 'longlines-encode-region t) + (remove-hook 'after-change-functions 'longlines-after-change-function t) + (remove-hook 'post-command-hook 'longlines-post-command-function t) + (remove-hook 'window-configuration-change-hook + 'longlines-window-change-function t) + (kill-local-variable 'fill-column))) + +(defun longlines-mode-off () + "Turn off longlines mode. +This function exists to be called by `change-major-mode-hook' when the +major mode changes." + (longlines-mode 0)) + +;; Showing the effect of hard newlines in the buffer + +(defface longlines-visible-face + '((t (:background "red"))) + "Face used to make hard newlines visible in `longlines-mode'.") + +(defun longlines-show-hard-newlines (&optional arg) + "Make hard newlines visible by adding a face. +With optional argument ARG, make the hard newlines invisible again." + (interactive "P") + (let ((buffer-undo-list t) + (mod (buffer-modified-p))) + (if arg + (longlines-unshow-hard-newlines) + (setq longlines-showing t) + (longlines-show-region (point-min) (point-max))) + (set-buffer-modified-p mod))) + +(defun longlines-show-region (beg end) + "Make hard newlines between BEG and END visible." + (let* ((pmin (min beg end)) + (pmax (max beg end)) + (pos (text-property-any pmin pmax 'hard t))) + (while pos + (put-text-property pos (1+ pos) 'display + (copy-sequence longlines-show-effect)) + (setq pos (text-property-any (1+ pos) pmax 'hard t))))) + +(defun longlines-unshow-hard-newlines () + "Make hard newlines invisible again." + (interactive) + (setq longlines-showing nil) + (let ((pos (text-property-any (point-min) (point-max) 'hard t))) + (while pos + (remove-text-properties pos (1+ pos) '(display)) + (setq pos (text-property-any (1+ pos) (point-max) 'hard t))))) + +;; Wrapping the paragraphs. + +(defun longlines-wrap-region (beg end) + "Wrap each successive line, starting with the line before BEG. +Stop when we reach lines after END that don't need wrapping, or the +end of the buffer." + (setq longlines-wrap-point (point)) + (goto-char beg) + (forward-line -1) + ;; Two successful longlines-wrap-line's in a row mean successive + ;; lines don't need wrapping. + (while (null (and (longlines-wrap-line) + (or (eobp) + (and (>= (point) end) + (longlines-wrap-line)))))) + (goto-char longlines-wrap-point)) + +(defun longlines-wrap-line () + "If the current line needs to be wrapped, wrap it and return nil. +If wrapping is performed, point remains on the line. If the line does +not need to be wrapped, move point to the next line and return t." + (if (longlines-set-breakpoint) + (progn (backward-char 1) + (delete-char 1) + (insert-char ?\n 1) + nil) + (if (longlines-merge-lines-p) + (progn (end-of-line) + (delete-char 1) + ;; After certain commands (e.g. kill-line), there may be two + ;; successive soft newlines in the buffer. In this case, we + ;; replace these two newlines by a single space. Unfortunately, + ;; this breaks the conservation of (spaces + newlines), so we + ;; have to fiddle with longlines-wrap-point. + (if (or (bolp) (eolp)) + (if (> longlines-wrap-point (point)) + (setq longlines-wrap-point + (1- longlines-wrap-point))) + (insert-char ? 1)) + nil) + (forward-line 1) + t))) + +(defun longlines-set-breakpoint () + "Place point where we should break the current line, and return t. +If the line should not be broken, return nil; point remains on the +line." + (move-to-column fill-column) + (if (and (re-search-forward "[^ ]" (line-end-position) 1) + (> (current-column) fill-column)) + ;; This line is too long. Can we break it? + (or (longlines-find-break-backward) + (progn (move-to-column fill-column) + (longlines-find-break-forward))))) + +(defun longlines-find-break-backward () + "Move point backward to the first available breakpoint and return t. +If no breakpoint is found, return nil." + (and (search-backward " " (line-beginning-position) 1) + (save-excursion + (skip-chars-backward " " (line-beginning-position)) + (null (bolp))) + (progn (forward-char 1) + (if (and fill-nobreak-predicate + (run-hook-with-args-until-success + 'fill-nobreak-predicate)) + (progn (skip-chars-backward " " (line-beginning-position)) + (longlines-find-break-backward)) + t)))) + +(defun longlines-find-break-forward () + "Move point forward to the first available breakpoint and return t. +If no break point is found, return nil." + (and (search-forward " " (line-end-position) 1) + (progn (skip-chars-forward " " (line-end-position)) + (null (eolp))) + (if (and fill-nobreak-predicate + (run-hook-with-args-until-success + 'fill-nobreak-predicate)) + (longlines-find-break-forward) + t))) + +(defun longlines-merge-lines-p () + "Return t if part of the next line can fit onto the current line. +Otherwise, return nil. Text cannot be moved across hard newlines." + (save-excursion + (end-of-line) + (and (null (eobp)) + (null (get-text-property (point) 'hard)) + (let ((space (- fill-column (current-column)))) + (forward-line 1) + (if (eq (char-after) ? ) + t ; We can always merge some spaces + (<= (if (search-forward " " (line-end-position) 1) + (current-column) + (1+ (current-column))) + space)))))) + +(defun longlines-decode-region (beg end) + "Turn all newlines between BEG and END into hard newlines." + (save-excursion + (goto-char (min beg end)) + (while (search-forward "\n" (max beg end) t) + (set-hard-newline-properties + (match-beginning 0) (match-end 0))))) + +(defun longlines-encode-region (beg end &optional buffer) + "Replace each soft newline between BEG and END with exactly one space. +Hard newlines are left intact. The optional argument BUFFER exists for +compatibility with `format-alist', and is ignored." + (save-excursion + (let ((mod (buffer-modified-p))) + (goto-char (min beg end)) + (while (search-forward "\n" (max (max beg end)) t) + (unless (get-text-property (match-beginning 0) 'hard) + (replace-match " "))) + (set-buffer-modified-p mod) + end))) + +(defun longlines-encode-string (string) + "Return a copy of STRING with each soft newline replaced by a space. +Hard newlines are left intact." + (let* ((str (copy-sequence string)) + (pos (string-match "\n" str))) + (while pos + (if (null (get-text-property pos 'hard str)) + (aset str pos ? )) + (setq pos (string-match "\n" str (1+ pos)))) + str)) + +;; Auto wrap + +(defun longlines-auto-wrap (&optional arg) + "Turn on automatic line wrapping, and wrap the entire buffer. +With optional argument ARG, turn off line wrapping." + (interactive "P") + (remove-hook 'after-change-functions 'longlines-after-change-function t) + (remove-hook 'post-command-hook 'longlines-post-command-function t) + (if arg + (progn (setq longlines-auto-wrap nil) + (message "Auto wrap disabled.")) + (setq longlines-auto-wrap t) + (add-hook 'after-change-functions + 'longlines-after-change-function nil t) + (add-hook 'post-command-hook + 'longlines-post-command-function nil t) + (let ((mod (buffer-modified-p))) + (longlines-wrap-region (point-min) (point-max)) + (set-buffer-modified-p mod)) + (message "Auto wrap enabled."))) + +(defun longlines-after-change-function (beg end len) + "Update `longlines-wrap-beg' and `longlines-wrap-end'. +This is called by `after-change-functions' to keep track of the region +that has changed." + (unless undo-in-progress + (setq longlines-wrap-beg + (if longlines-wrap-beg (min longlines-wrap-beg beg) beg)) + (setq longlines-wrap-end + (if longlines-wrap-end (max longlines-wrap-end end) end)))) + +(defun longlines-post-command-function () + "Perform line wrapping on the parts of the buffer that have changed. +This is called by `post-command-hook' after each command." + (when longlines-wrap-beg + (cond ((or (eq this-command 'yank) + (eq this-command 'yank-pop)) + (longlines-decode-region (point) (mark t)) + (if longlines-showing + (longlines-show-region (point) (mark t)))) + ((and (eq this-command 'newline) longlines-showing) + (save-excursion + (if (search-backward "\n" nil t) + (longlines-show-region + (match-beginning 0) (match-end 0)))))) + (unless (or (eq this-command 'fill-paragraph) + (eq this-command 'fill-region)) + (longlines-wrap-region longlines-wrap-beg longlines-wrap-end)) + (setq longlines-wrap-beg nil) + (setq longlines-wrap-end nil))) + +(defun longlines-window-change-function () + "Re-wrap the buffer if the window width has changed. +This is called by `window-size-change-functions'." + (when (/= fill-column (- (window-width) window-min-width)) + (setq fill-column (- (window-width) window-min-width)) + (let ((mod (buffer-modified-p))) + (longlines-wrap-region (point-min) (point-max)) + (set-buffer-modified-p mod)))) + +;; Loading and saving + +(add-to-list + 'format-alist + (list 'longlines "Automatically wrap long lines." nil + 'longlines-decode-region 'longlines-encode-region t nil)) + +(provide 'longlines) + +;; arch-tag: 3489d225-5506-47b9-8659-d8807b77c624 +;;; longlines.el ends here diff -r 45e5f0224d81 -r 360860a0006f lisp/mail/rmail.el --- a/lisp/mail/rmail.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/mail/rmail.el Mon Apr 04 16:43:15 2005 +0000 @@ -1622,13 +1622,15 @@ supplied as a separate argument to `movemail' or nil otherwise, GOT-PASSWORD is non-nil if the user has supplied the password interactively. " - (if (string-match "^\\([^:]+\\)://\\(\\([^:@]+\\)\\(:\\([^@]+\\)\\)?@\\)?.*" file) + (cond + ((string-match "^\\([^:]+\\)://\\(\\([^:@]+\\)\\(:\\([^@]+\\)\\)?@\\)?.*" file) (let (got-password supplied-password (proto (match-string 1 file)) (user (match-string 3 file)) (pass (match-string 5 file)) (host (substring file (or (match-end 2) (+ 3 (match-end 1)))))) + (if (not pass) (when rmail-remote-password-required (setq got-password (not (rmail-have-password))) @@ -1645,8 +1647,22 @@ (list file (or (string-equal proto "pop") (string-equal proto "imap")) supplied-password - got-password))) - (list file nil nil nil))) + got-password)))) + + ((string-match "^po:\\([^:]+\\)\\(:\\(.*\\)\\)?" file) + (let (got-password supplied-password + (proto "pop") + (user (match-string 1 file)) + (host (match-string 3 file))) + + (when rmail-remote-password-required + (setq got-password (not (rmail-have-password))) + (setq supplied-password (rmail-get-remote-password nil))) + + (list file "pop" supplied-password got-password))) + + (t + (list file nil nil nil)))) (defun rmail-insert-inbox-text (files renamep) ;; Detect a locked file now, so that we avoid moving mail @@ -1686,15 +1702,7 @@ (expand-file-name buffer-file-name)))) ;; Always use movemail to rename the file, ;; since there can be mailboxes in various directories. - (setq movemail t) -;;; ;; If getting from mail spool directory, -;;; ;; use movemail to move rather than just renaming, -;;; ;; so as to interlock with the mailer. -;;; (setq movemail (string= file -;;; (file-truename -;;; (concat rmail-spool-directory -;;; (file-name-nondirectory file))))) - (if (and movemail (not popmail)) + (if (not popmail) (progn ;; On some systems, /usr/spool/mail/foo is a directory ;; and the actual inbox is /usr/spool/mail/foo/foo. @@ -1716,23 +1724,6 @@ ((or (file-exists-p tofile) (and (not popmail) (not (file-exists-p file)))) nil) - ((and (not movemail) (not popmail)) - ;; Try copying. If that fails (perhaps no space) and - ;; we're allowed to blow away the inbox, rename instead. - (if rmail-preserve-inbox - (copy-file file tofile nil) - (condition-case nil - (copy-file file tofile nil) - (error - ;; Third arg is t so we can replace existing file TOFILE. - (rename-file file tofile t)))) - ;; Make the real inbox file empty. - ;; Leaving it deleted could cause lossage - ;; because mailers often won't create the file. - (if (not rmail-preserve-inbox) - (condition-case () - (write-region (point) (point) file) - (file-error nil)))) (t (with-temp-buffer (let ((errors (current-buffer))) diff -r 45e5f0224d81 -r 360860a0006f lisp/mail/supercite.el --- a/lisp/mail/supercite.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/mail/supercite.el Mon Apr 04 16:43:15 2005 +0000 @@ -838,7 +838,7 @@ "Return the mail header field value associated with FIELD. If there was no mail header with FIELD as its key, return the value of `sc-mumble'. FIELD is case insensitive." - (or (cdr (assoc (downcase field) sc-mail-info)) sc-mumble)) + (or (cdr (assoc-string field sc-mail-info 'case-fold)) sc-mumble)) (defun sc-mail-field-query (arg) "View the value of a mail field. @@ -916,8 +916,8 @@ "Get the full email address path from FROM. AUTHOR is the author's name (which is removed from the address)." (let ((eos (length from))) - (if (string-match (concat "\\(^\\|^\"\\)" author - "\\(\\s +\\|\"\\s +\\)") from 0) + (if (string-match (concat "\\`\"?" (regexp-quote author) + "\"?\\s +") from 0) (let ((address (substring from (match-end 0) eos))) (if (and (= (aref address 0) ?<) (= (aref address (1- (length address))) ?>)) @@ -1866,10 +1866,11 @@ (define-minor-mode sc-minor-mode "Supercite minor mode." - nil (" SC" (sc-auto-fill-region-p - (":f" (sc-fixup-whitespace-p "w")) - (sc-fixup-whitespace-p ":w"))) - `((,sc-mode-map-prefix . ,sc-mode-map))) + :group 'supercite + :lighter (" SC" (sc-auto-fill-region-p + (":f" (sc-fixup-whitespace-p "w")) + (sc-fixup-whitespace-p ":w"))) + :keymap `((,sc-mode-map-prefix . ,sc-mode-map))) ;;;###autoload (defun sc-cite-original () @@ -2054,5 +2055,5 @@ (provide 'supercite) (run-hooks 'sc-load-hook) -;;; arch-tag: a5d5bfa6-3bd5-4414-8c65-0afc83e45cd3 +;; arch-tag: a5d5bfa6-3bd5-4414-8c65-0afc83e45cd3 ;;; supercite.el ends here diff -r 45e5f0224d81 -r 360860a0006f lisp/master.el --- a/lisp/master.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/master.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; master.el --- make a buffer the master over another buffer -;; Copyright (C) 1999, 2000, 2001 Alexander Schroeder +;; Copyright (C) 1999, 2000, 2001, 2005 Alexander Schroeder ;; Author: Alex Schroeder ;; Maintainer: Alex Schroeder @@ -55,7 +55,10 @@ ;;; Code: -(require 'easy-mmode) +(defgroup master nil + "Support for master/slave relationships between buffers." + :version "22.1" + :group 'convenience) ;; Variables that don't need initialization. @@ -83,16 +86,13 @@ The slave buffer is stored in the buffer-local variable `master-of'. You can set this variable using `master-set-slave'. You can show yourself the value of `master-of' by calling `master-show-slave'." - ;; The initial value. - nil - ;; The indicator for the mode line. - nil - ;; The minor mode bindings. - '(("\C-c\C-n" . master-says-scroll-up) - ("\C-c\C-p" . master-says-scroll-down) - ("\C-c<" . master-says-beginning-of-buffer) - ("\C-c>" . master-says-end-of-buffer) - ("\C-c\C-l" . master-says-recenter))) + :group 'master + :keymap + '(("\C-c\C-n" . master-says-scroll-up) + ("\C-c\C-p" . master-says-scroll-down) + ("\C-c<" . master-says-beginning-of-buffer) + ("\C-c>" . master-says-end-of-buffer) + ("\C-c\C-l" . master-says-recenter))) ;; Initialize Master mode by setting a slave buffer. diff -r 45e5f0224d81 -r 360860a0006f lisp/menu-bar.el --- a/lisp/menu-bar.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/menu-bar.el Mon Apr 04 16:43:15 2005 +0000 @@ -136,7 +136,7 @@ '(menu-item "--")) (define-key menu-bar-file-menu [recover-session] - '(menu-item "Recover Crashed Session..." recover-session + '(menu-item "Recover Crashed Session" recover-session :enable (and auto-save-list-file-prefix (file-directory-p (file-name-directory auto-save-list-file-prefix)) @@ -298,7 +298,7 @@ '(menu-item "Continue Tags Search" tags-loop-continue :help "Continue last tags search operation")) (define-key menu-bar-search-menu [tags-srch] - '(menu-item "Search tagged files" tags-search + '(menu-item "Search tagged files..." tags-search :help "Search for a regexp in all tagged files")) (define-key menu-bar-search-menu [separator-tag-search] '(menu-item "--")) @@ -342,7 +342,7 @@ '(menu-item "Continue Replace" tags-loop-continue :help "Continue last tags replace operation")) (define-key menu-bar-replace-menu [tags-repl] - '(menu-item "Replace in tagged files" tags-query-replace + '(menu-item "Replace in tagged files..." tags-query-replace :help "Interactively replace a regexp in all tagged files")) (define-key menu-bar-replace-menu [separator-replace-tags] '(menu-item "--")) @@ -377,14 +377,14 @@ (defvar menu-bar-goto-menu (make-sparse-keymap "Go To")) (define-key menu-bar-goto-menu [set-tags-name] - '(menu-item "Set Tags File Name" visit-tags-table + '(menu-item "Set Tags File Name..." visit-tags-table :help "Tell Tags commands which tag table file to use")) (define-key menu-bar-goto-menu [separator-tag-file] '(menu-item "--")) (define-key menu-bar-goto-menu [apropos-tags] - '(menu-item "Tags Apropos" tags-apropos + '(menu-item "Tags Apropos..." tags-apropos :help "Find function/variables whose names match regexp")) (define-key menu-bar-goto-menu [next-tag-otherw] '(menu-item "Next Tag in Other Window" @@ -673,7 +673,7 @@ '("--")) (define-key menu-bar-options-menu [mouse-set-font] - '(menu-item "Set Font/Fontset" mouse-set-font + '(menu-item "Set Font/Fontset..." mouse-set-font :visible (display-multi-font-p) :help "Select a font from list of known fonts/fontsets")) @@ -1332,10 +1332,10 @@ (define-key menu-bar-manuals-menu [sep3] '("--")) (define-key menu-bar-manuals-menu [command] - '(menu-item "Find Command in Manual" Info-goto-emacs-command-node + '(menu-item "Find Command in Manual..." Info-goto-emacs-command-node :help "Display manual section that describes a command")) (define-key menu-bar-manuals-menu [key] - '(menu-item "Find Key in Manual" Info-goto-emacs-key-command-node + '(menu-item "Find Key in Manual..." Info-goto-emacs-key-command-node :help "Display manual section that describes a key")) (define-key menu-bar-help-menu [eliza] @@ -1369,7 +1369,7 @@ (define-key menu-bar-help-menu [sep2] '("--")) (define-key menu-bar-help-menu [finder-by-keyword] - '(menu-item "Find Emacs Packages..." finder-by-keyword + '(menu-item "Find Emacs Packages" finder-by-keyword :help "Find packages and features by keyword")) (define-key menu-bar-help-menu [manuals] (list 'menu-item "More Manuals" menu-bar-manuals-menu diff -r 45e5f0224d81 -r 360860a0006f lisp/mouse.el --- a/lisp/mouse.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/mouse.el Mon Apr 04 16:43:15 2005 +0000 @@ -49,7 +49,7 @@ :version "22.1" :group 'mouse) -(defcustom mouse-1-click-follows-link 350 +(defcustom mouse-1-click-follows-link 450 "Non-nil means that clicking Mouse-1 on a link follows the link. With the default setting, an ordinary Mouse-1 click on a link @@ -837,6 +837,29 @@ (funcall action pos)) (t action))))))) +(defun mouse-fixup-help-message (msg) + "Fix help message MSG for `mouse-1-click-follows-link'." + (let (mp pos) + (if (and mouse-1-click-follows-link + (stringp msg) + (save-match-data + (string-match "^mouse-2" msg)) + (setq mp (mouse-pixel-position)) + (consp (setq pos (cdr mp))) + (car pos) (>= (car pos) 0) + (cdr pos) (>= (cdr pos) 0) + (setq pos (posn-at-x-y (car pos) (cdr pos) (car mp))) + (windowp (posn-window pos))) + (with-current-buffer (window-buffer (posn-window pos)) + (if (mouse-on-link-p pos) + (setq msg (concat + (cond + ((eq mouse-1-click-follows-link 'double) "double-") + ((and (integerp mouse-1-click-follows-link) + (< mouse-1-click-follows-link 0)) "Long ") + (t "")) + "mouse-1" (substring msg 7))))))) + msg) (defun mouse-drag-region-1 (start-event) (mouse-minibuffer-check start-event) @@ -886,6 +909,7 @@ (track-mouse (while (progn (setq event (read-event)) + (setq mve (cons event (and (boundp 'mve) mve))) (or (mouse-movement-p event) (memq (car-safe event) '(switch-frame select-window)))) (if (memq (car-safe event) '(switch-frame select-window)) @@ -997,7 +1021,7 @@ (= (window-start start-window) start-window-start))) (if (and on-link - (not end-point) + (or (not end-point) (= end-point start-point)) (consp event) (or remap-double-click (and diff -r 45e5f0224d81 -r 360860a0006f lisp/msb.el --- a/lisp/msb.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/msb.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,7 +1,7 @@ ;;; msb.el --- customizable buffer-selection with multiple menus -;; Copyright (C) 1993, 94, 95, 97, 98, 99, 2000, 2001, 2003 -;; Free Software Foundation, Inc. +;; Copyright (C) 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2003, +;; 2005 Free Software Foundation, Inc. ;; Author: Lars Lindberg ;; Maintainer: FSF @@ -1141,7 +1141,7 @@ With arg, turn Msb mode on if and only if arg is positive. This mode overrides the binding(s) of `mouse-buffer-menu' to provide a different buffer menu using the function `msb'." - :global t + :global t :group 'msb (if msb-mode (progn (add-hook 'menu-bar-update-hook 'msb-menu-bar-update-buffers) diff -r 45e5f0224d81 -r 360860a0006f lisp/obsolete/iso-acc.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/obsolete/iso-acc.el Mon Apr 04 16:43:15 2005 +0000 @@ -0,0 +1,492 @@ +;;; iso-acc.el --- minor mode providing electric accent keys + +;; Copyright (C) 1993, 1994, 1996, 2001, 2002, 2005 +;; Free Software Foundation, Inc. + +;; Author: Johan Vromans +;; Maintainer: FSF +;; Keywords: i18n + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; Function `iso-accents-mode' activates a minor mode in which +;; typewriter "dead keys" are emulated. The purpose of this emulation +;; is to provide a simple means for inserting accented characters +;; according to the ISO-8859-1...3 character sets. +;; +;; In `iso-accents-mode', pseudo accent characters are used to +;; introduce accented keys. The pseudo-accent characters are: +;; +;; ' (minute) -> actue accent +;; ` (backtick) -> grave accent +;; " (second) -> diaeresis +;; ^ (caret) -> circumflex +;; ~ (tilde) -> tilde over the character +;; / (slash) -> slash through the character. +;; Also: /A is A-with-ring and /E is AE ligature. +;; These two are enabled only if you set iso-accents-enable +;; to include them: +;; . (period) -> dot over the character (some languages only) +;; , (cedilla) -> cedilla under the character (some languages only) +;; +;; The action taken depends on the key that follows the pseudo accent. +;; In general: +;; +;; pseudo-accent + appropriate letter -> accented letter +;; pseudo-accent + space -> pseudo-accent (except comma and period) +;; pseudo-accent + pseudo-accent -> accent (if available) +;; pseudo-accent + other -> pseudo-accent + other +;; +;; If the pseudo-accent is followed by anything else than a +;; self-insert-command, the dead-key code is terminated, the +;; pseudo-accent inserted 'as is' and the bell is rung to signal this. +;; +;; Function `iso-accents-mode' can be used to enable the iso accents +;; minor mode, or disable it. + +;; If you want only some of these characters to serve as accents, +;; add a language to `iso-languages' which specifies the accent characters +;; that you want, then select the language with `iso-accents-customize'. + +;;; Code: + +(provide 'iso-acc) + +(defgroup iso-acc nil + "Minor mode providing electric accent keys." + :prefix "iso-accents-" + :group 'i18n) + +(defcustom iso-accents-insert-offset nonascii-insert-offset + "*Offset added by ISO Accents mode to character codes 0200 and above." + :type 'integer + :group 'iso-acc) + +(defvar iso-languages + '(("catalan" + ;; Note this includes some extra characters used in Spanish, + ;; on the idea that someone who uses Catalan is likely to use Spanish + ;; as well. + (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332) + (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372) + (?\ . ?')) + (?` (?A . ?\300) (?E . ?\310) (?O . ?\322) + (?a . ?\340) (?e . ?\350) (?o . ?\362) + (?\ . ?`)) + (?\" (?I . ?\317) (?U . ?\334) (?i . ?\357) (?u . ?\374) + (?\ . ?\")) + (?~ (?C . ?\307) (?N . ?\321) (?c . ?\347) (?n . ?\361) + (?> . ?\273) (?< . ?\253) (?! . ?\241) (?? . ?\277) + (?\ . ?\~))) + + ("esperanto" + (?^ (?H . ?\246) (?J . ?\254) (?h . ?\266) (?j . ?\274) (?C . ?\306) + (?G . ?\330) (?S . ?\336) (?c . ?\346) (?g . ?\370) (?s . ?\376) + (?^ . ?^) (?\ . ?^)) + (?~ (?U . ?\335) (?u . ?\375) (?\ . ?~))) + + ("french" + (?' (?E . ?\311) (?C . ?\307) (?e . ?\351) (?c . ?\347) + (?\ . ?')) + (?` (?A . ?\300) (?E . ?\310) (?U . ?\331) + (?a . ?\340) (?e . ?\350) (?u . ?\371) + (?\ . ?`)) + (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333) + (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373) + (?\ . ?^)) + (?\" (?E . ?\313) (?I . ?\317) + (?e . ?\353) (?i . ?\357) + (?\ . ?\")) + (?~ (?< . ?\253) (?> . ?\273) (?C . ?\307) (?c . ?\347) + (?\ . ?~)) + (?, (?C . ?\307) (?c . ?\347) (?\ . ?\,))) + + ("german" + (?\" (?A . ?\304) (?O . ?\326) (?U . ?\334) + (?a . ?\344) (?o . ?\366) (?u . ?\374) (?s . ?\337) (?\ . ?\"))) + + ("irish" + (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332) + (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372) + (?\ . ?'))) + + ("portuguese" + (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332) + (?C . ?\307) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) + (?u . ?\372) (?c . ?\347) + (?\ . ?')) + (?` (?A . ?\300) (?a . ?\340) + (?\ . ?`)) + (?^ (?A . ?\302) (?E . ?\312) (?O . ?\324) + (?a . ?\342) (?e . ?\352) (?o . ?\364) + (?\ . ?^)) + (?\" (?U . ?\334) (?u . ?\374) + (?\ . ?\")) + (?~ (?A . ?\303) (?O . ?\325) (?a . ?\343) (?o . ?\365) + (?C . ?\307) (?N . ?\321) (?c . ?\347) (?n . ?\361) + (?\ . ?~)) + (?, (?c . ?\347) (?C . ?\307) (?, . ?,))) + + ("spanish" + (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332) + (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372) + (?\ . ?')) + (?\" (?U . ?\334) (?u . ?\374) (?\ . ?\")) + (?\~ (?N . ?\321) (?n . ?\361) (?> . ?\273) (?< . ?\253) (?! . ?\241) + (?? . ?\277) (?\ . ?\~))) + + ("latin-1" + (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332) + (?Y . ?\335) (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) + (?u . ?\372) (?y . ?\375) (?' . ?\264) + (?\ . ?')) + (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322) (?U . ?\331) + (?a . ?\340) (?e . ?\350) (?i . ?\354) (?o . ?\362) (?u . ?\371) + (?` . ?`) (?\ . ?`)) + (?^ (?A . ?\302) (?E . ?\312) (?I . ?\316) (?O . ?\324) (?U . ?\333) + (?a . ?\342) (?e . ?\352) (?i . ?\356) (?o . ?\364) (?u . ?\373) + (?^ . ?^) (?\ . ?^)) + (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326) (?U . ?\334) + (?a . ?\344) (?e . ?\353) (?i . ?\357) (?o . ?\366) (?s . ?\337) + (?u . ?\374) (?y . ?\377) + (?\" . ?\250) (?\ . ?\")) + (?~ (?A . ?\303) (?C . ?\307) (?D . ?\320) (?N . ?\321) (?O . ?\325) + (?T . ?\336) (?a . ?\343) (?c . ?\347) (?d . ?\360) (?n . ?\361) + (?o . ?\365) (?t . ?\376) + (?> . ?\273) (?< . ?\253) (?! . ?\241) (?? . ?\277) + (?\~ . ?\270) (?\ . ?~)) + (?/ (?A . ?\305) (?E . ?\306) (?O . ?\330) (?a . ?\345) (?e . ?\346) + (?o . ?\370) + (?/ . ?\260) (?\ . ?/))) + + ("latin-2" latin-iso8859-2 + (?' (?A . ?\301) (?C . ?\306) (?D . ?\320) (?E . ?\311) (?I . ?\315) + (?L . ?\305) (?N . ?\321) (?O . ?\323) (?R . ?\300) (?S . ?\246) + (?U . ?\332) (?Y . ?\335) (?Z . ?\254) + (?a . ?\341) (?c . ?\346) (?d . ?\360) (?e . ?\351) (?i . ?\355) + (?l . ?\345) (?n . ?\361) (?o . ?\363) (?r . ?\340) (?s . ?\266) + (?u . ?\372) (?y . ?\375) (?z . ?\274) + (?' . ?\264) (?\ . ?')) + (?` (?A . ?\241) (?C . ?\307) (?E . ?\312) (?L . ?\243) (?S . ?\252) + (?T . ?\336) (?Z . ?\257) + (?a . ?\261) (?l . ?\263) (?c . ?\347) (?e . ?\352) (?s . ?\272) + (?t . ?\376) (?z . ?\277) + (?` . ?\252) + (?. . ?\377) (?\ . ?`)) + (?^ (?A . ?\302) (?I . ?\316) (?O . ?\324) + (?a . ?\342) (?i . ?\356) (?o . ?\364) + (?^ . ?^) ; no special code? + (?\ . ?^)) + (?\" (?A . ?\304) (?E . ?\313) (?O . ?\326) (?U . ?\334) + (?a . ?\344) (?e . ?\353) (?o . ?\366) (?s . ?\337) (?u . ?\374) + (?\" . ?\250) + (?\ . ?\")) + (?~ (?A . ?\303) (?C . ?\310) (?D . ?\317) (?L . ?\245) (?N . ?\322) + (?O . ?\325) (?R . ?\330) (?S . ?\251) (?T . ?\253) (?U . ?\333) + (?Z . ?\256) + (?a . ?\343) (?c . ?\350) (?d . ?\357) (?l . ?\265) (?n . ?\362) + (?o . ?\365) (?r . ?\370) (?s . ?\271) (?t . ?\273) (?u . ?\373) + (?z . ?\276) + (?v . ?\242) ; v accent + (?\~ . ?\242) ; v accent + (?\. . ?\270) ; cedilla accent + (?\ . ?~))) + + ("latin-3" latin-iso8859-3 + (?' (?A . ?\301) (?E . ?\311) (?I . ?\315) (?O . ?\323) (?U . ?\332) + (?a . ?\341) (?e . ?\351) (?i . ?\355) (?o . ?\363) (?u . ?\372) + (?' . ?\264) (?\ . ?')) + (?` (?A . ?\300) (?E . ?\310) (?I . ?\314) (?O . ?\322) (?U . ?\331) + (?a . ?\340) (?e . ?\350) (?i . ?\354) (?o . ?\362) (?u . ?\371) + (?` . ?`) (?\ . ?`)) + (?^ (?A . ?\302) (?C . ?\306) (?E . ?\312) (?G . ?\330) (?H . ?\246) + (?I . ?\316) (?J . ?\254) (?O . ?\324) (?S . ?\336) (?U . ?\333) + (?a . ?\342) (?c . ?\346) (?e . ?\352) (?g . ?\370) (?h . ?\266) + (?i . ?\356) (?j . ?\274) (?o . ?\364) (?s . ?\376) (?u . ?\373) + (?^ . ?^) (?\ . ?^)) + (?\" (?A . ?\304) (?E . ?\313) (?I . ?\317) (?O . ?\326) (?U . ?\334) + (?a . ?\344) (?e . ?\353) (?i . ?\357) (?o . ?\366) (?u . ?\374) + (?s . ?\337) + (?\" . ?\250) (?\ . ?\")) + (?~ (?A . ?\303) (?C . ?\307) (?D . ?\320) (?N . ?\321) (?O . ?\325) + (?a . ?\343) (?c . ?\347) (?d . ?\360) (?n . ?\361) (?o . ?\365) + (?$ . ?\245) (?S . ?\252) (?s . ?\272) (?G . ?\253) (?g . ?\273) + (?U . ?\335) (?u . ?\375) (?` . ?\242) + (?~ . ?\270) (?\ . ?~)) + (?/ (?C . ?\305) (?G . ?\325) (?H . ?\241) (?I . ?\251) (?Z . ?\257) + (?c . ?\345) (?g . ?\365) (?h . ?\261) (?i . ?\271) (?z . ?\277) + (?r . ?\256) + (?. . ?\377) (?# . ?\243) (?$ . ?\244) + (?/ . ?\260) (?\ . ?/)) + (?. (?C . ?\305) (?G . ?\325) (?I . ?\251) (?Z . ?\257) + (?c . ?\345) (?g . ?\365) (?z . ?\277)))) + "List of language-specific customizations for the ISO Accents mode. + +Each element of the list is of the form + + (LANGUAGE [CHARSET] + (PSEUDO-ACCENT MAPPINGS) + (PSEUDO-ACCENT MAPPINGS) + ...) + +LANGUAGE is a string naming the language. +CHARSET (which may be omitted) is the symbol name + of the character set used in this language. + If CHARSET is omitted, latin-iso8859-1 is the default. +PSEUDO-ACCENT is a char specifying an accent key. +MAPPINGS are cons cells of the form (CHAR . ISO-CHAR). + +The net effect is that the key sequence PSEUDO-ACCENT CHAR is mapped +to ISO-CHAR on input.") + +(defvar iso-language nil + "Language for which ISO Accents mode is currently customized. +Change it with the `iso-accents-customize' function.") + +(defvar iso-accents-list nil + "Association list for ISO accent combinations, for the chosen language.") + +(defcustom iso-accents-mode nil + "*Non-nil enables ISO Accents mode. +Setting this variable makes it local to the current buffer. +See the function `iso-accents-mode'." + :type 'boolean + :group 'iso-acc) +(make-variable-buffer-local 'iso-accents-mode) + +(defcustom iso-accents-enable '(?' ?` ?^ ?\" ?~ ?/) + "*List of accent keys that become prefixes in ISO Accents mode. +The default is (?' ?` ?^ ?\" ?~ ?/), which contains all the supported +accent keys. If you set this variable to a list in which some of those +characters are missing, the missing ones do not act as accents. + +Note that if you specify a language with `iso-accents-customize', +that can also turn off certain prefixes (whichever ones are not needed in +the language you choose)." + :type '(repeat character) + :group 'iso-acc) + +(defun iso-accents-accent-key (prompt) + "Modify the following character by adding an accent to it." + ;; Pick up the accent character. + (if (and iso-accents-mode + (memq last-input-char iso-accents-enable)) + (iso-accents-compose prompt) + (vector last-input-char))) + + +;; The iso-accents-compose function is called deep inside Emacs' read +;; key sequence machinery, so the call to read-event below actually +;; recurses into that machinery. Doing that does not cause any +;; problem on its own, but read-event will have marked the window's +;; display matrix to be accurate -- which is broken by the subsequent +;; call to delete-region. Therefore, we must call force-window-update +;; after delete-region to explicitly clear the accurate state of the +;; window's display matrix. + +(defun iso-accents-compose (prompt) + (let* ((first-char last-input-char) + (list (assq first-char iso-accents-list)) + ;; Wait for the second key and look up the combination. + (second-char (if (or prompt + (not (eq (key-binding "a") + 'self-insert-command)) + ;; Not at start of a key sequence. + (> (length (this-single-command-keys)) 1) + ;; Called from anything but the command loop. + this-command) + (progn + (message "%s%c" + (or prompt "Compose with ") + first-char) + (read-event)) + (insert first-char) + (prog1 (read-event) + (delete-region (1- (point)) (point)) + ;; Display is no longer up-to-date. + (force-window-update (selected-window))))) + (entry (cdr (assq second-char list)))) + (if entry + ;; Found it: return the mapped char + (vector + (if (and enable-multibyte-characters + (>= entry ?\200)) + (+ iso-accents-insert-offset entry) + entry)) + ;; Otherwise, advance and schedule the second key for execution. + (push second-char unread-command-events) + (vector first-char)))) + +;; It is a matter of taste if you want the minor mode indicated +;; in the mode line... +;; If so, uncomment the next four lines. +;; (or (assq 'iso-accents-mode minor-mode-alist) +;; (setq minor-mode-alist +;; (append minor-mode-alist +;; '((iso-accents-mode " ISO-Acc"))))) + +;;;###autoload +(defun iso-accents-mode (&optional arg) + "Toggle ISO Accents mode, in which accents modify the following letter. +This permits easy insertion of accented characters according to ISO-8859-1. +When Iso-accents mode is enabled, accent character keys +\(`, ', \", ^, / and ~) do not self-insert; instead, they modify the following +letter key so that it inserts an ISO accented letter. + +You can customize ISO Accents mode to a particular language +with the command `iso-accents-customize'. + +Special combinations: ~c gives a c with cedilla, +~d gives an Icelandic eth (d with dash). +~t gives an Icelandic thorn. +\"s gives German sharp s. +/a gives a with ring. +/e gives an a-e ligature. +~< and ~> give guillemots. +~! gives an inverted exclamation mark. +~? gives an inverted question mark. + +With an argument, a positive argument enables ISO Accents mode, +and a negative argument disables it." + + (interactive "P") + + (if (if arg + ;; Negative arg means switch it off. + (<= (prefix-numeric-value arg) 0) + ;; No arg means toggle. + iso-accents-mode) + (setq iso-accents-mode nil) + + ;; Enable electric accents. + (setq iso-accents-mode t))) + +(defun iso-accents-customize (language) + "Customize the ISO accents machinery for a particular language. +It selects the customization based on the specifications in the +`iso-languages' variable." + (interactive (list (completing-read "Language: " iso-languages nil t))) + (let ((table (cdr (assoc language iso-languages))) + all-accents tail) + (if (not table) + (error "Unknown language `%s'" language) + (setq iso-accents-insert-offset (- (make-char (if (symbolp (car table)) + (car table) + 'latin-iso8859-1)) + 128)) + (if (symbolp (car table)) + (setq table (cdr table))) + (setq iso-language language + iso-accents-list table) + (if key-translation-map + (substitute-key-definition + 'iso-accents-accent-key nil key-translation-map) + (setq key-translation-map (make-sparse-keymap))) + ;; Set up translations for all the characters that are used as + ;; accent prefixes in this language. + (setq tail iso-accents-list) + (while tail + (define-key key-translation-map (vector (car (car tail))) + 'iso-accents-accent-key) + (setq tail (cdr tail)))))) + +(defun iso-accentuate (start end) + "Convert two-character sequences in region into accented characters. +Noninteractively, this operates on text from START to END. +This uses the same conversion that ISO Accents mode uses for type-in." + (interactive "r") + (save-excursion + (save-restriction + (narrow-to-region start end) + (goto-char start) + (forward-char 1) + (let (entry) + (while (< (point) end) + (if (and (memq (preceding-char) iso-accents-enable) + (setq entry (cdr (assq (following-char) (assq (preceding-char) iso-accents-list))))) + (progn + (forward-char -1) + (delete-char 2) + (insert entry) + (setq end (1- end))) + (forward-char 1))))))) + +(defun iso-accent-rassoc-unit (value alist) + (let (elt acc) + (while (and alist (not elt)) + (setq acc (car (car alist)) + elt (car (rassq value (cdr (car alist)))) + alist (cdr alist))) + (if elt + (cons acc elt)))) + +(defun iso-unaccentuate (start end) + "Convert accented characters in the region into two-character sequences. +Noninteractively, this operates on text from START to END. +This uses the opposite of the conversion done by ISO Accents mode for type-in." + (interactive "r") + (save-excursion + (save-restriction + (narrow-to-region start end) + (goto-char start) + (let (entry) + (while (< (point) end) + (if (and (> (following-char) 127) + (setq entry (iso-accent-rassoc-unit (following-char) + iso-accents-list))) + (progn + (delete-char 1) + (insert (car entry) (cdr entry)) + (setq end (1+ end))) + (forward-char 1))))))) + +(defun iso-deaccentuate (start end) + "Convert accented characters in the region into unaccented characters. +Noninteractively, this operates on text from START to END." + (interactive "r") + (save-excursion + (save-restriction + (narrow-to-region start end) + (goto-char start) + (let (entry) + (while (< (point) end) + (if (and (> (following-char) 127) + (setq entry (iso-accent-rassoc-unit (following-char) + iso-accents-list))) + (progn + (delete-char 1) + (insert (cdr entry))) + (forward-char 1))))))) + +;; Set up the default settings. +(iso-accents-customize "latin-1") + +;; Use Iso-Accents mode in the minibuffer +;; if it was in use in the previous buffer. +(defun iso-acc-minibuf-setup () + (setq iso-accents-mode + (save-excursion + (set-buffer (window-buffer minibuffer-scroll-window)) + iso-accents-mode))) + +(add-hook 'minibuffer-setup-hook 'iso-acc-minibuf-setup) + +;; arch-tag: 149ff409-7c3e-4574-9b5d-ac038939c0a6 +;;; iso-acc.el ends here diff -r 45e5f0224d81 -r 360860a0006f lisp/pcvs.el --- a/lisp/pcvs.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/pcvs.el Mon Apr 04 16:43:15 2005 +0000 @@ -358,7 +358,7 @@ (dir default-directory) (buf (cond (name (cvs-get-buffer-create name)) - ((and (bufferp cvs-temp-buffer) (buffer-name cvs-temp-buffer)) + ((and (bufferp cvs-temp-buffer) (buffer-live-p cvs-temp-buffer)) cvs-temp-buffer) (t (set (make-local-variable 'cvs-temp-buffer) @@ -528,39 +528,49 @@ (files (nth 1 dir+files+rest)) (rest (nth 2 dir+files+rest))) - ;; setup the (current) process buffer - (set (make-local-variable 'cvs-postprocess) - (if (null rest) - ;; this is the last invocation - postprocess - ;; else, we have to register ourselves to be rerun on the rest - `(cvs-run-process ',args ',rest ',postprocess ',single-dir))) (add-hook 'kill-buffer-hook (lambda () (let ((proc (get-buffer-process (current-buffer)))) (when (processp proc) (set-process-filter proc nil) - (set-process-sentinel proc nil) - (delete-process proc)))) + ;; Abort postprocessing but leave the sentinel so it + ;; will update the list of running procs. + (process-put proc 'cvs-postprocess nil) + (interrupt-process proc)))) nil t) ;; create the new process and setup the procbuffer correspondingly - (let* ((args (append (cvs-flags-query 'cvs-cvs-flags nil 'noquery) + (let* ((msg (cvs-header-msg args fis)) + (args (append (cvs-flags-query 'cvs-cvs-flags nil 'noquery) (if cvs-cvsroot (list "-d" cvs-cvsroot)) args files)) ;; If process-connection-type is nil and the repository ;; is accessed via SSH, a bad interaction between libc, ;; CVS and SSH can lead to garbled output. - ;; It might be a glibc-specific problem (but it also happens + ;; It might be a glibc-specific problem (but it can also happens ;; under Mac OS X, it seems). - ;; Until the problem is cleared, we'll use a pty rather than - ;; a pipe. - ;; (process-connection-type nil) ; Use a pipe, not a pty. + ;; It seems that using a pty can help circumvent the problem, + ;; but at the cost of screwing up when the process thinks it + ;; can ask for user input (such as password or host-key + ;; confirmation). A better workaround is to set CVS_RSH to + ;; an appropriate script, or to use a later version of CVS. + (process-connection-type nil) ; Use a pipe, not a pty. (process ;; the process will be run in the selected dir (let ((default-directory (cvs-expand-dir-name dir))) (apply 'start-process "cvs" procbuf cvs-program args)))) + ;; setup the process. + (process-put process 'cvs-buffer cvs-buffer) + (with-current-buffer cvs-buffer (cvs-update-header msg 'add)) + (process-put process 'cvs-header msg) + (process-put + process 'cvs-postprocess + (if (null rest) + ;; this is the last invocation + postprocess + ;; else, we have to register ourselves to be rerun on the rest + `(cvs-run-process ',args ',rest ',postprocess ',single-dir))) (set-process-sentinel process 'cvs-sentinel) (set-process-filter process 'cvs-update-filter) (set-marker (process-mark process) (point-max)) @@ -636,33 +646,35 @@ This is responsible for parsing the output from the cvs update when it is finished." (when (memq (process-status proc) '(signal exit)) - (if (null (buffer-name (process-buffer proc))) - ;;(set-process-buffer proc nil) - (error "cvs' process buffer was killed") - (let* ((obuf (current-buffer)) - (procbuffer (process-buffer proc))) - (set-buffer (with-current-buffer procbuffer cvs-buffer)) - (setq cvs-mode-line-process (symbol-name (process-status proc))) - (force-mode-line-update) - (set-buffer procbuffer) - (let ((cvs-postproc cvs-postprocess)) - ;; Since the buffer and mode line will show that the - ;; process is dead, we can delete it now. Otherwise it - ;; will stay around until M-x list-processes. - (delete-process proc) - (setq cvs-postprocess nil) - ;; do the postprocessing like parsing and such - (save-excursion (eval cvs-postproc)) - ;; check whether something is left - (unless cvs-postprocess - ;; IIRC, we enable undo again once the process is finished - ;; for cases where the output was inserted in *vc-diff* or - ;; in a file-like buffer. -stef - (buffer-enable-undo) - (with-current-buffer cvs-buffer - (message "CVS process has completed in %s" (buffer-name))))) - ;; This might not even be necessary - (set-buffer obuf))))) + (let ((cvs-postproc (process-get proc 'cvs-postprocess)) + (cvs-buf (process-get proc 'cvs-buffer))) + ;; Since the buffer and mode line will show that the + ;; process is dead, we can delete it now. Otherwise it + ;; will stay around until M-x list-processes. + (process-put proc 'postprocess nil) + (delete-process proc) + ;; Don't do anything if the main buffer doesn't exist any more. + (when (buffer-live-p cvs-buf) + (with-current-buffer cvs-buf + (cvs-update-header (process-get proc 'cvs-header) nil) + (setq cvs-mode-line-process (symbol-name (process-status proc))) + (force-mode-line-update) + (when cvs-postproc + (if (null (buffer-live-p (process-buffer proc))) + ;;(set-process-buffer proc nil) + (error "cvs' process buffer was killed") + (with-current-buffer (process-buffer proc) + ;; do the postprocessing like parsing and such + (save-excursion (eval cvs-postproc)) + ;; check whether something is left + (unless (get-buffer-process (current-buffer)) + ;; IIRC, we enable undo again once the process is finished + ;; for cases where the output was inserted in *vc-diff* or + ;; in a file-like buffer. --Stef + (buffer-enable-undo) + (with-current-buffer cvs-buffer + (message "CVS process has completed in %s" + (buffer-name)))))))))))) (defun cvs-parse-process (dcd &optional subdir old-fis) "Parse the output of a cvs process. @@ -770,7 +782,7 @@ (defun-cvs-mode cvs-mode-kill-process () "Kill the temporary buffer and associated process." (interactive) - (when (and (bufferp cvs-temp-buffer) (buffer-name cvs-temp-buffer)) + (when (and (bufferp cvs-temp-buffer) (buffer-live-p cvs-temp-buffer)) (let ((proc (get-buffer-process cvs-temp-buffer))) (when proc (delete-process proc))))) @@ -906,23 +918,28 @@ ;;;; ;;;###autoload -(defun cvs-checkout (modules dir flags) +(defun cvs-checkout (modules dir flags &optional root) "Run a 'cvs checkout MODULES' in DIR. Feed the output to a *cvs* buffer, display it in the current window, and run `cvs-mode' on it. With a prefix argument, prompt for cvs FLAGS to use." (interactive - (list (cvs-string->strings (read-string "Module(s): " (cvs-get-module))) - (read-directory-name "CVS Checkout Directory: " - nil default-directory nil) - (cvs-add-branch-prefix - (cvs-flags-query 'cvs-checkout-flags "cvs checkout flags")))) + (let ((root (cvs-get-cvsroot))) + (if (or (null root) current-prefix-arg) + (setq root (read-string "CVS Root: "))) + (list (cvs-string->strings (read-string "Module(s): " (cvs-get-module))) + (read-directory-name "CVS Checkout Directory: " + nil default-directory nil) + (cvs-add-branch-prefix + (cvs-flags-query 'cvs-checkout-flags "cvs checkout flags")) + root))) (when (eq flags t) (setf flags (cvs-flags-query 'cvs-checkout-flags nil 'noquery))) - (cvs-cmd-do "checkout" (or dir default-directory) - (append flags modules) nil 'new - :noexist t)) + (let ((cvs-cvsroot root)) + (cvs-cmd-do "checkout" (or dir default-directory) + (append flags modules) nil 'new + :noexist t))) (defun-cvs-mode (cvs-mode-checkout . NOARGS) (dir) "Run cvs checkout against the current branch. @@ -1133,7 +1150,7 @@ (eq (ewoc-buffer cvs-cookies) buf) (setq check 'cvs-temp-buffer) (or (null cvs-temp-buffer) - (null (buffer-name cvs-temp-buffer)) + (null (buffer-live-p cvs-temp-buffer)) (and (eq (with-current-buffer cvs-temp-buffer cvs-buffer) buf) (equal (with-current-buffer cvs-temp-buffer default-directory) @@ -1822,11 +1839,6 @@ ;; absence of `cvs update' output has a specific meaning. (or fis (list (cvs-create-fileinfo 'DIRCHANGE "" "." "")))))) (push `(cvs-parse-process ',dont-change-disc nil ',old-fis) postproc))) - (let ((msg (cvs-header-msg args fis))) - (cvs-update-header msg 'add) - (push `(with-current-buffer cvs-buffer - (cvs-update-header ',msg nil)) - postproc)) (setq postproc (if (cdr postproc) (cons 'progn postproc) (car postproc))) (with-current-buffer buf (let ((inhibit-read-only t)) (erase-buffer)) diff -r 45e5f0224d81 -r 360860a0006f lisp/progmodes/compile.el --- a/lisp/progmodes/compile.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/progmodes/compile.el Mon Apr 04 16:43:15 2005 +0000 @@ -1613,6 +1613,8 @@ (compilation-set-window-height w) (when highlight-regexp + (if (timerp next-error-highlight-timer) + (cancel-timer next-error-highlight-timer)) (unless compilation-highlight-overlay (setq compilation-highlight-overlay (make-overlay (point-min) (point-min))) @@ -1632,8 +1634,11 @@ (move-overlay compilation-highlight-overlay (point) end (current-buffer))) (if (numberp next-error-highlight) - (sit-for next-error-highlight)) - (if (not (eq next-error-highlight t)) + (setq next-error-highlight-timer + (run-at-time next-error-highlight nil 'delete-overlay + compilation-highlight-overlay))) + (if (not (or (eq next-error-highlight t) + (numberp next-error-highlight))) (delete-overlay compilation-highlight-overlay)))))) (when (and (eq next-error-highlight 'fringe-arrow)) (set (make-local-variable 'overlay-arrow-position) diff -r 45e5f0224d81 -r 360860a0006f lisp/progmodes/cwarn.el --- a/lisp/progmodes/cwarn.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/progmodes/cwarn.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; cwarn.el --- highlight suspicious C and C++ constructions -;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2005 Free Software Foundation, Inc. ;; Author: Anders Lindgren ;; Keywords: c, languages, faces @@ -193,7 +193,7 @@ C++ modes are included. With ARG, turn CWarn mode on if and only if arg is positive." - nil cwarn-mode-text nil + :group 'cwarn :lighter cwarn-mode-text (cwarn-font-lock-keywords cwarn-mode) (if font-lock-mode (font-lock-fontify-buffer))) diff -r 45e5f0224d81 -r 360860a0006f lisp/progmodes/f90.el --- a/lisp/progmodes/f90.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/progmodes/f90.el Mon Apr 04 16:43:15 2005 +0000 @@ -597,41 +597,32 @@ ;; Hideshow support. (defconst f90-end-block-re - (concat "^[ \t0-9]*\\[ \t]*" + (concat "^[ \t0-9]*\\\\)\\)\\)\\ count 0) (re-search-backward f90-blocks-re nil 'move)) (beginning-of-line) diff -r 45e5f0224d81 -r 360860a0006f lisp/progmodes/flymake.el --- a/lisp/progmodes/flymake.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/progmodes/flymake.el Mon Apr 04 16:43:15 2005 +0000 @@ -964,7 +964,7 @@ (if (consp file) (setq file (car file))) (if (consp line) (setq line (car line))) (if (consp col) (setq col (car col))) - + (when (not (functionp line)) (setq converted-list (cons (list regexp file line col) converted-list))))) converted-list)) @@ -1508,7 +1508,7 @@ "Minor mode to do on-the-fly syntax checking. When called interactively, toggles the minor mode. With arg, turn Flymake mode on if and only if arg is positive." - :lighter flymake-mode-line + :group 'flymake :lighter flymake-mode-line (if flymake-mode (if (flymake-can-syntax-check-file (buffer-file-name)) (flymake-mode-on) diff -r 45e5f0224d81 -r 360860a0006f lisp/progmodes/fortran.el --- a/lisp/progmodes/fortran.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/progmodes/fortran.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,7 +1,7 @@ ;;; fortran.el --- Fortran mode for GNU Emacs -;; Copyright (c) 1986, 93, 94, 95, 97, 98, 99, 2000, 01, 03, 04 -;; Free Software Foundation, Inc. +;; Copyright (C) 1986, 1993, 1994, 1995, 1997, 1998, 1999, 2000, 2001, +;; 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: Michael D. Prange ;; Maintainer: Glenn Morris @@ -95,7 +95,7 @@ :group 'fortran-indent) (defcustom fortran-if-indent 3 - "*Extra indentation applied to IF blocks." + "*Extra indentation applied to IF, SELECT CASE and WHERE blocks." :type 'integer :group 'fortran-indent) @@ -321,7 +321,8 @@ "while" "inquire" "stop" "return" "include" "open" "close" "read" "write" "format" "print" "select" "case" - "cycle" "exit" "rewind" "backspace") + "cycle" "exit" "rewind" "backspace" + "where" "elsewhere") 'paren) "\\>") ;; Builtin operators. (concat "\\." (regexp-opt @@ -370,6 +371,29 @@ fortran-font-lock-keywords-2))) "Gaudy level highlighting for Fortran mode.") +(defvar fortran-font-lock-keywords-4 + (append fortran-font-lock-keywords-3 + (list (list + (concat "\\<" + (regexp-opt + '("int" "ifix" "idint" "real" "float" "sngl" + "dble" "cmplx" "ichar" "char" "aint" "dint" + "anint" "dnint" "nint" "idnint" "iabs" "abs" + "dabs" "cabs" "mod" "amod" "dmod" "isign" + "sign" "dsign" "idim" "dim" "ddim" "dprod" + "max" "max0" "amax1" "dmax1" "amax0" "max1" + "min0" "amin1" "dmin1" "amin0" "min1" "len" + "index" "lge" "lgt" "lle" "llt" "aimag" + "conjg" "sqrt" "dsqrt" "csqrt" "exp" "dexp" + "cexp" "log" "alog" "dlog" "clog" "log10" + "alog10" "dlog10" "sin" "dsin" "csin" "cos" + "dcos" "ccos" "tan" "dtan" "asin" "dasin" + "acos" "dacos" "atan" "datan" "atan2" "datan2" + "sinh" "dsinh" "cosh" "dcosh" "tanh" "dtanh") + 'paren) "[ \t]*(") '(1 font-lock-builtin-face)))) + "Maximum highlighting for Fortran mode. +Consists of level 3 plus all other intrinsics not already highlighted.") + ;; Comments are real pain in Fortran because there is no way to ;; represent the standard comment syntax in an Emacs syntax table. ;; (We can do so for F90-style). Therefore an unmatched quote in a @@ -409,6 +433,64 @@ "Value for `imenu-generic-expression' in Fortran mode.") +;; Hideshow support. +(defconst fortran-blocks-re + (concat "block[ \t]*data\\|select[ \t]*case\\|" + (regexp-opt '("do" "if" "interface" "function" "map" "program" + "structure" "subroutine" "union" "where"))) + "Regexp potentially indicating the start or end of a Fortran \"block\". +Omits naked END statements, and DO-loops closed by anything other +than ENDDO.") + +(defconst fortran-end-block-re + ;; Do-loops terminated by things other than ENDDO cannot be handled + ;; with a regexp. This omission does not seem to matter to hideshow... + (concat "^[ \t0-9]*\\\\)\\)\\)\\ count 0) + (re-search-forward + (concat "\\(" fortran-blocks-re + (if fortran-check-all-num-for-matching-do + "\\|^[ \t]*[0-9]+" "") + "\\|continue\\|end\\)\\>") + nil 'move)) + (beginning-of-line) + (if (if (looking-at (concat "^[0-9 \t]*" fortran-if-start-re)) + (fortran-looking-at-if-then) + (looking-at fortran-start-block-re)) + (setq count (1+ count)) + (if (or (looking-at fortran-end-block-re) + (and (or (looking-at "^[0-9 \t]*continue") + (and fortran-check-all-num-for-matching-do + (looking-at "[ \t]*[0-9]+"))) + (fortran-check-for-matching-do))) + (setq count (1- count)))) + (end-of-line)) + (if (> count 0) (error "Missing block end")))) + +(defun fortran-beginning-of-block (&optional num) + "Move point backwards to the start of the current code block. +With optional argument NUM, go backward that many balanced +blocks. If NUM is negative, go forward to the end of a block. +Does not check for consistency of block types. Interactively, +pushes mark before moving point." + (interactive "p") + (if (interactive-p) (push-mark (point) t)) + (and num (< num 0) (fortran-end-of-block (- num))) + (let ((case-fold-search t) + (count (or num 1))) + (beginning-of-line) + (while (and (> count 0) + (re-search-backward + (concat "\\(" fortran-blocks-re + (if fortran-check-all-num-for-matching-do + "\\|^[ \t]*[0-9]+" "") + "\\|continue\\|end\\)\\>") + nil 'move)) + (beginning-of-line) + (if (if (looking-at (concat "^[0-9 \t]*" fortran-if-start-re)) + (fortran-looking-at-if-then) + (looking-at fortran-start-block-re)) + (setq count (1- count)) + (if (or (looking-at fortran-end-block-re) + (and (or (looking-at "^[0-9 \t]*continue") + (and fortran-check-all-num-for-matching-do + (looking-at "[ \t]*[0-9]+"))) + (fortran-check-for-matching-do))) + (setq count (1+ count))))) + ;; Includes an un-named main program block. + (if (> count 0) (error "Missing block start")))) + (defun fortran-blink-match (regex keyword find-begin) "From a line matching REGEX, blink matching KEYWORD statement line. @@ -1679,8 +1843,9 @@ (1+ (point))))) (if (re-search-forward "\\S\"\\s\"\\S\"" eol t) (backward-char 2)) - ;; If the current string is longer than 72 - 6 chars, - ;; break it at the fill column (else infinite loop). + ;; If the current string is longer than (fill-column + ;; - 6) chars, break it at the fill column (else + ;; infinite loop). (if (> (- (point) start) (- fill-column 6 fortran-continuation-indent)) fcpoint diff -r 45e5f0224d81 -r 360860a0006f lisp/progmodes/glasses.el --- a/lisp/progmodes/glasses.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/progmodes/glasses.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; glasses.el --- make cantReadThis readable -;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2005 Free Software Foundation, Inc. ;; Author: Milan Zamazal ;; Maintainer: Milan Zamazal @@ -251,7 +251,7 @@ "Minor mode for making identifiers likeThis readable. When this mode is active, it tries to add virtual separators (like underscores) at places they belong to." - nil " o^o" nil + :group 'glasses :lighter " o^o" (save-excursion (save-restriction (widen) diff -r 45e5f0224d81 -r 360860a0006f lisp/progmodes/gud.el --- a/lisp/progmodes/gud.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/progmodes/gud.el Mon Apr 04 16:43:15 2005 +0000 @@ -531,6 +531,9 @@ (defvar gdb-first-prompt t) +(defvar gud-filter-pending-text nil + "Non-nil means this is text that has been saved for later in `gud-filter'.") + ;;;###autoload (defun gdb (command-line) "Run gdb on program FILE in buffer *gud-FILE*. @@ -562,6 +565,7 @@ (setq comint-prompt-regexp "^(.*gdb[+]?) *") (setq paragraph-start comint-prompt-regexp) (setq gdb-first-prompt t) + (setq gud-filter-pending-text nil) (run-hooks 'gdb-mode-hook)) ;; One of the nice features of GDB is its impressive support for @@ -2445,9 +2449,6 @@ "Non-nil means don't process anything from the debugger right now. It is saved for when this flag is not set.") -(defvar gud-filter-pending-text nil - "Non-nil means this is text that has been saved for later in `gud-filter'.") - ;; These functions are responsible for inserting output from your debugger ;; into the buffer. The hard work is done by the method that is ;; the value of gud-marker-filter. @@ -2516,19 +2517,22 @@ (gud-filter proc "")))))) (defvar gud-minor-mode-type nil) +(defvar gud-overlay-arrow-position nil) +(put 'gud-overlay-arrow-position 'overlay-arrow-string "=>") +(add-to-list 'overlay-arrow-variable-list 'gud-overlay-arrow-position) (defun gud-sentinel (proc msg) (cond ((null (buffer-name (process-buffer proc))) ;; buffer killed ;; Stop displaying an arrow in a source file. - (setq overlay-arrow-position nil) + (setq gud-overlay-arrow-position nil) (set-process-buffer proc nil) (if (memq gud-minor-mode-type '(gdbmi gdba)) (gdb-reset) (gud-reset))) ((memq (process-status proc) '(signal exit)) ;; Stop displaying an arrow in a source file. - (setq overlay-arrow-position nil) + (setq gud-overlay-arrow-position nil) (with-current-buffer gud-comint-buffer (if (memq gud-minor-mode-type '(gdbmi gdba)) (gdb-reset) @@ -2611,13 +2615,13 @@ (goto-line line) (setq pos (point)) (setq overlay-arrow-string "=>") - (or overlay-arrow-position - (setq overlay-arrow-position (make-marker))) - (set-marker overlay-arrow-position (point) (current-buffer))) + (or gud-overlay-arrow-position + (setq gud-overlay-arrow-position (make-marker))) + (set-marker gud-overlay-arrow-position (point) (current-buffer))) (cond ((or (< pos (point-min)) (> pos (point-max))) (widen) (goto-char pos)))) - (if window (set-window-point window overlay-arrow-position)))))) + (if window (set-window-point window gud-overlay-arrow-position)))))) ;; The gud-call function must do the right thing whether its invoking ;; keystroke is from the GUD buffer itself (via major-mode binding) diff -r 45e5f0224d81 -r 360860a0006f lisp/progmodes/hideif.el --- a/lisp/progmodes/hideif.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/progmodes/hideif.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; hideif.el --- hides selected code within ifdef -;; Copyright (C) 1988,1994,2001, 2002 Free Software Foundation, Inc. +;; Copyright (C) 1988, 1994, 2001, 2002, 2005 Free Software Foundation, Inc. ;; Author: Daniel LaLiberte ;; Maintainer: FSF @@ -197,7 +197,7 @@ After `show-ifdefs', read-only status is restored to previous value. \\{hide-ifdef-mode-map}" - nil " Ifdef" nil + :group 'hide-ifdef :lighter " Ifdef" (if hide-ifdef-mode (progn ;; inherit global values diff -r 45e5f0224d81 -r 360860a0006f lisp/progmodes/python.el --- a/lisp/progmodes/python.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/progmodes/python.el Mon Apr 04 16:43:15 2005 +0000 @@ -1098,28 +1098,40 @@ (defvar python-preoutput-continuation nil "If non-nil, funcall this when `python-preoutput-filter' sees `_emacs_ok'.") +(defvar python-preoutput-leftover nil) + ;; Using this stops us getting lines in the buffer like ;; >>> ... ... >>> ;; Also look for (and delete) an `_emacs_ok' string and call ;; `python-preoutput-continuation' if we get it. (defun python-preoutput-filter (s) "`comint-preoutput-filter-functions' function: ignore prompts not at bol." + (when python-preoutput-leftover + (setq s (concat python-preoutput-leftover s)) + (setq python-preoutput-leftover nil)) (cond ((and (string-match (rx (and string-start (repeat 3 (any ".>")) - " " string-end)) - s) - (/= (let ((inhibit-field-text-motion t)) - (line-beginning-position)) - (point))) + " " string-end)) + s) + (/= (let ((inhibit-field-text-motion t)) + (line-beginning-position)) + (point))) + "") + ((string= s "_emacs_ok\n") + (when python-preoutput-continuation + (funcall python-preoutput-continuation) + (setq python-preoutput-continuation nil)) + "") + ((string-match "_emacs_out \\(.*\\)\n" s) + (setq python-preoutput-result (match-string 1 s)) + "") + ((string-match ".*\n" s) + s) + ((or (eq t (compare-strings s nil nil "_emacs_ok\n" nil (length s))) + (let ((end (min (length "_emacs_out ") (length s)))) + (eq t (compare-strings s nil end "_emacs_out " nil end)))) + (setq python-preoutput-leftover s) "") - ((string= s "_emacs_ok\n") - (when python-preoutput-continuation - (funcall python-preoutput-continuation) - (setq python-preoutput-continuation nil)) - "") - ((string-match "_emacs_out \\(.*\\)\n" s) - (setq python-preoutput-result (match-string 1 s)) - "") - (t s))) + (t s))) ;;;###autoload (defun run-python (&optional cmd noshow) @@ -1359,7 +1371,9 @@ (let ((proc (python-proc))) (python-send-string string) (setq python-preoutput-result nil) - (accept-process-output proc 5) + (while (progn + (accept-process-output proc 5) + python-preoutput-leftover)) python-preoutput-result)) ;; Fixme: try to make it work with point in the arglist. Also, is diff -r 45e5f0224d81 -r 360860a0006f lisp/progmodes/scheme.el --- a/lisp/progmodes/scheme.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/progmodes/scheme.el Mon Apr 04 16:43:15 2005 +0000 @@ -90,7 +90,7 @@ (modify-syntax-entry ?\] ")[ " st) (modify-syntax-entry ?{ "(} " st) (modify-syntax-entry ?} "){ " st) - (modify-syntax-entry ?\| " 23" st) + (modify-syntax-entry ?\| "\" 23b" st) ;; Other atom delimiters (modify-syntax-entry ?\( "() " st) @@ -103,7 +103,7 @@ ;; Special characters (modify-syntax-entry ?, "' " st) (modify-syntax-entry ?@ "' " st) - (modify-syntax-entry ?# "' 14" st) + (modify-syntax-entry ?# "' 14bn" st) (modify-syntax-entry ?\\ "\\ " st) st)) diff -r 45e5f0224d81 -r 360860a0006f lisp/progmodes/tcl.el --- a/lisp/progmodes/tcl.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/progmodes/tcl.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,7 @@ ;;; tcl.el --- Tcl code editing commands for Emacs -;; Copyright (C) 1994,98,1999,2000,01,02,2003,2004 Free Software Foundation, Inc. +;; Copyright (C) 1994, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +;; Free Software Foundation, Inc. ;; Maintainer: FSF ;; Author: Tom Tromey @@ -469,10 +470,7 @@ ;; Keywords. Only recognized if surrounded by whitespace. ;; FIXME consider using "not word or symbol", not ;; "whitespace". - (cons (concat "\\(\\s-\\|^\\)" - ;; FIXME Use regexp-quote? - (regexp-opt tcl-keyword-list t) - "\\(\\s-\\|$\\)") + (cons (concat "\\_<" (regexp-opt tcl-keyword-list t) "\\_>") 2)))) (if tcl-proc-regexp @@ -1507,5 +1505,5 @@ (provide 'tcl) -;;; arch-tag: 8a032554-c3ef-422e-b84c-acec0522179d +;; arch-tag: 8a032554-c3ef-422e-b84c-acec0522179d ;;; tcl.el ends here diff -r 45e5f0224d81 -r 360860a0006f lisp/progmodes/which-func.el --- a/lisp/progmodes/which-func.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/progmodes/which-func.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,7 @@ ;;; which-func.el --- print current function in mode line -;; Copyright (C) 1994, 1997, 1998, 2001, 2003 Free Software Foundation, Inc. +;; Copyright (C) 1994, 1997, 1998, 2001, 2003, 2005 +;; Free Software Foundation, Inc. ;; Author: Alex Rezinsky ;; (doesn't seem to be responsive any more) @@ -251,7 +252,7 @@ (when (and (null name) (boundp 'imenu--index-alist) (null imenu--index-alist) (null which-function-imenu-failed)) - (imenu--make-index-alist) + (imenu--make-index-alist t) (unless imenu--index-alist (make-local-variable 'which-function-imenu-failed) (setq which-function-imenu-failed t))) @@ -291,5 +292,5 @@ (provide 'which-func) -;;; arch-tag: fa8a55c7-bfe3-4ffc-95ab-01bf21796827 +;; arch-tag: fa8a55c7-bfe3-4ffc-95ab-01bf21796827 ;;; which-func.el ends here diff -r 45e5f0224d81 -r 360860a0006f lisp/ps-mule.el --- a/lisp/ps-mule.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/ps-mule.el Mon Apr 04 16:43:15 2005 +0000 @@ -511,7 +511,10 @@ (defsubst ps-mule-printable-p (charset) "Non-nil if characters in CHARSET is printable." - (ps-mule-get-font-spec charset 'normal)) + ;; ASCII and Latin-1 are always printable. + (or (eq charset 'ascii) + (eq charset 'latin-iso8859-1) + (ps-mule-get-font-spec charset 'normal))) (defconst ps-mule-external-libraries '((builtin nil nil @@ -824,7 +827,9 @@ Where ENDPOS is the end position of the sequence and RUN-WIDTH is the width of the sequence." - (setq ps-mule-current-charset (charset-after from)) + (let ((ch (char-after from))) + (setq ps-mule-current-charset + (char-charset (or (aref ps-print-translation-table ch) ch)))) (let* ((wrappoint (ps-mule-find-wrappoint from to (ps-avg-char-width 'ps-font-for-text))) (to (car wrappoint)) @@ -832,6 +837,10 @@ (ps-font-alist 'ps-font-for-text)))) (font-spec (ps-mule-get-font-spec ps-mule-current-charset font-type)) (string (buffer-substring-no-properties from to))) + (dotimes (i (length string)) + (let ((ch (aref ps-print-translation-table (aref string i)))) + (if ch + (aset string i ch)))) (cond ((= from to) ;; We can't print any more characters in the current line. @@ -1393,6 +1402,7 @@ (defun ps-mule-show-warning (charsets from to header-footer-list) (let ((table (make-category-table)) (buf (current-buffer)) + (max-unprintable-chars 15) char-pos-list) (define-category ?u "Unprintable charset" table) (dolist (cs charsets) @@ -1400,19 +1410,22 @@ (with-category-table table (save-excursion (goto-char from) - (while (and (< (length char-pos-list) 20) + (while (and (<= (length char-pos-list) max-unprintable-chars) (re-search-forward "\\cu" to t)) - (push (cons (preceding-char) (1- (point))) char-pos-list)) - (setq char-pos-list (nreverse char-pos-list)))) + (push (cons (preceding-char) (1- (point))) char-pos-list)))) (with-output-to-temp-buffer "*Warning*" (with-current-buffer standard-output (when char-pos-list (let ((func #'(lambda (buf pos) (when (buffer-live-p buf) (pop-to-buffer buf) - (goto-char pos))))) + (goto-char pos)))) + (more nil)) + (if (>= (length char-pos-list) max-unprintable-chars) + (setq char-pos-list (cdr char-pos-list) + more t)) (insert "These characters in the buffer can't be printed:\n") - (dolist (elt char-pos-list) + (dolist (elt (nreverse char-pos-list)) (insert " ") (insert-text-button (string (car elt)) :type 'help-xref @@ -1421,8 +1434,10 @@ 'help-function func 'help-args (list buf (cdr elt))) (insert ",")) - ;; Delete the last comma. - (delete-char -1) + (if more + (insert " and more...") + ;; Delete the last comma. + (delete-char -1)) (insert "\nClick them to jump to the buffer position,\n" (substitute-command-keys "\ or \\[universal-argument] \\[what-cursor-position] will give information about them.\n")))) @@ -1469,13 +1484,15 @@ (setq ps-mule-charset-list (delq 'ascii (delq 'eight-bit-control (delq 'eight-bit-graphic - (find-charset-region from to)))) + (find-charset-region + from to ps-print-translation-table)))) ps-mule-header-charsets (delq 'ascii (delq 'eight-bit-control (delq 'eight-bit-graphic (find-charset-string (mapconcat - 'identity header-footer-list "")))))) + 'identity header-footer-list "") + ps-print-translation-table))))) (dolist (cs ps-mule-charset-list) (or (ps-mule-printable-p cs) (push cs unprintable-charsets))) diff -r 45e5f0224d81 -r 360860a0006f lisp/ps-print.el --- a/lisp/ps-print.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/ps-print.el Mon Apr 04 16:43:15 2005 +0000 @@ -6150,6 +6150,19 @@ (defvar ps-current-effect 0) +(defvar ps-print-translation-table + (let ((tbl (make-char-table 'translation-table nil))) + (if (and (boundp 'ucs-mule-8859-to-mule-unicode) + (char-table-p ucs-mule-8859-to-mule-unicode)) + (map-char-table + #'(lambda (k v) + (if (and v (eq (char-charset v) 'latin-iso8859-1) (/= k v)) + (aset tbl k v))) + ucs-mule-8859-to-mule-unicode)) + tbl) + "Translation table for PostScript printing. +The default value is a table that translates non-Latin-1 Latin characters +to the equivalent Latin-1 characters.") (defun ps-plot-region (from to font &optional fg-color bg-color effects) (or (equal font ps-current-font) @@ -6240,11 +6253,17 @@ (ps-plot 'ps-mule-plot-composition match-point (point) bg-color)) ((> match 255) ; a multi-byte character + (setq match (or (aref ps-print-translation-table match) match)) (let* ((charset (char-charset match)) (composition (ps-e-find-composition match-point to)) (stop (if (nth 2 composition) (car composition) to))) (or (eq charset 'composition) - (while (and (< (point) stop) (eq (charset-after) charset)) + (while (and (< (point) stop) + (let ((ch (following-char))) + (setq ch + (or (aref ps-print-translation-table ch) + ch)) + (eq (char-charset ch) charset))) (forward-char 1))) (ps-plot 'ps-mule-plot-string match-point (point) bg-color))) ; characters from ^@ to ^_ and diff -r 45e5f0224d81 -r 360860a0006f lisp/register.el --- a/lisp/register.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/register.el Mon Apr 04 16:43:15 2005 +0000 @@ -277,7 +277,7 @@ Called from program, takes four args: REGISTER, START, END and DELETE-FLAG. START and END are buffer positions indicating what to copy." (interactive "cCopy to register: \nr\nP") - (set-register register (buffer-substring start end)) + (set-register register (filter-buffer-substring start end)) (if delete-flag (delete-region start end))) (defun append-to-register (register start end &optional delete-flag) @@ -289,7 +289,7 @@ (or (stringp (get-register register)) (error "Register does not contain text")) (set-register register (concat (get-register register) - (buffer-substring start end))) + (filter-buffer-substring start end))) (if delete-flag (delete-region start end))) (defun prepend-to-register (register start end &optional delete-flag) @@ -300,7 +300,7 @@ (interactive "cPrepend to register: \nr\nP") (or (stringp (get-register register)) (error "Register does not contain text")) - (set-register register (concat (buffer-substring start end) + (set-register register (concat (filter-buffer-substring start end) (get-register register))) (if delete-flag (delete-region start end))) diff -r 45e5f0224d81 -r 360860a0006f lisp/reveal.el --- a/lisp/reveal.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/reveal.el Mon Apr 04 16:43:15 2005 +0000 @@ -163,8 +163,8 @@ (let ((map (make-sparse-keymap))) ;; Override the default move-beginning-of-line and move-end-of-line ;; which skips valuable invisible text. - (define-key map [?\C-a] 'beginning-of-line) - (define-key map [?\C-e] 'end-of-line) + (define-key map [remap move-beginning-of-line] 'beginning-of-line) + (define-key map [remap move-end-of-line] 'end-of-line) map)) ;;;###autoload @@ -175,6 +175,7 @@ Interactively, with no prefix argument, toggle the mode. With universal prefix ARG (or if ARG is nil) turn mode on. With zero or negative ARG turn mode off." + :group 'reveal :lighter (global-reveal-mode nil " Reveal") :keymap reveal-mode-map (if reveal-mode diff -r 45e5f0224d81 -r 360860a0006f lisp/simple.el --- a/lisp/simple.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/simple.el Mon Apr 04 16:43:15 2005 +0000 @@ -35,6 +35,13 @@ (autoload 'widget-convert "wid-edit") (autoload 'shell-mode "shell")) +(defcustom idle-update-delay 0.5 + "*Idle time delay before updating various things on the screen. +Various Emacs features that update auxiliary information when point moves +wait this many seconds after Emacs becomes idle before doing an update." + :type 'number + :group 'display + :version "22.1") (defgroup killing nil "Killing and yanking commands." @@ -105,6 +112,8 @@ :group 'next-error :version "22.1") +(defvar next-error-highlight-timer nil) + (defvar next-error-last-buffer nil "The most recent next-error buffer. A buffer becomes most recent when its compilation, grep, or @@ -293,7 +302,7 @@ When turned on, cursor motion in the compilation, grep, occur or diff buffer causes automatic display of the corresponding source code location." - nil " Fol" nil + :group 'next-error :init-value " Fol" (if (not next-error-follow-minor-mode) (remove-hook 'post-command-hook 'next-error-follow-mode-post-command-hook t) (add-hook 'post-command-hook 'next-error-follow-mode-post-command-hook nil t) @@ -2216,6 +2225,42 @@ (reset-this-command-lengths) (restore-overriding-map)) +(defvar buffer-substring-filters nil + "List of filter functions for `filter-buffer-substring'. +Each function must accept a single argument, a string, and return +a string. The buffer substring is passed to the first function +in the list, and the return value of each function is passed to +the next. The return value of the last function is used as the +return value of `filter-buffer-substring'. + +If this variable is nil, no filtering is performed.") + +(defun filter-buffer-substring (beg end &optional delete) + "Return the buffer substring between BEG and END, after filtering. +The buffer substring is passed through each of the filter +functions in `buffer-substring-filters', and the value from the +last filter function is returned. If `buffer-substring-filters' +is nil, the buffer substring is returned unaltered. + +If DELETE is non-nil, the text between BEG and END is deleted +from the buffer. + +Point is temporarily set to BEG before caling +`buffer-substring-filters', in case the functions need to know +where the text came from. + +This function should be used instead of `buffer-substring' or +`delete-and-extract-region' when you want to allow filtering to +take place. For example, major or minor modes can use +`buffer-substring-filters' to extract characters that are special +to a buffer, and should not be copied into other buffers." + (save-excursion + (goto-char beg) + (let ((string (if delete (delete-and-extract-region beg end) + (buffer-substring beg end)))) + (dolist (filter buffer-substring-filters string) + (setq string (funcall filter string)))))) + ;;;; Window system cut and paste hooks. (defvar interprogram-cut-function nil @@ -2396,7 +2441,7 @@ text. See `insert-for-yank'." (interactive "r") (condition-case nil - (let ((string (delete-and-extract-region beg end))) + (let ((string (filter-buffer-substring beg end t))) (when string ;STRING is nil if BEG = END ;; Add that string to the kill ring, one way or another. (if (eq last-command 'kill-region) @@ -2432,8 +2477,8 @@ system cut and paste." (interactive "r") (if (eq last-command 'kill-region) - (kill-append (buffer-substring beg end) (< end beg)) - (kill-new (buffer-substring beg end))) + (kill-append (filter-buffer-substring beg end) (< end beg)) + (kill-new (filter-buffer-substring beg end))) (if transient-mark-mode (setq deactivate-mark t)) nil) @@ -2958,7 +3003,7 @@ mark position to be lost. Normally, when a new mark is set, the old one should go on the stack. -This is why most applications should use push-mark, not set-mark. +This is why most applications should use `push-mark', not `set-mark'. Novice Emacs Lisp programmers often try to use the mark for the wrong purposes. The mark saves a location for the user's convenience. @@ -5186,14 +5231,6 @@ (message "Delete key deletes %s" (if normal-erase-is-backspace "forward" "backward")))) -(defcustom idle-update-delay 0.5 - "*Idle time delay before updating various things on the screen. -Various Emacs features that update auxiliary information when point moves -wait this many seconds after Emacs becomes idle before doing an update." - :type 'number - :group 'display - :version "22.1") - (defvar vis-mode-saved-buffer-invisibility-spec nil "Saved value of `buffer-invisibility-spec' when Visible mode is on.") @@ -5205,6 +5242,7 @@ Disabling Visible mode turns off that effect. Visible mode works by saving the value of `buffer-invisibility-spec' and setting it to nil." :lighter " Vis" + :group 'editing-basics (when (local-variable-p 'vis-mode-saved-buffer-invisibility-spec) (setq buffer-invisibility-spec vis-mode-saved-buffer-invisibility-spec) (kill-local-variable 'vis-mode-saved-buffer-invisibility-spec)) diff -r 45e5f0224d81 -r 360860a0006f lisp/smerge-mode.el --- a/lisp/smerge-mode.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/smerge-mode.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; smerge-mode.el --- Minor mode to resolve diff3 conflicts -;; Copyright (C) 1999, 2000, 01, 03, 2004 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: Stefan Monnier ;; Keywords: revision-control merge diff3 cvs conflict @@ -667,7 +667,7 @@ (define-minor-mode smerge-mode "Minor mode to simplify editing output from the diff3 program. \\{smerge-mode-map}" - nil " SMerge" nil + :group 'smerge :lighter " SMerge" (when (and (boundp 'font-lock-mode) font-lock-mode) (set (make-local-variable 'font-lock-multiline) t) (save-excursion diff -r 45e5f0224d81 -r 360860a0006f lisp/startup.el --- a/lisp/startup.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/startup.el Mon Apr 04 16:43:15 2005 +0000 @@ -1008,8 +1008,27 @@ using the mouse.\n\n" :face (variable-pitch :weight bold) "Important Help menu items:\n" - :face variable-pitch "\ -Emacs Tutorial\tLearn-by-doing tutorial for using Emacs efficiently + :face variable-pitch + (lambda () + (let* ((en "TUTORIAL") + (tut (or (get-language-info current-language-environment + 'tutorial) + en)) + (title (with-temp-buffer + (insert-file-contents + (expand-file-name tut data-directory) + nil 0 256) + (search-forward ".") + (buffer-substring (point-min) (1- (point)))))) + ;; If there is a specific tutorial for the current language + ;; environment and it is not English, append its title. + (concat + "Emacs Tutorial\tLearn how to use Emacs efficiently" + (if (string= en tut) + "" + (concat " (" title ")")) + "\n"))) + :face variable-pitch "\ Emacs FAQ\tFrequently asked questions and answers Read the Emacs Manual\tView the Emacs manual using Info \(Non)Warranty\tGNU Emacs comes with " @@ -1073,14 +1092,18 @@ (defun fancy-splash-insert (&rest args) "Insert text into the current buffer, with faces. -Arguments from ARGS should be either strings or pairs `:face FACE', +Arguments from ARGS should be either strings, functions called +with no args that return a string, or pairs `:face FACE', where FACE is a valid face specification, as it can be used with `put-text-properties'." (let ((current-face nil)) (while args (if (eq (car args) :face) (setq args (cdr args) current-face (car args)) - (insert (propertize (car args) + (insert (propertize (let ((it (car args))) + (if (functionp it) + (funcall it) + it)) 'face current-face 'help-echo fancy-splash-help-echo))) (setq args (cdr args))))) diff -r 45e5f0224d81 -r 360860a0006f lisp/textmodes/bibtex.el --- a/lisp/textmodes/bibtex.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/textmodes/bibtex.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; bibtex.el --- BibTeX mode for GNU Emacs -;; Copyright (C) 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2004 +;; Copyright (C) 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Author: Stefan Schoef @@ -784,41 +784,56 @@ (function :tag "Personalized function"))) (defcustom bibtex-generate-url-list - '((("url" . ".*:.*")) - ;; Example of a complex setup. - (("journal" . "\\<\\(PR[ABCDEL]?\\|RMP\\)\\>") - "http://link.aps.org/abstract/" - ("journal" ".*" downcase) - "/v" - ("volume" ".*" 0) - "/p" - ("pages" "\\`\\([0-9]+\\)" 1))) + '((("url" . ".*:.*"))) "List of schemes for generating the URL of a BibTeX entry. These schemes are used by `bibtex-url'. -Each scheme is of the form ((FIELD . REGEXP) STEP...). +Each scheme should have one of these forms: + + ((FIELD . REGEXP)) + ((FIELD . REGEXP) STEP...) + ((FIELD . REGEXP) STRING STEP...) FIELD is a field name as returned by `bibtex-parse-entry'. -REGEXP is matched against the text of FIELD. If the match succeeds, then -this scheme is used. If no STEPs are specified the matched text is used -as the URL, otherwise the URL is built by concatenating the STEPs. - -A STEP can be a string or a list (FIELD REGEXP REPLACE) in which case -the text of FIELD is matched against REGEXP, and is replaced with REPLACE. -REPLACE can be a string, or a number (which selects the corresponding submatch) -or a function called with the field's text as argument and with the -`match-data' properly set. - -Case is always ignored. Always remove the field delimiters." +REGEXP is matched against the text of FIELD. If the match succeeds, +then this scheme is used. If no STRING and STEPs are specified +the matched text is used as the URL, otherwise the URL is built +by evaluating STEPs. If no STRING is specified the STEPs must result +in strings which are concatenated. Otherwise the resulting objects +are passed through `format' using STRING as format control string. + +A STEP is a list (FIELD REGEXP REPLACE). The text of FIELD +is matched against REGEXP, and is replaced with REPLACE. +REPLACE can be a string, or a number (which selects the corresponding +submatch), or a function called with the field's text as argument +and with the `match-data' properly set. + +Case is always ignored. Always remove the field delimiters. + +The following is a complex example, see http://link.aps.org/linkfaq.html. + + (((\"journal\" . \"\\\\=<\\(PR[ABCDEL]?\\|RMP\\)\\\\=>\") + \"http://link.aps.org/abstract/%s/v%s/p%s\" + (\"journal\" \".*\" downcase) + (\"volume\" \".*\" 0) + (\"pages\" \"\\`[A-Z]?[0-9]+\" 0)))" :group 'bibtex :type '(repeat - (list :tag "Scheme" + (cons :tag "Scheme" (cons :tag "Matcher" :extra-offset 4 (string :tag "BibTeX field") (regexp :tag "Regexp")) - (repeat :tag "Steps to generate URL" :inline t - (choice - (string :tag "Literal text") + (choice + (const :tag "Take match as is" nil) + (cons :tag "Formatted" + (string :tag "Format control string") + (repeat :tag "Steps to generate URL" + (list (string :tag "BibTeX field") + (regexp :tag "Regexp") + (choice (string :tag "Replacement") + (integer :tag "Sub-match") + (function :tag "Filter"))))) + (repeat :tag "Concatenated" (list (string :tag "BibTeX field") (regexp :tag "Regexp") (choice (string :tag "Replacement") @@ -2662,11 +2677,10 @@ (let ((lst bibtex-generate-url-list) url) (goto-char start) (while (and (not found) - (setq url (caar lst))) + (setq url (car (pop lst)))) (setq found (and (bibtex-string= field (car url)) (re-search-forward (cdr url) end t) - (>= (match-beginning 0) pnt)) - lst (cdr lst)))) + (>= (match-beginning 0) pnt))))) (goto-char end)) (if found (bibtex-button (match-beginning 0) (match-end 0) 'bibtex-url (match-beginning 0))) @@ -4283,39 +4297,36 @@ ;; Always ignore case, (case-fold-search t) (lst bibtex-generate-url-list) - field url scheme) + field url scheme obj fmt) (while (setq scheme (pop lst)) (when (and (setq field (cdr (assoc-string (caar scheme) fields-alist t))) ;; Always remove field delimiters (progn (setq field (bibtex-remove-delimiters-string field)) (string-match (cdar scheme) field))) - (setq lst nil) - (if (null (cdr scheme)) - (setq url (match-string 0 field))) - (dolist (step (cdr scheme)) - (cond ((stringp step) - (setq url (concat url step))) - ((setq field (cdr (assoc-string (car step) fields-alist t))) - ;; Always remove field delimiters - (setq field (bibtex-remove-delimiters-string field)) - (if (string-match (nth 1 step) field) - (setq field (cond - ((functionp (nth 2 step)) - (funcall (nth 2 step) field)) - ((numberp (nth 2 step)) - (match-string (nth 2 step) field)) - (t - (replace-match (nth 2 step) t nil field)))) - ;; If the scheme is set up correctly, - ;; we should never reach this point - (error "Match failed: %s" field)) - (setq url (concat url field))) - ;; If the scheme is set up correctly, - ;; we should never reach this point - (t (error "Step failed: %s" step)))) - (message "%s" url) - (browse-url url))) + (setq lst nil + scheme (cdr scheme) + url (if (null scheme) (match-string 0 field) + (if (stringp (car scheme)) + (setq fmt (pop scheme))) + (dolist (step scheme) + ;; Always remove field delimiters + (setq field (bibtex-remove-delimiters-string + (cdr (assoc-string (car step) fields-alist t)))) + (if (string-match (nth 1 step) field) + (setq field (cond ((functionp (nth 2 step)) + (funcall (nth 2 step) field)) + ((numberp (nth 2 step)) + (match-string (nth 2 step) field)) + (t + (replace-match (nth 2 step) t nil field)))) + ;; If the scheme is set up correctly, + ;; we should never reach this point + (error "Match failed: %s" field)) + (push field obj)) + (if fmt (apply 'format fmt (nreverse obj)) + (apply 'concat (nreverse obj))))) + (browse-url (message "%s" url)))) (unless url (message "No URL known."))))) diff -r 45e5f0224d81 -r 360860a0006f lisp/textmodes/enriched.el --- a/lisp/textmodes/enriched.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/textmodes/enriched.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; enriched.el --- read and save files in text/enriched format -;; Copyright (c) 1994, 1995, 1996, 2002, 2004 Free Software Foundation, Inc. +;; Copyright (c) 1994, 1995, 1996, 2002, 2004, 2005 Free Software Foundation, Inc. ;; Author: Boris Goldowsky ;; Keywords: wp, faces @@ -183,7 +183,7 @@ Commands: \\{enriched-mode-map}" - nil " Enriched" nil + :group 'enriched :lighter " Enriched" (cond ((null enriched-mode) ;; Turn mode off (setq buffer-file-format (delq 'text/enriched buffer-file-format)) diff -r 45e5f0224d81 -r 360860a0006f lisp/textmodes/fill.el --- a/lisp/textmodes/fill.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/textmodes/fill.el Mon Apr 04 16:43:15 2005 +0000 @@ -539,6 +539,17 @@ ;; Make sure we take SOMETHING after the fill prefix if any. (fill-find-break-point linebeg))))) +;; Like text-properties-at but don't include `composition' property. +(defun fill-text-properties-at (pos) + (let ((l (text-properties-at pos)) + prop-list) + (while l + (unless (eq (car l) 'composition) + (setq prop-list + (cons (car l) (cons (cadr l) prop-list)))) + (setq l (cddr l))) + prop-list)) + (defun fill-newline () ;; Replace whitespace here with one newline, then ;; indent to left margin. @@ -546,7 +557,7 @@ (insert ?\n) ;; Give newline the properties of the space(s) it replaces (set-text-properties (1- (point)) (point) - (text-properties-at (point))) + (fill-text-properties-at (point))) (and (looking-at "\\( [ \t]*\\)\\(\\c|\\)?") (or (aref (char-category-set (or (char-before (1- (point))) ?\000)) ?|) (match-end 2)) diff -r 45e5f0224d81 -r 360860a0006f lisp/textmodes/org.el --- a/lisp/textmodes/org.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/textmodes/org.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,14 +1,14 @@ ;; org.el --- Outline-based notes management and organizer ;; Carstens outline-mode for keeping track of everything. -;; Copyright (c) 2003, 2004, 2005 Free Software Foundation - +;; Copyright (c) 2004, 2005 Free Software Foundation +;; ;; Author: Carsten Dominik ;; Keywords: outlines, hypermedia, calendar ;; Homepage: http://www.astro.uva.nl/~dominik/Tools/org/ -;; Version: 3.04 - +;; Version: 3.05 +;; ;; This file is part of GNU Emacs. - +;; ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) @@ -75,10 +75,18 @@ ;; ------------- ;; The documentation of Org-mode can be found in the TeXInfo file. ;; This distribution also contains a PDF version of it. At the homepage -;; of Org-mode, you can find and read online the same text as HTML. +;; of Org-mode, you can read online the same text online as HTML. ;; ;; Changes: ;; ------- +;; Version 3.05 +;; - Agenda entries from the diary are linked to the diary file, so +;; adding and editing diary entries can be done directly from the agenda. +;; - Many calendar/diary commands available directly from agenda. +;; - Field copying in tables with S-RET does increment. +;; - C-c C-x C-v extracts the visible part of the buffer for printing. +;; - Moving subtrees up and down preserves the whitespace at the tree end. +;; ;; Version 3.04 ;; - Table editor optimized to need fewer realignments, and to keep ;; table shape when typing in fields. @@ -213,7 +221,7 @@ ;;; Customization variables -(defvar org-version "3.04" +(defvar org-version "3.05" "The version number of the file org.el.") (defun org-version () (interactive) @@ -241,7 +249,13 @@ :group 'org) (defcustom org-startup-folded t - "Non-nil means, entering Org-mode will switch to OVERVIEW." + "Non-nil means, entering Org-mode will switch to OVERVIEW. +This can also be configured on a per-file basis by adding one of +the following lines anywhere in the buffer: + + #+STARTUP: fold + #+STARTUP: nofold +" :group 'org-startup :type 'boolean) @@ -255,7 +269,13 @@ (defcustom org-startup-with-deadline-check nil "Non-nil means, entering Org-mode will run the deadline check. This means, if you start editing an org file, you will get an -immediate reminder of any due deadlines." +immediate reminder of any due deadlines. +This can also be configured on a per-file basis by adding one of +the following lines anywhere in the buffer: + + #+STARTUP: dlcheck + #+STARTUP: nodlcheck +" :group 'org-startup :type 'boolean) @@ -534,6 +554,11 @@ :group 'org-agenda :type 'boolean) +(defcustom org-fit-agenda-window t + "Non-nil means, change windo size of agenda to fit content." + :group 'org-agenda + :type 'boolean) + (defcustom org-agenda-show-all-dates t "Non-nil means, `org-agenda' shows every day in the selected range. When nil, only the days which actually have entries are shown." @@ -892,7 +917,7 @@ very good at guessing when a re-align will be necessary, but you can always force one with `C-c C-c'. -I you would like to use the optimized version in Org-mode, but the un-optimized +If you would like to use the optimized version in Org-mode, but the un-optimized version in OrgTbl-mode, see the variable `orgtbl-optimized'. This variable can be used to turn on and off the table editor during a session, @@ -971,6 +996,11 @@ :group 'org-table :type 'boolean) +(defcustom org-table-copy-increment t + "Non-nil means, increment when copying current field with \\[org-table-copy-down]." + :group 'org-table + :type 'boolean) + (defcustom org-table-tab-recognizes-table.el t "Non-nil means, TAB will automatically notice a table.el table. When it sees such a table, it moves point into it and - if necessary - @@ -1260,7 +1290,7 @@ "Face used for level 7 headlines." :group 'org-faces) -(defface org-level-8-face ;;font-lock-string-face +(defface org-level-8-face ;; font-lock-string-face '((((type tty) (class color)) (:foreground "green")) (((class color) (background light)) (:foreground "RosyBrown")) (((class color) (background dark)) (:foreground "LightSalmon")) @@ -1276,8 +1306,24 @@ "Face for deadlines and TODO keyords." :group 'org-faces) -;; Inheritance does not work for xemacs, unfortunately. -;; We just copy the definitions and waste some space.... +(defcustom org-fontify-done-headline nil + "Non-nil means, change the face of a headline if it is marked DONE. +Normally, only the TODO/DONE keyword indicates the state of a headline. +When this is non-nil, the headline after the keyword is set to the +`org-headline-done-face' as an additional indication." + :group 'org-faces + :type 'boolean) + +(defface org-headline-done-face ;; font-lock-string-face + '((((type tty) (class color)) (:foreground "green")) + (((class color) (background light)) (:foreground "RosyBrown")) + (((class color) (background dark)) (:foreground "LightSalmon")) + (t (:italic t))) + "Face used to indicate that a headline is DONE. See also the variable +`org-fontify-done-headline'." + :group 'org-faces) + +;; Inheritance does not yet work for xemacs. So we just copy... (defface org-deadline-announce-face '((((type tty) (class color)) (:foreground "blue" :weight bold)) @@ -1341,11 +1387,11 @@ )) (defvar org-n-levels (length org-level-faces)) - ;; Tell the compiler about dynamically scoped variables, ;; and variables from other packages (eval-when-compile (defvar zmacs-regions) + (defvar original-date) (defvar org-transient-mark-mode) (defvar org-old-auto-fill-inhibit-regexp) (defvar orgtbl-mode-menu) @@ -1521,8 +1567,11 @@ (list (concat "^\\*+[ \t]*\\<\\(" org-comment-string "\\)\\>") '(1 'org-warning-face t)) '("^#.*" (0 'font-lock-comment-face t)) - (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\>") - '(1 'org-done-face t)) + (if org-fontify-done-headline + (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\(.*\\)\\>") + '(1 'org-done-face t) '(2 'org-headline-done-face t)) + (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\>") + '(1 'org-done-face t))) '("^[ \t]*\\(\\(|\\|\\+-[-+]\\).*\\S-\\)" (1 'org-table-face t)) '("^[ \t]*\\(:.*\\)" (1 'org-table-face t))))) @@ -1563,7 +1612,7 @@ (defvar org-cycle-global-status nil) (defvar org-cycle-subtree-status nil) (defun org-cycle (&optional arg) - "Visibility cycling for org-mode. + "Visibility cycling for Org-mode. - When this function is called with a prefix argument, rotate the entire buffer through 3 states (global cycling) @@ -1579,6 +1628,9 @@ zoom in further. 3. SUBTREE: Show the entire subtree, including body text. +- When there is a numeric prefix, go ARG levels up and do a `show-subtree', + keeping cursor position. + - When point is not at the beginning of a headline, execute `indent-relative', like TAB normally does. See the option `org-cycle-emulate-tab' for details. @@ -1587,8 +1639,9 @@ no headline in line 1, this function will act as if called with prefix arg." (interactive "P") - (if (and (bobp) (not (looking-at outline-regexp))) - ; special case: use global cycling + (if (or (and (bobp) (not (looking-at outline-regexp))) + (equal arg '(4))) + ;; special case: use global cycling (setq arg t)) (cond @@ -1600,7 +1653,7 @@ (org-table-justify-field-maybe) (org-table-next-field)))) - (arg ;; Global cycling + ((eq arg t) ;; Global cycling (cond ((and (eq last-command this-command) @@ -1621,18 +1674,27 @@ (if (bobp) (throw 'exit nil)))) (message "CONTENTS...done")) (setq org-cycle-global-status 'contents)) + ((and (eq last-command this-command) (eq org-cycle-global-status 'contents)) ;; We just showed the table of contents - now show everything (show-all) (message "SHOW ALL") (setq org-cycle-global-status 'all)) + (t ;; Default action: go to overview (hide-sublevels 1) (message "OVERVIEW") (setq org-cycle-global-status 'overview)))) + ((integerp arg) + ;; Show-subtree, ARG levels up from here. + (save-excursion + (org-back-to-heading) + (outline-up-heading arg) + (show-subtree))) + ((save-excursion (beginning-of-line 1) (looking-at outline-regexp)) ;; At a heading: rotate between three different views (org-back-to-heading) @@ -1970,7 +2032,7 @@ (save-excursion (outline-end-of-heading) (setq folded (org-invisible-p))) (outline-end-of-subtree)) - (if (equal (char-after) ?\n) (forward-char 1)) + (outline-next-heading) (setq end (point)) ;; Find insertion point, with error handling (goto-char beg) @@ -1982,7 +2044,10 @@ (if (> arg 0) ;; Moving forward - still need to move over subtree (progn (outline-end-of-subtree) - (if (equal (char-after) ?\n) (forward-char 1)))) + (outline-next-heading) + (if (not (or (looking-at (concat "^" outline-regexp)) + (bolp))) + (newline)))) (move-marker ins-point (point)) (setq txt (buffer-substring beg end)) (delete-region beg end) @@ -1993,7 +2058,7 @@ (defvar org-subtree-clip "" "Clipboard for cut and paste of subtrees. -This is actually only a cpoy of the kill, because we use the normal kill +This is actually only a copy of the kill, because we use the normal kill ring. We need it to check if the kill was created by `org-copy-subtree'.") (defvar org-subtree-clip-folded nil @@ -2906,6 +2971,14 @@ (define-key org-agenda-mode-map "p" 'org-agenda-priority) (define-key org-agenda-mode-map "," 'org-agenda-priority) (define-key org-agenda-mode-map "i" 'org-agenda-diary-entry) +(define-key org-agenda-mode-map "c" 'org-agenda-goto-calendar) +(define-key org-agenda-mode-map "C" 'org-agenda-convert-date) +(define-key org-agenda-mode-map "m" 'org-agenda-phases-of-moon) +(define-key org-agenda-mode-map "M" 'org-agenda-phases-of-moon) +(define-key org-agenda-mode-map "s" 'org-agenda-sunrise-sunset) +(define-key org-agenda-mode-map "S" 'org-agenda-sunrise-sunset) +(define-key org-agenda-mode-map "h" 'org-agenda-holidays) +(define-key org-agenda-mode-map "H" 'org-agenda-holidays) (define-key org-agenda-mode-map "+" 'org-agenda-priority-up) (define-key org-agenda-mode-map "-" 'org-agenda-priority-down) (define-key org-agenda-mode-map [(right)] 'org-agenda-later) @@ -2951,6 +3024,12 @@ :style toggle :selected org-agenda-include-diary :active t] "--" ["New Diary Entry" org-agenda-diary-entry t] + ("Calendar commands" + ["Goto calendar" org-agenda-goto-calendar t] + ["Phases of the Moon" org-agenda-phases-of-moon t] + ["Sunrise/Sunset" org-agenda-sunrise-sunset t] + ["Holidays" org-agenda-holidays t] + ["Convert" org-agenda-convert-date t]) "--" ["Quit" org-agenda-quit t] ["Exit and Release Buffers" org-agenda-exit t] @@ -3110,7 +3189,7 @@ (d (- nt n1))) (- sd (+ (if (< d 0) 7 0) d))))) (day-numbers (list start)) - s e rtn rtnall file date d start-pos) + s e rtn rtnall file date d start-pos end-pos) (setq org-agenda-redo-command (list 'org-agenda include-all start-day ndays)) ;; Make the list of days @@ -3146,7 +3225,9 @@ s (point)) (if (or (= d today) (and (not start-pos) (= d sd))) - (setq start-pos (point))) + (setq start-pos (point)) + (if (and start-pos (not end-pos)) + (setq end-pos (point)))) (setq files org-agenda-files rtnall nil) (while (setq file (pop files)) @@ -3173,6 +3254,17 @@ (put-text-property s (1- (point)) 'day d)))) (goto-char (point-min)) (setq buffer-read-only t) + (if org-fit-agenda-window + (fit-window-to-buffer nil (/ (* (frame-height) 3) 4) + (/ (frame-height) 2))) + (unless (and (pos-visible-in-window-p (point-min)) + (pos-visible-in-window-p (point-max))) + (goto-char (1- (point-max))) + (recenter -1) + (if (not (pos-visible-in-window-p (or start-pos 1))) + (progn + (goto-char (or start-pos 1)) + (recenter 1)))) (goto-char (or start-pos 1)) (if (not org-select-agenda-window) (select-window win)) (message ""))) @@ -3285,10 +3377,10 @@ "Set the mode name to indicate all the small mode seetings." (setq mode-name (concat "Org-Agenda" - (if (equal org-agenda-ndays 1) " Day" "") - (if (equal org-agenda-ndays 7) " Week" "") - (if org-agenda-follow-mode " Follow" "") - (if org-agenda-include-diary " Diary" ""))) + (if (equal org-agenda-ndays 1) " Day" "") + (if (equal org-agenda-ndays 7) " Week" "") + (if org-agenda-follow-mode " Follow" "") + (if org-agenda-include-diary " Diary" ""))) (force-mode-line-update)) (defun org-agenda-post-command-hook () @@ -3299,26 +3391,33 @@ (defun org-get-entries-from-diary (date) "Get the (emacs calendar) diary entries for DATE." (let* ((fancy-diary-buffer "*temporary-fancy-diary-buffer*") - (diary-display-hook '(sort-diary-entries fancy-diary-display)) + (diary-display-hook '(fancy-diary-display)) + (list-diary-entries-hook + (cons 'org-diary-default-entry list-diary-entries-hook)) entries - (disable-org-agenda t)) + (disable-org-diary t)) (save-excursion (save-window-excursion (list-diary-entries date 1))) (if (not (get-buffer fancy-diary-buffer)) (setq entries nil) (save-excursion - (set-buffer fancy-diary-buffer) + (switch-to-buffer fancy-diary-buffer) (setq buffer-read-only nil) (if (= (point-max) 1) ;; No entries (setq entries nil) - ;; Omit the date - (beginning-of-line 3) - (delete-region (point-min) (point)) + ;; Omit the date and other unnecessary stuff + (org-agenda-cleanup-fancy-diary) + ;; Add prefix to each line and extend the text properties + (goto-char (point-min)) (while (and (re-search-forward "^" nil t) (not (eobp))) - (replace-match " Diary: ")) - (setq entries (buffer-substring (point-min) (- (point-max) 1)))) + (replace-match " Diary: ") + (add-text-properties (point-at-bol) (point) + (text-properties-at (point)))) + (if (= (point-max) 1) + (setq entries nil) + (setq entries (buffer-substring (point-min) (- (point-max) 1))))) (set-buffer-modified-p nil) (kill-buffer fancy-diary-buffer))) (when entries @@ -3337,6 +3436,49 @@ x) entries))))) +(defun org-agenda-cleanup-fancy-diary () + "Remove unwanted stuff in buffer created by fancy-diary-display. +This gets rid of the date, the underline under the date, and +the dummy entry installed by org-mode to ensure non-empty diary for each +date." + (goto-char (point-min)) + (if (looking-at ".*?:[ \t]*") + (progn + (replace-match "") + (re-search-forward "\n=+$" nil t) + (replace-match "") + (while (re-search-backward "^ +" nil t) (replace-match ""))) + (re-search-forward "\n=+$" nil t) + (delete-region (point-min) (min (point-max) (1+ (match-end 0))))) + (if (re-search-forward "^Org-mode dummy\n?" nil t) + (replace-match ""))) + +;; Advise the add-to-diary-list function to allow org to jump to +;; diary entires. Wrapped into eval-after-load to avoid loading +;; advice unnecessarily +(eval-after-load "diary-lib" + '(defadvice add-to-diary-list (before org-mark-diary-entry activate) + "Make the position visible." + (if (and (boundp 'disable-org-diary) ;; called from org-agenda + (stringp string) + (buffer-file-name)) + (add-text-properties + 0 (length string) + (list 'mouse-face 'highlight + 'keymap org-agenda-keymap + 'help-echo + (format + "mouse-2 or RET jump to diary file %s" + (abbreviate-file-name (buffer-file-name))) + 'org-agenda-diary-link t + 'org-marker (org-agenda-new-marker (point-at-bol))) + string)))) + +(defun org-diary-default-entry () + "Add a dummy entry to the diary. +Needed to avoid empty dates which mess up holiday display." + (add-to-diary-list original-date "Org-mode dummy" "")) + (defun org-add-file (&optional file) "Add current file to the list of files in variable `org-agenda-files'. These are the files which are being checked for agenda entries. @@ -3468,7 +3610,7 @@ file rtn results) ;; If this is called during org-agenda, don't return any entries to ;; the calendar. Org Agenda will list these entries itself. - (if (boundp 'disable-org-agenda) (setq files nil)) + (if (boundp 'disable-org-diary) (setq files nil)) (while (setq file (pop files)) (setq rtn (apply 'org-agenda-get-day-entries file date args)) (setq results (append results rtn))) @@ -3864,7 +4006,6 @@ (let* ((pri (get-text-property (point-at-bol) 'priority))) (message "Priority is %d" (if pri pri -1000)))) - (defun org-agenda-goto () "Go to the Org-mode file which contains the item at point." (interactive) @@ -3875,10 +4016,11 @@ (switch-to-buffer-other-window buffer) (widen) (goto-char pos) - (org-show-hidden-entry) - (save-excursion - (and (outline-next-heading) - (org-flag-heading nil))))) ; show the next heading + (when (eq major-mode 'org-mode) + (org-show-hidden-entry) + (save-excursion + (and (outline-next-heading) + (org-flag-heading nil)))))) ; show the next heading (defun org-agenda-switch-to () "Go to the Org-mode file which contains the item at point." @@ -3891,10 +4033,11 @@ (delete-other-windows) (widen) (goto-char pos) - (org-show-hidden-entry) - (save-excursion - (and (outline-next-heading) - (org-flag-heading nil))))) ; show the next heading + (when (eq major-mode 'org-mode) + (org-show-hidden-entry) + (save-excursion + (and (outline-next-heading) + (org-flag-heading nil)))))) ; show the next heading (defun org-agenda-goto-mouse (ev) "Go to the Org-mode file which contains the deadline at the mouse click." @@ -3923,12 +4066,18 @@ (mouse-set-point ev) (org-agenda-show)) +(defun org-agenda-check-no-diary () + "Check if the entry is a diary link and abort if yes." + (if (get-text-property (point) 'org-agenda-diary-link) + (org-agenda-error))) + (defun org-agenda-error () (error "Command not allowed in this line.")) (defun org-agenda-todo () "Cycle TODO state of line at point, also in Org-mode file." (interactive) + (org-agenda-check-no-diary) (let* ((props (text-properties-at (point))) (col (current-column)) (marker (or (get-text-property (point) 'org-marker) @@ -3971,6 +4120,7 @@ (defun org-agenda-priority (&optional force-direction) "Set the priority of line at point, also in Org-mode file." (interactive) + (org-agenda-check-no-diary) (let* ((props (text-properties-at (point))) (col (current-column)) (marker (or (get-text-property (point) 'org-marker) @@ -4003,6 +4153,7 @@ (defun org-agenda-date-later (arg &optional what) "Change the date of this item to one day later." (interactive "p") + (org-agenda-check-no-diary) (let* ((marker (or (get-text-property (point) 'org-marker) (org-agenda-error))) (buffer (marker-buffer marker)) @@ -4022,8 +4173,9 @@ (org-agenda-date-later (- arg) what)) (defun org-agenda-date-today (arg) - "Change the date of this item to one day later." + "Change the date of this item to today." (interactive "p") + (org-agenda-check-no-diary) (let* ((marker (or (get-text-property (point) 'org-marker) (org-agenda-error))) (buffer (marker-buffer marker)) @@ -4084,7 +4236,91 @@ (get-text-property point 'day)))) (call-interactively cmd)) (fset 'calendar-cursor-to-date oldf))))) - + + +(defun org-agenda-execute-calendar-command (cmd) + "Execute a calendar command from the agenda, with the date associated to +the cursor position." + (require 'diary-lib) + (unless (get-text-property (point) 'day) + (error "Don't know which date to use for calendar command")) + (let* ((oldf (symbol-function 'calendar-cursor-to-date)) + (point (point)) + (mark (or (mark t) (point))) + (date (calendar-gregorian-from-absolute + (get-text-property point 'day))) + (displayed-day (extract-calendar-day date)) + (displayed-month (extract-calendar-month date)) + (displayed-year (extract-calendar-year date))) + (unwind-protect + (progn + (fset 'calendar-cursor-to-date + (lambda (&optional error) + (calendar-gregorian-from-absolute + (get-text-property point 'day)))) + (call-interactively cmd)) + (fset 'calendar-cursor-to-date oldf)))) + +(defun org-agenda-phases-of-moon () + "Display the phases of the moon for 3 month around cursor date." + (interactive) + (org-agenda-execute-calendar-command 'calendar-phases-of-moon)) + +(defun org-agenda-holidays () + "Display the holidays for 3 month around cursor date." + (interactive) + (org-agenda-execute-calendar-command 'list-calendar-holidays)) + +(defun org-agenda-sunrise-sunset (arg) + "Display sunrise and sunset for the cursor date. +Latitude and longitude can be specified with the variables +`calendar-latitude' and `calendar-longitude'. When called with prefix +argument, location will be prompted for." + (interactive "P") + (let ((calendar-longitude (if arg nil calendar-longitude)) + (calendar-latitude (if arg nil calendar-latitude)) + (calendar-location-name nil)) + (org-agenda-execute-calendar-command 'calendar-sunrise-sunset))) + +(defun org-agenda-goto-calendar () + "Open the Emacs calendar with the date at the cursor." + (interactive) + (let* ((day (or (get-text-property (point) 'day) + (error "Don't know which date to open in calendar"))) + (date (calendar-gregorian-from-absolute day))) + (calendar) + (calendar-goto-date date))) + +(defun org-agenda-convert-date () + (interactive) + (let ((day (get-text-property (point) 'day)) + date s) + (unless day + (error "Don't know which date to convert")) + (setq date (calendar-gregorian-from-absolute day)) + (require 'cal-julian) + (require 'cal-hebrew) + (require 'cal-islam) + (require 'cal-french) + (require 'cal-mayan) + (require 'cal-coptic) + (require 'cal-persia) + (require 'cal-china) + (setq s (concat + "Gregorian: " (calendar-date-string date) "\n" + "Julian: " (calendar-julian-date-string date) "\n" + "Astronomic: " (calendar-astro-date-string date) " (at noon UTC)\n" + "Hebrew: " (calendar-hebrew-date-string date) "\n" + "Islamic: " (calendar-islamic-date-string date) "\n" + "French: " (calendar-french-date-string date) "\n" + "Maya: " (calendar-mayan-date-string date) "\n" + "Coptic: " (calendar-coptic-date-string date) "\n" + "Persian: " (calendar-persian-date-string date) "\n" + "Chineese: " (calendar-chinese-date-string date) "\n")) + (with-output-to-temp-buffer "*Dates*" + (princ s)) + (fit-window-to-buffer (get-buffer-window "*Dates*")))) + ;;; Link Stuff (defun org-find-file-at-mouse (ev) @@ -5087,14 +5323,23 @@ (skip-chars-backward "^|\n\r") (if (looking-at " ") (forward-char 1))))) -(defun org-table-copy-from-above (n) - "Copy into the current column the nearest non-empty field from above. -With prefix argument N, take the Nth non-empty field." +(defun org-table-copy-down (n) + "Copy a field down in the current column. +If the field at the cursor is empty, copy into it the content of the nearest +non-empty field above. With argument N, use the Nth non-empty field. +If the current fields is not empty, it is copied down to the next row, and +the cursor is moved with it. Therefore, repeating this command causes the +column to be filled row-by-row. +If the variable `org-table-copy-increment' is non-nil and the field is an +integer, it will be incremented while copying." (interactive "p") - (let ((colpos (org-table-current-column)) - (beg (org-table-begin)) - txt) + (let* ((colpos (org-table-current-column)) + (field (org-table-get-field)) + (non-empty (string-match "[^ \t]" field)) + (beg (org-table-begin)) + txt) (org-table-check-inside-data-field) + (if non-empty (progn (org-table-next-row) (org-table-blank-field))) (if (save-excursion (setq txt (catch 'exit @@ -5103,10 +5348,13 @@ beg t)) (org-table-goto-column colpos t) (if (and (looking-at - "|[ \t]*\\([^| \t][^|]*[^| \t]\\)[ \t]*|") + "|[ \t]*\\([^| \t][^|]*?\\)[ \t]*|") (= (setq n (1- n)) 0)) (throw 'exit (match-string 1))))))) (progn + (if (and org-table-copy-increment + (string-match "^[0-9]+$" txt)) + (setq txt (format "%d" (+ (string-to-int txt) 1)))) (insert txt) (org-table-align)) (error "No non-empty field found")))) @@ -6039,7 +6287,7 @@ ([(shift tab)] org-table-previous-field) ("\C-c\C-c" org-table-align) ([(return)] org-table-next-row) - ([(shift return)] org-table-copy-from-above) + ([(shift return)] org-table-copy-down) ([(meta return)] org-table-wrap-region) ("\C-c\C-q" org-table-wrap-region) ("\C-c?" org-table-current-column) @@ -6157,7 +6405,7 @@ "--" ["Blank field" org-table-blank-field :active (org-at-table-p) :keys "C-c SPC"] ["Copy field from above" - org-table-copy-from-above :active (org-at-table-p) :keys "S-RET"] + org-table-copy-down :active (org-at-table-p) :keys "S-RET"] "--" ("Column" ["Move column left" org-metaleft :active (org-at-table-p) :keys "M-"] @@ -6678,7 +6926,57 @@ (setq char (nth (- umax level) (reverse org-ascii-underline))) (if org-export-with-section-numbers (setq title (concat (org-section-number level) " " title))) - (insert title "\n" (make-string (length title) char) "\n")))) + (insert title "\n" (make-string (string-width title) char) "\n")))) + +(defun org-export-copy-visible (&optional arg) + "Copy the visible part of the buffer to another buffer, for printing. +Also removes the first line of the buffer it is specifies a mode, +and all options lines." + (interactive "P") + (let* ((filename (concat (file-name-sans-extension (buffer-file-name)) + ".txt")) + (buffer (find-file-noselect filename)) + (ore (concat + (org-make-options-regexp + '("CATEGORY" "SEQ_TODO" "PRI_TODO" "TYP_TODO" "STARTUP" + "TITLE" "AUTHOR" "EMAIL" "TEXT" "OPTIONS" "LANGUAGE")) + (if org-noutline-p "\\(\n\\|$\\)" ""))) + s e) + (save-excursion + (set-buffer buffer) + (erase-buffer) + (text-mode)) + (save-excursion + (setq s (goto-char (point-min))) + (while (not (= (point) (point-max))) + (goto-char (org-find-invisible)) + (append-to-buffer buffer s (point)) + (setq s (goto-char (org-find-visible))))) + (switch-to-buffer-other-window buffer) + (newline) + (goto-char (point-min)) + (if (looking-at ".*-\\*- mode:.*\n") + (replace-match "")) + (while (re-search-forward ore nil t) + (replace-match "")) + (goto-char (point-min)))) + +(defun org-find-visible () + (if (featurep 'noutline) + (let ((s (point))) + (while (and (not (= (point-max) (setq s (next-overlay-change s)))) + (get-char-property s 'invisible))) + s) + (skip-chars-forward "^\n") + (point))) +(defun org-find-invisible () + (if (featurep 'noutline) + (let ((s (point))) + (while (and (not (= (point-max) (setq s (next-overlay-change s)))) + (not (get-char-property s 'invisible)))) + s) + (skip-chars-forward "^\r") + (point))) ;; HTML @@ -7423,7 +7721,7 @@ (define-key org-mode-map [(shift tab)] 'org-shifttab) (define-key org-mode-map "\C-c\C-c" 'org-ctrl-c-ctrl-c) (define-key org-mode-map [(return)] 'org-return) -(define-key org-mode-map [(shift return)] 'org-table-copy-from-above) +(define-key org-mode-map [(shift return)] 'org-table-copy-down) (define-key org-mode-map [(meta return)] 'org-meta-return) (define-key org-mode-map [(control up)] 'org-move-line-up) (define-key org-mode-map [(control down)] 'org-move-line-down) @@ -7436,6 +7734,10 @@ (define-key org-mode-map "\C-c\C-q" 'org-table-wrap-region) (define-key org-mode-map "\C-c\C-xa" 'org-export-as-ascii) (define-key org-mode-map "\C-c\C-x\C-a" 'org-export-as-ascii) +(define-key org-mode-map "\C-c\C-xv" 'org-export-copy-visible) +(define-key org-mode-map "\C-c\C-x\C-v" 'org-export-copy-visible) +(define-key org-mode-map "\C-c\C-xo" 'org-export-as-opml) +(define-key org-mode-map "\C-c\C-x\C-o" 'org-export-as-opml) (define-key org-mode-map "\C-c\C-xt" 'org-insert-export-options-template) (define-key org-mode-map "\C-c:" 'org-toggle-fixed-width-section) (define-key org-mode-map "\C-c\C-xh" 'org-export-as-html) @@ -7444,7 +7746,7 @@ ;; FIXME: Do we really need to save match data in these commands? ;; I would like to remove it in order to minimize impact. -;; Self-insert already does not preserve it. How much resources does this take??? +;; Self-insert already does not preserve it. How much resources used by this??? (defsubst org-table-p () (if (and (eq major-mode 'org-mode) font-lock-mode) @@ -7469,28 +7771,7 @@ ;; FIXME: ;; The following two functions might still be optimized to trigger -;; re-alignment less frequently. Right now they raise the flag each time -;; (through before-change-functions). Here is how this could be minimized: -;; Basically, check if the non-white field width before deletion is -;; equal to the column width. If yes, the delete should trigger a -;; re-align. I have not implemented this so far because it is not so -;; easy, requires grabbing the field etc. So it may finally have some -;; impact on typing performance which we don't want. - -;; The defsubst is only a draft, untested... - -;; Maybe it is not so important to get rid of realigns - maybe the most -;; important aspect is to keep the table look noce as long as possible, -;; which is already achieved... - -;(defsubst org-check-delete-triggers-realign () -; (let ((pos (point))) -; (skip-chars-backward "^|\n") -; (and (looking-at " *\\(.*?\\) *|") -; (= (nth (1- (org-table-current-column)) -; org-table-last-column-widths) -; (- (match-end 1) (match-beginning 1))) -; (setq org-table-may-need-update t)))) +;; re-alignment less frequently. (defun org-delete-backward-char (N) "Like `delete-backward-char', insert whitespace at field end in tables. @@ -7769,7 +8050,7 @@ ["Next row" org-return (org-at-table-p)] "--" ["Blank field" org-table-blank-field (org-at-table-p)] - ["Copy field from above" org-table-copy-from-above (org-at-table-p)] + ["Copy field from above" org-table-copy-down (org-at-table-p)] "--" ("Column" ["Move column left" org-metaleft (org-at-table-p)] @@ -7807,8 +8088,10 @@ "--" ("Export" ["ASCII" org-export-as-ascii t] + ["Extract visible text" org-export-copy-visible t] ["HTML" org-export-as-html t] ["HTML, and open" org-export-as-html-and-open t] + ["OPML" org-export-as-opml nil] "--" ["Option template" org-insert-export-options-template t] ["Toggle fixed width" org-toggle-fixed-width-section t]) @@ -8098,3 +8381,5 @@ ;;; org.el ends here + + diff -r 45e5f0224d81 -r 360860a0006f lisp/textmodes/refill.el --- a/lisp/textmodes/refill.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/textmodes/refill.el Mon Apr 04 16:43:15 2005 +0000 @@ -221,7 +221,9 @@ When Refill mode is on, the current paragraph will be formatted when changes are made within it. Self-inserting characters only cause refilling if they would cause auto-filling." - nil " Refill" '(("\177" . backward-delete-char-untabify)) + :group 'refill + :lighter " Refill" + :keymap '(("\177" . backward-delete-char-untabify)) ;; Remove old state if necessary (when refill-ignorable-overlay (delete-overlay refill-ignorable-overlay) diff -r 45e5f0224d81 -r 360860a0006f lisp/textmodes/sgml-mode.el --- a/lisp/textmodes/sgml-mode.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/textmodes/sgml-mode.el Mon Apr 04 16:43:15 2005 +0000 @@ -1804,7 +1804,7 @@

Paragraphs only need an opening tag. Line breaks and multiple spaces are ignored unless the text is

preformatted.
Text can be marked as -bold, italic or underlined using the normal M-g or +bold, italic or underlined using the normal M-o or Edit/Text Properties/Face commands. Pages can have named points and can link other points diff -r 45e5f0224d81 -r 360860a0006f lisp/textmodes/tex-mode.el --- a/lisp/textmodes/tex-mode.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/textmodes/tex-mode.el Mon Apr 04 16:43:15 2005 +0000 @@ -1562,8 +1562,9 @@ (concat (if file (if star (concat (substring cmd 0 star) - file (substring cmd (1+ star))) - (concat cmd " " file)) + (shell-quote-argument file) + (substring cmd (1+ star))) + (concat cmd " " (shell-quote-argument file))) cmd) (if background "&" "")))) ;; Switch to buffer before checking for subproc output in it. @@ -1886,8 +1887,8 @@ (prog1 (file-name-directory (expand-file-name file)) (setq file (file-name-nondirectory file)))) (root (file-name-sans-extension file)) - (fspec (list (cons ?r (comint-quote-filename root)) - (cons ?f (comint-quote-filename file)))) + (fspec (list (cons ?r (shell-quote-argument root)) + (cons ?f (shell-quote-argument file)))) (default (tex-compile-default fspec))) (list default-directory (completing-read @@ -1908,14 +1909,14 @@ (compile-command (if star (concat (substring command 0 star) - (comint-quote-filename file) + (shell-quote-argument file) (substring command (1+ star))) (concat command " " tex-start-options (if (< 0 (length tex-start-commands)) (concat (shell-quote-argument tex-start-commands) " ")) - (comint-quote-filename file))))) + (shell-quote-argument file))))) (tex-send-tex-command compile-command dir))) (defun tex-send-tex-command (cmd &optional dir) diff -r 45e5f0224d81 -r 360860a0006f lisp/tooltip.el --- a/lisp/tooltip.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/tooltip.el Mon Apr 04 16:43:15 2005 +0000 @@ -130,7 +130,7 @@ (defcustom tooltip-gud-display '((eq (tooltip-event-buffer tooltip-gud-event) - (marker-buffer overlay-arrow-position))) + (marker-buffer gud-overlay-arrow-position))) "List of forms determining where GUD tooltips are displayed. Forms in the list are combined with AND. The default is to display @@ -469,27 +469,7 @@ (defun tooltip-show-help-function (msg) "Function installed as `show-help-function'. MSG is either a help string to display, or nil to cancel the display." - (let ((previous-help tooltip-help-message) - mp pos) - (if (and mouse-1-click-follows-link - (stringp msg) - (save-match-data - (string-match "^mouse-2" msg)) - (setq mp (mouse-pixel-position)) - (consp (setq pos (cdr mp))) - (car pos) (>= (car pos) 0) - (cdr pos) (>= (cdr pos) 0) - (setq pos (posn-at-x-y (car pos) (cdr pos) (car mp))) - (windowp (posn-window pos))) - (with-current-buffer (window-buffer (posn-window pos)) - (if (mouse-on-link-p pos) - (setq msg (concat - (cond - ((eq mouse-1-click-follows-link 'double) "double-") - ((and (integerp mouse-1-click-follows-link) - (< mouse-1-click-follows-link 0)) "Long ") - (t "")) - "mouse-1" (substring msg 7)))))) + (let ((previous-help tooltip-help-message)) (setq tooltip-help-message msg) (cond ((null msg) ;; Cancel display. This also cancels a delayed tip, if diff -r 45e5f0224d81 -r 360860a0006f lisp/url/ChangeLog --- a/lisp/url/ChangeLog Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/url/ChangeLog Mon Apr 04 16:43:15 2005 +0000 @@ -1,3 +1,7 @@ +2005-04-04 Lute Kamstra + + * url-handlers.el (url-handler-mode): Specify :group. + 2005-02-26 James Cloos (tiny change) * url-history.el (url-have-visited-url): Don't barf if diff -r 45e5f0224d81 -r 360860a0006f lisp/url/url-handlers.el --- a/lisp/url/url-handlers.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/url/url-handlers.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ ;;; url-handlers.el --- file-name-handler stuff for URL loading -;; Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc. +;; Copyright (c) 1996, 1997, 1998, 1999, 2004, 2005 Free Software Foundation, Inc. ;; Keywords: comm, data, processes, hypermedia @@ -106,7 +106,7 @@ ;;;###autoload (define-minor-mode url-handler-mode "Use URL to handle URL-like file names." - :global t + :global t :group 'url (if (not (boundp 'file-name-handler-alist)) ;; Can't be turned ON anyway. (setq url-handler-mode nil) diff -r 45e5f0224d81 -r 360860a0006f lisp/url/vc-dav.el --- a/lisp/url/vc-dav.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/url/vc-dav.el Mon Apr 04 16:43:15 2005 +0000 @@ -21,6 +21,11 @@ ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;;; Code: + (require 'url) (require 'url-dav) @@ -175,4 +180,5 @@ (provide 'vc-dav) -;;; arch-tag: 0a0fb9fe-8190-4c0a-a179-5c291d3a467e +;; arch-tag: 0a0fb9fe-8190-4c0a-a179-5c291d3a467e +;;; vc-dav.el ends here diff -r 45e5f0224d81 -r 360860a0006f lisp/vc-hooks.el --- a/lisp/vc-hooks.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/vc-hooks.el Mon Apr 04 16:43:15 2005 +0000 @@ -481,7 +481,9 @@ "Return non-nil if FILE has not changed since the last checkout." (let ((checkout-time (vc-file-getprop file 'vc-checkout-time)) (lastmod (nth 5 (file-attributes file)))) - (if checkout-time + (if (and checkout-time + ;; Tramp and Ange-FTP return this when they don't know the time. + (not (equal lastmod '(0 0)))) (equal checkout-time lastmod) (let ((unchanged (vc-call workfile-unchanged-p file))) (vc-file-setprop file 'vc-checkout-time (if unchanged lastmod 0)) diff -r 45e5f0224d81 -r 360860a0006f lisp/vc.el --- a/lisp/vc.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/vc.el Mon Apr 04 16:43:15 2005 +0000 @@ -1,7 +1,7 @@ ;;; vc.el --- drive a version-control system from within Emacs ;; Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, -;; 2000, 2001, 2003, 2004 Free Software Foundation, Inc. +;; 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. ;; Author: FSF (see below for full credits) ;; Maintainer: Andre Spiegel @@ -962,8 +962,10 @@ ;; start-process does not support remote execution (setq okstatus nil)) (if (eq okstatus 'async) - (let ((proc (apply 'start-process command (current-buffer) command - squeezed))) + (let ((proc + (let ((process-connection-type nil)) + (apply 'start-process command (current-buffer) command + squeezed)))) (unless (active-minibuffer-window) (message "Running %s in the background..." command)) ;;(set-process-sentinel proc (lambda (p msg) (delete-process p))) diff -r 45e5f0224d81 -r 360860a0006f lisp/wdired.el --- a/lisp/wdired.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/wdired.el Mon Apr 04 16:43:15 2005 +0000 @@ -330,7 +330,8 @@ (set-buffer-modified-p nil) (setq buffer-undo-list nil) (run-hooks 'wdired-mode-hook) - (message (substitute-command-keys "Press \\[wdired-finish-edit] when finished"))) + (message (substitute-command-keys "Press \\[wdired-finish-edit] when finished \ +or \\[wdired-abort-changes] to abort changes"))) ;; Protect the buffer so only the filenames can be changed, and put diff -r 45e5f0224d81 -r 360860a0006f lisp/window.el --- a/lisp/window.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/window.el Mon Apr 04 16:43:15 2005 +0000 @@ -397,20 +397,13 @@ (defun window-buffer-height (window) "Return the height (in screen lines) of the buffer that WINDOW is displaying." - (save-excursion - (set-buffer (window-buffer window)) - (goto-char (point-min)) - (let ((ignore-final-newline - ;; If buffer ends with a newline, ignore it when counting height - ;; unless point is after it. - (and (not (eobp)) (eq ?\n (char-after (1- (point-max))))))) - (+ 1 (nth 2 (compute-motion (point-min) - '(0 . 0) - (- (point-max) (if ignore-final-newline 1 0)) - (cons 0 100000000) - nil - nil - window)))))) + (with-current-buffer (window-buffer window) + (max 1 + (count-screen-lines (point-min) (point-max) + ;; If buffer ends with a newline, ignore it when + ;; counting height unless point is after it. + (eobp) + window)))) (defun count-screen-lines (&optional beg end count-final-newline window) "Return the number of screen lines in the region. diff -r 45e5f0224d81 -r 360860a0006f lisp/xt-mouse.el --- a/lisp/xt-mouse.el Mon Mar 28 04:24:51 2005 +0000 +++ b/lisp/xt-mouse.el Mon Apr 04 16:43:15 2005 +0000 @@ -155,8 +155,11 @@ "Toggle XTerm mouse mode. With prefix arg, turn XTerm mouse mode on iff arg is positive. -Turn it on to use emacs mouse commands, and off to use xterm mouse commands." - nil " Mouse" nil :global t +Turn it on to use Emacs mouse commands, and off to use xterm mouse commands. +This works in terminal emulators compatible with xterm. Only single clicks +are supported. When turned on, the normal xterm mouse functionality is still +available by holding down the SHIFT key while pressing the mouse button." + nil " Mouse" nil :global t :group 'mouse (if xterm-mouse-mode ;; Turn it on (unless window-system diff -r 45e5f0224d81 -r 360860a0006f lispref/ChangeLog --- a/lispref/ChangeLog Mon Mar 28 04:24:51 2005 +0000 +++ b/lispref/ChangeLog Mon Apr 04 16:43:15 2005 +0000 @@ -1,3 +1,40 @@ +2005-04-03 Lute Kamstra + + * hooks.texi (Standard Hooks): Add some hooks. Add cross + references and/or descriptions. Delete major mode hooks; mention + them as a category instead. Rename or delete obsolete hooks. + +2005-04-02 Richard M. Stallman + + * nonascii.texi (Coding System Basics): Another wording cleanup. + +2005-04-01 Richard M. Stallman + + * nonascii.texi (Coding System Basics): Clarify previous change. + +2005-04-01 Kenichi Handa + + * nonascii.texi (Coding System Basics): Describe about rondtrip + identity of coding systems. + +2005-03-29 Chong Yidong + + * text.texi (Buffer Contents): Add filter-buffer-substring and + buffer-substring-filters. + +2005-03-26 Chong Yidong + + * anti.texi (Antinews): Mention `G' interactive code. + + * tips.texi (Compilation Tips): Mention benchmark.el. + +2005-03-27 Luc Teirlinck + + * modes.texi (Other Font Lock Variables): `font-lock-fontify-block' + is now bound to M-o M-o. + + * keymaps.texi (Prefix Keys): `facemenu-keymap' is now on M-o. + 2005-03-26 Glenn Morris * calendar.texi: Delete file (and move contents to emacs-xtra.texi diff -r 45e5f0224d81 -r 360860a0006f lispref/anti.texi --- a/lispref/anti.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/lispref/anti.texi Mon Apr 04 16:43:15 2005 +0000 @@ -238,6 +238,10 @@ @code{test-completion} is no longer available. @item +The @samp{G} interactive code character is no longer supported. +Use @samp{F} instead. + +@item Arbitrary Lisp functions can no longer be recorded into @code{buffer-undo-list}. As a consequence, @code{yank-undo-function} is obsolete, and has been removed. diff -r 45e5f0224d81 -r 360860a0006f lispref/hooks.texi --- a/lispref/hooks.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/lispref/hooks.texi Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Emacs Lisp Reference Manual. -@c Copyright (C) 1990, 1991, 1992, 1993, 1998, 2004 Free Software Foundation, Inc. +@c Copyright (C) 1990, 1991, 1992, 1993, 1998, 2004, 2005 Free Software Foundation, Inc. @c See the file elisp.texi for copying conditions. @setfilename ../info/hooks @node Standard Hooks, Index, Standard Keymaps, Top @@ -16,6 +16,11 @@ to put a new function on such a hook is to call @code{add-hook}. @xref{Hooks}, for more information about using hooks. +Every major mode defines a mode hook named +@samp{@var{modename}-mode-hook}. The major mode command runs this +normal hook with @code{run-mode-hooks} as the very last thing it does. +@xref{Mode Hooks}. Mode hooks are omitted in the list below. + The variables whose names end in @samp{-hooks} or @samp{-functions} are usually @dfn{abnormal hooks}; their values are lists of functions, but these functions are called in a special way (they are passed arguments, @@ -28,118 +33,229 @@ names ending in @samp{-hook} even though they were not normal hooks; however, we have renamed all of those.) -@c !!! need xref to where each hook is documented or else document it -@c by specifying what is expected, and when it is called relative to -@c mode initialization. +@c We need to xref to where each hook is documented or else document +@c it here. @table @code @item activate-mark-hook +@xref{The Mark}. + @item after-change-functions +@xref{Change Hooks}. + @item after-change-major-mode-hook +@xref{Mode Hooks}. + @item after-init-hook +@xref{Init File}. + @item after-insert-file-functions +@xref{Saving Properties}. + @item after-make-frame-functions +@xref{Creating Frames}. + @item after-revert-hook +@xref{Reverting}. + @item after-save-hook -@item apropos-mode-hook +@xref{Saving Buffers}. + @item auto-fill-function +@xref{Auto Filling}. + @item auto-save-hook +@xref{Auto-Saving}. + @item before-change-functions +@xref{Change Hooks}. + @item before-init-hook +@xref{Init File}. + @item before-make-frame-hook +@xref{Creating Frames}. + @item before-revert-hook +@xref{Reverting}. + @item before-save-hook +@xref{Saving Buffers}. + @item blink-paren-function +@xref{Blinking}. + @item buffer-access-fontify-functions -@item c-mode-hook +@xref{Lazy Properties}. + @item calendar-load-hook +@inforef{Calendar Customizing,, emacs-xtra}. + @item change-major-mode-hook -@item command-history-hook +@xref{Creating Buffer-Local}. + @item command-line-functions +@xref{Command-Line Arguments}. + @item comment-indent-function +@xref{Options for Comments,, Options Controlling Comments, emacs, the +GNU Emacs Manual}. + @item custom-define-hook +Hook called after defining each customize option. + @item deactivate-mark-hook +@xref{The Mark}. + @item desktop-after-read-hook +Normal hook run after a successful @code{desktop-read}. May be used +to show a buffer list. @xref{Saving Emacs Sessions,, Saving Emacs +Sessions, emacs, the GNU Emacs Manual}. + @item desktop-no-desktop-file-hook +Normal hook run when @code{desktop-read} can't find a desktop file. +May be used to show a dired buffer. @xref{Saving Emacs Sessions,, +Saving Emacs Sessions, emacs, the GNU Emacs Manual}. + @item desktop-save-hook +Normal hook run before the desktop is saved in a desktop file. This +is useful for truncating history lists, for example. @xref{Saving +Emacs Sessions,, Saving Emacs Sessions, emacs, the GNU Emacs Manual}. + @item diary-display-hook +@inforef{Fancy Diary Display,, emacs-xtra}. + @item diary-hook -@item dired-mode-hook +List of functions called after the display of the diary. Can be used +for appointment notification. + @item disabled-command-function +@xref{Disabling Commands}. + @item echo-area-clear-hook -@item edit-picture-hook -@item electric-buffer-menu-mode-hook -@item electric-command-history-hook -@item electric-help-mode-hook -@item emacs-lisp-mode-hook +@xref{The Echo Area}. + +@item emacs-startup-hook +@xref{Init File}. + @item find-file-hook +@xref{Visiting Functions}. + @item find-file-not-found-functions +@xref{Visiting Functions}. + @item first-change-hook -@item fortran-comment-hook -@item fortran-mode-hook -@item indent-mim-hook +@xref{Change Hooks}. + @item initial-calendar-window-hook +@inforef{Calendar Customizing,, emacs-xtra}. + @item kbd-macro-termination-hook +@xref{Keyboard Macros}. + @item kill-buffer-hook +@xref{Killing Buffers}. + @item kill-buffer-query-functions +@xref{Killing Buffers}. + @item kill-emacs-hook +@xref{Killing Emacs}. + @item kill-emacs-query-functions -@item LaTeX-mode-hook -@item ledit-mode-hook +@xref{Killing Emacs}. + @item lisp-indent-function -@item lisp-interaction-mode-hook -@item lisp-mode-hook + @item list-diary-entries-hook -@item mail-mode-hook +@inforef{Fancy Diary Display,, emacs-xtra}. + @item mail-setup-hook +@xref{Mail Mode Misc,, Mail Mode Miscellany, emacs, the GNU Emacs +Manual}. + @item mark-diary-entries-hook -@item medit-mode-hook +@inforef{Fancy Diary Display,, emacs-xtra}. + @item menu-bar-update-hook +@xref{Menu Bar}. + @item minibuffer-setup-hook +@xref{Minibuffer Misc}. + @item minibuffer-exit-hook +@xref{Minibuffer Misc}. + @item mouse-position-function -@item news-mode-hook -@item news-reply-mode-hook -@item news-setup-hook +@xref{Mouse Position}. + @item nongregorian-diary-listing-hook +@inforef{Hebrew/Islamic Entries,, emacs-xtra}. + @item nongregorian-diary-marking-hook -@item nroff-mode-hook -@item outline-mode-hook -@item plain-TeX-mode-hook +@inforef{Hebrew/Islamic Entries,, emacs-xtra}. + @item post-command-hook +@xref{Command Overview}. + @item pre-abbrev-expand-hook +@xref{Abbrev Expansion}. + @item pre-command-hook +@xref{Command Overview}. + @item print-diary-entries-hook -@item prolog-mode-hook -@item protect-innocence-hook +@inforef{Diary Customizing,, emacs-xtra}. + @item redisplay-end-trigger-functions -@item rmail-edit-mode-hook -@item rmail-mode-hook -@item rmail-summary-mode-hook -@item scheme-indent-hook -@item scheme-mode-hook -@item scribe-mode-hook -@item shell-mode-hook -@item shell-set-directory-error-hook +@xref{Window Hooks}. + +@item scheme-indent-function + @item suspend-hook +@xref{Suspending Emacs}. + @item suspend-resume-hook +@xref{Suspending Emacs}. + +@item temp-buffer-setup-hook +@xref{Temporary Displays}. + @item temp-buffer-show-function +@xref{Temporary Displays}. + +@item temp-buffer-show-hook +@xref{Temporary Displays}. + @item term-setup-hook -@item terminal-mode-hook -@item terminal-mode-break-hook -@item TeX-mode-hook -@item text-mode-hook +@xref{Terminal-Specific}. + @item today-visible-calendar-hook +@inforef{Calendar Customizing,, emacs-xtra}. + @item today-invisible-calendar-hook -@item vi-mode-hook -@item view-hook +@inforef{Calendar Customizing,, emacs-xtra}. + @item window-configuration-change-hook +@xref{Window Hooks}. + @item window-scroll-functions +@xref{Window Hooks}. + @item window-setup-hook +@xref{Window Systems}. + @item window-size-change-functions +@xref{Window Hooks}. + @item write-contents-functions +@xref{Saving Buffers}. + @item write-file-functions +@xref{Saving Buffers}. + @item write-region-annotate-functions +@xref{Saving Properties}. @end table @ignore diff -r 45e5f0224d81 -r 360860a0006f lispref/keymaps.texi --- a/lispref/keymaps.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/lispref/keymaps.texi Mon Apr 04 16:43:15 2005 +0000 @@ -456,16 +456,16 @@ key. @item -@cindex @kbd{M-g} +@cindex @kbd{M-o} @vindex facemenu-keymap -@code{facemenu-keymap} is the global keymap used for the @kbd{M-g} +@code{facemenu-keymap} is the global keymap used for the @kbd{M-o} prefix key. @c Emacs 19 feature @item -The other Emacs prefix keys are @kbd{C-x @@}, @kbd{C-x a i}, @kbd{C-x -@key{ESC}} and @kbd{@key{ESC} @key{ESC}}. They use keymaps that have no -special names. +The other Emacs prefix keys are @kbd{M-g}, @kbd{C-x @@}, @kbd{C-x a i}, +@kbd{C-x @key{ESC}} and @kbd{@key{ESC} @key{ESC}}. They use keymaps +that have no special names. @end itemize The keymap binding of a prefix key is used for looking up the event diff -r 45e5f0224d81 -r 360860a0006f lispref/modes.texi --- a/lispref/modes.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/lispref/modes.texi Mon Apr 04 16:43:15 2005 +0000 @@ -2349,7 +2349,7 @@ @defvar font-lock-mark-block-function If this variable is non-@code{nil}, it should be a function that is called with no arguments, to choose an enclosing range of text for -refontification for the command @kbd{M-g M-g} +refontification for the command @kbd{M-o M-o} (@code{font-lock-fontify-block}). The function should report its choice by placing the region around it. diff -r 45e5f0224d81 -r 360860a0006f lispref/nonascii.texi --- a/lispref/nonascii.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/lispref/nonascii.texi Mon Apr 04 16:43:15 2005 +0000 @@ -628,6 +628,27 @@ conversion, but some of them leave the choice unspecified---to be chosen heuristically for each file, based on the data. + In general, a coding system doesn't guarantee roundtrip identity: +decoding a byte sequence using coding system, then encoding the +resulting text in the same coding system, can produce a different byte +sequence. However, the following coding systems do guarantee that the +byte sequence will be the same as what you originally decoded: + +@quotation +chinese-big5 chinese-iso-8bit cyrillic-iso-8bit emacs-mule +greek-iso-8bit hebrew-iso-8bit iso-latin-1 iso-latin-2 iso-latin-3 +iso-latin-4 iso-latin-5 iso-latin-8 iso-latin-9 iso-safe +japanese-iso-8bit japanese-shift-jis korean-iso-8bit raw-text +@end quotation + + Encoding buffer text and then decoding the result can also fail to +reproduce the original text. For instance, if you encode Latin-2 +characters with @code{utf-8} and decode the result using the same +coding system, you'll get Unicode characters (of charset +@code{mule-unicode-0100-24ff}). If you encode Unicode characters with +@code{iso-latin-2} and decode the result with the same coding system, +you'll get Latin-2 characters. + @cindex end of line conversion @dfn{End of line conversion} handles three different conventions used on various systems for representing end of line in files. The Unix diff -r 45e5f0224d81 -r 360860a0006f lispref/text.texi --- a/lispref/text.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/lispref/text.texi Mon Apr 04 16:43:15 2005 +0000 @@ -207,6 +207,41 @@ properties, just the characters themselves. @xref{Text Properties}. @end defun +@defun filter-buffer-substring start end &optional delete +This function passes the buffer text between @var{start} and @var{end} +through the filter functions specified by the variable +@code{buffer-substring-filters}, and returns the value from the last +filter function. If @code{buffer-substring-filters} is @code{nil}, +the value is the unaltered text from the buffer, what +@code{buffer-substring} would return. + +If @var{delete} is non-@code{nil}, this function deletes the text +between @var{start} and @var{end} after copying it, like +@code{delete-and-extract-region}. + +Lisp code should use this function instead of @code{buffer-substring} +or @code{delete-and-extract-region} when copying into user-accessible +data structures such as the kill-ring, X clipboard, and registers. +Major and minor modes can add functions to +@code{buffer-substring-filters} to alter such text as it is copied out +of the buffer. +@end defun + +@defvar buffer-substring-filters +This variable should be a list of functions that accept a single +argument, a string, and return a string. +@code{filter-buffer-substring} passes the buffer substring to the +first function in this list, and the return value of each function is +passed to the next function. The return value of the last function is +used as the return value of @code{filter-buffer-substring}. + +As a special convention, point is set to the start of the buffer text +being operated on (i.e., the @var{start} argument for +@code{filter-buffer-substring}) before these functions are called. + +If this variable is @code{nil}, no filtering is performed. +@end defvar + @defun buffer-string This function returns the contents of the entire accessible portion of the current buffer as a string. It is equivalent to diff -r 45e5f0224d81 -r 360860a0006f lispref/tips.texi --- a/lispref/tips.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/lispref/tips.texi Mon Apr 04 16:43:15 2005 +0000 @@ -452,6 +452,13 @@ @file{elp.el} for instructions. @item +@cindex @file{benchmark.el} +@cindex benchmarking +Check the speed of individual Emacs Lisp forms using the +@file{benchmark} library. See the functions @code{benchmark-run} and +@code{benchmark-run-compiled} in @file{benchmark.el}. + +@item Use iteration rather than recursion whenever possible. Function calls are slow in Emacs Lisp even when a compiled function is calling another compiled function. diff -r 45e5f0224d81 -r 360860a0006f lwlib/ChangeLog --- a/lwlib/ChangeLog Mon Mar 28 04:24:51 2005 +0000 +++ b/lwlib/ChangeLog Mon Apr 04 16:43:15 2005 +0000 @@ -1,3 +1,16 @@ +2005-04-01 Jan Dj,Ad(Brv + + Reenable support for I18N to Lucid menus. + + * xlwmenuP.h (_XlwMenu_part): Add fontSet resource. + + * xlwmenu.c (string_width): + (MENU_FONT_HEIGHT, MENU_FONT_ASCENT): Ditto. + (display_menu_item, make_drawing_gcs, XlwMenuInitialize) + (XlwMenuSetValues): Use font if fontSet is NULL, use only + font for !HAVE_X_I18N. + (xlwMenuResources): Add fontSet resource. + 2005-03-22 Jan Dj,Ad(Brv * xlwmenuP.h: Temporary #undef HAVE_X_I18N until FontSet for UTF-8 diff -r 45e5f0224d81 -r 360860a0006f lwlib/xlwmenu.c --- a/lwlib/xlwmenu.c Mon Mar 28 04:24:51 2005 +0000 +++ b/lwlib/xlwmenu.c Mon Apr 04 16:43:15 2005 +0000 @@ -131,20 +131,16 @@ /* FIXME: F10 should enter the menu, the first one in the menu-bar. */ -/* FIXME: HAVE_X_I18N does not work yet. */ -#undef HAVE_X_I18N - #define offset(field) XtOffset(XlwMenuWidget, field) static XtResource xlwMenuResources[] = { #ifdef HAVE_X_I18N - {XtNfont, XtCFont, XtRFontSet, sizeof(XFontSet), - offset(menu.font), XtRString, "XtDefaultFontSet"}, -#else + {XtNfontSet, XtCFontSet, XtRFontSet, sizeof(XFontSet), + offset(menu.fontSet), XtRFontSet, NULL}, +#endif {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), offset(menu.font), XtRString, "XtDefaultFont"}, -#endif {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), offset(menu.foreground), XtRString, "XtDefaultForeground"}, {XtNdisabledForeground, XtCDisabledForeground, XtRPixel, sizeof(Pixel), @@ -361,24 +357,31 @@ XlwMenuWidget mw; char *s; { + XCharStruct xcs; + int drop; #ifdef HAVE_X_I18N XRectangle ink, logical; - XmbTextExtents (mw->menu.font, s, strlen (s), &ink, &logical); - return logical.width; -#else - XCharStruct xcs; - int drop; + if (mw->menu.fontSet) + { + XmbTextExtents (mw->menu.fontSet, s, strlen (s), &ink, &logical); + return logical.width; + } +#endif XTextExtents (mw->menu.font, s, strlen (s), &drop, &drop, &drop, &xcs); return xcs.width; -#endif + } #ifdef HAVE_X_I18N #define MENU_FONT_HEIGHT(mw) \ - ((mw)->menu.font_extents->max_logical_extent.height) + ((mw)->menu.fontSet != NULL \ + ? (mw)->menu.font_extents->max_logical_extent.height \ + : (mw)->menu.font->ascent + (mw)->menu.font->descent) #define MENU_FONT_ASCENT(mw) \ - (- (mw)->menu.font_extents->max_logical_extent.y) + ((mw)->menu.fontSet != NULL \ + ? - (mw)->menu.font_extents->max_logical_extent.y \ + : (mw)->menu.font->ascent) #else #define MENU_FONT_HEIGHT(mw) \ ((mw)->menu.font->ascent + (mw)->menu.font->descent) @@ -1053,10 +1056,14 @@ #ifdef HAVE_X_I18N - XmbDrawString (XtDisplay (mw), ws->window, mw->menu.font, -#else + if (mw->menu.fontSet) + XmbDrawString (XtDisplay (mw), ws->window, mw->menu.fontSet, + text_gc, x_offset, + y + v_spacing + shadow + font_ascent, + display_string, strlen (display_string)); + else +#endif XDrawString (XtDisplay (mw), ws->window, -#endif text_gc, x_offset, y + v_spacing + shadow + font_ascent, display_string, strlen (display_string)); @@ -1083,10 +1090,16 @@ else if (val->key) { #ifdef HAVE_X_I18N - XmbDrawString (XtDisplay (mw), ws->window, mw->menu.font, -#else + if (mw->menu.fontSet) + XmbDrawString (XtDisplay (mw), ws->window, + mw->menu.fontSet, + text_gc, + x + label_width + mw->menu.arrow_spacing, + y + v_spacing + shadow + font_ascent, + val->key, strlen (val->key)); + else +#endif XDrawString (XtDisplay (mw), ws->window, -#endif text_gc, x + label_width + mw->menu.arrow_spacing, y + v_spacing + shadow + font_ascent, @@ -1493,34 +1506,25 @@ { XGCValues xgcv; float scale; + XtGCMask mask = GCForeground | GCBackground; -#ifndef HAVE_X_I18N +#ifdef HAVE_X_I18N + if (!mw->menu.fontSet) + { + xgcv.font = mw->menu.font->fid; + mask |= GCFont; + } +#else xgcv.font = mw->menu.font->fid; + mask |= GCFont; #endif xgcv.foreground = mw->menu.foreground; xgcv.background = mw->core.background_pixel; - mw->menu.foreground_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground, - &xgcv); + mw->menu.foreground_gc = XtGetGC ((Widget)mw, mask, &xgcv); -#ifndef HAVE_X_I18N - xgcv.font = mw->menu.font->fid; -#endif xgcv.foreground = mw->menu.button_foreground; - xgcv.background = mw->core.background_pixel; - mw->menu.button_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground, - &xgcv); + mw->menu.button_gc = XtGetGC ((Widget)mw, mask, &xgcv); -#ifndef HAVE_X_I18N - xgcv.font = mw->menu.font->fid; -#endif xgcv.background = mw->core.background_pixel; #define BRIGHTNESS(color) (((color) & 0xff) + (((color) >> 8) & 0xff) + (((color) >> 16) & 0xff)) @@ -1545,49 +1549,26 @@ xgcv.foreground = mw->menu.foreground; xgcv.fill_style = FillStippled; xgcv.stipple = mw->menu.gray_pixmap; - mw->menu.disabled_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground + mw->menu.disabled_gc = XtGetGC ((Widget)mw, mask | GCFillStyle | GCStipple, &xgcv); } else { /* Many colors available, use disabled pixel. */ xgcv.foreground = mw->menu.disabled_foreground; - mw->menu.disabled_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground, &xgcv); + mw->menu.disabled_gc = XtGetGC ((Widget)mw, mask, &xgcv); } -#ifndef HAVE_X_I18N - xgcv.font = mw->menu.font->fid; -#endif xgcv.foreground = mw->menu.button_foreground; xgcv.background = mw->core.background_pixel; xgcv.fill_style = FillStippled; xgcv.stipple = mw->menu.gray_pixmap; - mw->menu.inactive_button_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground + mw->menu.inactive_button_gc = XtGetGC ((Widget)mw, mask | GCFillStyle | GCStipple, &xgcv); -#ifndef HAVE_X_I18N - xgcv.font = mw->menu.font->fid; -#endif xgcv.foreground = mw->core.background_pixel; xgcv.background = mw->menu.foreground; - mw->menu.background_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground, - &xgcv); + mw->menu.background_gc = XtGetGC ((Widget)mw, mask, &xgcv); } static void @@ -1793,14 +1774,14 @@ gray_bitmap_width, gray_bitmap_height, (unsigned long)1, (unsigned long)0, 1); -#ifndef HAVE_X_I18N /* I don't understand why this ends up 0 sometimes, but it does. This kludge works around it. Can anyone find a real fix? -- rms. */ if (mw->menu.font == 0) mw->menu.font = xlwmenu_default_font; -#else - mw->menu.font_extents = XExtentsOfFontSet (mw->menu.font); +#ifdef HAVE_X_I18N + if (mw->menu.fontSet) + mw->menu.font_extents = XExtentsOfFontSet (mw->menu.fontSet); #endif make_drawing_gcs (mw); @@ -1969,7 +1950,10 @@ if (newmw->core.background_pixel != oldmw->core.background_pixel || newmw->menu.foreground != oldmw->menu.foreground -#ifndef HAVE_X_I18N +#ifdef HAVE_X_I18N + || newmw->menu.fontSet != oldmw->menu.fontSet + || (newmw->menu.fontSet == NULL && newmw->menu.font != oldmw->menu.font) +#else || newmw->menu.font != oldmw->menu.font #endif ) @@ -1999,10 +1983,10 @@ } #ifdef HAVE_X_I18N - if (newmw->menu.font != oldmw->menu.font) + if (newmw->menu.fontSet != oldmw->menu.fontSet && newmw->menu.fontSet != NULL) { redisplay = True; - newmw->menu.font_extents = XExtentsOfFontSet (newmw->menu.font); + newmw->menu.font_extents = XExtentsOfFontSet (newmw->menu.fontSet); } #endif diff -r 45e5f0224d81 -r 360860a0006f lwlib/xlwmenuP.h --- a/lwlib/xlwmenuP.h Mon Mar 28 04:24:51 2005 +0000 +++ b/lwlib/xlwmenuP.h Mon Apr 04 16:43:15 2005 +0000 @@ -24,9 +24,6 @@ #include "xlwmenu.h" #include -/* FIXME: HAVE_X_I18N does not work yet. */ -#undef HAVE_X_I18N - /* Elements in the stack arrays. */ typedef struct _window_state { @@ -47,11 +44,10 @@ { /* slots set by the resources */ #ifdef HAVE_X_I18N - XFontSet font; + XFontSet fontSet; XFontSetExtents *font_extents; -#else +#endif XFontStruct* font; -#endif Pixel foreground; Pixel disabled_foreground; Pixel button_foreground; diff -r 45e5f0224d81 -r 360860a0006f man/ChangeLog --- a/man/ChangeLog Mon Mar 28 04:24:51 2005 +0000 +++ b/man/ChangeLog Mon Apr 04 16:43:15 2005 +0000 @@ -1,3 +1,138 @@ +2005-04-04 Jay Belanger + + * calc.texi: Change Calc version number. + (Customizable variables): Fix description of calc-language-alist. + (Copying): Put in version 2 of GPL. + +2005-04-03 Glenn Morris + + * calendar.texi (Diary): Mention shell utility `calendar'. + +2005-04-01 Jay Belanger + + * calc.texi (Troubleshooting Commands): Remove comment about + installation. + (Installation): Remove section. + (Customizable Variables): New section. + (Basic Embedded Mode, Customizing Embedded Mode, Graphics) + (Graphical Devices): Add references to Customizable Variables. + +2005-04-01 Lute Kamstra + + * maintaining.texi (Change Log): add-change-log-entry uses + add-log-mailing-address. + +2005-03-31 Luc Teirlinck + + * files.texi (Reverting): Move `auto-revert-check-vc-info' to + `VC Mode Line' and put in an xref to that node. + (VC Mode Line): Move `auto-revert-check-vc-info' here and clarify + its description. + +2005-03-31 Paul Eggert + + * calendar.texi (Calendar Systems): Say that the Persian calendar + implemented here is the arithmetical one championed by Birashk. + +2005-03-30 Glenn Morris + + * programs.texi (Fortran Motion): Fix previous change. + +2005-03-25 Katsumi Yamaoka + + * emacs-mime.texi (Display Customization): Markup fixes. + (rfc2047): Update. + +2005-03-23 Reiner Steib + + * gnus-faq.texi: Replaced with auto-generated version. + +2005-03-29 Richard M. Stallman + + * mule.texi (Single-Byte Character Support): Reinstall the C-x 8 info. + +2005-03-29 Chong Yidong + + * text.texi (Refill): Refer to Long Lines Mode. + (Longlines): New node. + (Auto Fill): Don't index "word wrap" here. + (Filling): Add Longlines to menu. + +2005-03-29 Richard M. Stallman + + * xresources.texi: Minor fixes. + + * misc.texi (Emacs Server): Fix Texinfo usage. + + * emacs.texi (Top): Don't use a real section heading for + "Detailed Node Listing". Fake it instead. + + * basic.texi (Position Info): Minor cleanup. + + * mule.texi (Input Methods): Minor cleanup. + +2005-03-29 Glenn Morris + + * programs.texi (ForIndent Vars): `fortran-if-indent' does other + constructs as well. + (Fortran Motion): Add fortran-end-of-block, + fortran-beginning-of-block. + +2005-03-29 Kenichi Handa + + * mule.texi (Input Methods): Refer to the command C-u C-x =. + + * basic.texi (Position Info): Update the description about the + command C-u C-x =. + +2005-03-28 Richard M. Stallman + + * emacs.texi (Top): Use @section for the detailed node listing. + + * calendar.texi: Minor fixes to previous change. + + * programs.texi (Fortran): Small fixes to previous changes. + + * emacs.texi (Top): Update list of subnodes of Dired. + Likewise for building.texi. + + * files.texi (File Conveniences): Delete Auto Image File mode. + +2005-03-28 Chong Yidong + + * building.texi (Flymake): New node. + + * custom.texi (Function Keys): Document kp- event types and + keypad-setup package. + + * dired.texi (Wdired): New node. + + * files.texi (File Conveniences): Reorder entries. + Explain how to turn on Auto-image-file mode. + Document Thumbs mode. + + * mule.texi (Specify Coding): Document recode-region and + recode-file-name. + + * programs.texi (Program Modes): Add Conf mode and DNS mode. + +2005-03-27 Luc Teirlinck + + * commands.texi (Keys): M-o is now a prefix key. + +2005-03-27 Glenn Morris + + * programs.texi: Reformat and update copyright years. + (Fortran): Update section. + +2005-03-26 Luc Teirlinck + + * files.texi: Several small changes in addition to: + (Visiting): Change xref for Dialog Boxes to ref. + (Version Headers): Replace references to obsolete var + `vc-header-alist' with `vc-BACKEND-header'. + (Customizing VC): Update value of `vc-handled-backends'. + 2005-03-26 Glenn Morris * emacs-xtra.texi (Advanced Calendar/Diary Usage): New section; @@ -49,7 +184,7 @@ * files.texi (Visiting): Fix cross-references introduced with the last change. - * xresources.texi (GTK resources): Fix last change. + * xresources.texi (GTK resources): Fix last change. 2005-03-26 Jay Belanger diff -r 45e5f0224d81 -r 360860a0006f man/basic.texi --- a/man/basic.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/basic.texi Mon Apr 04 16:43:15 2005 +0000 @@ -677,36 +677,57 @@ @cindex character set of character at point @cindex font of character at point @cindex text properties at point - @w{@kbd{C-u C-x =}} displays additional information about a -character, including the character set name and the codes that -identify the character within that character set; @acronym{ASCII} characters are -identified as belonging to the @code{ascii} character set. It also -shows the character's syntax, categories, and encodings both -internally in the buffer and externally if you save the file. It also -shows the character's text properties (@pxref{Text Properties,,, + @w{@kbd{C-u C-x =}} displays these additional information about a +character. + +@itemize @bullet +@item +The character set name, and the codes that identify the character +within that character set; @acronym{ASCII} characters are identified +as belonging to the @code{ascii} character set. + +@item +The character's syntax and categories. + +@item +The character's encodings, both internally in the buffer, and externally +if you were to save the file. + +@item +What to type to input the character in the current input method +(if it supports the character). + +@item +If you are running Emacs on a window system, the font name and glyph +code for the character. If you are running Emacs on a terminal, the +code(s) sent to the terminal. + +@item +The character's text properties (@pxref{Text Properties,,, elisp, the Emacs Lisp Reference Manual}), and any overlays containing it (@pxref{Overlays,,, elisp, the same manual}). +@end itemize Here's an example showing the Latin-1 character A with grave accent, -in a buffer whose coding system is @code{iso-2022-7bit}, whose +in a buffer whose coding system is @code{iso-latin-1}, whose terminal coding system is @code{iso-latin-1} (so the terminal actually displays the character as @samp{@`A}), and which has font-lock-mode (@pxref{Font Lock}) enabled: @smallexample - character: @`A (04300, 2240, 0x8c0) - charset: latin-iso8859-1 - (Right-Hand Part of Latin Alphabet 1@dots{} - code point: 64 - syntax: w which means: word - category: l:Latin - buffer code: 0x81 0xC0 - file code: ESC 2C 41 40 (encoded by coding system iso-2022-7bit) -terminal code: C0 + character: @`A (04300, 2240, 0x8c0, U+00C0) + charset: latin-iso8859-1 + (Right-Hand Part of Latin Alphabet 1@dots{} + code point: 64 + syntax: w which means: word + category: l:Latin + to input: type "`A" +buffer code: 0x81 0xC0 + file code: ESC 2C 41 40 (encoded by coding system iso-2022-7bit) + display: terminal code 0xC0 -Text properties - font-lock-face: font-lock-variable-name-face - fontified: t +There are text properties here: + fontified t @end smallexample @node Arguments diff -r 45e5f0224d81 -r 360860a0006f man/building.texi --- a/man/building.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/building.texi Mon Apr 04 16:43:15 2005 +0000 @@ -18,6 +18,7 @@ * Compilation Shell:: Customizing your shell properly for use in the compilation buffer. * Grep Searching:: Searching with grep. +* Flymake:: Finding syntax errors on the fly. * Debuggers:: Running symbolic debuggers for non-Lisp programs. * Executing Lisp:: Various modes for editing Lisp programs, with different facilities for running @@ -337,6 +338,31 @@ @code{grep}, so as to search every file in a directory tree. See also the @code{find-grep-dired} command, in @ref{Dired and Find}. +@node Flymake +@section Finding Syntax Errors On The Fly +@cindex checking syntax + + Flymake mode is a minor mode that performs on-the-fly syntax +checking for many programming and markup languages, including C, C++, +Perl, HTML, and @TeX{}/La@TeX{}. It is somewhat analogous to Flyspell +mode, which performs spell checking for ordinary human languages in a +similar fashion (@pxref{Spelling}). As you edit a file, Flymake mode +runs an appropriate syntax checking tool in the background, using a +temporary copy of the buffer. It then parses the error and warning +messages, and highlights the erroneous lines in the buffer. The +syntax checking tool used depends on the language; for example, for +C/C++ files this is usually the C compiler. Flymake can also use +build tools such as @code{make} for checking complicated projects. + + To activate Flymake mode, type @kbd{M-x flymake-mode}. You can move +to the errors spotted by Flymake mode with @kbd{M-x +flymake-goto-next-error} and @kbd{M-x flymake-goto-prev-error}. To +display any error messages associated with the current line, use +@kbd{M-x flymake-display-err-menu-for-current-line}. + + For more details about using Flymake, see @ref{Top, Flymake, +Flymake, flymake, The Flymake Manual}. + @node Debuggers @section Running Debuggers Under Emacs @cindex debuggers diff -r 45e5f0224d81 -r 360860a0006f man/calc.texi --- a/man/calc.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/calc.texi Mon Apr 04 16:43:15 2005 +0000 @@ -3,7 +3,7 @@ @c smallbook @setfilename ../info/calc @c [title] -@settitle GNU Emacs Calc 2.02g Manual +@settitle GNU Emacs Calc 2.1 Manual @setchapternewpage odd @comment %**end of header (This is for running Texinfo on a region.) @@ -108,7 +108,7 @@ @sp 6 @center @titlefont{Calc Manual} @sp 4 -@center GNU Emacs Calc Version 2.02g +@center GNU Emacs Calc Version 2.1 @c [volume] @sp 1 @center March 2005 @@ -165,7 +165,7 @@ * Embedded Mode:: Working with formulas embedded in a file. * Programming:: Calc as a programmable calculator. -* Installation:: Installing Calc as a part of GNU Emacs. +* Customizable Variables:: Customizable Variables. * Reporting Bugs:: How to report bugs and make suggestions. * Summary:: Summary of Calc commands and functions. @@ -180,11 +180,13 @@ @node Copying, Getting Started, Top, Top @unnumbered GNU GENERAL PUBLIC LICENSE -@center Version 1, February 1989 +@center Version 2, June 1991 + +@c This file is intended to be included in another file. @display -Copyright @copyright{} 1989 Free Software Foundation, Inc. -675 Mass Ave, Cambridge, MA 02139, USA +Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc. +59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -192,30 +194,33 @@ @unnumberedsec Preamble - The license agreements of most software companies try to keep users -at the mercy of those companies. By contrast, our General Public + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free -software---to make sure the software is free for all its users. The -General Public License applies to the Free Software Foundation's -software and to any other program whose authors commit to using it. -You can use it for your programs, too. +software---to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. When we speak of free software, we are referring to freedom, not -price. Specifically, the General Public License is designed to make -sure that you have the freedom to give away or sell copies of free -software, that you receive source code or can get it if you want it, -that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - For example, if you distribute copies of a such a program, whether + For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. +source code. And you must show them these terms so they know their +rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, @@ -228,128 +233,216 @@ that any problems introduced by others will not reflect on the original authors' reputations. + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + The precise terms and conditions for copying, distribution and modification follow. @iftex -@unnumberedsec TERMS AND CONDITIONS +@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @end iftex @ifinfo -@center TERMS AND CONDITIONS -@end ifinfo - -@enumerate -@item -This License Agreement applies to any program or other work which -contains a notice placed by the copyright holder saying it may be -distributed under the terms of this General Public License. The -``Program'', below, refers to any such program or work, and a ``work based -on the Program'' means either the Program or any work containing the -Program or a portion of it, either verbatim or with modifications. Each -licensee is addressed as ``you''. - -@item -You may copy and distribute verbatim copies of the Program's source -code as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this -General Public License and to the absence of any warranty; and give any -other recipients of the Program a copy of this General Public License -along with the Program. You may charge a fee for the physical act of -transferring a copy. - -@item -You may modify your copy or copies of the Program or any portion of -it, and copy and distribute such modifications under the terms of Paragraph -1 above, provided that you also do the following: - -@itemize @bullet -@item -cause the modified files to carry prominent notices stating that -you changed the files and the date of any change; and - -@item -cause the whole of any work that you distribute or publish, that -in whole or in part contains the Program or any part thereof, either -with or without modifications, to be licensed at no charge to all -third parties under the terms of this General Public License (except -that you may choose to grant warranty protection to some or all -third parties, at your option). - -@item -If the modified program normally reads commands interactively when -run, you must cause it, when started running for such interactive use -in the simplest and most usual way, to print or display an -announcement including an appropriate copyright notice and a notice -that there is no warranty (or else, saying that you provide a -warranty) and that users may redistribute the program under these -conditions, and telling the user how to view a copy of this General -Public License. - -@item -You may charge a fee for the physical act of transferring a -copy, and you may at your option offer warranty protection in -exchange for a fee. -@end itemize - -Mere aggregation of another independent work with the Program (or its -derivative) on a volume of a storage or distribution medium does not bring -the other work under the scope of these terms. - -@item -You may copy and distribute the Program (or a portion or derivative of -it, under Paragraph 2) in object code or executable form under the terms of -Paragraphs 1 and 2 above provided that you also do one of the following: - -@itemize @bullet -@item -accompany it with the complete corresponding machine-readable -source code, which must be distributed under the terms of -Paragraphs 1 and 2 above; or, - -@item -accompany it with a written offer, valid for at least three -years, to give any third party free (except for a nominal charge -for the cost of distribution) a complete machine-readable copy of the -corresponding source code, to be distributed under the terms of -Paragraphs 1 and 2 above; or, - -@item -accompany it with the information you received as to where the -corresponding source code may be obtained. (This alternative is +@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +@end ifinfo + +@enumerate 0 +@item +This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The ``Program'', below, +refers to any such program or work, and a ``work based on the Program'' +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term ``modification''.) Each licensee is addressed as ``you''. + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + +@item +You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + +@item +You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + +@enumerate a +@item +You must cause the modified files to carry prominent notices +stating that you changed the files and the date of any change. + +@item +You must cause any work that you distribute or publish, that in +whole or in part contains or is derived from the Program or any +part thereof, to be licensed as a whole at no charge to all third +parties under the terms of this License. + +@item +If the modified program normally reads commands interactively +when run, you must cause it, when started running for such +interactive use in the most ordinary way, to print or display an +announcement including an appropriate copyright notice and a +notice that there is no warranty (or else, saying that you provide +a warranty) and that users may redistribute the program under +these conditions, and telling the user how to view a copy of this +License. (Exception: if the Program itself is interactive but +does not normally print such an announcement, your work based on +the Program is not required to print an announcement.) +@end enumerate + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + +@item +You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + +@enumerate a +@item +Accompany it with the complete corresponding machine-readable +source code, which must be distributed under the terms of Sections +1 and 2 above on a medium customarily used for software interchange; or, + +@item +Accompany it with a written offer, valid for at least three +years, to give any third party, for a charge no more than your +cost of physically performing source distribution, a complete +machine-readable copy of the corresponding source code, to be +distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange; or, + +@item +Accompany it with the information you received as to the offer +to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you -received the program in object code or executable form alone.) -@end itemize - -Source code for a work means the preferred form of the work for making -modifications to it. For an executable file, complete source code means -all the source code for all modules it contains; but, as a special -exception, it need not include source code for modules which are standard -libraries that accompany the operating system on which the executable -file runs, or for standard header files or definitions files that -accompany that operating system. - -@item -You may not copy, modify, sublicense, distribute or transfer the -Program except as expressly provided under this General Public License. -Any attempt otherwise to copy, modify, sublicense, distribute or transfer -the Program is void, and will automatically terminate your rights to use -the Program under this License. However, parties who have received -copies, or rights to use copies, from you under this General Public -License will not have their licenses terminated so long as such parties -remain in full compliance. - -@item -By copying, distributing or modifying the Program (or any work based -on the Program) you indicate your acceptance of this license to do so, -and all its terms and conditions. +received the program in object code or executable form with such +an offer, in accord with Subsection b above.) +@end enumerate + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + +@item +You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + +@item +You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. @item Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the original -licensor to copy, distribute or modify the Program subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + +@item +If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + +@item +If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. @item The Free Software Foundation may publish revised and/or new versions @@ -358,11 +451,11 @@ address new problems or concerns. Each version is given a distinguishing version number. If the Program -specifies a version number of the license which applies to it and ``any +specifies a version number of this License which applies to it and ``any later version'', you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of -the license, you may choose any version ever published by the Free Software +this License, you may choose any version ever published by the Free Software Foundation. @item @@ -393,17 +486,91 @@ REPAIR OR CORRECTION. @item -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL -ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT -LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES -SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE -WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN -ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. @end enumerate +@iftex +@heading END OF TERMS AND CONDITIONS +@end iftex +@ifinfo +@center END OF TERMS AND CONDITIONS +@end ifinfo + +@page +@unnumberedsec Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the ``copyright'' line and a pointer to where the full notice is found. + +@smallexample +@var{one line to give the program's name and a brief idea of what it does.} +Copyright (C) @var{yyyy} @var{name of author} + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +@end smallexample + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + +@smallexample +Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author} +Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. +This is free software, and you are welcome to redistribute it +under certain conditions; type `show c' for details. +@end smallexample + +The hypothetical commands @samp{show w} and @samp{show c} should show +the appropriate parts of the General Public License. Of course, the +commands you use may be called something other than @samp{show w} and +@samp{show c}; they could even be mouse-clicks or menu items---whatever +suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a ``copyright disclaimer'' for the program, if +necessary. Here is a sample; alter the names: + +@example +Yoyodyne, Inc., hereby disclaims all copyright interest in the program +`Gnomovision' (which makes passes at compilers) written by James Hacker. + +@var{signature of Ty Coon}, 1 April 1989 +Ty Coon, President of Vice +@end example + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + @node Getting Started, Tutorial, Copying, Top @chapter Getting Started @noindent @@ -10613,11 +10780,6 @@ loaded right away. This will cause Emacs to take up a lot more memory than it would otherwise, but it's guaranteed to fix the problem. -If you seem to run into this problem no matter what you do, or if -even the @kbd{M-# L} command crashes, Calc may have been improperly -installed. @xref{Installation}, for details of the installation -process. - @node Recursion Depth, Caches, Autoloading Problems, Troubleshooting Commands @subsection Recursion Depth @@ -12306,7 +12468,7 @@ use in the future for commands like @kbd{m m}. The default settings file name is @file{~/.calc.el}. You can see the current file name by giving a blank response to the @kbd{m F} prompt. See also the -discussion of the @code{calc-settings-file} variable; @pxref{Installation}. +discussion of the @code{calc-settings-file} variable; @pxref{Customizable Variables}. If the file name you give is your user init file (typically @file{~/.emacs}), @kbd{m F} will not automatically load the new file. This @@ -29109,7 +29271,7 @@ @vindex calc-gnuplot-print-command @vindex calc-gnuplot-print-device @vindex calc-gnuplot-print-output -If you are installing Calc you may wish to configure the default and +You may wish to configure the default and printer devices and output files for the whole system. The relevant Lisp variables are @code{calc-gnuplot-default-device} and @code{-output}, and @code{calc-gnuplot-print-device} and @code{-output}. The output @@ -29122,7 +29284,8 @@ @code{nil} if no command is necessary, or strings which can include @samp{%s} to signify the name of the file to be displayed or printed. Or, these variables may contain Lisp expressions which are evaluated -to display or print the output. +to display or print the output. These variables are customizable +(@pxref{Customizable Variables}). @kindex g x @pindex calc-graph-display @@ -29910,7 +30073,8 @@ @code{plain-tex-mode} and @code{context-mode}, C language for @code{c-mode} and @code{c++-mode}, FORTRAN language for @code{fortran-mode} and @code{f90-mode}, Pascal for @code{pascal-mode}, -and eqn for @code{nroff-mode}. These can be overridden with Calc's mode +and eqn for @code{nroff-mode} (@pxref{Customizable Variables}). +These can be overridden with Calc's mode changing commands (@pxref{Mode Settings in Embedded Mode}). If no suitable language is available, Calc will continue with its current language. @@ -30612,10 +30776,10 @@ @noindent You can modify Embedded mode's behavior by setting various Lisp -variables described here. Use @kbd{M-x set-variable} or -@kbd{M-x edit-options} to adjust a variable on the fly, or -put a suitable @code{setq} statement in your Calc init file (or -@file{~/.emacs}) to set a variable permanently. (Another possibility would +variables described here. These variables are customizable +(@pxref{Customizable Variables}), or you can use @kbd{M-x set-variable} +or @kbd{M-x edit-options} to adjust a variable on the fly. +(Another possibility would be to use a file-local variable annotation at the end of the file; @pxref{File Variables, , Local Variables in Files, emacs, the Emacs manual}.) @@ -30760,7 +30924,7 @@ good idea still to end with a newline so that mode annotations will appear on lines by themselves. -@node Programming, Installation, Embedded Mode, Top +@node Programming, Customizable Variables, Embedded Mode, Top @chapter Programming @noindent @@ -34610,70 +34774,204 @@ list and also call @code{make-local-variable} itself. @end defvar -@node Installation, Reporting Bugs, Programming, Top -@appendix Installation - -@noindent -As of Calc 2.02g, Calc is integrated with GNU Emacs, and thus requires -no separate installation of its Lisp files and this manual. - -@appendixsec The GNUPLOT Program - -@noindent -Calc's graphing commands use the GNUPLOT program. If you have GNUPLOT -but you must type some command other than @file{gnuplot} to get it, -you should add a command to set the Lisp variable @code{calc-gnuplot-name} -to the appropriate file name. You may also need to change the variables -@code{calc-gnuplot-plot-command} and @code{calc-gnuplot-print-command} in -order to get correct displays and hardcopies, respectively, of your -plots. - -@ifinfo -@example - -@end example -@end ifinfo - -@appendixsec Settings File - -@noindent +@node Customizable Variables, Reporting Bugs, Programming, Top +@appendix Customizable Variables + +GNU Calc is controlled by many variables, most of which can be reset +from within Calc. Some variables are less involved with actual +calculation, and can be set outside of Calc using Emacs's +customization facilities. These variables are listed below. +Typing @kbd{M-x customize-variable RET @var{variable-name} RET} +will bring up a buffer in which the variable's value can be redefined. +Typing @kbd{M-x customize-group RET calc RET} will bring up a buffer which +contains all of Calc's customizable variables. (These variables can +also be reset by putting the appropriate lines in your .emacs file; +@xref{Init File, ,Init File, emacs, The GNU Emacs Manual}.) + +Some of the customizable variables are regular expressions. A regular +expression is basically a pattern that Calc can search for. +See @ref{Regexp Search,, Regular Expression Search, emacs, The GNU Emacs Manual} +to see how regular expressions work. + +@table @code + +@item calc-settings-file + @vindex calc-settings-file -Another variable you might want to set is @code{calc-settings-file}, -which holds the file name in which commands like @kbd{m m} and @kbd{Z P} -store ``permanent'' definitions. The default value for this variable -is @code{"~/.calc.el"}. If @code{calc-settings-file} is not your user -init file (typically @file{~/.emacs}) and if the variable -@code{calc-loaded-settings-file} is @code{nil}, then Calc will -automatically load your settings file (if it exists) the first time -Calc is invoked. - -@ifinfo -@example - -@end example -@end ifinfo -@appendixsec Testing the Installation - -@noindent -To test your installation of Calc, start a new Emacs and type @kbd{M-# c} -to make sure the autoloads and key bindings work. Type @kbd{M-# i} -to make sure Calc can find its Info documentation. Press @kbd{q} to -exit the Info system and @kbd{M-# c} to re-enter the Calculator. -Type @kbd{20 S} to compute the sine of 20 degrees; this will test the -autoloading of the extensions modules. The result should be -0.342020143326. Finally, press @kbd{M-# c} again to make sure the -Calculator can exit. - -You may also wish to test the GNUPLOT interface; to plot a sine wave, -type @kbd{' [0 ..@: 360], sin(x) @key{RET} g f}. Type @kbd{g q} when you -are done viewing the plot. - -Calc is now ready to use. If you wish to go through the Calc Tutorial, -press @kbd{M-# t} to begin. -@example - -@end example -@node Reporting Bugs, Summary, Installation, Top +The variable @code{calc-settings-file} holds the file name in +which commands like @kbd{m m} and @kbd{Z P} store ``permanent'' +definitions. +If @code{calc-settings-file} is not your user init file (typically +@file{~/.emacs}) and if the variable @code{calc-loaded-settings-file} is +@code{nil}, then Calc will automatically load your settings file (if it +exists) the first time Calc is invoked. + +The default value for this variable is @code{"~/.calc.el"}. + +@item calc-gnuplot-name + +See @ref{Graphics}.@* +The variable @code{calc-gnuplot-name} should be the name of the +GNUPLOT program (a string). If you have GNUPLOT installed on your +system but Calc is unable to find it, you may need to set this +variable. (@pxref{Customizable Variables}) +You may also need to set some Lisp variables to show Calc how to run +GNUPLOT on your system, see @ref{Devices, ,Graphical Devices} . The default value +of @code{calc-gnuplot-name} is @code{"gnuplot"}. + +@item calc-gnuplot-plot-command +@itemx calc-gnuplot-print-command + +See @ref{Devices, ,Graphical Devices}.@* +The variables @code{calc-gnuplot-plot-command} and +@code{calc-gnuplot-print-command} represent system commands to +display and print the output of GNUPLOT, respectively. These may be +@code{nil} if no command is necessary, or strings which can include +@samp{%s} to signify the name of the file to be displayed or printed. +Or, these variables may contain Lisp expressions which are evaluated +to display or print the output. + +The default value of @code{calc-gnuplot-plot-command} is @code{nil}, +and the default value of @code{calc-gnuplot-print-command} is +@code{"lp %s"}. + +@item calc-language-alist + +See @ref{Basic Embedded Mode}.@* +The variable @code{calc-language-alist} controls the languages that +Calc will associate with major modes. When Calc embedded mode is +enabled, it will try to use the current major mode to +determine what language should be used. (This can be overridden using +Calc's mode changing commands, @xref{Mode Settings in Embedded Mode}.) +The variable @code{calc-language-alist} consists of a list of pairs of +the form @code{(@var{MAJOR-MODE} . @var{LANGUAGE})}; for example, +@code{(latex-mode . latex)} is one such pair. If Calc embedded is +activated in a buffer whose major mode is @var{MAJOR-MODE}, it will set itself +to use the language @var{LANGUAGE}. + +The default value of @code{calc-language-alist} is +@example + ((latex-mode . latex) + (tex-mode . tex) + (plain-tex-mode . tex) + (context-mode . tex) + (nroff-mode . eqn) + (pascal-mode . pascal) + (c-mode . c) + (c++-mode . c) + (fortran-mode . fortran) + (f90-mode . fortran)) +@end example + +@item calc-embedded-announce-formula + +See @ref{Customizing Embedded Mode}.@* +The variable @code{calc-embedded-announce-formula} helps determine +what formulas @kbd{M-# a} will activate in a buffer. It is a +regular expression, and when activating embedded formulas with +@kbd{M-# a}, it will tell Calc that what follows is a formula to be +activated. (Calc also uses other patterns to find formulas, such as +@samp{=>} and @samp{:=}.) + +The default pattern is @code{"%Embed\n\\(% .*\n\\)*"}, which checks +for @samp{%Embed} followed by any number of lines beginning with +@samp{%} and a space. + +@item calc-embedded-open-formula +@itemx calc-embedded-close-formula + +See @ref{Customizing Embedded Mode}.@* +The variables @code{calc-embedded-open-formula} and +@code{calc-embedded-open-formula} control the region that Calc will +activate as a formula when Embedded mode is entered with @kbd{M-# e}. +They are regular expressions; +Calc normally scans backward and forward in the buffer for the +nearest text matching these regular expressions to be the ``formula +delimiters''. + +The simplest delimiters are blank lines. Other delimiters that +Embedded mode understands by default are: +@enumerate +@item +The @TeX{} and La@TeX{} math delimiters @samp{$ $}, @samp{$$ $$}, +@samp{\[ \]}, and @samp{\( \)}; +@item +Lines beginning with @samp{\begin} and @samp{\end} (except matrix delimiters); +@item +Lines beginning with @samp{@@} (Texinfo delimiters). +@item +Lines beginning with @samp{.EQ} and @samp{.EN} (@dfn{eqn} delimiters); +@item +Lines containing a single @samp{%} or @samp{.\"} symbol and nothing else. +@end enumerate + +@item calc-embedded-open-word +@itemx calc-embedded-close-word + +See @ref{Customizing Embedded Mode}.@* +The variables @code{calc-embedded-open-word} and +@code{calc-embedded-close-word} control the region that Calc will +activate when Embedded mode is entered with @kbd{M-# w}. They are +regular expressions. + +The default values of @code{calc-embedded-open-word} and +@code{calc-embedded-close-word} are @code{"^\\|[^-+0-9.eE]"} and +@code{"$\\|[^-+0-9.eE]"} respectively. + +@item calc-embedded-open-plain +@itemx calc-embedded-close-plain + +See @ref{Customizing Embedded Mode}.@* +The variables @code{calc-embedded-open-plain} and +@code{calc-embedded-open-plain} are used to delimit ``plain'' +formulas. Note that these are actual strings, not regular +expressions, because Calc must be able to write these string into a +buffer as well as to recognize them. + +The default string for @code{calc-embedded-open-plain} is +@code{"%%% "}, note the trailing space. The default string for +@code{calc-embedded-close-plain} is @code{" %%%\n"}, without +the trailing newline here, the first line of a Big mode formula +that followed might be shifted over with respect to the other lines. + +@item calc-embedded-open-new-formula +@itemx calc-embedded-close-new-formula + +See @ref{Customizing Embedded Mode}.@* +The variables @code{calc-embedded-open-new-formula} and +@code{calc-embedded-close-new-formula} are strings which are +inserted before and after a new formula when you type @kbd{M-# f}. + +The default value of @code{calc-embedded-open-new-formula} is +@code{"\n\n"}. If this string begins with a newline character and the +@kbd{M-# f} is typed at the beginning of a line, @kbd{M-# f} will skip +this first newline to avoid introducing unnecessary blank lines in the +file. The default value of @code{calc-embedded-close-new-formula} is +also @code{"\n\n"}. The final newline is omitted by @w{@kbd{M-# f}} +if typed at the end of a line. (It follows that if @kbd{M-# f} is +typed on a blank line, both a leading opening newline and a trailing +closing newline are omitted.) + +@item calc-embedded-open-mode +@itemx calc-embedded-close-mode + +See @ref{Customizing Embedded Mode}.@* +The variables @code{calc-embedded-open-mode} and +@code{calc-embedded-close-mode} are strings which Calc will place before +and after any mode annotations that it inserts. Calc never scans for +these strings; Calc always looks for the annotation itself, so it is not +necessary to add them to user-written annotations. + +The default value of @code{calc-embedded-open-mode} is @code{"% "} +and the default value of @code{calc-embedded-close-mode} is +@code{"\n"}. +If you change the value of @code{calc-embedded-close-mode}, it is a good +idea still to end with a newline so that mode annotations will appear on +lines by themselves. + +@end table + +@node Reporting Bugs, Summary, Customizable Variables, Top @appendix Reporting Bugs @noindent diff -r 45e5f0224d81 -r 360860a0006f man/calendar.texi --- a/man/calendar.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/calendar.texi Mon Apr 04 16:43:15 2005 +0000 @@ -433,7 +433,7 @@ from the menu that appears. Either way, this displays the holidays for that date, in the echo area if they fit there, otherwise in a separate window. If the variable @code{view-calendar-holidays-initially} is -non-@code{nil}, holidays are displayed when the calendar is created. +non-@code{nil}, creating the calendar displays holidays in this way. @kindex x @r{(Calendar mode)} @findex mark-calendar-holidays @@ -449,9 +449,8 @@ subsequently become visible by scrolling. To turn marking off and erase the current marks, type @kbd{u}, which also erases any diary marks (@pxref{Diary}). If the variable @code{mark-holidays-in-calendar} is -non-@code{nil}, holidays are marked in the calendar when it is created -(or recomputed). - +non-@code{nil}, creating or updating the calendar marks holidays +automatically. @kindex a @r{(Calendar mode)} @findex list-calendar-holidays @@ -692,6 +691,12 @@ days, the next five have 30 days, and the last has 29 in ordinary years and 30 in leap years. Leap years occur in a complicated pattern every four or five years. +The calendar implemented here is the arithmetical Persian calendar +championed by Birashk, based on a 2,820-year cycle. It differs from +the astronomical Persian calendar, which is based on astronomical +events. As of this writing the first future discrepancy is projected +to occur on March 20, 2025. It is currently not clear what the +official calendar of Iran will be that far into the future. @cindex Chinese calendar The Chinese calendar is a complicated system of lunar months arranged @@ -937,7 +942,8 @@ The name of the diary file is specified by the variable @code{diary-file}; @file{~/diary} is the default. A sample diary file -is: +is (note that the file format is essentially the same as that used by +the external shell utility @samp{calendar}): @example 12/22/1988 Twentieth wedding anniversary!! @@ -1005,13 +1011,14 @@ that fall on that date. If you specify a numeric argument with @kbd{d}, it shows all the diary entries for that many successive days. Thus, @kbd{2 d} displays all the entries for the selected date and for the -following day. If the variable @code{view-diary-entries-initially} is -non-@code{nil}, the diary entries for the current date are displayed -when the calendar is created (provided the current date is visible). +following day. Another way to display the diary entries for a date is to click @kbd{Mouse-2} on the date, and then choose @kbd{Diary entries} from -the menu that appears. +the menu that appears. If the variable +@code{view-diary-entries-initially} is non-@code{nil}, creating the +calendar also lists diary entries for the current date (provided the +current date is visible). @kindex m @r{(Calendar mode)} @findex mark-diary-entries @@ -1023,10 +1030,10 @@ diary-entry-marker, emacs-xtra}. The command applies both to the currently visible months and to other months that subsequently become visible by scrolling. To turn marking off and erase the current marks, -type @kbd{u}, which also turns off holiday marks (@pxref{Holidays}). If -the variable @code{mark-diary-entries-in-calendar} is non-@code{nil}, -diary dates are marked in the calendar when it is created (or -recomputed). +type @kbd{u}, which also turns off holiday marks (@pxref{Holidays}). +If the variable @code{mark-diary-entries-in-calendar} is +non-@code{nil}, creating or updating the calendar marks diary dates +automatically. @kindex s @r{(Calendar mode)} @findex show-all-diary-entries @@ -1034,14 +1041,12 @@ the @kbd{s} command. Display of selected diary entries uses the selective display feature -to hide entries that don't apply. - - The diary buffer as you see it is an illusion, so simply printing the -buffer does not print what you see on your screen. There is a special -command to print hard copy of the diary buffer @emph{as it appears}; -this command is @kbd{M-x print-diary-entries}. It sends the data -directly to the printer. You can customize it like @code{lpr-region} -(@pxref{Hardcopy}). +to hide entries that don't apply. The diary buffer as you see it is +an illusion, so simply printing the buffer does not print what you see +on your screen. There is a special command to print hard copy of the +diary buffer @emph{as it appears}; this command is @kbd{M-x +print-diary-entries}. It sends the data directly to the printer. You +can customize it like @code{lpr-region} (@pxref{Hardcopy}). @findex diary The command @kbd{M-x diary} displays the diary entries for the current diff -r 45e5f0224d81 -r 360860a0006f man/cmdargs.texi --- a/man/cmdargs.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/cmdargs.texi Mon Apr 04 16:43:15 2005 +0000 @@ -1196,8 +1196,9 @@ @opindex -hb @itemx --horizontal-scroll-bars @opindex --horizontal-scroll-bars -@cindex horizontal scroll bars, command-line argument -Enable horizontal scroll bars. +@c @cindex horizontal scroll bars, command-line argument +Enable horizontal scroll bars. Since horizontal scroll bars +are not yet implemented, this actually does nothing. @item -vb @opindex -vb diff -r 45e5f0224d81 -r 360860a0006f man/commands.texi --- a/man/commands.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/commands.texi Mon Apr 04 16:43:15 2005 +0000 @@ -169,8 +169,8 @@ All told, the prefix keys in Emacs are @kbd{C-c}, @kbd{C-h}, @kbd{C-x}, @kbd{C-x @key{RET}}, @kbd{C-x @@}, @kbd{C-x a}, @kbd{C-x -n}, @w{@kbd{C-x r}}, @kbd{C-x v}, @kbd{C-x 4}, @kbd{C-x 5}, @kbd{C-x -6}, @key{ESC}, and @kbd{M-g}. (@key{F1} and @key{F2} are aliases for +n}, @w{@kbd{C-x r}}, @kbd{C-x v}, @kbd{C-x 4}, @kbd{C-x 5}, @kbd{C-x 6}, +@key{ESC}, @kbd{M-o} and @kbd{M-g}. (@key{F1} and @key{F2} are aliases for @kbd{C-h} and @kbd{C-x 6}.) But this list is not cast in concrete; it is just a matter of Emacs's standard key bindings. If you customize Emacs, you can make new prefix keys, or eliminate these. @xref{Key diff -r 45e5f0224d81 -r 360860a0006f man/custom.texi --- a/man/custom.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/custom.texi Mon Apr 04 16:43:15 2005 +0000 @@ -1636,6 +1636,27 @@ (global-set-key [H-M-right] 'forward-word) @end example +@cindex keypad + Many keyboards have a ``numeric keypad'' on the right hand side. +The numeric keys in the keypad double up as cursor motion keys, +toggled by a key labelled @samp{Num Lock}. By default, Emacs +translates these keys to the corresponding keys in the main keyboard +(@pxref{Keyboard Translations}). For example, when @samp{Num Lock} is +on, the key labelled @samp{8} on the numeric keypad produces +@code{kp-8}, which is translated to @kbd{8}; when @samp{Num Lock} is +off, the same key produces @code{kp-up}, which is translated to +@key{UP}. If you rebind a key such as @kbd{8} or @key{UP}, it affects +the equivalent keypad key too. However, if you rebind a @samp{kp-} +key directly, that won't affect its non-keypad equivalent. + + Emacs provides a convenient method for binding the numeric keypad +keys, using the variables @code{keypad-setup}, +@code{keypad-numlock-setup}, @code{keypad-shifted-setup}, and +@code{keypad-numlock-shifted-setup}. These can be found in the +@samp{keyboard} customization group (@pxref{Easy Customization}). You +can rebind the keys to perform other tasks, such as issuing numeric +prefix arguments. + @node Named ASCII Chars @subsection Named @acronym{ASCII} Control Characters diff -r 45e5f0224d81 -r 360860a0006f man/dired.texi --- a/man/dired.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/dired.texi Mon Apr 04 16:43:15 2005 +0000 @@ -39,6 +39,7 @@ * Hiding Subdirectories:: Making subdirectories visible or invisible. * Updating: Dired Updating. Discarding lines for files of no interest. * Find: Dired and Find. Using `find' to choose the files for Dired. +* Wdired:: Operating on files by editing the Dired buffer. * Misc: Misc Dired Features. Various other features. @end menu @@ -1103,6 +1104,39 @@ Reverting the buffer with @kbd{g} deletes all inserted subdirectories, and erases all flags and marks. +@node Wdired +@section Editing the Dired Buffer + +@cindex wdired mode +@findex wdired-change-to-wdired-mode + Wdired is a special mode that allows you to perform file operations +by editing the Dired buffer directly (the ``W'' in ``Wdired'' stands +for ``writable''.) To enter Wdired mode, type @kbd{M-x +wdired-change-to-wdired-mode} while in a Dired buffer. Alternatively, +use @samp{Edit File Names} in the @samp{Immediate} menu bar menu. + +@findex wdired-finish-edit + While in Wdired mode, you can rename files by editing the file names +displayed in the Dired buffer. All the ordinary Emacs editing +commands, including rectangle operations and @code{query-replace}, are +available for this. Once you are done editing, type @kbd{C-c C-c} +(@code{wdired-finish-edit}). This applies your changes and switches +back to ordinary Dired mode. + + Apart from simply renaming files, you can move a file to another +directory by typing in the new file name (either absolute or +relative). To mark a file for deletion, delete the entire filename. +To change the target of a symbolic link, just edit the target name +displayed next to the link name. + + The rest of the text in the buffer, such as the file sizes and +modification dates, is marked read-only, so you can't edit it. +However, if you set @code{wdired-allow-to-change-permissions} to +@code{t}, the file permission bits can also be edited. For example, +you can change @samp{-rw-r--r--} to @samp{-rw-rw-rw-} to make a file +world-writable. These changes also take effect when you type @kbd{C-c +C-c}. + @node Misc Dired Features @section Other Dired Features diff -r 45e5f0224d81 -r 360860a0006f man/emacs-mime.texi --- a/man/emacs-mime.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/emacs-mime.texi Mon Apr 04 16:43:15 2005 +0000 @@ -387,15 +387,15 @@ @item mm-enable-external @vindex mm-enable-external -Indicate whether external MIME handlers should be used. +Indicate whether external @acronym{MIME} handlers should be used. -If @code{t}, all defined external MIME handlers are used. If +If @code{t}, all defined external @acronym{MIME} handlers are used. If @code{nil}, files are saved to disk (@code{mailcap-save-binary-file}). If it is the symbol @code{ask}, you are prompted before the external @acronym{MIME} handler is invoked. When you launch an attachment through mailcap (@pxref{mailcap}) an -attempt is made to use a safe viewer with the safest options--this isn't +attempt is made to use a safe viewer with the safest options---this isn't the case if you save it to disk and launch it in a different way (command line or double-clicking). Anyhow, if you want to be sure not to launch any external programs, set this variable to @code{nil} or @@ -1327,8 +1327,8 @@ Quoted-Printable-like encoding) and @code{B} (base64). This alist specifies which charset should use which encoding. -@item rfc2047-encoding-function-alist -@vindex rfc2047-encoding-function-alist +@item rfc2047-encode-function-alist +@vindex rfc2047-encode-function-alist This is an alist of encoding / function pairs. The encodings are @code{Q}, @code{B} and @code{nil}. @@ -1336,6 +1336,11 @@ @vindex rfc2047-encoded-word-regexp When decoding words, this library looks for matches to this regexp. +@item rfc2047-encode-encoded-words +@vindex rfc2047-encode-encoded-words +The boolean variable specifies whether encoded words +(e.g. @samp{=?hello?=}) should be encoded again. + @end table Those were the variables, and these are this functions: @@ -1366,6 +1371,24 @@ @findex rfc2047-decode-string Decode a string and return the results. +@item rfc2047-encode-parameter +@findex rfc2047-encode-parameter +Encode a parameter in the RFC2047-like style. This is a replacement for +the @code{rfc2231-encode-string} function. @xref{rfc2231}. + +When attaching files as @acronym{MIME} parts, we should use the RFC2231 +encoding to specify the file names containing non-@acronym{ASCII} +characters. However, many mail softwares don't support it in practice +and recipients won't be able to extract files with correct names. +Instead, the RFC2047-like encoding is acceptable generally. This +function provides the very RFC2047-like encoding, resigning to such a +regrettable trend. To use it, put the following line in your +@file{~/.gnus.el} file: + +@lisp +(defalias 'mail-header-encode-parameter 'rfc2047-encode-parameter) +@end lisp + @end table diff -r 45e5f0224d81 -r 360860a0006f man/emacs.texi --- a/man/emacs.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/emacs.texi Mon Apr 04 16:43:15 2005 +0000 @@ -224,11 +224,13 @@ * Contributing:: How to contribute improvements to Emacs. * Service:: How to get help for your own Emacs needs. + +Detailed Node Listing +--------------------- + Here are some other nodes which are really inferiors of the ones already listed, mentioned here so you can get to them in one step: - --- The Detailed Node Listing --- - The Organization of the Screen * Point:: The place in the text where editing commands operate. @@ -563,6 +565,8 @@ * Compilation Mode:: The mode for visiting compiler errors. * Compilation Shell:: Customizing your shell properly for use in the compilation buffer. +* Grep Searching:: Searching with grep. +* Flymake:: Finding syntax errors on the fly. * Debuggers:: Running symbolic debuggers for non-Lisp programs. * Executing Lisp:: Various modes for editing Lisp programs, with different facilities for running @@ -676,6 +680,9 @@ * Hiding Subdirectories:: Making subdirectories visible or invisible. * Dired Updating:: Discarding lines for files of no interest. * Dired and Find:: Using `find' to choose the files for Dired. +* Dired and Find:: Using `find' to choose the files for Dired. +* Wdired:: Operating on files by editing the Dired buffer. +* Misc Dired Features:: Various other features. The Calendar and the Diary diff -r 45e5f0224d81 -r 360860a0006f man/files.texi --- a/man/files.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/files.texi Mon Apr 04 16:43:15 2005 +0000 @@ -238,7 +238,7 @@ of prompting for the file name in the minibuffer. On Unix and GNU/Linux platforms, Emacs does that when built with GTK, LessTif, and Motif toolkits; on MS-Windows, the GUI version does that by default. -For information on how to customize this, see @xref{Dialog Boxes}. +For information on how to customize this, see @ref{Dialog Boxes}. Secondly, Emacs supports the ``drag and drop'' protocol on the X window system. Dropping a file into an ordinary Emacs window visits @@ -940,14 +940,8 @@ for a changed file. Since checking a remote file is too slow, these modes do not check or revert remote files. -@vindex auto-revert-check-vc-info - Whenever Auto Revert mode reverts the buffer, it updates the version -control information, such as the version control number displayed in -the mode line. However, this information may not be properly updated -if the version control state changes outside of Emacs---for example, -if a new version is checked in from outside the current Emacs session. -If you set @code{auto-revert-check-vc-info} to @code{t}, Auto Revert -mode will update the version control status information periodically. +@xref{VC Mode Line}, for Auto Revert peculiarities in buffers that +visit files under version control. @node Auto Save @section Auto-Saving: Protection Against Disasters @@ -1272,6 +1266,10 @@ SCCS only if for some reason you cannot use RCS, or one of the higher-level systems such as CVS or GNU Arch. +In the following, we discuss mainly RCS, SCCS and CVS. Nearly +everything said about CVS applies to Gnu Arch, Subversion and Meta-CVS +as well. + @node VC Concepts @subsubsection Concepts of Version Control @@ -1371,6 +1369,18 @@ that it is modified. If the file is locked by some other user (for instance, @samp{jim}), that is displayed as @samp{RCS:jim:1.3}. +@vindex auto-revert-check-vc-info + When Auto Revert mode (@pxref{Reverting}) reverts a buffer that is +under version control, it updates the version control information in +the mode line. However, Auto Revert mode may not properly update this +information if the version control status changes without changes to +the work file, from outside the current Emacs session. If you set +@code{auto-revert-check-vc-info} to @code{t}, Auto Revert mode updates +the version control status information every +@code{auto-revert-interval} seconds, even if the work file itself is +unchanged. The resulting CPU usage depends on the version control +system, but is usually not excessive. + @node Basic VC Editing @subsection Basic Editing under Version Control @@ -1472,9 +1482,9 @@ since you began editing it, and when this happens, his changes will be effectively removed when you check in your version (though they will remain in the master file, so they will not be entirely lost). You must -therefore verify the current version is unchanged, before you check in your -changes. We hope to eliminate this risk and provide automatic merging -with RCS in a future Emacs version. +therefore verify that the current version is unchanged, before you +check in your changes. We hope to eliminate this risk and provide +automatic merging with RCS in a future Emacs version. In addition, locking is possible with RCS even in this mode, although it is not required; @kbd{C-x v v} with an unmodified file locks the @@ -1698,13 +1708,10 @@ that appears first in @code{vc-handled-backends} (@pxref{Customizing VC}). On the other hand, if there are no files already registered, Emacs uses the first system from @code{vc-handled-backends} that could -register the file---for example, you cannot register a file under CVS if -its directory is not already part of a CVS tree. - - With the default value of @code{vc-handled-backends}, this means -that Emacs uses RCS if there are any files under RCS control, CVS if -there are any files under CVS, SCCS if any files are under SCCS, or -RCS as the ultimate default. +register the file (for example, you cannot register a file under CVS if +its directory is not already part of a CVS tree); with the default +value of @code{vc-handled-backends}, this means that Emacs uses RCS in +this situation. If locking is in use, @kbd{C-x v i} leaves the file unlocked and read-only. Type @kbd{C-x v v} if you wish to start editing it. After @@ -1892,7 +1899,8 @@ If it operates on more than one file, it handles each file according to its current state; thus, it might lock one file, but check in another file. This could be confusing; it is up to you to avoid confusing -behavior by marking a set of files that are in a similar state. +behavior by marking a set of files that are in a similar state. If no +files are marked, @kbd{v v} operates on the file in the current line. If any files call for check-in, @kbd{v v} reads a single log entry, then uses it for all the files being checked in. This is convenient for @@ -1920,8 +1928,7 @@ features. Each such independent line of development is called a @dfn{branch}. VC allows you to create branches, switch between different branches, and merge changes from one branch to another. -Please note, however, that branches are only supported for RCS at the -moment. +Please note, however, that branches are not supported for SCCS. A file's main line of development is usually called the @dfn{trunk}. The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc. At @@ -2264,7 +2271,8 @@ correspond to those of CVS. Technically, this is not a problem, but it can become difficult to keep track of what is in the CVS repository and what is not. So we suggest that you return from time to time to -CVS-only operation, using @kbd{C-u C-x v v cvs @key{RET}}. +CVS-only operation, by committing your local changes back to the +repository using @kbd{C-u C-x v v cvs @key{RET}}. @node Snapshots @subsection Snapshots @@ -2552,13 +2560,11 @@ Insert headers in a file for use with your version-control system. @end table -@vindex vc-header-alist +@vindex vc-@var{backend}-header The default header string is @samp{@w{$}Id$} for RCS and @samp{@w{%}W%} for SCCS. You can specify other headers to insert by -setting the variable @code{vc-header-alist}. Its value is a list of -elements of the form @code{(@var{program} . @var{string})} where -@var{program} is @code{RCS} or @code{SCCS} and @var{string} is the -string to use. +setting the variables @code{vc-@var{backend}-header} where +@var{backend} is @code{rcs} or @code{sccs}. Instead of a single string, you can specify a list of strings; then each string in the list is inserted as a separate header on a line of @@ -2586,8 +2592,8 @@ @var{regexp} matches the buffer name, @var{format} is inserted as part of the header. A header line is inserted for each element that matches the buffer name, and for each string specified by -@code{vc-header-alist}. The header line is made by processing the -string from @code{vc-header-alist} with the format taken from the +@code{vc-@var{backend}-header}. The header line is made by processing the +string from @code{vc-@var{backend}-header} with the format taken from the element. The default value for @code{vc-static-header-alist} is as follows: @example @@ -2624,10 +2630,10 @@ @vindex vc-handled-backends The variable @code{vc-handled-backends} determines which version control systems VC should handle. The default value is @code{(RCS CVS -SCCS)}, so it contains all three version systems that are currently -supported. If you want VC to ignore one or more of these systems, -exclude its name from the list. To disable VC entirely, set this -variable to @code{nil}. +SVN SCCS Arch MCVS)}, so it contains all six version systems that are +currently supported. If you want VC to ignore one or more of these +systems, exclude its name from the list. To disable VC entirely, set +this variable to @code{nil}. The order of systems in the list is significant: when you visit a file registered in more than one system (@pxref{Local Version Control}), @@ -2780,8 +2786,9 @@ @key{RET}}, @pxref{Merging}). @vindex vc-cvs-global-switches - The variable @code{vc-cvs-global-switches} should be a string -specifying switches to pass to CVS for all CVS operations. + The variable @code{vc-cvs-global-switches}, if non-@code{nil}, +should be a string specifying switches to pass to CVS for all CVS +operations. When @code{vc-cvs-stay-local} is @code{t}, VC also makes local version backups, so that simple diff and revert operations are @@ -2900,7 +2907,7 @@ With a numeric argument, @code{compare-windows} ignores changes in whitespace. If the variable @code{compare-ignore-case} is non-@code{nil}, the comparison ignores differences in case as well. -If the variable @code{compare-ignore-whitespace} is non-nil, +If the variable @code{compare-ignore-whitespace} is non-@code{nil}, @code{compare-windows} normally ignores changes in whitespace, and a prefix argument turns that off. @@ -3298,6 +3305,10 @@ @node File Conveniences @section Convenience Features for Finding Files + In this section, we introduce some convenient facilities for finding +recently-opened files, reading file names from a buffer, and viewing +image files. + @findex recentf-mode @vindex recentf-mode @findex recentf-save-list @@ -3308,25 +3319,22 @@ @code{recent-file-list} to a file, and @kbd{M-x recentf-edit-list} edits it. -@findex auto-image-file-mode -@findex mode, auto-image-file -@cindex images, visiting -@cindex visiting image files -@vindex image-file-name-regexps -@vindex image-file-name-extensions - When Auto-image-file minor mode is enabled, visiting an image file -displays it as an image, not as text. Likewise, inserting an image -file into a buffer inserts it as an image. This works only when Emacs -can display the relevant image type. The variables -@code{image-file-name-extensions} or @code{image-file-name-regexps} -control which file names are recognized as containing images. - The @kbd{M-x ffap} command generalizes @code{find-file} with more powerful heuristic defaults (@pxref{FFAP}), often based on the text at point. Partial Completion mode offers other features extending @code{find-file}, which can be used with @code{ffap}. @xref{Completion Options}. +@findex thumbs-mode +@findex mode, thumbs + Thumbs mode is a major mode for viewing directories containing many +image files. To use it, type @kbd{M-x thumbs} and specify the +directory to view. The images in that directory will be displayed in +a @samp{Thumbs} buffer as @dfn{thumbnails}; type @kbd{RET} on a +thumbnail to view the full-size image. Thumbs mode requires the +@file{convert} program, which is part of the ImageMagick software +package. + @ignore arch-tag: 768d32cb-e15a-4cc1-b7bf-62c00ee12250 @end ignore diff -r 45e5f0224d81 -r 360860a0006f man/gnus-faq.texi --- a/man/gnus-faq.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/gnus-faq.texi Mon Apr 04 16:43:15 2005 +0000 @@ -1,210 +1,203 @@ -@c Insert "\input texinfo" at 1st line before texing this file alone. -@c -*-texinfo-*- -@c Copyright (C) 1995, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. +@c \input texinfo @c -*-texinfo-*- +@c Uncomment 1st line before texing this file alone. +@c %**start of header +@c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +@c +@c Do not modify this file, it was generated from gnus-faq.xml, available from +@c . +@c @setfilename gnus-faq.info - -@c Frequently Asked Questions, FAQ - Introduction, Emacs for Heathens, Top +@settitle Frequently Asked Questions +@c %**end of header +@c @node Frequently Asked Questions -@comment node-name, next, previous, up - -@c @chapter Frequently Asked Questions @section Frequently Asked Questions -@cindex FAQ -@cindex Frequently Asked Questions - -@c - Uncomment @chapter, comment @section -@c - run (texinfo-every-node-update) -@c - revert it. @menu -* FAQ - Introduction:: About Gnus and this FAQ. -* FAQ 1 - Installation:: Installation of Gnus. -* FAQ 2 - Startup / Group buffer:: Start up questions and the first - buffer Gnus shows you. -* FAQ 3 - Getting messages:: Making Gnus read your mail and news. -* FAQ 4 - Reading messages:: How to efficiently read messages. -* FAQ 5 - Composing messages:: Composing mails or Usenet postings. -* FAQ 6 - Old messages:: Importing, archiving, searching - and deleting messages. -* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while offline. -* FAQ 8 - Getting help:: When this FAQ isn't enough. -* FAQ 9 - Tuning Gnus:: How to make Gnus faster. -* FAQ - Glossary:: Terms used in the FAQ explained. +* FAQ - Changes:: +* FAQ - Introduction:: About Gnus and this FAQ. +* FAQ 1 - Installation FAQ:: Installation of Gnus. +* FAQ 2 - Startup / Group buffer:: Start up questions and the + first buffer Gnus shows you. +* FAQ 3 - Getting Messages:: Making Gnus read your mail + and news. +* FAQ 4 - Reading messages:: How to efficiently read + messages. +* FAQ 5 - Composing messages:: Composing mails or Usenet + postings. +* FAQ 6 - Old messages:: Importing, archiving, + searching and deleting messages. +* FAQ 7 - Gnus in a dial-up environment:: Reading mail and news while + offline. +* FAQ 8 - Getting help:: When this FAQ isn't enough. +* FAQ 9 - Tuning Gnus:: How to make Gnus faster. +* FAQ - Glossary:: Terms used in the FAQ + explained. @end menu - @subheading Abstract - This is the new Gnus Frequently Asked Questions list. If you have a -Web browser, the official hypertext version is at -@uref{http://my.gnus.org/FAQ/}, the Docbook source is available from -@uref{http://sourceforge.net/projects/gnus/}. - - - Please submit features and suggestions to the - @email{faq-discuss@@my.gnus.org,FAQ discussion list}. - The list is protected against junk mail with - @uref{http://smarden.org/qconfirm/index.html,qconfirm, qconfirm}. As - a subscriber, your submissions will automatically pass. You can - also subscribe to the list by sending a blank email to - @email{faq-discuss-subscribe@@my.gnus.org} - and - @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss,browse - the archive, browse the archive}. - -@node FAQ - Introduction, FAQ 1 - Installation, Frequently Asked Questions, Frequently Asked Questions -@comment node-name, next, previous, up -@heading Introduction +This is the new Gnus Frequently Asked Questions list. +If you have a Web browser, the official hypertext version is at +@uref{http://my.gnus.org/FAQ/}, +the Docbook source is available from +@uref{http://sourceforge.net/projects/gnus/, http://sourceforge.net}. + +Please submit features and suggestions to the +@email{faq-discuss@@my.gnus.org, FAQ discussion list}. +The list is protected against junk mail with +@uref{http://smarden.org/qconfirm/index.html, qconfirm}. As +a subscriber, your submissions will automatically pass. You can +also subscribe to the list by sending a blank email to +@email{faq-discuss-subscribe@@my.gnus.org, faq-discuss-subscribe@@my.gnus.org} +and @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss, browse +the archive}. + +@node FAQ - Changes +@subheading Changes + + + +@itemize @bullet + +@item +Updated FAQ to reflect release of Gnus 5.10 and start of +No Gnus development. +@end itemize + +@node FAQ - Introduction +@subheading Introduction This is the Gnus Frequently Asked Questions list. Gnus is a Usenet Newsreader and Electronic Mail User Agent implemented - as a part of Emacs. It's been around in some form for almost a decade - now, and has been distributed as a standard part of Emacs for much of - that time. Gnus 5 is the latest (and greatest) incarnation. The - original version was called GNUS, and was written by Masanobu UMEDA. - When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and - decided to rewrite Gnus. - - Its biggest strength is the fact that it is extremely - customizable. It is somewhat intimidating at first glance, but - most of the complexity can be ignored until you're ready to take - advantage of it. If you receive a reasonable volume of e-mail - (you're on various mailing lists), or you would like to read - high-volume mailing lists but cannot keep up with them, or read - high volume newsgroups or are just bored, then Gnus is what you - want. - - This FAQ was maintained by Justin Sheehy until March 2002. He - would like to thank Steve Baur and Per Abrahamsen for doing a wonderful - job with this FAQ before him. We would like to do the same - thanks, - Justin! - - - If you have a Web browser, the official hypertext version is at:@* - @uref{http://my.gnus.org/FAQ/}. - This version is much nicer than the unofficial hypertext - versions that are archived at Utrecht, Oxford, Smart Pages, Ohio - State, and other FAQ archives. See the resources question below - if you want information on obtaining it in another format. - - - The information contained here was compiled with the assistance - of the Gnus development mailing list, and any errors or - misprints are the my.gnus.org team's fault, sorry. - - -@ifnottex -@node FAQ 1 - Installation, FAQ 2 - Startup / Group buffer, FAQ - Introduction, Frequently Asked Questions -@end ifnottex -@subsection Installation +as a part of Emacs. It's been around in some form for almost a decade +now, and has been distributed as a standard part of Emacs for much of +that time. Gnus 5 is the latest (and greatest) incarnation. The +original version was called GNUS, and was written by Masanobu UMEDA. +When autumn crept up in '94, Lars Magne Ingebrigtsen grew bored and +decided to rewrite Gnus. + +Its biggest strength is the fact that it is extremely +customizable. It is somewhat intimidating at first glance, but +most of the complexity can be ignored until you're ready to take +advantage of it. If you receive a reasonable volume of e-mail +(you're on various mailing lists), or you would like to read +high-volume mailing lists but cannot keep up with them, or read +high volume newsgroups or are just bored, then Gnus is what you +want. + +This FAQ was maintained by Justin Sheehy until March 2002. He +would like to thank Steve Baur and Per Abrahamsen for doing a wonderful +job with this FAQ before him. We would like to do the same - thanks, +Justin! + +If you have a Web browser, the official hypertext version is at: +@uref{http://my.gnus.org/FAQ/}. +This version is much nicer than the unofficial hypertext +versions that are archived at Utrecht, Oxford, Smart Pages, Ohio +State, and other FAQ archives. See the resources question below +if you want information on obtaining it in another format. + +The information contained here was compiled with the assistance +of the Gnus development mailing list, and any errors or +misprints are the my.gnus.org team's fault, sorry. + +@node FAQ 1 - Installation FAQ +@subsection Installation FAQ @menu -* [1.1]:: What is the latest version of Gnus? -* [1.2]:: What's new in 5.10? -* [1.3]:: Where and how to get Gnus? -* [1.4]:: What to do with the tarball now? -* [1.5]:: Which version of Emacs do I need? -* [1.6]:: How do I run Gnus on both Emacs and XEmacs? +* [1.1]:: What is the latest version of Gnus? +* [1.2]:: What's new in 5.10? +* [1.3]:: Where and how to get Gnus? +* [1.4]:: What to do with the tarball now? +* [1.5]:: I sometimes read references to No Gnus and Oort Gnus, what + are those? +* [1.6]:: Which version of Emacs do I need? +* [1.7]:: How do I run Gnus on both Emacs and XEmacs? @end menu - -@ifnottex -@node [1.1], [1.2], FAQ 1 - Installation, FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.1: +@node [1.1] +@subsubheading Question 1.1 What is the latest version of Gnus? -Answer: - - Jingle please: Gnus 5.10 is released, get it while it's - hot! As well as the step in version number is rather - small, Gnus 5.10 has tons of new features which you - shouldn't miss, however if you are cautious, you might - prefer to stay with 5.8.8 respectively 5.9 (they are - basically the same) until some bugfix releases are out. - -@ifnottex -@node [1.2], [1.3], [1.1], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.2: +@subsubheading Answer + +Jingle please: Gnus 5.10 is released, get it while it's +hot! As well as the step in version number is rather +small, Gnus 5.10 has tons of new features which you +shouldn't miss. The current release (5.10.6) should be at +least as stable as the latest release of the 5.8 series. + +@node [1.2] +@subsubheading Question 1.2 What's new in 5.10? -Answer: - - First of all, you should have a look into the file - GNUS-NEWS in the toplevel directory of the Gnus tarball, - there the most important changes are listed. Here's a - short list of the changes I find especially - important/interesting: - - - - -@itemize @bullet{} +@subsubheading Answer + +First of all, you should have a look into the file +GNUS-NEWS in the toplevel directory of the Gnus tarball, +there the most important changes are listed. Here's a +short list of the changes I find especially +important/interesting: + +@itemize @bullet + +@item +Major rewrite of the Gnus agent, Gnus agent is now +active by default. + +@item +Many new article washing functions for dealing with +ugly formatted articles. + +@item +Anti Spam features. + +@item +Message-utils now included in Gnus. @item - Major rewrite of the Gnus agent, Gnus agent is now - active by default. - -@item - Many new article washing functions for dealing with - ugly formatted articles. - -@item - Anti Spam features. - -@item - message-utils now included in Gnus. - -@item - New format specifiers for summary lines, e.g. %B for - a complex trn-style thread tree. - +New format specifiers for summary lines, e.g. %B for +a complex trn-style thread tree. @end itemize - -@ifnottex -@node [1.3], [1.4], [1.2], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.3: + +@node [1.3] +@subsubheading Question 1.3 Where and how to get Gnus? -Answer: - - The latest released version of Gnus isn't included in - Emacs 21 and until now it also isn't available through the - package system of XEmacs 21.4, therefor you should get the - Gnus tarball from - @uref{http://www.gnus.org/dist/gnus.tar.gz} - or via anonymous FTP from - @uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}. - -@ifnottex -@node [1.4], [1.5], [1.3], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.4: - - What to do with the tarball now? - - -Answer: - - Untar it via @samp{tar xvzf gnus.tar.gz} and do the common - @samp{./configure; make; make install} circle. - (under MS-Windows either get the Cygwin environment from - @uref{http://www.cygwin.com} - which allows you to do what's described above or unpack the - tarball with some packer (e.g. Winace from - @uref{http://www.winace.com}) - and use the batch-file make.bat included in the tarball to install - Gnus. If you don't want to (or aren't allowed to) install Gnus - system-wide, you can install it in your home directory and add the - following lines to your ~/.xemacs/init.el or ~/.emacs: - +@subsubheading Answer + +The latest released version of Gnus isn't included in +Emacs 21, therefor you should get the Gnus tarball from +@uref{http://www.gnus.org/dist/gnus.tar.gz} +or via anonymous FTP from +@uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}. +If you use XEmacs instead of Emacs you can use XEmacs' +package system instead. + +@node [1.4] +@subsubheading Question 1.4 + +What to do with the tarball now? + +@subsubheading Answer + +Untar it via @samp{tar xvzf gnus.tar.gz} and do the common +@samp{./configure; make; make install} circle. +(under MS-Windows either get the Cygwin environment from +@uref{http://www.cygwin.com} +which allows you to do what's described above or unpack the +tarball with some packer (e.g. Winace from +@uref{http://www.winace.com}) +and use the batch-file make.bat included in the tarball to install +Gnus.) If you don't want to (or aren't allowed to) install Gnus +system-wide, you can install it in your home directory and add the +following lines to your ~/.xemacs/init.el or ~/.emacs: @example (add-to-list 'load-path "/path/to/gnus/lisp") @@ -212,436 +205,395 @@ (add-to-list 'Info-directory-list "/path/to/gnus/texi/") (add-to-list 'Info-default-directory-list "/path/to/gnus/texi/")) @end example - @noindent - Make sure that you don't have any Gnus related stuff - before this line, on MS Windows use something like - "C:/path/to/lisp" (yes, "/"). - -@ifnottex -@node [1.5], [1.6], [1.4], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.5: + +Make sure that you don't have any Gnus related stuff +before this line, on MS Windows use something like +"C:/path/to/lisp" (yes, "/"). + +@node [1.5] +@subsubheading Question 1.5 + +I sometimes read references to No Gnus and Oort Gnus, +what are those? + +@subsubheading Answer + +Oort Gnus was the name of the development version of +Gnus, which became Gnus 5.10 in autumn 2003. No Gnus is +the name of the current development version which will +once become Gnus 5.12 or Gnus 6. (If you're wondering why +not 5.11, the odd version numbers are normally used for +the Gnus versions bundled with Emacs) + +@node [1.6] +@subsubheading Question 1.6 Which version of Emacs do I need? -Answer: - - Gnus 5.10 requires an Emacs version that is greater - than or equal to Emacs 20.7 or XEmacs 21.1. - -@ifnottex -@node [1.6], , [1.5], FAQ 1 - Installation -@end ifnottex -@subsubheading Question 1.6: +@subsubheading Answer + +Gnus 5.10 requires an Emacs version that is greater +than or equal to Emacs 20.7 or XEmacs 21.1. The +development versions of Gnus (aka No Gnus) require Emacs +21 or XEmacs 21.4. + +@node [1.7] +@subsubheading Question 1.7 How do I run Gnus on both Emacs and XEmacs? -Answer: - - You can't use the same copy of Gnus in both as the Lisp - files are byte-compiled to a format which is different - depending on which Emacs did the compilation. Get one copy - of Gnus for Emacs and one for XEmacs. - -@ifnottex -@node FAQ 2 - Startup / Group buffer, FAQ 3 - Getting messages, FAQ 1 - Installation, Frequently Asked Questions -@end ifnottex +@subsubheading Answer + +You can't use the same copy of Gnus in both as the Lisp +files are byte-compiled to a format which is different +depending on which Emacs did the compilation. Get one copy +of Gnus for Emacs and one for XEmacs. + +@node FAQ 2 - Startup / Group buffer @subsection Startup / Group buffer @menu -* [2.1]:: Every time I start Gnus I get a message - "Gnus auto-save file exists. Do you want to read it?", - what does this mean and how to prevent it? -* [2.2]:: Gnus doesn't remember which groups I'm subscribed to, what's this? -* [2.3]:: How to change the format of the lines in Group buffer? -* [2.4]:: My group buffer becomes a bit crowded, is there a way to sort my - groups into categories so I can easier browse through them? -* [2.5]:: How to manually sort the groups in Group buffer? How to sort the - groups in a topic? +* [2.1]:: Every time I start Gnus I get a message "Gnus auto-save + file exists. Do you want to read it?", what does this mean and + how to prevent it? +* [2.2]:: Gnus doesn't remember which groups I'm subscribed to, + what's this? +* [2.3]:: How to change the format of the lines in Group buffer? +* [2.4]:: My group buffer becomes a bit crowded, is there a way to + sort my groups into categories so I can easier browse through + them? +* [2.5]:: How to manually sort the groups in Group buffer? How to + sort the groups in a topic? @end menu -@ifnottex -@node [2.1], [2.2], FAQ 2 - Startup / Group buffer, FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.1: - - Every time I start Gnus I get a message "Gnus auto-save - file exists. Do you want to read it?", what does this mean - and how to prevent it? - - -Answer: - - This message means that the last time you used Gnus, it - wasn't properly exited and therefor couldn't write its - informations to disk (e.g. which messages you read), you - are now asked if you want to restore those informations - from the auto-save file. - - - To prevent this message make sure you exit Gnus - via @samp{q} in group buffer instead of - just killing Emacs. - -@ifnottex -@node [2.2], [2.3], [2.1], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question: 2.2 - - Gnus doesn't remember which groups I'm subscribed to, - what's this? - - -Answer: - - You get the message described in the q/a pair above while - starting Gnus, right? It's an other symptom for the same - problem, so read the answer above. - -@ifnottex -@node [2.3], [2.4], [2.2], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.3: - - How to change the format of the lines in Group buffer? - - -Answer: - - You've got to tweak the value of the variable - gnus-group-line-format. See the manual node "Group Line - Specification" for information on how to do this. An - example for this (guess from whose .gnus :-)): - +@node [2.1] +@subsubheading Question 2.1 + +Every time I start Gnus I get a message "Gnus auto-save +file exists. Do you want to read it?", what does this mean +and how to prevent it? + +@subsubheading Answer + +This message means that the last time you used Gnus, it +wasn't properly exited and therefor couldn't write its +informations to disk (e.g. which messages you read), you +are now asked if you want to restore those informations +from the auto-save file. + +To prevent this message make sure you exit Gnus +via @samp{q} in group buffer instead of +just killing Emacs. + +@node [2.2] +@subsubheading Question 2.2 + +Gnus doesn't remember which groups I'm subscribed to, +what's this? + +@subsubheading Answer + +You get the message described in the q/a pair above while +starting Gnus, right? It's an other symptom for the same +problem, so read the answer above. + +@node [2.3] +@subsubheading Question 2.3 + +How to change the format of the lines in Group buffer? + +@subsubheading Answer + +You've got to tweak the value of the variable +gnus-group-line-format. See the manual node "Group Line +Specification" for information on how to do this. An +example for this (guess from whose .gnus :-)): @example - (setq gnus-group-line-format "%P%M%S[%5t]%5y : %(%g%)\n") - @end example - -@ifnottex -@node [2.4], [2.5], [2.3], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.4: - - My group buffer becomes a bit crowded, is there a way to - sort my groups into categories so I can easier browse - through them? - - -Answer: - - Gnus offers the topic mode, it allows you to sort your - groups in, well, topics, e.g. all groups dealing with - Linux under the topic linux, all dealing with music under - the topic music and all dealing with scottish music under - the topic scottish which is a subtopic of music. - - - To enter topic mode, just hit t while in Group buffer. Now - you can use @samp{T n} to create a topic - at point and @samp{T m} to move a group to - a specific topic. For more commands see the manual or the - menu. You might want to include the %P specifier at the - beginning of your gnus-group-line-format variable to have - the groups nicely indented. - -@ifnottex -@node [2.5], , [2.4], FAQ 2 - Startup / Group buffer -@end ifnottex -@subsubheading Question 2.5: - - How to manually sort the groups in Group buffer? How to - sort the groups in a topic? - - -Answer: - - Move point over the group you want to move and - hit @samp{C-k}, now move point to the - place where you want the group to be and - hit @samp{C-y}. - -@ifnottex -@node FAQ 3 - Getting messages, FAQ 4 - Reading messages, FAQ 2 - Startup / Group buffer, Frequently Asked Questions -@end ifnottex -@subsection Getting messages +@noindent + +@node [2.4] +@subsubheading Question 2.4 + +My group buffer becomes a bit crowded, is there a way to +sort my groups into categories so I can easier browse +through them? + +@subsubheading Answer + +Gnus offers the topic mode, it allows you to sort your +groups in, well, topics, e.g. all groups dealing with +Linux under the topic linux, all dealing with music under +the topic music and all dealing with scottish music under +the topic scottish which is a subtopic of music. + +To enter topic mode, just hit t while in Group buffer. Now +you can use @samp{T n} to create a topic +at point and @samp{T m} to move a group to +a specific topic. For more commands see the manual or the +menu. You might want to include the %P specifier at the +beginning of your gnus-group-line-format variable to have +the groups nicely indented. + +@node [2.5] +@subsubheading Question 2.5 + +How to manually sort the groups in Group buffer? How to +sort the groups in a topic? + +@subsubheading Answer + +Move point over the group you want to move and +hit @samp{C-k}, now move point to the +place where you want the group to be and +hit @samp{C-y}. + +@node FAQ 3 - Getting Messages +@subsection Getting Messages @menu -* [3.1]:: I just installed Gnus, started it via M-x gnus but it only says - "nntp (news) open error", what to do? -* [3.2]:: I'm working under Windows and have no idea what ~/.gnus means. -* [3.3]:: My news server requires authentication, how to store user name - and password on disk? -* [3.4]:: Gnus seems to start up OK, but I can't find out how to - subscribe to a group. -* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed to - post on this server as well as I am, what's that? -* [3.6]:: I want Gnus to fetch news from several servers, is this possible? -* [3.7]:: And how about local spool files? -* [3.8]:: OK, reading news works now, but I want to be able to read my mail - with Gnus, too. How to do it? -* [3.9]:: And what about IMAP? -* [3.10]:: At the office we use one of those MS Exchange servers, - can I use Gnus to read my mail from it? -* [3.11]:: Can I tell Gnus not to delete the mails on the server - it retrieves via POP3? +* [3.1]:: I just installed Gnus, started it via @samp{M-x gnus} + but it only says "nntp (news) open error", what to do? +* [3.2]:: I'm working under Windows and have no idea what ~/.gnus.el + means. +* [3.3]:: My news server requires authentication, how to store user + name and password on disk? +* [3.4]:: Gnus seems to start up OK, but I can't find out how to + subscribe to a group. +* [3.5]:: Gnus doesn't show all groups / Gnus says I'm not allowed + to post on this server as well as I am, what's that? +* [3.6]:: I want Gnus to fetch news from several servers, is this + possible? +* [3.7]:: And how about local spool files? +* [3.8]:: OK, reading news works now, but I want to be able to read + my mail with Gnus, too. How to do it? +* [3.9]:: And what about IMAP? +* [3.10]:: At the office we use one of those MS Exchange servers, can + I use Gnus to read my mail from it? +* [3.11]:: Can I tell Gnus not to delete the mails on the server it + retrieves via POP3? @end menu -@ifnottex -@node [3.1], [3.2], FAQ 3 - Getting messages, FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.1: - - I just installed Gnus, started it via - @samp{M-x gnus} - but it only says "nntp (news) open error", what to do? - - -Answer: - - You've got to tell Gnus where to fetch the news from. Read - the documentation for information on how to do this. As a - first start, put those lines in ~/.gnus: - +@node [3.1] +@subsubheading Question 3.1 + +I just installed Gnus, started it via +@samp{M-x gnus} +but it only says "nntp (news) open error", what to do? + +@subsubheading Answer + +You've got to tell Gnus where to fetch the news from. Read +the documentation for information on how to do this. As a +first start, put those lines in ~/.gnus.el: @example (setq gnus-select-method '(nntp "news.yourprovider.net")) (setq user-mail-address "you@@yourprovider.net") (setq user-full-name "Your Name") @end example - -@ifnottex -@node [3.2], [3.3], [3.1], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.2: - - I'm working under Windows and have no idea what ~/.gnus means. - - -Answer: - - The ~/ means the home directory where Gnus and Emacs look for the -configuration files. However, you don't really need to know what this -means, it suffices that Emacs knows what it means :-) You can type -@samp{C-x C-f ~/.gnus RET } (yes, with the forward slash, even on -Windows), and Emacs will open the right file for you. (It will most -likely be new, and thus empty.) However, I'd discourage you from -doing so, since the directory Emacs chooses will most certainly not be -what you want, so let's do it the correct way. The first thing you've -got to do is to create a suitable directory (no blanks in directory -name please) e.g. @file{c:\myhome}. Then you must set the environment -variable HOME to this directory. To do this under Win9x or Me include -the line - +@noindent + +@node [3.2] +@subsubheading Question 3.2 + +I'm working under Windows and have no idea what ~/.gnus.el means. + +@subsubheading Answer + +The ~/ means the home directory where Gnus and Emacs look +for the configuration files. However, you don't really +need to know what this means, it suffices that Emacs knows +what it means :-) You can type +@samp{C-x C-f ~/.gnus.el RET } +(yes, with the forward slash, even on Windows), and +Emacs will open the right file for you. (It will most +likely be new, and thus empty.) +However, I'd discourage you from doing so, since the +directory Emacs chooses will most certainly not be what +you want, so let's do it the correct way. +The first thing you've got to do is to +create a suitable directory (no blanks in directory name +please) e.g. c:\myhome. Then you must set the environment +variable HOME to this directory. To do this under Win9x +or Me include the line @example - SET HOME=C:\myhome - @end example - @noindent - in your autoexec.bat and reboot. Under NT, 2000 and XP, - hit Winkey+Pause/Break to enter system options (if it - doesn't work, go to Control Panel -> System). There you'll - find the possibility to set environment variables, create - a new one with name HOME and value @file{c:\myhome}, a reboot is - not necessary. - - - Now to create ~/.gnus, say - @samp{C-x C-f ~/.gnus RET C-x C-s}. - in Emacs. - -@ifnottex -@node [3.3], [3.4], [3.2], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.3: - - My news server requires authentication, how to store - user name and password on disk? - - -Answer: - - Create a file ~/.authinfo which includes for each server a line like this - + +in your autoexec.bat and reboot. Under NT, 2000 and XP, +hit Winkey+Pause/Break to enter system options (if it +doesn't work, go to Control Panel -> System). There you'll +find the possibility to set environment variables, create +a new one with name HOME and value C:\myhome, a reboot is +not necessary. + +Now to create ~/.gnus.el, say +@samp{C-x C-f ~/.gnus.el RET C-x C-s}. +in Emacs. + +@node [3.3] +@subsubheading Question 3.3 + +My news server requires authentication, how to store +user name and password on disk? + +@subsubheading Answer + +Create a file ~/.authinfo which includes for each server a line like this @example machine news.yourprovider.net login YourUserName password YourPassword @end example - @noindent . - Make sure that the file isn't readable to others if you - work on a OS which is capable of doing so. (Under Unix - say - +Make sure that the file isn't readable to others if you +work on a OS which is capable of doing so. (Under Unix +say @example chmod 600 ~/.authinfo @end example - @noindent - in a shell.) - -@ifnottex -@node [3.4], [3.5], [3.3], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.4: - - Gnus seems to start up OK, but I can't find out how to - subscribe to a group. - - -Answer: - - If you know the name of the group say @samp{U - name.of.group RET} in group buffer (use the - tab-completion Luke). Otherwise hit ^ in group buffer, - this brings you to the server buffer. Now place point (the - cursor) over the server which carries the group you want, - hit @samp{RET}, move point to the group - you want to subscribe to and say @samp{u} - to subscribe to it. - -@ifnottex -@node [3.5], [3.6], [3.4], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.5: - - Gnus doesn't show all groups / Gnus says I'm not allowed to - post on this server as well as I am, what's that? - - -Answer: - - Some providers allow restricted anonymous access and full - access only after authorization. To make Gnus send authinfo - to those servers append - + +in a shell.) + +@node [3.4] +@subsubheading Question 3.4 + +Gnus seems to start up OK, but I can't find out how to +subscribe to a group. + +@subsubheading Answer + +If you know the name of the group say @samp{U +name.of.group RET} in group buffer (use the +tab-completion Luke). Otherwise hit ^ in group buffer, +this brings you to the server buffer. Now place point (the +cursor) over the server which carries the group you want, +hit @samp{RET}, move point to the group +you want to subscribe to and say @samp{u} +to subscribe to it. + +@node [3.5] +@subsubheading Question 3.5 + +Gnus doesn't show all groups / Gnus says I'm not allowed to +post on this server as well as I am, what's that? + +@subsubheading Answer + +Some providers allow restricted anonymous access and full +access only after authorization. To make Gnus send authinfo +to those servers append @example force yes @end example - - @noindent - to the line for those servers in ~/.authinfo. -@ifnottex -@node [3.6], [3.7], [3.5], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.6: - - I want Gnus to fetch news from several servers, is this possible? - - -Answer: - - Of course. You can specify more sources for articles in the - variable gnus-secondary-select-methods. Add something like - this in ~/.gnus: - +to the line for those servers in ~/.authinfo. + +@node [3.6] +@subsubheading Question 3.6 + +I want Gnus to fetch news from several servers, is this possible? + +@subsubheading Answer + +Of course. You can specify more sources for articles in the +variable gnus-secondary-select-methods. Add something like +this in ~/.gnus.el: @example -(add-to-list 'gnus-secondary-select-methods +(add-to-list 'gnus-secondary-select-methods '(nntp "news.yourSecondProvider.net")) -(add-to-list 'gnus-secondary-select-methods - '(nntp "news.yourThirdProvider.net")) +(add-to-list 'gnus-secondary-select-methods + '(nntp "news.yourThirdProvider.net")) @end example - -@ifnottex -@node [3.7], [3.8], [3.6], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.7: - - And how about local spool files? - - -Answer: - - No problem, this is just one more select method called - nnspool, so you want this: - +@noindent + +@node [3.7] +@subsubheading Question 3.7 + +And how about local spool files? + +@subsubheading Answer + +No problem, this is just one more select method called +nnspool, so you want this: @example (add-to-list 'gnus-secondary-select-methods '(nnspool "")) @end example - @noindent - Or this if you don't want an NNTP Server as primary news source: - + +Or this if you don't want an NNTP Server as primary news source: @example (setq gnus-select-method '(nnspool "")) @end example - @noindent - Gnus will look for the spool file in /usr/spool/news, if you - want something different, change the line above to something like this: - + +Gnus will look for the spool file in /usr/spool/news, if you +want something different, change the line above to something like this: @example (add-to-list 'gnus-secondary-select-methods - '(nnspool "" (nnspool-directory "/usr/local/myspoolddir"))) + '(nnspool "" + (nnspool-directory "/usr/local/myspoolddir"))) @end example - @noindent - This sets the spool directory for this server only. - You might have to specify more stuff like the program used - to post articles, see the Gnus manual on how to do this. - -@ifnottex -@node [3.8], [3.9], [3.7], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.8: - - OK, reading news works now, but I want to be able to read my mail - with Gnus, too. How to do it? - - -Answer: - - That's a bit harder since there are many possible sources - for mail, many possible ways for storing mail and many - different ways for sending mail. The most common cases are - these: 1: You want to read your mail from a pop3 server and - send them directly to a SMTP Server 2: Some program like - fetchmail retrieves your mail and stores it on disk from - where Gnus shall read it. Outgoing mail is sent by - Sendmail, Postfix or some other MTA. Sometimes, you even - need a combination of the above cases. - - - However, the first thing to do is to tell Gnus in which way - it should store the mail, in Gnus terminology which back end - to use. Gnus supports many different back ends, the most - commonly used one is nnml. It stores every mail in one file - and is therefor quite fast. However you might prefer a one - file per group approach if your file system has problems with - many small files, the nnfolder back end is then probably the - choice for you. To use nnml add the following to ~/.gnus: - + +This sets the spool directory for this server only. +You might have to specify more stuff like the program used +to post articles, see the Gnus manual on how to do this. + +@node [3.8] +@subsubheading Question 3.8 + +OK, reading news works now, but I want to be able to read my mail +with Gnus, too. How to do it? + +@subsubheading Answer + +That's a bit harder since there are many possible sources +for mail, many possible ways for storing mail and many +different ways for sending mail. The most common cases are +these: 1: You want to read your mail from a pop3 server and +send them directly to a SMTP Server 2: Some program like +fetchmail retrieves your mail and stores it on disk from +where Gnus shall read it. Outgoing mail is sent by +Sendmail, Postfix or some other MTA. Sometimes, you even +need a combination of the above cases. + +However, the first thing to do is to tell Gnus in which way +it should store the mail, in Gnus terminology which back end +to use. Gnus supports many different back ends, the most +commonly used one is nnml. It stores every mail in one file +and is therefor quite fast. However you might prefer a one +file per group approach if your file system has problems with +many small files, the nnfolder back end is then probably the +choice for you. To use nnml add the following to ~/.gnus.el: @example (add-to-list 'gnus-secondary-select-methods '(nnml "")) @end example - @noindent - As you might have guessed, if you want nnfolder, it's - + +As you might have guessed, if you want nnfolder, it's @example (add-to-list 'gnus-secondary-select-methods '(nnfolder "")) @end example - - - Now we need to tell Gnus, where to get it's mail from. If - it's a POP3 server, then you need something like this: - +@noindent + +Now we need to tell Gnus, where to get it's mail from. If +it's a POP3 server, then you need something like this: @example (eval-after-load "mail-source" @@ -649,75 +601,68 @@ :user "yourUserName" :password "yourPassword"))) @end example - @noindent - Make sure ~/.gnus isn't readable to others if you store - your password there. If you want to read your mail from a - traditional spool file on your local machine, it's - + +Make sure ~/.gnus.el isn't readable to others if you store +your password there. If you want to read your mail from a +traditional spool file on your local machine, it's @example (eval-after-load "mail-source" - '(add-to-list 'mail-sources '(file :path "/path/to/spool/file"))) + '(add-to-list 'mail-sources '(file :path "/path/to/spool/file")) @end example - @noindent - If it's a Maildir, with one file per message as used by - postfix, Qmail and (optionally) fetchmail it's - + +If it's a Maildir, with one file per message as used by +postfix, Qmail and (optionally) fetchmail it's @example (eval-after-load "mail-source" '(add-to-list 'mail-sources '(maildir :path "/path/to/Maildir/" :subdirs ("cur" "new"))) @end example - @noindent - And finally if you want to read your mail from several files - in one directory, for example because procmail already split your - mail, it's - + +And finally if you want to read your mail from several files +in one directory, for example because procmail already split your +mail, it's @example (eval-after-load "mail-source" - '(add-to-list 'mail-sources '(directory :path "/path/to/procmail-dir/" - :suffix ".prcml")) + '(add-to-list 'mail-sources + '(directory :path "/path/to/procmail-dir/" + :suffix ".prcml"))) @end example - @noindent - Where :suffix ".prcml" tells Gnus only to use files with the - suffix .prcml. - - - OK, now you only need to tell Gnus how to send mail. If you - want to send mail via sendmail (or whichever MTA is playing - the role of sendmail on your system), you don't need to do - anything. However, if you want to send your mail to an - SMTP Server you need the following in your ~/.gnus - + +Where :suffix ".prcml" tells Gnus only to use files with the +suffix .prcml. + +OK, now you only need to tell Gnus how to send mail. If you +want to send mail via sendmail (or whichever MTA is playing +the role of sendmail on your system), you don't need to do +anything. However, if you want to send your mail to an +SMTP Server you need the following in your ~/.gnus.el @example (setq send-mail-function 'smtpmail-send-it) (setq message-send-mail-function 'smtpmail-send-it) (setq smtpmail-default-smtp-server "smtp.yourProvider.net") @end example - -@ifnottex -@node [3.9], [3.10], [3.8], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.9: - - And what about IMAP? - - -Answer: - - There are two ways of using IMAP with Gnus. The first one is - to use IMAP like POP3, that means Gnus fetches the mail from - the IMAP server and stores it on disk. If you want to do - this (you don't really want to do this) add the following to - ~/.gnus - +@noindent + +@node [3.9] +@subsubheading Question 3.9 + +And what about IMAP? + +@subsubheading Answer + +There are two ways of using IMAP with Gnus. The first one is +to use IMAP like POP3, that means Gnus fetches the mail from +the IMAP server and stores it on disk. If you want to do +this (you don't really want to do this) add the following to +~/.gnus.el @example (add-to-list 'mail-sources '(imap :server "mail.mycorp.com" @@ -728,249 +673,215 @@ :mailbox "INBOX" :fetchflag "\\Seen")) @end example - @noindent - You might have to tweak the values for stream and/or - authentification, see the Gnus manual node "Mail Source - Specifiers" for possible values. - - - If you want to use IMAP the way it's intended, you've got to - follow a different approach. You've got to add the nnimap - back end to your select method and give the information - about the server there. - + +You might have to tweak the values for stream and/or +authentification, see the Gnus manual node "Mail Source +Specifiers" for possible values. + +If you want to use IMAP the way it's intended, you've got to +follow a different approach. You've got to add the nnimap +back end to your select method and give the information +about the server there. @example -(add-to-list - 'gnus-secondary-select-methods - '(nnimap "Give the baby a name" - (nnimap-address "imap.yourProvider.net") - (nnimap-port 143) - (nnimap-list-pattern "archive.*"))) +(add-to-list 'gnus-secondary-select-methods + '(nnimap "Give the baby a name" + (nnimap-address "imap.yourProvider.net") + (nnimap-port 143) + (nnimap-list-pattern "archive.*"))) @end example - @noindent - Again, you might have to specify how to authenticate to the - server if Gnus can't guess the correct way, see the Manual - Node "IMAP" for detailed information. - -@ifnottex -@node [3.10], [3.11], [3.9], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.10: - - At the office we use one of those MS Exchange servers, can I use - Gnus to read my mail from it? - - -Answer: - - Offer your administrator a pair of new running shoes for - activating IMAP on the server and follow the instructions - above. - -@ifnottex -@node [3.11], , [3.10], FAQ 3 - Getting messages -@end ifnottex -@subsubheading Question 3.11: - - Can I tell Gnus not to delete the mails on the server it - retrieves via POP3? - - -Answer: - - First of all, that's not the way POP3 is intended to work, - if you have the possibility, you should use the IMAP - Protocol if you want your messages to stay on the - server. Nevertheless there might be situations where you - need the feature, but sadly Gnus itself has no predefined - functionality to do so. - - - However this is Gnus county so there are possibilities to - achieve what you want. The easiest way is to get an external - program which retrieves copies of the mail and stores them - on disk, so Gnus can read it from there. On Unix systems you - could use e.g. fetchmail for this, on MS Windows you can use - Hamster, an excellent local news and mail server. - - - The other solution would be, to replace the method Gnus - uses to get mail from POP3 servers by one which is capable - of leaving the mail on the server. If you use XEmacs, get - the package mail-lib, it includes an enhanced pop3.el, - look in the file, there's documentation on how to tell - Gnus to use it and not to delete the retrieved mail. For - GNU Emacs look for the file epop3.el which can do the same - (If you know the home of this file, please send me an - e-mail). You can also tell Gnus to use an external program - (e.g. fetchmail) to fetch your mail, see the info node - "Mail Source Specifiers" in the Gnus manual on how to do - it. - - -@ifnottex -@node FAQ 4 - Reading messages, FAQ 5 - Composing messages, FAQ 3 - Getting messages, Frequently Asked Questions -@end ifnottex + +Again, you might have to specify how to authenticate to the +server if Gnus can't guess the correct way, see the Manual +Node "IMAP" for detailed information. + +@node [3.10] +@subsubheading Question 3.10 + +At the office we use one of those MS Exchange servers, can I use +Gnus to read my mail from it? + +@subsubheading Answer + +Offer your administrator a pair of new running shoes for +activating IMAP on the server and follow the instructions +above. + +@node [3.11] +@subsubheading Question 3.11 + +Can I tell Gnus not to delete the mails on the server it +retrieves via POP3? + +@subsubheading Answer + +First of all, that's not the way POP3 is intended to work, +if you have the possibility, you should use the IMAP +Protocol if you want your messages to stay on the +server. Nevertheless there might be situations where you +need the feature, but sadly Gnus itself has no predefined +functionality to do so. + +However this is Gnus county so there are possibilities to +achieve what you want. The easiest way is to get an external +program which retrieves copies of the mail and stores them +on disk, so Gnus can read it from there. On Unix systems you +could use e.g. fetchmail for this, on MS Windows you can use +Hamster, an excellent local news and mail server. + +The other solution would be, to replace the method Gnus +uses to get mail from POP3 servers by one which is capable +of leaving the mail on the server. If you use XEmacs, get +the package mail-lib, it includes an enhanced pop3.el, +look in the file, there's documentation on how to tell +Gnus to use it and not to delete the retrieved mail. For +GNU Emacs look for the file epop3.el which can do the same +(If you know the home of this file, please send me an +e-mail). You can also tell Gnus to use an external program +(e.g. fetchmail) to fetch your mail, see the info node +"Mail Source Specifiers" in the Gnus manual on how to do +it. + +@node FAQ 4 - Reading messages @subsection Reading messages @menu -* [4.1]:: When I enter a group, all read messages are gone. - How to view them again? -* [4.2]:: How to tell Gnus to show an important message every time - I enter a group, even when it's read? -* [4.3]:: How to view the headers of a message? -* [4.4]:: How to view the raw unformatted message? -* [4.5]:: How can I change the headers Gnus displays by default at the - top of the article buffer? -* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the - text part if it's available. How to do it? -* [4.7]:: Can I use some other browser than w3 to render my HTML-mails? -* [4.8]:: Is there anything I can do to make poorly formatted mails - more readable? -* [4.9]:: Is there a way to automatically ignore posts by specific authors - or with specific words in the subject? And can I highlight more - interesting ones in some way? -* [4.10]:: How can I disable threading in some (e.g. mail-) groups, or set - other variables specific for some groups? -* [4.11]:: Can I highlight messages written by me and follow-ups to those? -* [4.12]:: The number of total messages in a group which Gnus displays in - group buffer is by far to high, especially in mail groups. - Is this a bug? -* [4.13]:: I don't like the layout of summary and article buffer, - how to change it? Perhaps even a three pane display? -* [4.14]:: I don't like the way the Summary buffer looks, how to tweak it? -* [4.15]:: How to split incoming mails in several groups? +* [4.1]:: When I enter a group, all read messages are gone. How to + view them again? +* [4.2]:: How to tell Gnus to show an important message every time I + enter a group, even when it's read? +* [4.3]:: How to view the headers of a message? +* [4.4]:: How to view the raw unformatted message? +* [4.5]:: How can I change the headers Gnus displays by default at + the top of the article buffer? +* [4.6]:: I'd like Gnus NOT to render HTML-mails but show me the + text part if it's available. How to do it? +* [4.7]:: Can I use some other browser than w3 to render my + HTML-mails? +* [4.8]:: Is there anything I can do to make poorly formatted mails + more readable? +* [4.9]:: Is there a way to automatically ignore posts by specific + authors or with specific words in the subject? And can I highlight + more interesting ones in some way? +* [4.10]:: How can I disable threading in some (e.g. mail-) groups, + or set other variables specific for some groups? +* [4.11]:: Can I highlight messages written by me and follow-ups to + those? +* [4.12]:: The number of total messages in a group which Gnus + displays in group buffer is by far to high, especially in mail + groups. Is this a bug? +* [4.13]:: I don't like the layout of summary and article buffer, how + to change it? Perhaps even a three pane display? +* [4.14]:: I don't like the way the Summary buffer looks, how to + tweak it? +* [4.15]:: How to split incoming mails in several groups? @end menu -@ifnottex -@node [4.1], [4.2], FAQ 4 - Reading messages, FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.1: - - When I enter a group, all read messages are gone. How to view them again? - - -Answer: - - If you enter the group by saying - @samp{RET} - in group buffer with point over the group, only unread and ticked messages are loaded. Say - @samp{C-u RET} - instead to load all available messages. If you want only the e.g. 300 newest say - @samp{C-u 300 RET} - - - Loading only unread messages can be annoying if you have threaded view enabled, say - +@node [4.1] +@subsubheading Question 4.1 + +When I enter a group, all read messages are gone. How to view them again? + +@subsubheading Answer + +If you enter the group by saying +@samp{RET} +in group buffer with point over the group, only unread and ticked messages are loaded. Say +@samp{C-u RET} +instead to load all available messages. If you want only the e.g. 300 newest say +@samp{C-u 300 RET} + +Loading only unread messages can be annoying if you have threaded view enabled, say @example (setq gnus-fetch-old-headers 'some) @end example - - @noindent - in ~/.gnus to load enough old articles to prevent teared threads, replace 'some with t to load - all articles (Warning: Both settings enlarge the amount of data which is - fetched when you enter a group and slow down the process of entering a group). - - - If you already use Gnus 5.10, you can say - @samp{/o N} - In summary buffer to load the last N messages, this feature is not available in 5.8.8 - - - If you don't want all old messages, but the parent of the message you're just reading, - you can say @samp{^}, if you want to retrieve the whole thread - the message you're just reading belongs to, @samp{A T} is your friend. - -@ifnottex -@node [4.2], [4.3], [4.1], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.2: - - How to tell Gnus to show an important message every time I - enter a group, even when it's read? - - -Answer: - - You can tick important messages. To do this hit - @samp{u} while point is in summary buffer - over the message. When you want to remove the mark, hit - either @samp{d} (this deletes the tick - mark and set's unread mark) or @samp{M c} - (which deletes all marks for the message). - -@ifnottex -@node [4.3], [4.4], [4.2], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.3: - - How to view the headers of a message? - - -Answer: - - Say @samp{t} - to show all headers, one more - @samp{t} - hides them again. -@ifnottex -@node [4.4], [4.5], [4.3], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.4: - - How to view the raw unformatted message? - - -Answer: - - Say - @samp{C-u g} - to show the raw message - @samp{g} - returns to normal view. - -@ifnottex -@node [4.5], [4.6], [4.4], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.5: - - How can I change the headers Gnus displays by default at - the top of the article buffer? - - -Answer: - - The variable gnus-visible-headers controls which headers - are shown, its value is a regular expression, header lines - which match it are shown. So if you want author, subject, - date, and if the header exists, Followup-To and MUA / NUA - say this in ~/.gnus: - +in ~/.gnus.el to load enough old articles to prevent teared threads, replace 'some with t to load +all articles (Warning: Both settings enlarge the amount of data which is +fetched when you enter a group and slow down the process of entering a group). + +If you already use Gnus 5.10, you can say +@samp{/o N} +In summary buffer to load the last N messages, this feature is not available in 5.8.8 + +If you don't want all old messages, but the parent of the message you're just reading, +you can say @samp{^}, if you want to retrieve the whole thread +the message you're just reading belongs to, @samp{A T} is your friend. + +@node [4.2] +@subsubheading Question 4.2 + +How to tell Gnus to show an important message every time I +enter a group, even when it's read? + +@subsubheading Answer + +You can tick important messages. To do this hit +@samp{u} while point is in summary buffer +over the message. When you want to remove the mark, hit +either @samp{d} (this deletes the tick +mark and set's unread mark) or @samp{M c} +(which deletes all marks for the message). + +@node [4.3] +@subsubheading Question 4.3 + +How to view the headers of a message? + +@subsubheading Answer + +Say @samp{t} +to show all headers, one more +@samp{t} +hides them again. + +@node [4.4] +@subsubheading Question 4.4 + +How to view the raw unformatted message? + +@subsubheading Answer + +Say +@samp{C-u g} +to show the raw message +@samp{g} +returns to normal view. + +@node [4.5] +@subsubheading Question 4.5 + +How can I change the headers Gnus displays by default at +the top of the article buffer? + +@subsubheading Answer + +The variable gnus-visible-headers controls which headers +are shown, its value is a regular expression, header lines +which match it are shown. So if you want author, subject, +date, and if the header exists, Followup-To and MUA / NUA +say this in ~/.gnus.el: + @example -(setq gnus-visible-headers - "^\\(From:\\|Subject:\\|Date:\\|Followup-To:\ -\\|X-Newsreader:\\|User-Agent:\\|X-Mailer:\\)") +(setq gnus-visible-headers + '("^From" "^Subject" "^Date" "^Newsgroups" "^Followup-To" + "^User-Agent" "^X-Newsreader" "^X-Mailer")) @end example - -@ifnottex -@node [4.6], [4.7], [4.5], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.6: - - I'd like Gnus NOT to render HTML-mails but show me the - text part if it's available. How to do it? - - -Answer: - - Say - +@noindent + +@node [4.6] +@subsubheading Question 4.6 + +I'd like Gnus NOT to render HTML-mails but show me the +text part if it's available. How to do it? + +@subsubheading Answer + +Say @example (eval-after-load "mm-decode" @@ -978,240 +889,206 @@ (add-to-list 'mm-discouraged-alternatives "text/html") (add-to-list 'mm-discouraged-alternatives "text/richtext"))) @end example - @noindent - in ~/.gnus. If you don't want HTML rendered, even if there's no text alternative add - + +in ~/.gnus.el. If you don't want HTML rendered, even if there's no text alternative add @example (setq mm-automatic-display (remove "text/html" mm-automatic-display)) @end example - @noindent - too. - -@ifnottex -@node [4.7], [4.8], [4.6], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.7: - - Can I use some other browser than w3 to render my HTML-mails? - - -Answer: - - Only if you use Gnus 5.10 or younger. In this case you've got the - choice between w3, w3m, links, lynx and html2text, which - one is used can be specified in the variable - mm-text-html-renderer, so if you want links to render your - mail say - + +too. + +@node [4.7] +@subsubheading Question 4.7 + +Can I use some other browser than w3 to render my HTML-mails? + +@subsubheading Answer + +Only if you use Gnus 5.10 or younger. In this case you've got the +choice between w3, w3m, links, lynx and html2text, which +one is used can be specified in the variable +mm-text-html-renderer, so if you want links to render your +mail say @example (setq mm-text-html-renderer 'links) @end example - -@ifnottex -@node [4.8], [4.9], [4.7], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.8: - - Is there anything I can do to make poorly formatted mails - more readable? - - -Answer: - - Gnus offers you several functions to "wash" incoming mail, - you can find them if you browse through the menu, item Article->Washing. The most - interesting ones are probably "Wrap long lines" ( - @samp{W w} - ), "Decode ROT13" ( - @samp{W r} - ) and "Outlook Deuglify" which repairs the dumb quoting used - by many users of Microsoft products ( - @samp{W Y f} gives you full deuglify. - See @samp{W Y C-h} or - have a look at the menus for other deuglifications). - Outlook deuglify is only available since Gnus 5.10. - -@ifnottex -@node [4.9], [4.10], [4.8], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.9: - - Is there a way to automatically ignore posts by specific - authors or with specific words in the subject? And can I - highlight more interesting ones in some way? - - -Answer: - - You want Scoring. Scoring means, that you define rules - which assign each message an integer value. Depending on - the value the message is highlighted in summary buffer (if - it's high, say +2000) or automatically marked read (if the - value is low, say -800) or some other action happens. - - - There are basically three ways of setting up rules which assign - the scoring-value to messages. The first and easiest way is to set - up rules based on the article you are just reading. Say you're - reading a message by a guy who always writes nonsense and you want - to ignore his messages in the future. Hit - @samp{L}, to set up a rule which lowers the score. - Now Gnus asks you which the criteria for lowering the Score shall - be. Hit @samp{?} twice to see all possibilities, - we want @samp{a} which means the author (the from - header). Now Gnus wants to know which kind of matching we want. - Hit either @samp{e} for an exact match or - @samp{s} for substring-match and delete afterwards - everything but the name to score down all authors with the given - name no matter which email address is used. Now you need to tell - Gnus when to apply the rule and how long it should last, hit e.g. - @samp{p} to apply the rule now and let it last - forever. If you want to raise the score instead of lowering it say - @samp{I} instead of @samp{L}. - - - You can also set up rules by hand. To do this say @samp{V - f} in summary buffer. Then you are asked for the name - of the score file, it's name.of.group.SCORE for rules valid in - only one group or all.Score for rules valid in all groups. See the - Gnus manual for the exact syntax, basically it's one big list - whose elements are lists again. the first element of those lists - is the header to score on, then one more list with what to match, - which score to assign, when to expire the rule and how to do the - matching. If you find me very interesting, you could e.g. add the - following to your all.Score: - +@noindent + +@node [4.8] +@subsubheading Question 4.8 + +Is there anything I can do to make poorly formatted mails +more readable? + +@subsubheading Answer + +Gnus offers you several functions to "wash" incoming mail, you can +find them if you browse through the menu, item +Article->Washing. The most interesting ones are probably "Wrap +long lines" (@samp{W w}), "Decode ROT13" +(@samp{W r}) and "Outlook Deuglify" which repairs +the dumb quoting used by many users of Microsoft products +(@samp{W Y f} gives you full deuglify. +See @samp{W Y C-h} or have a look at the menus for +other deuglifications). Outlook deuglify is only available since +Gnus 5.10. + +@node [4.9] +@subsubheading Question 4.9 + +Is there a way to automatically ignore posts by specific +authors or with specific words in the subject? And can I +highlight more interesting ones in some way? + +@subsubheading Answer + +You want Scoring. Scoring means, that you define rules +which assign each message an integer value. Depending on +the value the message is highlighted in summary buffer (if +it's high, say +2000) or automatically marked read (if the +value is low, say -800) or some other action happens. + +There are basically three ways of setting up rules which assign +the scoring-value to messages. The first and easiest way is to set +up rules based on the article you are just reading. Say you're +reading a message by a guy who always writes nonsense and you want +to ignore his messages in the future. Hit +@samp{L}, to set up a rule which lowers the score. +Now Gnus asks you which the criteria for lowering the Score shall +be. Hit @samp{?} twice to see all possibilities, +we want @samp{a} which means the author (the from +header). Now Gnus wants to know which kind of matching we want. +Hit either @samp{e} for an exact match or +@samp{s} for substring-match and delete afterwards +everything but the name to score down all authors with the given +name no matter which email address is used. Now you need to tell +Gnus when to apply the rule and how long it should last, hit e.g. +@samp{p} to apply the rule now and let it last +forever. If you want to raise the score instead of lowering it say +@samp{I} instead of @samp{L}. + +You can also set up rules by hand. To do this say @samp{V +f} in summary buffer. Then you are asked for the name +of the score file, it's name.of.group.SCORE for rules valid in +only one group or all.Score for rules valid in all groups. See the +Gnus manual for the exact syntax, basically it's one big list +whose elements are lists again. the first element of those lists +is the header to score on, then one more list with what to match, +which score to assign, when to expire the rule and how to do the +matching. If you find me very interesting, you could e.g. add the +following to your all.Score: @example (("references" ("hschmi22.userfqdn.rz-online.de" 500 nil s)) ("message-id" ("hschmi22.userfqdn.rz-online.de" 999 nil s))) @end example - @noindent - This would add 999 to the score of messages written by me - and 500 to the score of messages which are a (possibly - indirect) answer to a message written by me. Of course - nobody with a sane mind would do this :-) - - - The third alternative is adaptive scoring. This means Gnus - watches you and tries to find out what you find - interesting and what annoying and sets up rules - which reflect this. Adaptive scoring can be a huge help - when reading high traffic groups. If you want to activate - adaptive scoring say - + +This would add 999 to the score of messages written by me +and 500 to the score of messages which are a (possibly +indirect) answer to a message written by me. Of course +nobody with a sane mind would do this :-) + +The third alternative is adaptive scoring. This means Gnus +watches you and tries to find out what you find +interesting and what annoying and sets up rules +which reflect this. Adaptive scoring can be a huge help +when reading high traffic groups. If you want to activate +adaptive scoring say @example (setq gnus-use-adaptive-scoring t) @end example - @noindent - in ~/.gnus. - -@ifnottex -@node [4.10], [4.11], [4.9], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.10: - - How can I disable threading in some (e.g. mail-) groups, or - set other variables specific for some groups? - - -Answer: - - While in group buffer move point over the group and hit - @samp{G c}, this opens a buffer where you - can set options for the group. At the bottom of the buffer - you'll find an item that allows you to set variables - locally for the group. To disable threading enter - gnus-show-threads as name of variable and nil as - value. Hit button done at the top of the buffer when - you're ready. - -@ifnottex -@node [4.11], [4.12], [4.10], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.11: - - Can I highlight messages written by me and follow-ups to - those? - - -Answer: - - Stop those "Can I ..." questions, the answer is always yes - in Gnus Country :-). It's a three step process: First we - make faces (specifications of how summary-line shall look - like) for those postings, then we'll give them some - special score and finally we'll tell Gnus to use the new - faces. You can find detailed instructions on how to do it on - @uref{http://my.gnus.org/Members/dzimmerm/HowTo%2C2002-07-25%2C1027619165012198456/view,my.gnus.org} - -@ifnottex -@node [4.12], [4.13], [4.11], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.12: - - The number of total messages in a group which Gnus - displays in group buffer is by far to high, especially in - mail groups. Is this a bug? - - -Answer: - - No, that's a matter of design of Gnus, fixing this would - mean reimplementation of major parts of Gnus' - back ends. Gnus thinks "highest-article-number - - lowest-article-number = total-number-of-articles". This - works OK for Usenet groups, but if you delete and move - many messages in mail groups, this fails. To cure the - symptom, enter the group via @samp{C-u RET} - (this makes Gnus get all messages), then - hit @samp{M P b} to mark all messages and - then say @samp{B m name.of.group} to move - all messages to the group they have been in before, they - get new message numbers in this process and the count is - right again (until you delete and move your mail to other - groups again). - -@ifnottex -@node [4.13], [4.14], [4.12], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.13: - - I don't like the layout of summary and article buffer, how - to change it? Perhaps even a three pane display? - - -Answer: - - You can control the windows configuration by calling the - function gnus-add-configuration. The syntax is a bit - complicated but explained very well in the manual node - "Window Layout". Some popular examples: - - - Instead 25% summary 75% article buffer 35% summary and 65% - article (the 1.0 for article means "take the remaining - space"): - + +in ~/.gnus.el. + +@node [4.10] +@subsubheading Question 4.10 + +How can I disable threading in some (e.g. mail-) groups, or +set other variables specific for some groups? + +@subsubheading Answer + +While in group buffer move point over the group and hit +@samp{G c}, this opens a buffer where you +can set options for the group. At the bottom of the buffer +you'll find an item that allows you to set variables +locally for the group. To disable threading enter +gnus-show-threads as name of variable and nil as +value. Hit button done at the top of the buffer when +you're ready. + +@node [4.11] +@subsubheading Question 4.11 + +Can I highlight messages written by me and follow-ups to +those? + +@subsubheading Answer + +Stop those "Can I ..." questions, the answer is always yes +in Gnus Country :-). It's a three step process: First we +make faces (specifications of how summary-line shall look +like) for those postings, then we'll give them some +special score and finally we'll tell Gnus to use the new +faces. You can find detailed instructions on how to do it on +@uref{http://my.gnus.org/node/view/224, my.gnus.org} + +@node [4.12] +@subsubheading Question 4.12 + +The number of total messages in a group which Gnus +displays in group buffer is by far to high, especially in +mail groups. Is this a bug? + +@subsubheading Answer + +No, that's a matter of design of Gnus, fixing this would +mean reimplementation of major parts of Gnus' +back ends. Gnus thinks "highest-article-number - +lowest-article-number = total-number-of-articles". This +works OK for Usenet groups, but if you delete and move +many messages in mail groups, this fails. To cure the +symptom, enter the group via @samp{C-u RET} +(this makes Gnus get all messages), then +hit @samp{M P b} to mark all messages and +then say @samp{B m name.of.group} to move +all messages to the group they have been in before, they +get new message numbers in this process and the count is +right again (until you delete and move your mail to other +groups again). + +@node [4.13] +@subsubheading Question 4.13 + +I don't like the layout of summary and article buffer, how +to change it? Perhaps even a three pane display? + +@subsubheading Answer + +You can control the windows configuration by calling the +function gnus-add-configuration. The syntax is a bit +complicated but explained very well in the manual node +"Window Layout". Some popular examples: + +Instead 25% summary 75% article buffer 35% summary and 65% +article (the 1.0 for article means "take the remaining +space"): @example -(gnus-add-configuration - '(article (vertical 1.0 - (summary .35 point) - (article 1.0)))) +(gnus-add-configuration + '(article (vertical 1.0 (summary .35 point) (article 1.0)))) @end example - - - A three pane layout, Group buffer on the left, summary - buffer top-right, article buffer bottom-right: - +@noindent + +A three pane layout, Group buffer on the left, summary +buffer top-right, article buffer bottom-right: @example (gnus-add-configuration @@ -1228,46 +1105,40 @@ (vertical 25 (group 1.0)) (vertical 1.0 - (summary 1.0 point))))) + (summary 1.0 point))))) @end example - -@ifnottex -@node [4.14], [4.15], [4.13], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.14: - - I don't like the way the Summary buffer looks, how to tweak it? - - -Answer: - - You've got to play around with the variable - gnus-summary-line-format. It's value is a string of - symbols which stand for things like author, date, subject - etc. A list of the available specifiers can be found in the - manual node "Summary Buffer Lines" and the often forgotten - node "Formatting Variables" and it's sub-nodes. There - you'll find useful things like positioning the cursor and - tabulators which allow you a summary in table form, but - sadly hard tabulators are broken in 5.8.8. - - - Since 5.10, Gnus offers you some very nice new specifiers, - e.g. %B which draws a thread-tree and %&user-date which - gives you a date where the details are dependent of the - articles age. Here's an example which uses both: - +@noindent + +@node [4.14] +@subsubheading Question 4.14 + +I don't like the way the Summary buffer looks, how to tweak it? + +@subsubheading Answer + +You've got to play around with the variable +gnus-summary-line-format. It's value is a string of +symbols which stand for things like author, date, subject +etc. A list of the available specifiers can be found in the +manual node "Summary Buffer Lines" and the often forgotten +node "Formatting Variables" and it's sub-nodes. There +you'll find useful things like positioning the cursor and +tabulators which allow you a summary in table form, but +sadly hard tabulators are broken in 5.8.8. + +Since 5.10, Gnus offers you some very nice new specifiers, +e.g. %B which draws a thread-tree and %&user-date which +gives you a date where the details are dependent of the +articles age. Here's an example which uses both: @example -(setq gnus-summary-line-format - ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") +(setq gnus-summary-line-format ":%U%R %B %s %-60=|%4L |%-20,20f |%&user-date; \n") @end example - @noindent - resulting in: - - -@smallexample + +resulting in: + +@example :O Re: [Richard Stallman] rfc2047.el | 13 |Lars Magne Ingebrigt |Sat 23:06 :O Re: Revival of the ding-patches list | 13 |Lars Magne Ingebrigt |Sat 23:12 :R > Re: Find correct list of articles for a gro| 25 |Lars Magne Ingebrigt |Sat 23:16 @@ -1280,54 +1151,48 @@ :R > Re: Gnus still doesn't count messages prope| 23 |Lars Magne Ingebrigt |Sat 23:57 :O \-> ... | 18 |Kai Grossjohann | 0:35 :O \-> ... | 13 |Lars Magne Ingebrigt | 0:56 -@end smallexample - -@ifnottex -@node [4.15], , [4.14], FAQ 4 - Reading messages -@end ifnottex -@subsubheading Question 4.15: - - How to split incoming mails in several groups? - - -Answer: - - Gnus offers two possibilities for splitting mail, the easy - nnmail-split-methods and the more powerful Fancy Mail - Splitting. I'll only talk about the first one, refer to - the manual, node "Fancy Mail Splitting" for the latter. - - - The value of nnmail-split-methods is a list, each element - is a list which stands for a splitting rule. Each rule has - the form "group where matching articles should go to", - "regular expression which has to be matched", the first - rule which matches wins. The last rule must always be a - general rule (regular expression .*) which denotes where - articles should go which don't match any other rule. If - the folder doesn't exist yet, it will be created as soon - as an article lands there. By default the mail will be - send to all groups whose rules match. If you - don't want that (you probably don't want), say - +@end example +@noindent + +@node [4.15] +@subsubheading Question 4.15 + +How to split incoming mails in several groups? + +@subsubheading Answer + +Gnus offers two possibilities for splitting mail, the easy +nnmail-split-methods and the more powerful Fancy Mail +Splitting. I'll only talk about the first one, refer to +the manual, node "Fancy Mail Splitting" for the latter. + +The value of nnmail-split-methods is a list, each element +is a list which stands for a splitting rule. Each rule has +the form "group where matching articles should go to", +"regular expression which has to be matched", the first +rule which matches wins. The last rule must always be a +general rule (regular expression .*) which denotes where +articles should go which don't match any other rule. If +the folder doesn't exist yet, it will be created as soon +as an article lands there. By default the mail will be +send to all groups whose rules match. If you +don't want that (you probably don't want), say @example (setq nnmail-crosspost nil) @end example - @noindent - in ~/.gnus. - - - An example might be better than thousand words, so here's - my nnmail-split-methods. Note that I send duplicates in a - special group and that the default group is spam, since I - filter all mails out which are from some list I'm - subscribed to or which are addressed directly to me - before. Those rules kill about 80% of the Spam which - reaches me (Email addresses are changed to prevent spammers - from using them): - + +in ~/.gnus.el. + +An example might be better than thousand words, so here's +my nnmail-split-methods. Note that I send duplicates in a +special group and that the default group is spam, since I +filter all mails out which are from some list I'm +subscribed to or which are addressed directly to me +before. Those rules kill about 80% of the Spam which +reaches me (Email addresses are changed to prevent spammers +from using them): @example (setq nnmail-split-methods @@ -1336,133 +1201,114 @@ ("Gnus-Tut" "^\\(To:\\|CC:\\).*localpart@@socha.bla.*") ("tcsh" "^\\(To:\\|CC:\\).*localpart@@mx.gw.bla.*") ("BAfH" "^\\(To:\\|CC:\\).*localpart@@.*uni-muenchen.bla.*") - ("Hamster-src" - "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*") + ("Hamster-src" "^\\(CC:\\|To:\\).*hamster-sourcen@@yahoogroups.\\(de\\|com\\).*") ("Tagesschau" "^From: tagesschau $") ("Replies" "^\\(CC:\\|To:\\).*localpart@@Frank-Schmitt.bla.*") - ("EK" - "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*") - ("Spam" - "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") - ("Spam" - "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") - ("Spam" - "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") + ("EK" "^From:.*\\(localpart@@privateprovider.bla\\|localpart@@workplace.bla\\).*") + ("Spam" "^Content-Type:.*\\(ks_c_5601-1987\\|EUC-KR\\|big5\\|iso-2022-jp\\).*") + ("Spam" "^Subject:.*\\(This really work\\|XINGA\\|ADV:\\|XXX\\|adult\\|sex\\).*") + ("Spam" "^Subject:.*\\(\=\?ks_c_5601-1987\?\\|\=\?euc-kr\?\\|\=\?big5\?\\).*") ("Spam" "^X-Mailer:\\(.*BulkMailer.*\\|.*MIME::Lite.*\\|\\)") - ("Spam" - "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") - ("Spam" - "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") + ("Spam" "^X-Mailer:\\(.*CyberCreek Avalanche\\|.*http\:\/\/GetResponse\.com\\)") + ("Spam" "^From:.*\\(verizon\.net\\|prontomail\.com\\|money\\|ConsumerDirect\\).*") ("Spam" "^Delivered-To: GMX delivery to spamtrap@@gmx.bla$") ("Spam" "^Received: from link2buy.com") ("Spam" "^CC: .*azzrael@@t-online.bla") ("Spam" "^X-Mailer-Version: 1.50 BETA") ("Uni" "^\\(CC:\\|To:\\).*localpart@@uni-koblenz.bla.*") - ("Inbox" - "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)") + ("Inbox" "^\\(CC:\\|To:\\).*\\(my\ name\\|address@@one.bla\\|adress@@two.bla\\)") ("Spam" ""))) @end example - - -@ifnottex -@node FAQ 5 - Composing messages, FAQ 6 - Old messages, FAQ 4 - Reading messages, Frequently Asked Questions -@end ifnottex +@noindent + +@node FAQ 5 - Composing messages @subsection Composing messages @menu -* [5.1]:: What are the basic commands I need to know for sending mail and - postings? -* [5.2]:: How to enable automatic word-wrap when composing messages? -* [5.3]:: How to set stuff like From, Organization, Reply-To, signature...? -* [5.4]:: Can I set things like From, Signature etc group based on the - group I post too? -* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly spell-checking? -* [5.6]:: Can I set the dictionary based on the group I'm posting to? -* [5.7]:: Is there some kind of address-book, so I needn't remember all - those email addresses? -* [5.8]:: Sometimes I see little images at the top of article buffer. - What's that and how can I send one with my postings, too? -* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups. - Can Gnus warn me, when I'm replying by mail in newsgroups? -* [5.10]:: How to tell Gnus not to generate a sender header? -* [5.11]:: I want Gnus to locally store copies of my send mail and news, - how to do it? -* [5.12]:: People tell me my Message-IDs are not correct, - why aren't they and how to fix it? +* [5.1]:: What are the basic commands I need to know for sending + mail and postings? +* [5.2]:: How to enable automatic word-wrap when composing messages? +* [5.3]:: How to set stuff like From, Organization, Reply-To, + signature...? +* [5.4]:: Can I set things like From, Signature etc group based on + the group I post too? +* [5.5]:: Is there a spell-checker? Perhaps even on-the-fly + spell-checking? +* [5.6]:: Can I set the dictionary based on the group I'm posting + to? +* [5.7]:: Is there some kind of address-book, so I needn't remember + all those email addresses? +* [5.8]:: Sometimes I see little images at the top of article + buffer. What's that and how can I send one with my postings, too? +* [5.9]:: Sometimes I accidentally hit r instead of f in newsgroups. + Can Gnus warn me, when I'm replying by mail in newsgroups? +* [5.10]:: How to tell Gnus not to generate a sender header? +* [5.11]:: I want Gnus to locally store copies of my send mail and + news, how to do it? +* [5.12]:: People tell me my Message-IDs are not correct, why aren't + they and how to fix it? @end menu -@ifnottex -@node [5.1], [5.2], FAQ 5 - Composing messages, FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.1: - - What are the basic commands I need to know for sending mail and postings? - - -Answer: - - To start composing a new mail hit @samp{m} - either in Group or Summary buffer, for a posting, it's - either @samp{a} in Group buffer and - filling the Newsgroups header manually - or @samp{a} in the Summary buffer of the - group where the posting shall be send to. Replying by mail - is - @samp{r} if you don't want to cite the - author, or import the cited text manually and - @samp{R} to cite the text of the original - message. For a follow up to a newsgroup, it's - @samp{f} and @samp{F} - (analog to @samp{r} and - @samp{R}). - - - Enter new headers above the line saying "--text follows - this line--", enter the text below the line. When ready - hit @samp{C-c C-c}, to send the message, - if you want to finish it later hit @samp{C-c - C-d} to save it in the drafts group, where you - can start editing it again by saying @samp{D - e}. - -@ifnottex -@node [5.2], [5.3], [5.1], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.2: - - How to enable automatic word-wrap when composing messages? - - -Answer: - - Say - +@node [5.1] +@subsubheading Question 5.1 + +What are the basic commands I need to know for sending mail and postings? + +@subsubheading Answer + +To start composing a new mail hit @samp{m} +either in Group or Summary buffer, for a posting, it's +either @samp{a} in Group buffer and +filling the Newsgroups header manually +or @samp{a} in the Summary buffer of the +group where the posting shall be send to. Replying by mail +is +@samp{r} if you don't want to cite the +author, or import the cited text manually and +@samp{R} to cite the text of the original +message. For a follow up to a newsgroup, it's +@samp{f} and @samp{F} +(analogously to @samp{r} and +@samp{R}). + +Enter new headers above the line saying "--text follows +this line--", enter the text below the line. When ready +hit @samp{C-c C-c}, to send the message, +if you want to finish it later hit @samp{C-c +C-d} to save it in the drafts group, where you +can start editing it again by saying @samp{D +e}. + +@node [5.2] +@subsubheading Question 5.2 + +How to enable automatic word-wrap when composing messages? + +@subsubheading Answer + +Say @example (add-hook 'message-mode-hook - (lambda () - (setq fill-column 72) - (turn-on-auto-fill))) + (lambda () + (setq fill-column 72) + (turn-on-auto-fill))) @end example - @noindent - in ~/.gnus. You can reformat a paragraph by hitting - @samp{M-q} (as usual) - -@ifnottex -@node [5.3], [5.4], [5.2], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.3: - - How to set stuff like From, Organization, Reply-To, signature...? - - -Answer: - - There are other ways, but you should use posting styles - for this. (See below why). - This example should make the syntax clear: - + +in ~/.gnus.el. You can reformat a paragraph by hitting +@samp{M-q} (as usual) + +@node [5.3] +@subsubheading Question 5.3 + +How to set stuff like From, Organization, Reply-To, signature...? + +@subsubheading Answer + +There are other ways, but you should use posting styles +for this. (See below why). +This example should make the syntax clear: @example (setq gnus-posting-styles @@ -1474,146 +1320,121 @@ ("X-SampleHeader" "foobar") (eval (setq some-variable "Foo bar"))))) @end example - @noindent - The ".*" means that this settings are the default ones - (see below), valid values for the first element of the - following lists are signature, signature-file, - organization, address, name or body. The attribute name - can also be a string. In that case, this will be used as - a header name, and the value will be inserted in the - headers of the article; if the value is `nil', the header - name will be removed. You can also say (eval (foo bar)), - then the function foo will be evaluated with argument bar - and the result will be thrown away. - -@ifnottex -@node [5.4], [5.5], [5.3], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.4: - - Can I set things like From, Signature etc group based on the group I post too? - - -Answer: - - That's the strength of posting styles. Before, we used ".*" - to set the default for all groups. You can use a regexp - like "^gmane" and the following settings are only applied - to postings you send to the gmane hierarchy, use - ".*binaries" instead and they will be applied to postings - send to groups containing the string binaries in their - name etc. - - - You can instead of specifying a regexp specify a function - which is evaluated, only if it returns true, the - corresponding settings take effect. Two interesting - candidates for this are message-news-p which returns t if - the current Group is a newsgroup and the corresponding - message-mail-p. - - - Note that all forms that match are applied, that means in - the example below, when I post to - gmane.mail.spam.spamassassin.general, the settings under - ".*" are applied and the settings under message-news-p and - those under "^gmane" and those under - "^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because - of this put general settings at the top and specific ones - at the bottom. - + +The ".*" means that this settings are the default ones +(see below), valid values for the first element of the +following lists are signature, signature-file, +organization, address, name or body. The attribute name +can also be a string. In that case, this will be used as +a header name, and the value will be inserted in the +headers of the article; if the value is `nil', the header +name will be removed. You can also say (eval (foo bar)), +then the function foo will be evaluated with argument bar +and the result will be thrown away. + +@node [5.4] +@subsubheading Question 5.4 + +Can I set things like From, Signature etc group based on the group I post too? + +@subsubheading Answer + +That's the strength of posting styles. Before, we used ".*" +to set the default for all groups. You can use a regexp +like "^gmane" and the following settings are only applied +to postings you send to the gmane hierarchy, use +".*binaries" instead and they will be applied to postings +send to groups containing the string binaries in their +name etc. + +You can instead of specifying a regexp specify a function +which is evaluated, only if it returns true, the +corresponding settings take effect. Two interesting +candidates for this are message-news-p which returns t if +the current Group is a newsgroup and the corresponding +message-mail-p. + +Note that all forms that match are applied, that means in +the example below, when I post to +gmane.mail.spam.spamassassin.general, the settings under +".*" are applied and the settings under message-news-p and +those under "^gmane" and those under +"^gmane\\.mail\\.spam\\.spamassassin\\.general$". Because +of this put general settings at the top and specific ones +at the bottom. @example (setq gnus-posting-styles '((".*" ;;default (name "Frank Schmitt") (organization "Hamme net, kren mer och nimmi") - (signature-file "~/.signature")) + (signature-file "~/.signature") ) ((message-news-p) ;;Usenet news? (address "mySpamTrap@@Frank-Schmitt.bla") - ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla")) + ("Reply-To" "hereRealRepliesOnlyPlease@@Frank-Schmitt.bla") ) ((message-mail-p) ;;mail? - (address "usedForMails@@Frank-Schmitt.bla")) + (address "usedForMails@@Frank-Schmitt.bla") ) ("^gmane" ;;this is mail, too in fact (address "usedForMails@@Frank-Schmitt.net") - ("Reply-To" nil)) + ("Reply-To" nil) ) ("^gmane.mail.spam.spamassassin.general$" (eval (setq mail-envelope-from "Azzrael@@rz-online.de")) - (address "Azzrael@@rz-online.de")))) + (address "Azzrael@@rz-online.de")) )) @end example - -@ifnottex -@node [5.5], [5.6], [5.4], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.5: - - Is there a spell-checker? Perhaps even on-the-fly spell-checking? - - -Answer: - -You can use ispell.el to spell-check stuff in Emacs. So the first -thing to do is to make sure that you've got either -@itemize @bullet -@item -@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html,ispell} -or -@item -@uref{http://aspell.sourceforge.net/,aspell} -@end itemize @noindent -installed and in your Path. - -Then you need -@uref{http://www.kdstevens.com/~stevens/ispell-page.html,ispell.el,ispell.el} -and for on-the-fly spell-checking -@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html,flyspell.el,flyspell.el}. -Ispell.el is shipped with Gnus Emacs and available through the Emacs -package system, flyspell.el is shipped with Emacs and part of XEmacs -text-modes package which is available through the package system, so -there should be no need to install them manually. - - - Ispell.el assumes you use ispell, if you choose aspell say - + +@node [5.5] +@subsubheading Question 5.5 + +Is there a spell-checker? Perhaps even on-the-fly spell-checking? + +@subsubheading Answer + +You can use ispell.el to spell-check stuff in Emacs. So the +first thing to do is to make sure that you've got either +@uref{http://fmg-www.cs.ucla.edu/fmg-members/geoff/ispell.html, ispell} +or @uref{http://aspell.sourceforge.net/, aspell} +installed and in your Path. Then you need +@uref{http://www.kdstevens.com/~stevens/ispell-page.html, ispell.el} +and for on-the-fly spell-checking +@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html, flyspell.el}. +Ispell.el is shipped with Emacs and available through the XEmacs package system, +flyspell.el is shipped with Emacs and part of XEmacs text-modes package which is +available through the package system, so there should be no need to install them +manually. + +Ispell.el assumes you use ispell, if you choose aspell say @example (setq ispell-program-name "aspell") @end example +@noindent - -@noindent - in your Emacs configuration file. - - - If you want your outgoing messages to be spell-checked, say - +in your Emacs configuration file. + +If you want your outgoing messages to be spell-checked, say @example (add-hook 'message-send-hook 'ispell-message) @end example - @noindent - In your ~/.gnus, if you prefer on-the-fly spell-checking say - + +In your ~/.gnus.el, if you prefer on-the-fly spell-checking say @example (add-hook 'message-mode-hook (lambda () (flyspell-mode 1))) @end example - -@ifnottex -@node [5.6], [5.7], [5.5], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.6: - - Can I set the dictionary based on the group I'm posting to? - - -Answer: - - Yes, say something like - +@noindent + +@node [5.6] +@subsubheading Question 5.6 + +Can I set the dictionary based on the group I'm posting to? + +@subsubheading Answer + +Yes, say something like @example (add-hook 'gnus-select-group-hook @@ -1625,55 +1446,47 @@ (t (ispell-change-dictionary "english"))))) @end example - - @noindent - in ~/.gnus. Change "^de\\." and "deutsch8" to something - that suits your needs. -@ifnottex -@node [5.7], [5.8], [5.6], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.7: - - Is there some kind of address-book, so I needn't remember - all those email addresses? - - -Answer: - - There's an very basic solution for this, mail aliases. - You can store your mail addresses in a ~/.mailrc file using a simple - alias syntax: - +in ~/.gnus.el. Change "^de\\." and "deutsch8" to something +that suits your needs. + +@node [5.7] +@subsubheading Question 5.7 + +Is there some kind of address-book, so I needn't remember +all those email addresses? + +@subsubheading Answer + +There's an very basic solution for this, mail aliases. +You can store your mail addresses in a ~/.mailrc file using a simple +alias syntax: @example alias al "Al " @end example - @noindent - Then typing your alias (followed by a space or punctuation - character) on a To: or Cc: line in the message buffer will - cause Gnus to insert the full address for you. See the - node "Mail Aliases" in Message (not Gnus) manual for - details. - - - However, what you really want is the Insidious Big Brother - Database bbdb. Get it through the XEmacs package system or from - @uref{http://bbdb.sourceforge.net/,bbdb's homepage}. - Now place the following in ~/.gnus, to activate bbdb for Gnus: - + +Then typing your alias (followed by a space or punctuation +character) on a To: or Cc: line in the message buffer will +cause Gnus to insert the full address for you. See the +node "Mail Aliases" in Message (not Gnus) manual for +details. + +However, what you really want is the Insidious Big Brother +Database bbdb. Get it through the XEmacs package system or from +@uref{http://bbdb.sourceforge.net/, bbdb's homepage}. +Now place the following in ~/.gnus.el, to activate bbdb for Gnus: @example (require 'bbdb) (bbdb-initialize 'gnus 'message) @end example - @noindent - Now you probably want some general bbdb configuration, - place them in ~/.emacs: - + +Now you probably want some general bbdb configuration, +place them in ~/.emacs: @example (require 'bbdb) @@ -1689,56 +1502,50 @@ ;;No popup-buffers (setq bbdb-use-pop-up nil) @end example - @noindent - Now you should be ready to go. Say @samp{M-x bbdb RET - RET} to open a bbdb buffer showing all - entries. Say @samp{c} to create a new - entry, @samp{b} to search your BBDB and - @samp{C-o} to add a new field to an - entry. If you want to add a sender to the BBDB you can - also just hit `:' on the posting in the summary buffer and - you are done. When you now compose a new mail, - hit @samp{TAB} to cycle through know - recipients. - -@ifnottex -@node [5.8], [5.9], [5.7], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.8: - - Sometimes I see little images at the top of article - buffer. What's that and how can I send one with my - postings, too? - - -Answer: - - Those images are called X-Faces. They are 48*48 pixel b/w - pictures, encoded in a header line. If you want to include - one in your posts, you've got to convert some image to a - X-Face. So fire up some image manipulation program (say - Gimp), open the image you want to include, cut out the - relevant part, reduce color depth to 1 bit, resize to - 48*48 and save as bitmap. Now you should get the compface - package from - @uref{ftp://ftp.cs.indiana.edu:/pub/faces/,this site}. - and create the actual X-face by saying - + +Now you should be ready to go. Say @samp{M-x bbdb RET +RET} to open a bbdb buffer showing all +entries. Say @samp{c} to create a new +entry, @samp{b} to search your BBDB and +@samp{C-o} to add a new field to an +entry. If you want to add a sender to the BBDB you can +also just hit `:' on the posting in the summary buffer and +you are done. When you now compose a new mail, +hit @samp{TAB} to cycle through know +recipients. + +@node [5.8] +@subsubheading Question 5.8 + +Sometimes I see little images at the top of article +buffer. What's that and how can I send one with my +postings, too? + +@subsubheading Answer + +Those images are called X-Faces. They are 48*48 pixel b/w +pictures, encoded in a header line. If you want to include +one in your posts, you've got to convert some image to a +X-Face. So fire up some image manipulation program (say +Gimp), open the image you want to include, cut out the +relevant part, reduce color depth to 1 bit, resize to +48*48 and save as bitmap. Now you should get the compface +package from +@uref{ftp://ftp.cs.indiana.edu:/pub/faces/, this site}. +and create the actual X-face by saying @example -cat file.xbm | xbm2ikon |compface > file.face -cat ./file.face | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' > ./file.face.quoted +cat file.xbm | xbm2ikon | compface > file.face +cat file.face | sed 's/\\/\\\\/g;s/\"/\\\"/g;' > file.face.quoted @end example - @noindent -If you can't use compface, there's an online X-face converter at@* -@uref{http://www.dairiki.org/xface/}. If you use MS Windows, you -could also use the WinFace program from + +If you can't use compface, there's an online X-face converter at +@uref{http://www.dairiki.org/xface/}. +If you use MS Windows, you could also use the WinFace program from @uref{http://www.xs4all.nl/~walterln/winface/}. - -Now you only have to tell Gnus to include the X-face in your postings -by saying +Now you only have to tell Gnus to include the X-face in your postings by saying @example (setq message-default-headers @@ -1747,33 +1554,28 @@ (insert-file-contents "~/.xemacs/xface") (buffer-string))) @end example - @noindent - in ~/.gnus. - -@ifnottex -@node [5.9], [5.10], [5.8], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.9: - - Sometimes I accidentally hit r instead of f in - newsgroups. Can Gnus warn me, when I'm replying by mail in - newsgroups? - - -Answer: - - Put this in ~/.gnus: - + +in ~/.gnus.el. + +@node [5.9] +@subsubheading Question 5.9 + +Sometimes I accidentally hit r instead of f in +newsgroups. Can Gnus warn me, when I'm replying by mail in +newsgroups? + +@subsubheading Answer + +Put this in ~/.gnus.el: @example (setq gnus-confirm-mail-reply-to-news t) @end example - @noindent - if you already use Gnus 5.10, if you still use 5.8.8 or - 5.9 try this instead: - + +if you already use Gnus 5.10, if you still use 5.8.8 or +5.9 try this instead: @example (eval-after-load "gnus-msg" @@ -1785,44 +1587,37 @@ (y-or-n-p "Really reply by mail to article author? ")) ad-do-it)))) @end example - -@ifnottex -@node [5.10], [5.11], [5.9], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.10: - - How to tell Gnus not to generate a sender header? - - -Answer: - - Since 5.10 Gnus doesn't generate a sender header by - default. For older Gnus' try this in ~/.gnus: - +@noindent + +@node [5.10] +@subsubheading Question 5.10 + +How to tell Gnus not to generate a sender header? + +@subsubheading Answer + +Since 5.10 Gnus doesn't generate a sender header by +default. For older Gnus' try this in ~/.gnus.el: @example (eval-after-load "message" '(add-to-list 'message-syntax-checks '(sender . disabled))) @end example - - -@ifnottex -@node [5.11], [5.12], [5.10], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.11: - - I want gnus to locally store copies of my send mail and - news, how to do it? - - -Answer: - - You must set the variable gnus-message-archive-group to do - this. You can set it to a string giving the name of the - group where the copies shall go or like in the example - below use a function which is evaluated and which returns - the group to use. - +@noindent + +@node [5.11] +@subsubheading Question 5.11 + +I want Gnus to locally store copies of my send mail and +news, how to do it? + +@subsubheading Answer + +You must set the variable gnus-message-archive-group to do +this. You can set it to a string giving the name of the +group where the copies shall go or like in the example +below use a function which is evaluated and which returns +the group to use. @example (setq gnus-message-archive-group @@ -1830,31 +1625,31 @@ "nnml:Send-News" "nnml:Send-Mail"))) @end example - - -@ifnottex -@node [5.12], , [5.11], FAQ 5 - Composing messages -@end ifnottex -@subsubheading Question 5.12: - - People tell me my Message-IDs are not correct, why - aren't they and how to fix it? - - -Answer: - - The message-ID is an unique identifier for messages you - send. To make it unique, Gnus need to know which machine - name to put after the "@@". If the name of the machine - where Gnus is running isn't suitable (it probably isn't - at most private machines) you can tell Gnus what to use - by saying +@noindent + +@node [5.12] +@subsubheading Question 5.12 + +People tell me my Message-IDs are not correct, why +aren't they and how to fix it? + +@subsubheading Answer + +The message-ID is an unique identifier for messages you +send. To make it unique, Gnus need to know which machine +name to put after the "@@". If the name of the machine +where Gnus is running isn't suitable (it probably isn't +at most private machines) you can tell Gnus what to use +by saying: + @example (setq message-user-fqdn "yourmachine.yourdomain.tld") @end example @noindent - in ~/.gnus. If you use Gnus 5.9 or ealier, you can use this -instead (works for newer versions a well): + +in ~/.gnus.el. If you use Gnus 5.9 or ealier, you can use this +instead (works for newer versions a well): + @example (eval-after-load "message" '(let ((fqdn "yourmachine.yourdomain.tld"));; <-- Edit this! @@ -1865,110 +1660,97 @@ "Return user's fully qualified domain name." fqdn)))) @end example - - If you have no idea what to insert for - "yourmachine.yourdomain.tld", you've got several - choices. You can either ask your provider if he allows - you to use something like - yourUserName.userfqdn.provider.net, or you can use - somethingUnique.yourdomain.tld if you own the domain - yourdomain.tld, or you can register at a service which - gives private users a FQDN for free, e.g. - @uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}. - (Sorry but this website is in German, if you know of an - English one offering the same, drop me a note). - - - Finally you can tell Gnus not to generate a Message-ID - for News at all (and letting the server do the job) by saying - +@noindent + +If you have no idea what to insert for +"yourmachine.yourdomain.tld", you've got several +choices. You can either ask your provider if he allows +you to use something like +yourUserName.userfqdn.provider.net, or you can use +somethingUnique.yourdomain.tld if you own the domain +yourdomain.tld, or you can register at a service which +gives private users a FQDN for free, e.g. +@uref{http://www.stura.tu-freiberg.de/~dlx/addfqdn.html}. +(Sorry but this website is in German, if you know of an +English one offering the same, drop me a note). + +Finally you can tell Gnus not to generate a Message-ID +for News at all (and letting the server do the job) by saying @example (setq message-required-news-headers (remove' Message-ID message-required-news-headers)) @end example - @noindent - you can also tell Gnus not to generate Message-IDs for mail by saying - + +you can also tell Gnus not to generate Message-IDs for mail by saying @example (setq message-required-mail-headers (remove' Message-ID message-required-mail-headers)) @end example - @noindent - , however some mail servers don't generate proper - Message-IDs, too, so test if your Mail Server behaves - correctly by sending yourself a Mail and looking at the Message-ID. - - -@ifnottex -@node FAQ 6 - Old messages, FAQ 7 - Gnus in a dial-up environment, FAQ 5 - Composing messages, Frequently Asked Questions -@end ifnottex + +, however some mail servers don't generate proper +Message-IDs, too, so test if your Mail Server behaves +correctly by sending yourself a Mail and looking at the Message-ID. + +@node FAQ 6 - Old messages @subsection Old messages @menu -* [6.1]:: How to import my old mail into Gnus? -* [6.2]:: How to archive interesting messages? -* [6.3]:: How to search for a specific message? -* [6.4]:: How to get rid of old unwanted mail? -* [6.5]:: I want that all read messages are expired (at least in some - groups). How to do it? -* [6.6]:: I don't want expiration to delete my mails but to move them - to another group. +* [6.1]:: How to import my old mail into Gnus? +* [6.2]:: How to archive interesting messages? +* [6.3]:: How to search for a specific message? +* [6.4]:: How to get rid of old unwanted mail? +* [6.5]:: I want that all read messages are expired (at least in some + groups). How to do it? +* [6.6]:: I don't want expiration to delete my mails but to move them + to another group. @end menu -@ifnottex -@node [6.1], [6.2], FAQ 6 - Old messages, FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.1: - - How to import my old mail into Gnus? - - -Answer: - - The easiest way is to tell your old mail program to - export the messages in mbox format. Most Unix mailers - are able to do this, if you come from the MS Windows - world, you may find tools at - @uref{http://mbx2mbox.sourceforge.net/}. - - - Now you've got to import this mbox file into Gnus. To do - this, create a nndoc group based on the mbox file by - saying @samp{G f /path/file.mbox RET} in - Group buffer. You now have read-only access to your - mail. If you want to import the messages to your normal - Gnus mail groups hierarchy, enter the nndoc group you've - just created by saying @samp{C-u RET} - (thus making sure all messages are retrieved), mark all - messages by saying @samp{M P b} and - either copy them to the desired group by saying - @samp{B c name.of.group RET} or send them - through nnmail-split-methods (respool them) by saying - @samp{B r}. - -@ifnottex -@node [6.2], [6.3], [6.1], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.2: - - How to archive interesting messages? - - -Answer: - - If you stumble across an interesting message, say in - gnu.emacs.gnus and want to archive it there are several - solutions. The first and easiest is to save it to a file - by saying @samp{O f}. However, wouldn't - it be much more convenient to have more direct access to - the archived message from Gnus? If you say yes, put this - snippet by Frank Haun in - ~/.gnus: - +@node [6.1] +@subsubheading Question 6.1 + +How to import my old mail into Gnus? + +@subsubheading Answer + +The easiest way is to tell your old mail program to +export the messages in mbox format. Most Unix mailers +are able to do this, if you come from the MS Windows +world, you may find tools at +@uref{http://mbx2mbox.sourceforge.net/}. + +Now you've got to import this mbox file into Gnus. To do +this, create a nndoc group based on the mbox file by +saying @samp{G f /path/file.mbox RET} in +Group buffer. You now have read-only access to your +mail. If you want to import the messages to your normal +Gnus mail groups hierarchy, enter the nndoc group you've +just created by saying @samp{C-u RET} +(thus making sure all messages are retrieved), mark all +messages by saying @samp{M P b} and +either copy them to the desired group by saying +@samp{B c name.of.group RET} or send them +through nnmail-split-methods (respool them) by saying +@samp{B r}. + +@node [6.2] +@subsubheading Question 6.2 + +How to archive interesting messages? + +@subsubheading Answer + +If you stumble across an interesting message, say in +gnu.emacs.gnus and want to archive it there are several +solutions. The first and easiest is to save it to a file +by saying @samp{O f}. However, wouldn't +it be much more convenient to have more direct access to +the archived message from Gnus? If you say yes, put this +snippet by Frank Haun in +~/.gnus.el: @example (defun my-archive-article (&optional n) @@ -1987,624 +1769,531 @@ (replace-regexp-in-string "^.*:" "" gnus-newsgroup-name))))) (gnus-summary-copy-article n archive-name))) @end example - @noindent - You can now say @samp{M-x - my-archive-article} in summary buffer to - archive the article under the cursor in a nnml - group. (Change nnml to your preferred back end) - - - Of course you can also make sure the cache is enabled by saying - + +You can now say @samp{M-x +my-archive-article} in summary buffer to +archive the article under the cursor in a nnml +group. (Change nnml to your preferred back end) + +Of course you can also make sure the cache is enabled by saying @example (setq gnus-use-cache t) @end example - @noindent - then you only have to set either the tick or the dormant - mark for articles you want to keep, setting the read - mark will remove them from cache. - -@ifnottex -@node [6.3], [6.4], [6.2], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.3: - - How to search for a specific message? - - -Answer: - - There are several ways for this, too. For a posting from - a Usenet group the easiest solution is probably to ask - @uref{http://groups.google.com,groups.google.com}, - if you found the posting there, tell Google to display - the raw message, look for the message-id, and say - @samp{M-^ the@@message.id RET} in a - summary buffer. - Since Gnus 5.10 there's also a Gnus interface for - groups.google.com which you can call with - @samp{G W}) in group buffer. - - - Another idea which works for both mail and news groups - is to enter the group where the message you are - searching is and use the standard Emacs search - @samp{C-s}, it's smart enough to look at - articles in collapsed threads, too. If you want to - search bodies, too try @samp{M-s} - instead. Further on there are the - gnus-summary-limit-to-foo functions, which can help you, - too. - - - Of course you can also use grep to search through your - local mail, but this is both slow for big archives and - inconvenient since you are not displaying the found mail - in Gnus. Here comes nnir into action. Nnir is a front end - to search engines like swish-e or swish++ and - others. You index your mail with one of those search - engines and with the help of nnir you can search trough - the indexed mail and generate a temporary group with all - messages which met your search criteria. If this sound - cool to you get nnir.el from the contrib directory of the Gnus - distribution or - @uref{http://quimby.gnus.org/cgi-bin/cvsweb.cgi/~checkout~/gnus/contrib/nnir.el?rev=HEAD&content-type=text/plain} - Instructions on how to use it are at the top of the file. - -@ifnottex -@node [6.4], [6.5], [6.3], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.4: - - How to get rid of old unwanted mail? - - -Answer: - - You can of course just mark the mail you don't need - anymore by saying @samp{#} with point - over the mail and then say @samp{B DEL} - to get rid of them forever. You could also instead of - actually deleting them, send them to a junk-group by - saying @samp{B m nnml:trash-bin} which - you clear from time to time, but both are not the intended - way in Gnus. - - - In Gnus, we let mail expire like news expires on a news - server. That means you tell Gnus the message is - expirable (you tell Gnus "I don't need this mail - anymore") by saying @samp{E} with point - over the mail in summary buffer. Now when you leave the - group, Gnus looks at all messages which you marked as - expirable before and if they are old enough (default is - older than a week) they are deleted. - -@ifnottex -@node [6.5], [6.6], [6.4], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.5: - - I want that all read messages are expired (at least in - some groups). How to do it? - - -Answer: - - If you want all read messages to be expired (e.g. in - mailing lists where there's an online archive), you've - got two choices: auto-expire and - total-expire. Auto-expire means, that every article - which has no marks set and is selected for reading is - marked as expirable, Gnus hits @samp{E} - for you every time you read a message. Total-expire - follows a slightly different approach, here all article - where the read mark is set are expirable. - - - To activate auto-expire, include auto-expire in the - Group parameters for the group. (Hit @samp{G - c} in summary buffer with point over the - group to change group parameters). For total-expire add - total-expire to the group-parameters. - - - Which method you choose is merely a matter of taste: - Auto-expire is faster, but it doesn't play together with - Adaptive Scoring, so if you want to use this feature, - you should use total-expire. - - - If you want a message to be excluded from expiration in - a group where total or auto expire is active, set either - tick (hit @samp{u}) or dormant mark (hit - @samp{u}), when you use auto-expire, you - can also set the read mark (hit - @samp{d}). - -@ifnottex -@node [6.6], , [6.5], FAQ 6 - Old messages -@end ifnottex -@subsubheading Question 6.6: - - I don't want expiration to delete my mails but to move them - to another group. - - -Answer: - - Say something like this in ~/.gnus: - + +then you only have to set either the tick or the dormant +mark for articles you want to keep, setting the read +mark will remove them from cache. + +@node [6.3] +@subsubheading Question 6.3 + +How to search for a specific message? + +@subsubheading Answer + +There are several ways for this, too. For a posting from +a Usenet group the easiest solution is probably to ask +@uref{http://groups.google.com, groups.google.com}, +if you found the posting there, tell Google to display +the raw message, look for the message-id, and say +@samp{M-^ the@@message.id RET} in a +summary buffer. +Since Gnus 5.10 there's also a Gnus interface for +groups.google.com which you can call with +@samp{G W}) in group buffer. + +Another idea which works for both mail and news groups +is to enter the group where the message you are +searching is and use the standard Emacs search +@samp{C-s}, it's smart enough to look at +articles in collapsed threads, too. If you want to +search bodies, too try @samp{M-s} +instead. Further on there are the +gnus-summary-limit-to-foo functions, which can help you, +too. + +Of course you can also use grep to search through your +local mail, but this is both slow for big archives and +inconvenient since you are not displaying the found mail +in Gnus. Here comes nnir into action. Nnir is a front end +to search engines like swish-e or swish++ and +others. You index your mail with one of those search +engines and with the help of nnir you can search trough +the indexed mail and generate a temporary group with all +messages which met your search criteria. If this sound +cool to you get nnir.el from +@uref{ftp://ls6-ftp.cs.uni-dortmund.de/pub/src/emacs/} +or @uref{ftp://ftp.is.informatik.uni-duisburg.de/pub/src/emacs/}. +Instructions on how to use it are at the top of the file. + +@node [6.4] +@subsubheading Question 6.4 + +How to get rid of old unwanted mail? + +@subsubheading Answer + +You can of course just mark the mail you don't need +anymore by saying @samp{#} with point +over the mail and then say @samp{B DEL} +to get rid of them forever. You could also instead of +actually deleting them, send them to a junk-group by +saying @samp{B m nnml:trash-bin} which +you clear from time to time, but both are not the intended +way in Gnus. + +In Gnus, we let mail expire like news expires on a news +server. That means you tell Gnus the message is +expirable (you tell Gnus "I don't need this mail +anymore") by saying @samp{E} with point +over the mail in summary buffer. Now when you leave the +group, Gnus looks at all messages which you marked as +expirable before and if they are old enough (default is +older than a week) they are deleted. + +@node [6.5] +@subsubheading Question 6.5 + +I want that all read messages are expired (at least in +some groups). How to do it? + +@subsubheading Answer + +If you want all read messages to be expired (e.g. in +mailing lists where there's an online archive), you've +got two choices: auto-expire and +total-expire. Auto-expire means, that every article +which has no marks set and is selected for reading is +marked as expirable, Gnus hits @samp{E} +for you every time you read a message. Total-expire +follows a slightly different approach, here all article +where the read mark is set are expirable. + +To activate auto-expire, include auto-expire in the +Group parameters for the group. (Hit @samp{G +c} in summary buffer with point over the +group to change group parameters). For total-expire add +total-expire to the group-parameters. + +Which method you choose is merely a matter of taste: +Auto-expire is faster, but it doesn't play together with +Adaptive Scoring, so if you want to use this feature, +you should use total-expire. + +If you want a message to be excluded from expiration in +a group where total or auto expire is active, set either +tick (hit @samp{u}) or dormant mark (hit +@samp{u}), when you use auto-expire, you +can also set the read mark (hit +@samp{d}). + +@node [6.6] +@subsubheading Question 6.6 + +I don't want expiration to delete my mails but to move them +to another group. + +@subsubheading Answer + +Say something like this in ~/.gnus.el: @example (setq nnmail-expiry-target "nnml:expired") @end example - @noindent - (If you want to change the value of nnmail-expiry-target - on a per group basis see the question "How can I disable - threading in some (e.g. mail-) groups, or set other - variables specific for some groups?") - - -@ifnottex -@node FAQ 7 - Gnus in a dial-up environment, FAQ 8 - Getting help, FAQ 6 - Old messages, Frequently Asked Questions -@end ifnottex + +(If you want to change the value of nnmail-expiry-target +on a per group basis see the question "How can I disable +threading in some (e.g. mail-) groups, or set other +variables specific for some groups?") + +@node FAQ 7 - Gnus in a dial-up environment @subsection Gnus in a dial-up environment @menu -* [7.1]:: I don't have a permanent connection to the net, how can I - minimize the time I've got to be connected? -* [7.2]:: So what was this thing about the Agent? -* [7.3]:: I want to store article bodies on disk, too. How to do it? -* [7.4]:: How to tell Gnus not to try to send mails / postings while - I'm offline? +* [7.1]:: I don't have a permanent connection to the net, how can I + minimize the time I've got to be connected? +* [7.2]:: So what was this thing about the Agent? +* [7.3]:: I want to store article bodies on disk, too. How to do it? +* [7.4]:: How to tell Gnus not to try to send mails / postings while + I'm offline? @end menu - -@ifnottex -@node [7.1], [7.2], FAQ 7 - Gnus in a dial-up environment, FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.1: - - I don't have a permanent connection to the net, how can - I minimize the time I've got to be connected? - - -Answer: - - You've got basically two options: Either you use the - Gnus Agent (see below) for this, or you can install - programs which fetch your news and mail to your local - disk and Gnus reads the stuff from your local - machine. - - - If you want to follow the second approach, you need a - program which fetches news and offers them to Gnus, a - program which does the same for mail and a program which - receives the mail you write from Gnus and sends them - when you're online. - - -Let's talk about Unix systems first: For the news part, the easiest -solution is a small nntp server like -@uref{http://www.leafnode.org/,Leafnode} or -@uref{http://infa.abo.fi/~patrik/sn/,sn}, of course you can also -install a full featured news server like -@uref{http://www.isc.org/products/INN/,inn}. - -Then you want to fetch your Mail, popular choices are -@itemize @bullet -@item -@uref{http://www.catb.org/~esr/fetchmail/,fetchmail} and -@item -@uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/,getmail}. -@end itemize -You should tell those to write the mail to your disk and Gnus to read -it from there. Last but not least the mail sending part: This can be -done with every MTA like @uref{http://www.sendmail.org/,sendmail}, -@uref{http://www.qmail.org/,postfix}, @uref{http://www.exim.org/,exim} -or @uref{http://www.qmail.org/,qmail}. - - - On windows boxes I'd vote for - @uref{http://www.tglsoft.de/,Hamster}, - it's a small freeware, open-source program which fetches - your mail and news from remote servers and offers them - to Gnus (or any other mail and/or news reader) via nntp - respectively POP3 or IMAP. It also includes a smtp - server for receiving mails from Gnus. - -@ifnottex -@node [7.2], [7.3], [7.1], FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.2: - - So what was this thing about the Agent? - - -Answer: - - The Gnus agent is part of Gnus, it allows you to fetch - mail and news and store them on disk for reading them - later when you're offline. It kind of mimics offline - newsreaders like e.g. Forte Agent. If you want to use - the Agent place the following in ~/.gnus if you are - still using 5.8.8 or 5.9 (it's the default since 5.10): - +@node [7.1] +@subsubheading Question 7.1 + +I don't have a permanent connection to the net, how can +I minimize the time I've got to be connected? + +@subsubheading Answer + +You've got basically two options: Either you use the +Gnus Agent (see below) for this, or you can install +programs which fetch your news and mail to your local +disk and Gnus reads the stuff from your local +machine. + +If you want to follow the second approach, you need a +program which fetches news and offers them to Gnus, a +program which does the same for mail and a program which +receives the mail you write from Gnus and sends them +when you're online. + +Let's talk about Unix systems first: For the news part, +the easiest solution is a small nntp server like +@uref{http://www.leafnode.org/, Leafnode} or +@uref{http://infa.abo.fi/~patrik/sn/, sn}, +of course you can also install a full featured news +server like +@uref{http://www.isc.org/products/INN/, inn}. +Then you want to fetch your Mail, popular choices +are @uref{http://www.catb.org/~esr/fetchmail/, fetchmail} +and @uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/, getmail}. +You should tell those to write the mail to your disk and +Gnus to read it from there. Last but not least the mail +sending part: This can be done with every MTA like +@uref{http://www.sendmail.org/, sendmail}, +@uref{http://www.qmail.org/, postfix}, +@uref{http://www.exim.org/, exim} or +@uref{http://www.qmail.org/, qmail}. + +On windows boxes I'd vote for +@uref{http://www.tglsoft.de/, Hamster}, +it's a small freeware, open-source program which fetches +your mail and news from remote servers and offers them +to Gnus (or any other mail and/or news reader) via nntp +respectively POP3 or IMAP. It also includes a smtp +server for receiving mails from Gnus. + +@node [7.2] +@subsubheading Question 7.2 + +So what was this thing about the Agent? + +@subsubheading Answer + +The Gnus agent is part of Gnus, it allows you to fetch +mail and news and store them on disk for reading them +later when you're offline. It kind of mimics offline +newsreaders like e.g. Forte Agent. If you want to use +the Agent place the following in ~/.gnus.el if you are +still using 5.8.8 or 5.9 (it's the default since 5.10): @example (setq gnus-agent t) @end example - - - Now you've got to select the servers whose groups can be - stored locally. To do this, open the server buffer - (that is press @samp{^} while in the - group buffer). Now select a server by moving point to - the line naming that server. Finally, agentize the - server by typing @samp{J a}. If you - make a mistake, or change your mind, you can undo this - action by typing @samp{J r}. When - you're done, type 'q' to return to the group buffer. - Now the next time you enter a group on a agentized - server, the headers will be stored on disk and read from - there the next time you enter the group. - -@ifnottex -@node [7.3], [7.4], [7.2], FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.3: - - I want to store article bodies on disk, too. How to do it? - - -Answer: - - You can tell the agent to automatically fetch the bodies - of articles which fulfill certain predicates, this is - done in a special buffer which can be reached by - saying @samp{J c} in group - buffer. Please refer to the documentation for - information which predicates are possible and how - exactly to do it. - - - Further on you can tell the agent manually which - articles to store on disk. There are two ways to do - this: Number one: In the summary buffer, process mark a - set of articles that shall be stored in the agent by - saying @samp{#} with point over the - article and then type @samp{J s}. The - other possibility is to set, again in the summary - buffer, downloadable (%) marks for the articles you - want by typing @samp{@@} with point over - the article and then typing @samp{J u}. - What's the difference? Well, process marks are erased as - soon as you exit the summary buffer while downloadable - marks are permanent. You can actually set downloadable - marks in several groups then use fetch session ('J s' in - the GROUP buffer) to fetch all of those articles. The - only downside is that fetch session also fetches all of - the headers for every selected group on an agentized - server. Depending on the volume of headers, the initial - fetch session could take hours. - -@ifnottex -@node [7.4], , [7.3], FAQ 7 - Gnus in a dial-up environment -@end ifnottex -@subsubheading Question 7.4: - - How to tell Gnus not to try to send mails / postings - while I'm offline? - - -Answer: - - All you've got to do is to tell Gnus when you are online - (plugged) and when you are offline (unplugged), the rest - works automatically. You can toggle plugged/unplugged - state by saying @samp{J j} in group - buffer. To start Gnus unplugged say @samp{M-x - gnus-unplugged} instead of - @samp{M-x gnus}. Note that for this to - work, the agent must be active. - - -@ifnottex -@node FAQ 8 - Getting help, FAQ 9 - Tuning Gnus, FAQ 7 - Gnus in a dial-up environment, Frequently Asked Questions -@end ifnottex +@noindent + +Now you've got to select the servers whose groups can be +stored locally. To do this, open the server buffer +(that is press @samp{^} while in the +group buffer). Now select a server by moving point to +the line naming that server. Finally, agentize the +server by typing @samp{J a}. If you +make a mistake, or change your mind, you can undo this +action by typing @samp{J r}. When +you're done, type 'q' to return to the group buffer. +Now the next time you enter a group on a agentized +server, the headers will be stored on disk and read from +there the next time you enter the group. + +@node [7.3] +@subsubheading Question 7.3 + +I want to store article bodies on disk, too. How to do it? + +@subsubheading Answer + +You can tell the agent to automatically fetch the bodies +of articles which fulfill certain predicates, this is +done in a special buffer which can be reached by +saying @samp{J c} in group +buffer. Please refer to the documentation for +information which predicates are possible and how +exactly to do it. + +Further on you can tell the agent manually which +articles to store on disk. There are two ways to do +this: Number one: In the summary buffer, process mark a +set of articles that shall be stored in the agent by +saying @samp{#} with point over the +article and then type @samp{J s}. The +other possibility is to set, again in the summary +buffer, downloadable (%) marks for the articles you +want by typing @samp{@@} with point over +the article and then typing @samp{J u}. +What's the difference? Well, process marks are erased as +soon as you exit the summary buffer while downloadable +marks are permanent. You can actually set downloadable +marks in several groups then use fetch session ('J s' in +the GROUP buffer) to fetch all of those articles. The +only downside is that fetch session also fetches all of +the headers for every selected group on an agentized +server. Depending on the volume of headers, the initial +fetch session could take hours. + +@node [7.4] +@subsubheading Question 7.4 + +How to tell Gnus not to try to send mails / postings +while I'm offline? + +@subsubheading Answer + +All you've got to do is to tell Gnus when you are online +(plugged) and when you are offline (unplugged), the rest +works automatically. You can toggle plugged/unplugged +state by saying @samp{J j} in group +buffer. To start Gnus unplugged say @samp{M-x +gnus-unplugged} instead of +@samp{M-x gnus}. Note that for this to +work, the agent must be active. + +@node FAQ 8 - Getting help @subsection Getting help @menu -* [8.1]:: How to find information and help inside Emacs? -* [8.2]:: I can't find anything in the Gnus manual about X - (e.g. attachments, PGP, MIME...), is it not documented? -* [8.3]:: Which websites should I know? -* [8.4]:: Which mailing lists and newsgroups are there? -* [8.5]:: Where to report bugs? -* [8.6]:: I need real-time help, where to find it? +* [8.1]:: How to find information and help inside Emacs? +* [8.2]:: I can't find anything in the Gnus manual about X (e.g. + attachments, PGP, MIME...), is it not documented? +* [8.3]:: Which websites should I know? +* [8.4]:: Which mailing lists and newsgroups are there? +* [8.5]:: Where to report bugs? +* [8.6]:: I need real-time help, where to find it? @end menu -@ifnottex -@node [8.1], [8.2], FAQ 8 - Getting help, FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.1: - - How to find information and help inside Emacs? - - -Answer: - - The first stop should be the Gnus manual (Say - @samp{C-h i d m Gnus RET} to start the - Gnus manual, then walk through the menus or do a - full-text search with @samp{s}). Then - there are the general Emacs help commands starting with - C-h, type @samp{C-h ? ?} to get a list - of all available help commands and their meaning. Finally - @samp{M-x apropos-command} lets you - search through all available functions and @samp{M-x - apropos} searches the bound variables. - -@ifnottex -@node [8.2], [8.3], [8.1], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.2: - - I can't find anything in the Gnus manual about X - (e.g. attachments, PGP, MIME...), is it not documented? - - -Answer: - - There's not only the Gnus manual but also the manuals - for message, emacs-mime, sieve and pgg. Those packages - are distributed with Gnus and used by Gnus but aren't - really part of core Gnus, so they are documented in - different info files, you should have a look in those - manuals, too. - -@ifnottex -@node [8.3], [8.4], [8.2], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.3: - - Which websites should I know? - - -Answer: - - The two most important ones are the - @uref{http://www.gnus.org,official Gnus website}. - and it's sister site - @uref{http://my.gnus.org,my.gnus.org (MGO)}, - hosting an archive of lisp snippets, howtos, a (not - really finished) tutorial and this FAQ. - - - Tell me about other sites which are interesting. - -@ifnottex -@node [8.4], [8.5], [8.3], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.4: - - Which mailing lists and newsgroups are there? - - -Answer: - - There's the newsgroup gnu.emacs.gnus (pull it from - e.g. news.gnus.org) which deals with general questions - and the ding mailing list (ding@@gnus.org) dealing with - development of Gnus. You can read the ding list via - NNTP, too under the name gnus.ding from news.gnus.org. - - - If you want to stay in the big8, - news.software.newssreaders is also read by some Gnus - users (but chances for qualified help are much better in - the above groups) and if you speak German, there's - de.comm.software.gnus. - -@ifnottex -@node [8.5], [8.6], [8.4], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.5: - - Where to report bugs? - - -Answer: - -Say @samp{M-x gnus-bug}, this will start a message to the -@email{bugs@@gnus.org,gnus bug mailing list} including information -about your environment which make it easier to help you. - -@ifnottex -@node [8.6], , [8.5], FAQ 8 - Getting help -@end ifnottex -@subsubheading Question 8.6: - - I need real-time help, where to find it? - - -Answer: - - Point your IRC client to irc.my.gnus.org channel - #mygnus. Don't be afraid if people there speak German, - they are willing and capable of switching to - English when people from outside Germany enter. - - -@ifnottex -@node FAQ 9 - Tuning Gnus, FAQ - Glossary, FAQ 8 - Getting help, Frequently Asked Questions -@end ifnottex +@node [8.1] +@subsubheading Question 8.1 + +How to find information and help inside Emacs? + +@subsubheading Answer + +The first stop should be the Gnus manual (Say +@samp{C-h i d m Gnus RET} to start the +Gnus manual, then walk through the menus or do a +full-text search with @samp{s}). Then +there are the general Emacs help commands starting with +C-h, type @samp{C-h ? ?} to get a list +of all available help commands and their meaning. Finally +@samp{M-x apropos-command} lets you +search through all available functions and @samp{M-x +apropos} searches the bound variables. + +@node [8.2] +@subsubheading Question 8.2 + +I can't find anything in the Gnus manual about X +(e.g. attachments, PGP, MIME...), is it not documented? + +@subsubheading Answer + +There's not only the Gnus manual but also the manuals +for message, emacs-mime, sieve and pgg. Those packages +are distributed with Gnus and used by Gnus but aren't +really part of core Gnus, so they are documented in +different info files, you should have a look in those +manuals, too. + +@node [8.3] +@subsubheading Question 8.3 + +Which websites should I know? + +@subsubheading Answer + +The two most important ones are the +@uref{http://www.gnus.org, official Gnus website}. +and it's sister site +@uref{http://my.gnus.org, my.gnus.org (MGO)}, +hosting an archive of lisp snippets, howtos, a (not +really finished) tutorial and this FAQ. + +Tell me about other sites which are interesting. + +@node [8.4] +@subsubheading Question 8.4 + +Which mailing lists and newsgroups are there? + +@subsubheading Answer + +There's the newsgroup gnu.emacs.gnus (pull it from +e.g. news.gnus.org) which deals with general questions and the +ding mailing list (ding@@gnus.org) dealing with development of +Gnus. You can read the ding list via NNTP, too under the name +gmane.emacs.gnus.general from news.gmane.org. + +If you want to stay in the big8, +news.software.newssreaders is also read by some Gnus +users (but chances for qualified help are much better in +the above groups) and if you speak German, there's +de.comm.software.gnus. + +@node [8.5] +@subsubheading Question 8.5 + +Where to report bugs? + +@subsubheading Answer + +Say @samp{M-x gnus-bug}, this will start +a message to the +@email{bugs@@gnus.org, gnus bug mailing list} +including information about your environment which make +it easier to help you. + +@node [8.6] +@subsubheading Question 8.6 + +I need real-time help, where to find it? + +@subsubheading Answer + +Point your IRC client to irc.my.gnus.org channel +#mygnus. Don't be afraid if people there speak German, +they are willing and capable of switching to +English when people from outside Germany enter. + +@node FAQ 9 - Tuning Gnus @subsection Tuning Gnus @menu -* [9.1]:: Starting Gnus is really slow, how to speed it up? -* [9.2]:: How to speed up the process of entering a group? -* [9.3]:: Sending mail becomes slower and slower, what's up? +* [9.1]:: Starting Gnus is really slow, how to speed it up? +* [9.2]:: How to speed up the process of entering a group? +* [9.3]:: Sending mail becomes slower and slower, what's up? @end menu -@ifnottex -@node [9.1], [9.2], FAQ 9 - Tuning Gnus, FAQ 9 - Tuning Gnus -@end ifnottex -@subsubheading Question 9.1: - - Starting Gnus is really slow, how to speed it up? - - -Answer: - - The reason for this could be the way Gnus reads it's - active file, see the node "The Active File" in the Gnus - manual for things you might try to speed the process up. - An other idea would be to byte compile your ~/.gnus (say - @samp{M-x byte-compile-file RET ~/.gnus - RET} to do it). Finally, if you have require - statements in your .gnus, you could replace them with - eval-after-load, which loads the stuff not at startup - time, but when it's needed. Say you've got this in your - ~/.gnus: - +@node [9.1] +@subsubheading Question 9.1 + +Starting Gnus is really slow, how to speed it up? + +@subsubheading Answer + +The reason for this could be the way Gnus reads it's +active file, see the node "The Active File" in the Gnus +manual for things you might try to speed the process up. +An other idea would be to byte compile your ~/.gnus.el (say +@samp{M-x byte-compile-file RET ~/.gnus.el +RET} to do it). Finally, if you have require +statements in your .gnus, you could replace them with +eval-after-load, which loads the stuff not at startup +time, but when it's needed. Say you've got this in your +~/.gnus.el: @example (require 'message) (add-to-list 'message-syntax-checks '(sender . disabled)) @end example - @noindent - then as soon as you start Gnus, message.el is loaded. If - you replace it with - + +then as soon as you start Gnus, message.el is loaded. If +you replace it with @example (eval-after-load "message" '(add-to-list 'message-syntax-checks '(sender . disabled))) @end example - @noindent - it's loaded when it's needed. - -@ifnottex -@node [9.2], [9.3], [9.1], FAQ 9 - Tuning Gnus -@end ifnottex -@subsubheading Question 9.2: - - How to speed up the process of entering a group? - - -Answer: - - A speed killer is setting the variable - gnus-fetch-old-headers to anything different from nil, - so don't do this if speed is an issue. To speed up - building of summary say - + +it's loaded when it's needed. + +@node [9.2] +@subsubheading Question 9.2 + +How to speed up the process of entering a group? + +@subsubheading Answer + +A speed killer is setting the variable +gnus-fetch-old-headers to anything different from nil, +so don't do this if speed is an issue. To speed up +building of summary say @example (gnus-compile) @end example - @noindent - at the bottom of your ~/.gnus, this will make gnus - byte-compile things like - gnus-summary-line-format. - then you could increase the value of gc-cons-threshold - by saying something like - + +at the bottom of your ~/.gnus.el, this will make gnus +byte-compile things like +gnus-summary-line-format. +then you could increase the value of gc-cons-threshold +by saying something like @example (setq gc-cons-threshold 3500000) @end example - @noindent - in ~/.emacs. If you don't care about width of CJK - characters or use Gnus 5.10 or younger together with a - recent GNU Emacs, you should say - + +in ~/.emacs. If you don't care about width of CJK +characters or use Gnus 5.10 or younger together with a +recent GNU Emacs, you should say @example -(setq gnus-use-correct-string-widths nil) +(setq gnus-use-correct-string-widths nil) @end example - - @noindent - in ~/.gnus (thanks to Jesper harder for the last - two suggestions). Finally if you are still using 5.8.8 - or 5.9 and experience speed problems with summary - buffer generation, you definitely should update to - 5.10 since there quite some work on improving it has - been done. -@ifnottex -@node [9.3], , [9.2], FAQ 9 - Tuning Gnus -@end ifnottex -@subsubheading Question 9.3: - - Sending mail becomes slower and slower, what's up? - - -Answer: - - The reason could be that you told Gnus to archive the - messages you wrote by setting - gnus-message-archive-group. Try to use a nnml group - instead of an archive group, this should bring you back - to normal speed. - - -@ifnottex -@node FAQ - Glossary, , FAQ 9 - Tuning Gnus, Frequently Asked Questions -@end ifnottex +in ~/.gnus.el (thanks to Jesper harder for the last +two suggestions). Finally if you are still using 5.8.8 +or 5.9 and experience speed problems with summary +buffer generation, you definitely should update to +5.10 since there quite some work on improving it has +been done. + +@node [9.3] +@subsubheading Question 9.3 + +Sending mail becomes slower and slower, what's up? + +@subsubheading Answer + +The reason could be that you told Gnus to archive the +messages you wrote by setting +gnus-message-archive-group. Try to use a nnml group +instead of an archive group, this should bring you back +to normal speed. + +@node FAQ - Glossary @subsection Glossary @table @dfn -@item ~/.gnus - When the term ~/.gnus is used it just means your Gnus - configuration file. You might as well call it ~/.gnus.el or - specify another name. - +@item ~/.gnus.el +When the term ~/.gnus.el is used it just means your Gnus +configuration file. You might as well call it ~/.gnus or +specify another name. @item Back End - In Gnus terminology a back end is a virtual server, a layer - between core Gnus and the real NNTP-, POP3-, IMAP- or - whatever-server which offers Gnus a standardized interface - to functions like "get message", "get Headers" etc. - +In Gnus terminology a back end is a virtual server, a layer +between core Gnus and the real NNTP-, POP3-, IMAP- or +whatever-server which offers Gnus a standardized interface +to functions like "get message", "get Headers" etc. @item Emacs - When the term Emacs is used in this FAQ, it means either GNU - Emacs or XEmacs. - +When the term Emacs is used in this FAQ, it means either GNU +Emacs or XEmacs. @item Message - In this FAQ message means a either a mail or a posting to a - Usenet Newsgroup or to some other fancy back end, no matter - of which kind it is. - +In this FAQ message means a either a mail or a posting to a +Usenet Newsgroup or to some other fancy back end, no matter +of which kind it is. @item MUA - MUA is an acronym for Mail User Agent, it's the program you - use to read and write e-mails. - +MUA is an acronym for Mail User Agent, it's the program you +use to read and write e-mails. @item NUA - NUA is an acronym for News User Agent, it's the program you - use to read and write Usenet news. - +NUA is an acronym for News User Agent, it's the program you +use to read and write Usenet news. + @end table -@c @bye - @ignore - arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8 +arch-tag: 64dc5692-edb4-4848-a965-7aa0181acbb8 @end ignore diff -r 45e5f0224d81 -r 360860a0006f man/maintaining.texi --- a/man/maintaining.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/maintaining.texi Mon Apr 04 16:43:15 2005 +0000 @@ -1,5 +1,6 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985,86,87,93,94,95,97,99,00,2001 Free Software Foundation, Inc. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000, +@c 2001, 2005 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @node Maintaining, Abbrevs, Building, Top @chapter Maintaining Programs @@ -8,8 +9,8 @@ @cindex program editing This chapter describes Emacs features for maintaining programs. The -version control features (@pxref{Version Control}) are also -particularly useful for this purpose. +version control features (@pxref{Version Control}) are also particularly +useful for this purpose. @menu * Change Log:: Maintaining a change history for your program. @@ -51,13 +52,13 @@ @noindent Of course, you should substitute the proper years and copyright holder. - A change log entry starts with a header line that contains the -current date, your name, and your email address (taken from the -variable @code{user-mail-address}). Aside from these header lines, -every line in the change log starts with a space or a tab. The bulk -of the entry consists of @dfn{items}, each of which starts with a line -starting with whitespace and a star. Here are two entries, both dated -in May 1993, each with two items: + A change log entry starts with a header line that contains the current +date, your name, and your email address (taken from the variable +@code{add-log-mailing-address}). Aside from these header lines, every +line in the change log starts with a space or a tab. The bulk of the +entry consists of @dfn{items}, each of which starts with a line starting +with whitespace and a star. Here are two entries, both dated in May +1993, each with two items: @iftex @medbreak diff -r 45e5f0224d81 -r 360860a0006f man/message.texi --- a/man/message.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/message.texi Mon Apr 04 16:43:15 2005 +0000 @@ -8,7 +8,7 @@ @copying This file documents Message, the Emacs message composition mode. -Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 +Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. @quotation diff -r 45e5f0224d81 -r 360860a0006f man/misc.texi --- a/man/misc.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/misc.texi Mon Apr 04 16:43:15 2005 +0000 @@ -1250,10 +1250,10 @@ @vindex server-name You can run multiple Emacs servers on the same machine by giving each one a unique ``server name'', using the variable -@code{server-name}. For example, @kbd{M-x set-variable RET -server-name RET foo RET} sets the server name to @samp{foo}. The -@code{emacsclient} program can visit a server by name using the -@samp{-s} option. @xref{Invoking emacsclient}. +@code{server-name}. For example, @kbd{M-x set-variable @key{RET} +server-name @key{RET} foo @key{RET}} sets the server name to +@samp{foo}. The @code{emacsclient} program can visit a server by name +using the @samp{-s} option. @xref{Invoking emacsclient}. While @code{mail} or another application is waiting for @code{emacsclient} to finish, @code{emacsclient} does not read terminal diff -r 45e5f0224d81 -r 360860a0006f man/mule.texi --- a/man/mule.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/mule.texi Mon Apr 04 16:43:15 2005 +0000 @@ -428,6 +428,9 @@ because it stops waiting for more characters to combine, and starts searching for what you have already entered. + To find out how to input the character after point using the current +input method, type @kbd{C-u C-x =}. @xref{Position Info}. + @vindex input-method-verbose-flag @vindex input-method-highlight-flag The variables @code{input-method-highlight-flag} and @@ -928,6 +931,9 @@ @item C-x @key{RET} X @var{coding} @key{RET} Use coding system @var{coding} for transferring @emph{one} selection---the next one---to or from the window system. + +@item M-x recode-region +Convert the region from a previous coding system to a new one. @end table @kindex C-x RET f @@ -1056,6 +1062,12 @@ The default for translation of process input and output depends on the current language environment. +@findex recode-region + If a piece of text has already been inserted into a buffer using the +wrong coding system, you can decode it again using @kbd{M-x +recode-region}. This prompts you for the old coding system and the +desired coding system, and acts on the text in the region. + @vindex file-name-coding-system @cindex file names with non-@acronym{ASCII} characters @findex set-file-name-coding-system @@ -1084,6 +1096,12 @@ name, or it may get an error. If such a problem happens, use @kbd{C-x C-w} to specify a new file name for that buffer. +@findex recode-file-name + If a mistake occurs when encoding a file name, use the command +command @kbd{M-x recode-file-name} to change the file name's coding +system. This prompts for an existing file name, its old coding +system, and the coding system to which you wish to convert. + @vindex locale-coding-system @cindex decoding non-@acronym{ASCII} keyboard input on X The variable @code{locale-coding-system} specifies a coding system @@ -1358,6 +1376,27 @@ Meta to be converted to @kbd{ESC} and still be able type 8-bit characters present directly on the keyboard or using @kbd{Compose} or @kbd{AltGr} keys. @xref{User Input}. + +@kindex C-x 8 +@cindex @code{iso-transl} library +@cindex compose character +@cindex dead character +@item +For Latin-1 only, you can use the key @kbd{C-x 8} as a ``compose +character'' prefix for entry of non-@acronym{ASCII} Latin-1 printing +characters. @kbd{C-x 8} is good for insertion (in the minibuffer as +well as other buffers), for searching, and in any other context where +a key sequence is allowed. + +@kbd{C-x 8} works by loading the @code{iso-transl} library. Once that +library is loaded, the @key{ALT} modifier key, if the keyboard has +one, serves the same purpose as @kbd{C-x 8}: use @key{ALT} together +with an accent character to modify the following letter. In addition, +if the keyboard has keys for the Latin-1 ``dead accent characters,'' +they too are defined to compose with the following character, once +@code{iso-transl} is loaded. + +Use @kbd{C-x 8 C-h} to list all the available @kbd{C-x 8} translations. @end itemize @node Charsets diff -r 45e5f0224d81 -r 360860a0006f man/org.texi --- a/man/org.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/org.texi Mon Apr 04 16:43:15 2005 +0000 @@ -3,8 +3,8 @@ @setfilename ../info/org @settitle Org Mode Manual -@set VERSION 3.04 -@set DATE December 2004 +@set VERSION 3.05 +@set DATE April 2005 @dircategory Emacs @direntry @@ -34,7 +34,7 @@ @copying This manual is for Org-mode (version @value{VERSION}). -Copyright @copyright{} 2004 Free Software Foundation +Copyright @copyright{} 2004, 2005 Free Software Foundation @quotation Permission is granted to copy, distribute and/or modify this document @@ -184,7 +184,8 @@ large files well structured. Visibility cycling and structure editing help to work with the tree. Tables are easily created with a built-in table editor. Org-mode supports ToDo items, deadlines, time stamps, -and scheduling. It dynamically compiles entries into an agenda. +and scheduling. It dynamically compiles entries into an agenda that +utilizes and smoothly integrates much of the Emacs calendar and diary. Plain text URL-like links connect to websites, emails, usenet messages, BBDB entries, and any files related to the projects. For printing and sharing of notes, an Org-mode file can be exported as a @@ -203,15 +204,14 @@ @r{@bullet{} as a full agenda and planner with deadlines and work scheduling} @end example -The Org-mode table editor can be used integrated into any major mode -by activating the minor Ortbl-mode. +The Org-mode table editor can be integrated into any major mode by +activating the minor Orgtbl-mode. There is a website for Org-mode which provides links to the newest version of Org-mode, as well as additional information, screen shots and example files. This page is located at @uref{http://www.astro.uva.nl/~dominik/Tools/org/}. - @page @node Installation, , Summary, Introduction @@ -352,6 +352,18 @@ Show all. @end table +When Emacs firsts visits a Org-mode file, the global state is set to +OVERVIEW, i.e. only the top level headlines are visible. This can be +configured through the variable @code{org-startup-folded}, or on a +per-file basis by adding one of the following lines anywhere in the +buffer: + +@example +#+STARTUP: fold +#+STARTUP: nofold +@end example + + @node Motion, Structure editing, Visibility cycling, Document Structure @section Motion @cindex motion, between headlines @@ -473,6 +485,17 @@ Other commands are using this feature as well. For example @kbd{C-c C-v} creates a sparse TODO tree (@pxref{TODO basics}). +@kindex C-c C-x v +@cindex printing sparse trees +@cindex visible text, printing +To print a sparse tree, you can use the Emacs command +@code{ps-print-buffer-with-faces} which does not print invisible parts +of the document @footnote{this does not work under XEmacs, because +XEmacs uses selective display for outlining, not text properties}. +Or you can use the command @kbd{C-c C-x v} to copy the visible part of +the document to another file (extension @file{.txt}) which then can be +printed in any desired way. + @node TODO items, Tables, Document Structure, Top @chapter TODO items @cindex TODO items @@ -611,7 +634,7 @@ @end lisp In this case, different keywords do not indicate a sequence, but -rather different levels. This changes the behavior of the command +rather different types. This changes the behavior of the command @kbd{C-c C-t} slightly. When used several times in succession, it will still cycle through all names. But when when you return to the item after some time and execute @kbd{C-c C-t} again, it will switch @@ -745,11 +768,6 @@ necessary. At the beginning or end of a line, @key{RET} still does NEWLINE, so it can be used to split a table. -@kindex S-@key{RET} -@item S-@key{RET} -Copy from first non-empty - field above current field. - @tsubheading{Column and row editing} @kindex M-@key{left} @kindex M-@key{right} @@ -796,7 +814,7 @@ blank all fields in the rectangle. @kindex C-c C-h C-y @item C-c C-h C-y -Paste a rectangluar region into a table. +Paste a rectangular region into a table. The upper right corner ends up in the current field. All involved fields will be overwritten. If the rectangle does not fit into the present table, the table is enlarged as needed. The process ignores horizontal separator @@ -828,6 +846,14 @@ the active region. The result is displayed in the echo area and can be inserted with @kbd{C-y}. +@kindex S-@key{RET} +@item S-@key{RET} +When current field is empty, copy from first non-empty field above. +When not empty, copy current field down to next row and move cursor +along with it. Depending on the variable +@code{org-table-copy-increment}, integer field values will be +incremented during copy. + @cindex formula, in tables @cindex calculations, in tables @kindex C-c = @@ -1063,7 +1089,7 @@ If not, a headline is constructed from the current date and some additional data. If the variable @code{org-adapt-indentation} is non-nil, the entire text is also indented so that it starts in the -same column as the headline (after the asterixes). +same column as the headline (after the asterisks). @node Timestamps, Timeline and Agenda, Hyperlinks, Top @chapter Timestamps @@ -1404,11 +1430,12 @@ @node Agenda commands, Calendar/Diary integration, Agenda (multiple files), Timeline and Agenda @section Commands in the agenda buffer -Entries in the agenda buffer are linked back to the org file. You are -not allowed to edit the agenda buffer itself, but commands are provided -to edit the org-files ``remotely'' from the agenda buffer. In this -way, all information is stored only once, and you don't risk that your -agenda and note files diverge. +Entries in the agenda buffer are linked back to the org file or diary +file where they originate. You are not allowed to edit the agenda +buffer itself, but commands are provided to show and jump to the +original entry location, and to edit the org-files ``remotely'' from +the agenda buffer. In this way, all information is stored only once, +and you don't risk that your agenda and note files diverge. Some commands can be executed with mouse clicks on agenda lines. For the other commands, the cursor needs to be in the desired line. Most @@ -1468,7 +1495,7 @@ Display the following @code{org-agenda-ndays} days. For example, if the display covers a week, switch to the following week. With prefix arg, go forward that many times @code{org-agenda-ndays} days. Not -available in timlines. +available in timelines. @kindex @key{left} @item @key{left} @@ -1536,6 +1563,29 @@ entry in the diary, just like @kbd{i d} etc. would do in the calendar. The date is taken from the cursor position. +@tsubheading{Calendar commands} +@kindex c +@item c +Open the Emacs calendar and move to the date at the agenda cursor. + +@kindex C +@item C +Convert the date at cursor into many other cultural and historic +calendars. + +@kindex M +@item M +Show the phases of the moon for three month around current date. + +@kindex S +@item S +Show sunrise and sunset times. The location must be set with calendar +variables, see documentation of the Emacs calendar. + +@kindex H +@item H +Show holidays for three month around the cursor date. + @tsubheading{Quit and Exit} @kindex q @item q @@ -1564,8 +1614,9 @@ the diary. The interaction between Org-mode and diary works both ways: You can -list entries from the diary in the Org-mode agenda, or you can display -entries from the org agenda in the Emacs diary. +list entries from the diary in the Org-mode agenda, from which many +calendar and diary commands are directly accessible. Or you can +display entries from the org agenda in the Emacs diary. @menu * Diary to agenda:: Agenda incorporates the diary @@ -1584,7 +1635,15 @@ @end lisp @noindent -@noindent After that, everything will happen automatically. +@noindent After that, everything will happen automatically. All diary +entries including holidays, anniversaries etc will be included in the +agenda buffer created by Org-mode. @key{SPC}, @key{TAB}, and +@key{RET} can be used from the agenda buffer to jump to the diary +file, in order to edit existing diary entries. Also the @kbd{i} +command to insert new entries for the current date works in the agenda +buffer, as well as the commands @kbd{S}, @kbd{M}, and @kbd{C} to +display Sunrise/Sunset times, show lunar phases and to convert to +other calendars, respectively. @node Agenda to diary, , Diary to agenda, Calendar/Diary integration @subsection Including the agenda into the diary diff -r 45e5f0224d81 -r 360860a0006f man/programs.texi --- a/man/programs.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/programs.texi Mon Apr 04 16:43:15 2005 +0000 @@ -1,5 +1,6 @@ @c This is part of the Emacs manual. -@c Copyright (C) 1985,86,87,93,94,95,97,99,00,2001 Free Software Foundation, Inc. +@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1999, 2000, +@c 2001, 2005 Free Software Foundation, Inc. @c See file emacs.texi for copying conditions. @node Programs, Building, Text, Top @chapter Editing Programs @@ -80,17 +81,19 @@ @cindex Shell-script mode @cindex Delphi mode @cindex PostScript mode +@cindex Conf mode +@cindex DNS mode The existing programming language major modes include Lisp, Scheme (a variant of Lisp) and the Scheme-based DSSSL expression language, Ada, ASM, AWK, C, C++, Delphi (Object Pascal), Fortran (free format and fixed format), Icon, IDL (CORBA), IDLWAVE, Java, Metafont (@TeX{}'s companion for font creation), Modula2, Objective-C, Octave, Pascal, -Perl, Pike, PostScript, Prolog, Python, Simula, Tcl, and VHDL. There is -also a major mode for makefiles, called Makefile mode. An alternative -mode for Perl is called CPerl mode. Modes are available for the -scripting languages of the common GNU and Unix shells, VMS DCL, and +Perl, Pike, PostScript, Prolog, Python, Simula, Tcl, and VHDL. An +alternative mode for Perl is called CPerl mode. Modes are available for +the scripting languages of the common GNU and Unix shells, VMS DCL, and MS-DOS/MS-Windows @samp{BAT} files. There are also major modes for -editing various sorts of configuration files. +editing makefiles, DNS master files, and various sorts of configuration +files. @kindex DEL @r{(programming modes)} @findex c-electric-backspace @@ -1801,11 +1804,11 @@ @cindex Fortran mode @cindex mode, Fortran - Fortran mode provides special motion commands for Fortran statements and -subprograms, and indentation commands that understand Fortran conventions -of nesting, line numbers and continuation statements. Fortran mode has -its own Auto Fill mode that breaks long lines into proper Fortran -continuation lines. + Fortran mode provides special motion commands for Fortran statements +and subprograms, and indentation commands that understand Fortran +conventions of nesting, line numbers and continuation statements. +Fortran mode has support for Auto Fill mode that breaks long lines into +proper Fortran continuation lines. Special commands for comments are provided because Fortran comments are unlike those of other languages. Built-in abbrevs optionally save @@ -1817,18 +1820,18 @@ @cindex Fortran77 and Fortran90 @findex f90-mode @findex fortran-mode - Fortran mode is meant for editing Fortran77 ``fixed format'' source -code. For editing the modern Fortran90 ``free format'' source code, -use F90 mode (@code{f90-mode}). Emacs normally uses Fortran mode for -files with extension @samp{.f}, @samp{.F} or @samp{.for}, and F90 mode -for the extension @samp{.f90}. GNU Fortran supports both kinds of -format. + Fortran mode is meant for editing Fortran77 ``fixed format'' (and also +``tab format'') source code. For editing the modern Fortran90 or +Fortran95 ``free format'' source code, use F90 mode (@code{f90-mode}). +Emacs normally uses Fortran mode for files with extension @samp{.f}, +@samp{.F} or @samp{.for}, and F90 mode for the extension @samp{.f90} and +@samp{.f95}. GNU Fortran supports both kinds of format. @menu * Motion: Fortran Motion. Moving point by statements or subprograms. * Indent: Fortran Indent. Indentation commands for Fortran. * Comments: Fortran Comments. Inserting and aligning comments. -* Autofill: Fortran Autofill. Auto fill minor mode for Fortran. +* Autofill: Fortran Autofill. Auto fill support for Fortran. * Columns: Fortran Columns. Measuring columns for valid Fortran. * Abbrev: Fortran Abbrev. Built-in abbrevs for Fortran keywords. @end menu @@ -1837,8 +1840,9 @@ @subsection Motion Commands In addition to the normal commands for moving by and operating on -``defuns'' (Fortran subprograms---functions and subroutines), Fortran -mode provides special commands to move by statements. +``defuns'' (Fortran subprograms---functions and subroutines, as well as +modules for F90 mode), Fortran mode provides special commands to move by +statements and other program units. @table @kbd @kindex C-c C-n @r{(Fortran mode)} @@ -1873,21 +1877,24 @@ (@code{f90-previous-block}). This is like @code{f90-next-block}, but moves backwards. -@kindex C-M-n @r{(F90 mode)} +@kindex C-M-n @r{(Fortran mode)} +@findex fortran-end-of-block @findex f90-end-of-block @item C-M-n -Move to the end of the current code block (@code{f90-end-of-block}). -This is for F90 mode only. With a numeric agument, move forward that -number of blocks. This command checks for consistency of block types -and labels (if present), but it does not check the outermost block -since that may be incomplete. The mark is set before moving point. +Move to the end of the current code block +(@code{fortran-end-of-block}/@code{f90-end-of-block}). With a numeric +agument, move forward that number of blocks. The mark is set before +moving point. The F90 mode version of this command checks for +consistency of block types and labels (if present), but it does not +check the outermost block since that may be incomplete. -@kindex C-M-p @r{(F90 mode)} +@kindex C-M-p @r{(Fortran mode)} +@findex fortran-beginning-of-block @findex f90-beginning-of-block @item C-M-p Move to the start of the current code block -(@code{f90-beginning-of-block}). This is like @code{f90-end-of-block}, -but moves backwards. +(@code{fortran-beginning-of-block}/@code{f90-beginning-of-block}). This +is like @code{fortran-end-of-block}, but moves backwards. @end table @node Fortran Indent @@ -1896,7 +1903,7 @@ Special commands and features are needed for indenting Fortran code in order to make sure various syntactic entities (line numbers, comment line indicators and continuation line flags) appear in the columns that are -required for standard Fortran. +required for standard, fixed (or tab) format Fortran. @menu * Commands: ForIndent Commands. Commands for indenting and filling Fortran. @@ -1911,7 +1918,7 @@ @table @kbd @item C-M-j -Break the current line and set up a continuation line +Break the current line at point and set up a continuation line (@code{fortran-split-line}). @item M-^ Join this line to the previous line (@code{fortran-join-line}). @@ -1953,30 +1960,39 @@ @cindex Fortran continuation lines @vindex fortran-continuation-string - Most modern Fortran compilers allow two ways of writing continuation -lines. If the first non-space character on a line is in column 5, then -that line is a continuation of the previous line. We call this -@dfn{fixed format}. (In GNU Emacs we always count columns from 0.) The -variable @code{fortran-continuation-string} specifies what character to -put on column 5. A line that starts with a tab character followed by -any digit except @samp{0} is also a continuation line. We call this -style of continuation @dfn{tab format}. + Most Fortran77 compilers allow two ways of writing continuation lines. +If the first non-space character on a line is in column 5, then that +line is a continuation of the previous line. We call this @dfn{fixed +format}. (In GNU Emacs we always count columns from 0; but note that +the Fortran standard counts from 1.) The variable +@code{fortran-continuation-string} specifies what character to put in +column 5. A line that starts with a tab character followed by any digit +except @samp{0} is also a continuation line. We call this style of +continuation @dfn{tab format}. (Fortran90 introduced ``free format'', +with another style of continuation lines). @vindex indent-tabs-mode @r{(Fortran mode)} - Fortran mode can make either style of continuation line, but you -must specify which one you prefer. The value of the variable -@code{indent-tabs-mode} controls the choice: @code{nil} for fixed -format, and non-@code{nil} for tab format. You can tell which style -is presently in effect by the presence or absence of the string -@samp{Tab} in the mode line. +@vindex fortran-analyze-depth +@vindex fortran-tab-mode-default + Fortran mode can use either style of continuation line. When you +enter Fortran mode, it tries to deduce the proper continuation style +automatically from the buffer contents. It does this by scanning up to +@code{fortran-analyze-depth} (default 100) lines from the start of the +buffer. The first line that begins with either a tab character or six +spaces determines the choice. If the scan fails (for example, if the +buffer is new and therefore empty), the value of +@code{fortran-tab-mode-default} (@code{nil} for fixed format, and +non-@code{nil} for tab format) is used. @samp{/t} in the mode line +indicates tab format is selected. Fortran mode sets the value of +@code{indent-tabs-mode} accordingly (@pxref{Just Spaces}). - If the text on a line starts with the conventional Fortran -continuation marker @samp{$}, or if it begins with any non-whitespace -character in column 5, Fortran mode treats it as a continuation line. -When you indent a continuation line with @key{TAB}, it converts the line -to the current continuation style. When you split a Fortran statement -with @kbd{C-M-j}, the continuation marker on the newline is created -according to the continuation style. + If the text on a line starts with the Fortran continuation marker +@samp{$}, or if it begins with any non-whitespace character in column +5, Fortran mode treats it as a continuation line. When you indent a +continuation line with @key{TAB}, it converts the line to the current +continuation style. When you split a Fortran statement with +@kbd{C-M-j}, the continuation marker on the newline is created according +to the continuation style. The setting of continuation style affects several other aspects of editing in Fortran mode. In fixed format mode, the minimum column @@ -1986,17 +2002,6 @@ column number for the statement body is 8, and the whitespace before column 8 must always consist of one tab character. -@vindex fortran-tab-mode-default -@vindex fortran-analyze-depth - When you enter Fortran mode for an existing file, it tries to deduce the -proper continuation style automatically from the file contents. The first -line that begins with either a tab character or six spaces determines the -choice. The variable @code{fortran-analyze-depth} specifies how many lines -to consider (at the beginning of the file); if none of those lines -indicates a style, then the variable @code{fortran-tab-mode-default} -specifies the style. If it is @code{nil}, that specifies fixed format, and -non-@code{nil} specifies tab format. - @node ForIndent Num @subsubsection Line Numbers @@ -2007,9 +2012,11 @@ @vindex fortran-line-number-indent Line numbers of four digits or less are normally indented one space. The variable @code{fortran-line-number-indent} controls this; it -specifies the maximum indentation a line number can have. Line numbers -are right-justified to end in column 4 unless that would require more -than this maximum indentation. The default value of the variable is 1. +specifies the maximum indentation a line number can have. The default +value of the variable is 1. Fortran mode tries to prevent line number +digits passing column 4, reducing the indentation below the specified +maximum if necessary. If @code{fortran-line-number-indent} has the +value 5, line numbers are right-justified to end in column 4. @vindex fortran-electric-line-number Simply inserting a line number is enough to indent it according to @@ -2062,54 +2069,59 @@ Extra indentation within each level of @samp{do} statement (default 3). @item fortran-if-indent -Extra indentation within each level of @samp{if} statement (default 3). -This value is also used for extra indentation within each level of the -Fortran 90 @samp{where} statement. +Extra indentation within each level of @samp{if}, @samp{select case}, or +@samp{where} statements (default 3). @item fortran-structure-indent -Extra indentation within each level of @samp{structure}, @samp{union}, or -@samp{map} statements (default 3). +Extra indentation within each level of @samp{structure}, @samp{union}, +@samp{map}, or @samp{interface} statements (default 3). @item fortran-continuation-indent Extra indentation for bodies of continuation lines (default 5). @item fortran-check-all-num-for-matching-do -If this is @code{nil}, indentation assumes that each @samp{do} statement -ends on a @samp{continue} statement. Therefore, when computing -indentation for a statement other than @samp{continue}, it can save time -by not checking for a @samp{do} statement ending there. If this is -non-@code{nil}, indenting any numbered statement must check for a -@samp{do} that ends there. The default is @code{nil}. +In Fortran77, a numbered @samp{do} statement is ended by any statement +with a matching line number. It is common (but not compulsory) to use a +@samp{continue} statement for this purpose. If this variable has a +non-@code{nil} value, indenting any numbered statement must check for a +@samp{do} that ends there. If you always end @samp{do} statements with +a @samp{continue} line (or if you use the more modern @samp{enddo}), +then you can speed up indentation by setting this variable to +@code{nil}. The default is @code{nil}. @item fortran-blink-matching-if -If this is @code{t}, indenting an @samp{endif} statement moves the -cursor momentarily to the matching @samp{if} statement to show where it -is. The default is @code{nil}. +If this is @code{t}, indenting an @samp{endif} (or @samp{enddo} +statement moves the cursor momentarily to the matching @samp{if} (or +@samp{do}) statement to show where it is. The default is @code{nil}. @item fortran-minimum-statement-indent-fixed -Minimum indentation for fortran statements when using fixed format +Minimum indentation for Fortran statements when using fixed format continuation line style. Statement bodies are never indented less than this much. The default is 6. @item fortran-minimum-statement-indent-tab -Minimum indentation for fortran statements for tab format continuation line +Minimum indentation for Fortran statements for tab format continuation line style. Statement bodies are never indented less than this much. The default is 8. @end table +The variables controlling the indentation of comments are described in +the following section. + @node Fortran Comments @subsection Fortran Comments - The usual Emacs comment commands assume that a comment can follow a line -of code. In Fortran, the standard comment syntax requires an entire line -to be just a comment. Therefore, Fortran mode replaces the standard Emacs -comment commands and defines some new variables. + The usual Emacs comment commands assume that a comment can follow a +line of code. In Fortran77, the standard comment syntax requires an +entire line to be just a comment. Therefore, Fortran mode replaces the +standard Emacs comment commands and defines some new variables. +@vindex fortran-comment-line-start Fortran mode can also handle the Fortran90 comment syntax where comments start with @samp{!} and can follow other text. Because only some Fortran77 compilers accept this syntax, Fortran mode will not insert such comments unless you have said in advance to do so. To do this, set the variable -@code{comment-start} to @samp{"!"} (@pxref{Variables}). +@code{fortran-comment-line-start} to @samp{"!"}. @table @kbd @item M-; @@ -2123,6 +2135,7 @@ into real code (@code{fortran-comment-region}). @end table +@findex fortran-indent-comment @kbd{M-;} in Fortran mode is redefined as the command @code{fortran-indent-comment}. Like the usual @kbd{M-;} command, this recognizes any kind of existing comment and aligns its text appropriately; @@ -2178,14 +2191,6 @@ lines are directives. Matching lines are never indented, and receive distinctive font-locking. -@vindex comment-line-start -@vindex comment-line-start-skip - Fortran mode introduces two variables @code{comment-line-start} and -@code{comment-line-start-skip}, which play for full-line comments the same -roles played by @code{comment-start} and @code{comment-start-skip} for -ordinary text-following comments. Normally these are set properly by -Fortran mode, so you do not need to change them. - The normal Emacs comment command @kbd{C-x ;} has not been redefined. If you use @samp{!} comments, this command can be used with them. Otherwise it is useless in Fortran mode. @@ -2204,34 +2209,28 @@ clear from the context which one is meant. @node Fortran Autofill -@subsection Fortran Auto Fill Mode +@subsection Auto Fill in Fortran Mode - Fortran Auto Fill mode is a minor mode which automatically splits -Fortran statements as you insert them when they become too wide. -Splitting a statement involves making continuation lines using -@code{fortran-continuation-string} (@pxref{ForIndent Cont}). This -splitting happens when you type @key{SPC}, @key{RET}, or @key{TAB}, and -also in the Fortran indentation commands. - -@findex fortran-auto-fill-mode - @kbd{M-x fortran-auto-fill-mode} toggles Fortran Auto Fill mode, -which is a variant of normal Auto Fill mode (@pxref{Filling}) designed -for Fortran programs. Fortran Auto Fill mode is a buffer-local minor -mode (@pxref{Minor Modes}). When Fortran Auto Fill mode is in effect, -the word @samp{Fill} appears in the mode line inside the parentheses. + Fortran mode has specialized support for Auto Fill mode, which is a +minor mode that automatically splits statements as you insert them when +they become too wide. Splitting a statement involves making +continuation lines using @code{fortran-continuation-string} +(@pxref{ForIndent Cont}). This splitting happens when you type +@key{SPC}, @key{RET}, or @key{TAB}, and also in the Fortran indentation +commands. You activate Auto Fill in Fortran mode in the normal way +(@pxref{Auto Fill}). @vindex fortran-break-before-delimiters - Fortran Auto Fill mode breaks lines at spaces or delimiters when the -lines get longer than the desired width (the value of @code{fill-column}). -The delimiters that Fortran Auto Fill mode may break at are @samp{,}, -@samp{'}, @samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, and @samp{)}. -The line break comes after the delimiter if the variable -@code{fortran-break-before-delimiters} is @code{nil}. Otherwise (and by -default), the break comes before the delimiter. + Auto Fill breaks lines at spaces or delimiters when the lines get +longer than the desired width (the value of @code{fill-column}). The +delimiters (besides whitespace) that Auto Fill can break at are +@samp{+}, @samp{-}, @samp{/}, @samp{*}, @samp{=}, @samp{<}, @samp{>}, +and @samp{,}. The line break comes after the delimiter if the +variable @code{fortran-break-before-delimiters} is @code{nil}. +Otherwise (and by default), the break comes before the delimiter. - To enable this mode permanently, add a hook function to -@code{fortran-mode-hook} to execute @code{(fortran-auto-fill-mode 1)}. -@xref{Hooks}. + To enable Auto Fill in all Fortran buffers, add +@code{turn-on-auto-fill} to @code{fortran-mode-hook}. @xref{Hooks}. @node Fortran Columns @subsection Checking Columns in Fortran @@ -2280,7 +2279,7 @@ @findex fortran-window-create-momentarily @kbd{C-c C-w} (@code{fortran-window-create-momentarily}) temporarily splits the current window horizontally, making a window 72 columns -wide, so you can see which lines that is too long. Type a space to +wide, so you can see any lines that are too long. Type a space to restore the normal width. @kindex C-u C-c C-w @r{(Fortran mode)} diff -r 45e5f0224d81 -r 360860a0006f man/text.texi --- a/man/text.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/text.texi Mon Apr 04 16:43:15 2005 +0000 @@ -403,13 +403,13 @@ * Fill Prefix:: Filling paragraphs that are indented or in a comment, etc. * Adaptive Fill:: How Emacs can determine the fill prefix automatically. +* Longlines:: Editing text with very long lines. @end menu @node Auto Fill @subsection Auto Fill Mode @cindex Auto Fill mode @cindex mode, Auto Fill -@cindex word wrap @dfn{Auto Fill} mode is a minor mode in which lines are broken automatically when they become too wide. Breaking happens only when @@ -474,16 +474,19 @@ to typical word processor behavior. This works by running a paragraph-filling command at suitable times. - When you are typing text, only characters which normally trigger -auto filling, like the space character, will trigger refilling. This -is to avoid making it too slow. Apart from self-inserting characters, -other commands which modify the text cause refilling. - - The current implementation is preliminary and probably not robust. -We expect to improve on it. - To toggle the use of Refill mode in the current buffer, type -@kbd{M-x refill-mode}. +@kbd{M-x refill-mode}. When you are typing text, only characters +which normally trigger auto filling, like the space character, will +trigger refilling. This is to avoid making it too slow. Apart from +self-inserting characters, other commands which modify the text cause +refilling. + + The current implementation is preliminary and not robust. You can +get better ``line wrapping'' behavior using Longlines mode. +@xref{Longlines}. However, Longlines mode has an important +side-effect: the newlines that it inserts for you are not saved to +disk, so the files that you make with Longlines mode will appear to be +completely unfilled if you edit them without Longlines mode. @node Fill Commands @subsection Explicit Fill Commands @@ -745,6 +748,56 @@ line. If it returns @code{nil}, that means it sees no fill prefix in that line. +@node Longlines +@subsection Long Lines Mode +@cindex refilling text, word processor style +@cindex modes, Long Lines +@cindex word wrap +@cindex Long Lines minor mode + + Long Lines mode is a minor mode for @dfn{word wrapping}; it lets you +edit ``unfilled'' text files, which Emacs would normally display as a +bunch of extremely long lines. Many text editors, such as those built +into many web browsers, normally do word wrapping. + +@findex longlines-mode + To enable Long Lines mode, type @kbd{M-x longlines-mode}. If the +text is full of long lines, this will ``wrap'' them +immediately---i.e., break up to fit in the window. As you edit the +text, Long Lines mode automatically re-wraps lines by inserting or +deleting @dfn{soft newlines} as necessary (@pxref{Hard and Soft +Newlines}.) These soft newlines won't show up when you save the +buffer into a file, or when you copy the text into the kill ring, +clipboard, or a register. + +@findex longlines-auto-wrap + Word wrapping is @emph{not} the same as ordinary filling +(@pxref{Fill Commands}). It does not contract multiple spaces into a +single space, recognize fill prefixes (@pxref{Fill Prefix}), or +perform adaptive filling (@pxref{Adaptive Fill}). The reason for this +is that a wrapped line is still, conceptually, a single line. Each +soft newline is equivalent to exactly one space in that long line, and +vice versa. However, you can still call filling functions such as +@kbd{M-q}, and these will work as expected, inserting soft newlines +that won't show up on disk or when the text is copied. You can even +rely entirely on the normal fill commands by turning off automatic +line wrapping, with @kbd{C-u M-x longlines-auto-wrap}. To turn +automatic line wrapping back on, type @kbd{M-x longlines-auto-wrap}. + +@findex longlines-show-hard-newlines + Whenever you type @kbd{RET}, you are inserting a hard newline. If +you want to see where all the hard newlines are, type @kbd{M-x +longlines-show-hard-newlines}. This will mark each hard newline with +a special symbol. The same command with a prefix argument turns this +display off. + + Long Lines mode does not change normal text files that are already +filled, since the existing newlines are considered hard newlines. +Before Long Lines can do anything, you need to transform each +paragraph into a long line. One way is to set @code{fill-column} to a +large number (e.g., @kbd{C-u 9999 C-x f}), re-fill all the paragraphs, +and then set @code{fill-column} back to its original value. + @node Case @section Case Conversion Commands @cindex case conversion diff -r 45e5f0224d81 -r 360860a0006f man/xresources.texi --- a/man/xresources.texi Mon Mar 28 04:24:51 2005 +0000 +++ b/man/xresources.texi Mon Apr 04 16:43:15 2005 +0000 @@ -52,7 +52,8 @@ and then under the key @samp{HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs}. The menu and scrollbars are native widgets on MS-Windows, so they are only customizable via the system-wide settings in the Display Control -Panel. +Panel. You can also set resources using the @samp{-xrm} command line +option (see below.) Programs define named resources with particular meanings. They also define how to group resources into named classes. For instance, in @@ -668,8 +669,8 @@ @end table @noindent -You must soecify the class and the style in double-quotes, and put -these commands at the top level in a @file{~/.gtkrc-2.0} file, like +You must specify the class and the style in double-quotes, and put +these commands at the top level in the GTK customization file, like this: @smallexample @@ -782,7 +783,7 @@ automatically applies only to Emacs, since other programs don't read that file. For example, the drop down menu in the file dialog can not be customized by any absolute widget name, only by an absolute class -name. This is so because the widgets in the drop down menu do not +name. This is because the widgets in the drop down menu do not have names and the menu is not contained in the Emacs GtkWindow. To have all menus in Emacs look the same, use this in @file{~/.emacs.d/gtkrc}: diff -r 45e5f0224d81 -r 360860a0006f src/ChangeLog --- a/src/ChangeLog Mon Mar 28 04:24:51 2005 +0000 +++ b/src/ChangeLog Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,81 @@ +2005-04-04 Kim F. Storm + + * alloc.c (Fgarbage_collect): Call CHECK_CONS_LIST before and after gc. + + * eval.c (Ffuncall): Always call CHECK_CONS_LIST on entry. + Call it again after autoload. + +2005-04-02 Jan Dj,Ad(Brv + + * alloc.c (allocate_string_data): Call BLOCK_INPUT before calling + mallopt. + + * ralloc.c (r_alloc_init): Ditto. + +2005-04-01 Kenichi Handa + + * lisp.h (Vascii_upcase_table, Vascii_canon_table, + Vascii_eqv_table): Extern them. + + * casetab.c (set_case_table): If standard is nonzero, setup + Vascii_upcase_table, Vascii_canon_table, and Vascii_eqv_table. + + * search.c (looking_at_1): Use current_buffer->case_canon_table, + not DOWNCASE_TABLE. + (string_match_1): Likewise. + (fast_c_string_match_ignore_case): Use Vascii_canon_table, not + Vascii_downcase_table. + (fast_string_match_ignore_case): Likewise. + (search_buffer): Fix checking of boyer-moore usability. + (boyer_moore): Calculate translate_prev_byte1/2/3 in advance. No + need of tranlating characters in PAT. Fix calculation of + simple_translate. + +2005-03-31 Stefan Monnier + + * xterm.c [HAVE_XAW3D]: Include ThreeD.h for XtNbeNiceToColormap. + (x_create_toolkit_scroll_bar): Test XtNbeNiceToColormap before using it. + Use XtNtopShadowPixel and XtNbottomShadowPixel. + (x_set_toolkit_scroll_bar_thumb): Remove ugly old hack that didn't + really work and that breaks with some versions of Xaw3d. + +2005-03-31 Kenichi Handa + + * coding.c (syms_of_coding): Fix previous change. + +2005-03-30 Stefan Monnier + + * fileio.c (search_embedded_absfilename): Fix last change. + +2005-03-25 Kenichi Handa + + * coding.c (syms_of_coding): Suggest to use set-coding-category in + the docstring of coding-category-list. + +2005-03-31 Kim F. Storm + + * keyboard.c (Qmouse_fixup_help_message): New var. + (syms_of_keyboard): Intern and staticpro it. + (show_help_echo): Apply mouse-fixup-help-message to help string. + +2005-03-30 Kim F. Storm + + * xdisp.c (display_line): Allow multiple overlay arrows in window. + +2005-03-28 Stefan Monnier + + * fileio.c (Fexpand_file_name): Use IS_DEVICE_SEP. + (file_name_absolute_p): New fun, extracted from Ffile_name_absolute_p. + (Ffile_name_absolute_p): Use it. + (search_embedded_absfilename): New fun, extracted from + Fsubstitute_in_file_name. Use file_name_absolute_p. + Free the pw data after use. + (Fsubstitute_in_file_name): Use it. + After cutting a prefix, re-check file-name-handler. + 2005-03-26 Lennart Borgman - * w32term.h (x_output): add focus_state. + * w32term.h (x_output): Add focus_state. * w32term.c (x_focus_changed, w32_detect_focus_change): New functions. (w32_read_socket) [WM_SETFOCUS]: Call w32_detect_focus_change. diff -r 45e5f0224d81 -r 360860a0006f src/alloc.c --- a/src/alloc.c Mon Mar 28 04:24:51 2005 +0000 +++ b/src/alloc.c Mon Apr 04 16:43:15 2005 +0000 @@ -1934,14 +1934,18 @@ mmap'ed data typically have an address towards the top of the address space, which won't fit into an EMACS_INT (at least on 32-bit systems with the current tagging scheme). --fx */ + BLOCK_INPUT; mallopt (M_MMAP_MAX, 0); + UNBLOCK_INPUT; #endif b = (struct sblock *) lisp_malloc (size + GC_STRING_EXTRA, MEM_TYPE_NON_LISP); #ifdef DOUG_LEA_MALLOC /* Back to a reasonable maximum of mmap'ed areas. */ + BLOCK_INPUT; mallopt (M_MMAP_MAX, MMAP_MAX_AREAS); + UNBLOCK_INPUT; #endif b->next_free = &b->first_data; @@ -4684,6 +4688,8 @@ if (pure_bytes_used_before_overflow) return Qnil; + CHECK_CONS_LIST (); + /* Don't keep undo information around forever. Do this early on, so it is no problem if the user quits. */ { @@ -4878,6 +4884,8 @@ UNBLOCK_INPUT; + CHECK_CONS_LIST (); + /* clear_marks (); */ gc_in_progress = 0; diff -r 45e5f0224d81 -r 360860a0006f src/casetab.c --- a/src/casetab.c Mon Mar 28 04:24:51 2005 +0000 +++ b/src/casetab.c Mon Apr 04 16:43:15 2005 +0000 @@ -162,7 +162,12 @@ XCHAR_TABLE (canon)->extras[2] = eqv; if (standard) - Vascii_downcase_table = table; + { + Vascii_downcase_table = table; + Vascii_upcase_table = up; + Vascii_canon_table = canon; + Vascii_eqv_table = eqv; + } else { current_buffer->downcase_table = table; diff -r 45e5f0224d81 -r 360860a0006f src/coding.c --- a/src/coding.c Mon Mar 28 04:24:51 2005 +0000 +++ b/src/coding.c Mon Apr 04 16:43:15 2005 +0000 @@ -7821,7 +7821,7 @@ one algorithm agrees with a byte sequence of source text, the coding system bound to the corresponding coding-category is selected. -Don't modify this variable directly, but use `set-coding-category'. */); +Don't modify this variable directly, but use `set-coding-priority'. */); { int i; diff -r 45e5f0224d81 -r 360860a0006f src/editfns.c --- a/src/editfns.c Mon Mar 28 04:24:51 2005 +0000 +++ b/src/editfns.c Mon Apr 04 16:43:15 2005 +0000 @@ -1,6 +1,6 @@ /* Lisp functions pertaining to editing. - Copyright (C) 1985,86,87,89,93,94,95,96,97,98,1999,2000,01,02,03,2004 - Free Software Foundation, Inc. + Copyright (C) 1985, 1986, 1987, 1989, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -265,10 +265,7 @@ DEFUN ("goto-char", Fgoto_char, Sgoto_char, 1, 1, "NGoto char: ", doc: /* Set point to POSITION, a number or marker. -Beginning of buffer is position (point-min), end is (point-max). -If the position is in the middle of a multibyte form, -the actual point is set at the head of the multibyte form -except in the case that `enable-multibyte-characters' is nil. */) +Beginning of buffer is position (point-min), end is (point-max). */) (position) register Lisp_Object position; { diff -r 45e5f0224d81 -r 360860a0006f src/eval.c --- a/src/eval.c Mon Mar 28 04:24:51 2005 +0000 +++ b/src/eval.c Mon Apr 04 16:43:15 2005 +0000 @@ -2742,6 +2742,8 @@ if (debug_on_next_call) do_debug_on_call (Qlambda); + CHECK_CONS_LIST (); + retry: fun = args[0]; @@ -2750,9 +2752,7 @@ if (SUBRP (fun)) { - CHECK_CONS_LIST (); - - if (numargs < XSUBR (fun)->min_args + if (numargs < XSUBR (fun)->min_args || (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs)) { XSETFASTINT (lisp_numargs, numargs); @@ -2844,6 +2844,7 @@ else if (EQ (funcar, Qautoload)) { do_autoload (fun, args[0]); + CHECK_CONS_LIST (); goto retry; } else diff -r 45e5f0224d81 -r 360860a0006f src/fileio.c --- a/src/fileio.c Mon Mar 28 04:24:51 2005 +0000 +++ b/src/fileio.c Mon Apr 04 16:43:15 2005 +0000 @@ -1016,7 +1016,7 @@ DEFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, doc: /* Convert filename NAME to absolute, and canonicalize it. Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative - (does not start with slash); if DEFAULT-DIRECTORY is nil or missing, +\(does not start with slash); if DEFAULT-DIRECTORY is nil or missing, the current buffer's value of default-directory is used. File name components that are `.' are removed, and so are file name components followed by `..', along with the `..' itself; @@ -1466,7 +1466,7 @@ indirectly by prepending newdir to nm if necessary, and using cwd (or the wd of newdir's drive) as the new newdir. */ - if (IS_DRIVE (newdir[0]) && newdir[1] == ':') + if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1])) { drive = newdir[0]; newdir += 2; @@ -1489,7 +1489,7 @@ } /* Strip off drive name from prefix, if present. */ - if (IS_DRIVE (newdir[0]) && newdir[1] == ':') + if (IS_DRIVE (newdir[0]) && IS_DEVICE_SEP (newdir[1])) { drive = newdir[0]; newdir += 2; @@ -1723,7 +1723,7 @@ DEAFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, "Convert FILENAME to absolute, and canonicalize it.\n\ Second arg DEFAULT is directory to start with if FILENAME is relative\n\ - (does not start with slash); if DEFAULT is nil or missing,\n\ +\(does not start with slash); if DEFAULT is nil or missing,\n\ the current buffer's value of default-directory is used.\n\ Filenames containing `.' or `..' as components are simplified;\n\ initial `~/' expands to your home directory.\n\ @@ -2042,6 +2042,75 @@ } #endif +/* If /~ or // appears, discard everything through first slash. */ +static int +file_name_absolute_p (filename) + const unsigned char *filename; +{ + return + (IS_DIRECTORY_SEP (*filename) || *filename == '~' +#ifdef VMS + /* ??? This criterion is probably wrong for '<'. */ + || index (filename, ':') || index (filename, '<') + || (*filename == '[' && (filename[1] != '-' + || (filename[2] != '.' && filename[2] != ']')) + && filename[1] != '.') +#endif /* VMS */ +#ifdef DOS_NT + || (IS_DRIVE (*filename) && IS_DEVICE_SEP (filename[1]) + && IS_DIRECTORY_SEP (filename[2])) +#endif + ); +} + +static unsigned char * +search_embedded_absfilename (nm, endp) + unsigned char *nm, *endp; +{ + unsigned char *p, *s; + + for (p = nm + 1; p < endp; p++) + { + if ((0 +#ifdef VMS + || p[-1] == ':' || p[-1] == ']' || p[-1] == '>' +#endif /* VMS */ + || IS_DIRECTORY_SEP (p[-1])) + && file_name_absolute_p (p) +#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) + /* // at start of file name is meaningful in Apollo, + WindowsNT and Cygwin systems. */ + && !(IS_DIRECTORY_SEP (p[0]) && p - 1 == nm) +#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */ + ) + { + for (s = p; *s && (!IS_DIRECTORY_SEP (*s) +#ifdef VMS + && *s != ':' +#endif /* VMS */ + ); s++); + if (p[0] == '~' && s > p + 1) /* we've got "/~something/" */ + { + unsigned char *o = alloca (s - p + 1); + struct passwd *pw; + bcopy (p, o, s - p); + o [s - p] = 0; + + /* If we have ~user and `user' exists, discard + everything up to ~. But if `user' does not exist, leave + ~user alone, it might be a literal file name. */ + if ((pw = getpwnam (o + 1))) + return p; + else + xfree (pw); + } + else + return p; + } + } + return NULL; +} + DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name, Ssubstitute_in_file_name, 1, 1, 0, doc: /* Substitute environment variables referred to in FILENAME. @@ -2063,7 +2132,6 @@ int total = 0; int substituted = 0; unsigned char *xnm; - struct passwd *pw; Lisp_Object handler; CHECK_STRING (filename); @@ -2083,61 +2151,17 @@ endp = nm + SBYTES (filename); /* If /~ or // appears, discard everything through first slash. */ - - for (p = nm; p != endp; p++) - { - if ((p[0] == '~' -#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) - /* // at start of file name is meaningful in Apollo, - WindowsNT and Cygwin systems. */ - || (IS_DIRECTORY_SEP (p[0]) && p - 1 != nm) -#else /* not (APOLLO || WINDOWSNT || CYGWIN) */ - || IS_DIRECTORY_SEP (p[0]) -#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */ - ) - && p != nm - && (0 -#ifdef VMS - || p[-1] == ':' || p[-1] == ']' || p[-1] == '>' -#endif /* VMS */ - || IS_DIRECTORY_SEP (p[-1]))) - { - for (s = p; *s && (!IS_DIRECTORY_SEP (*s) -#ifdef VMS - && *s != ':' -#endif /* VMS */ - ); s++); - if (p[0] == '~' && s > p + 1) /* we've got "/~something/" */ - { - o = (unsigned char *) alloca (s - p + 1); - bcopy ((char *) p, o, s - p); - o [s - p] = 0; - - pw = (struct passwd *) getpwnam (o + 1); - } - /* If we have ~/ or ~user and `user' exists, discard - everything up to ~. But if `user' does not exist, leave - ~user alone, it might be a literal file name. */ - if (IS_DIRECTORY_SEP (p[0]) || s == p + 1 || pw) - { - nm = p; - substituted = 1; - } - } -#ifdef DOS_NT - /* see comment in expand-file-name about drive specifiers */ - else if (IS_DRIVE (p[0]) && p[1] == ':' - && p > nm && IS_DIRECTORY_SEP (p[-1])) - { - nm = p; - substituted = 1; - } -#endif /* DOS_NT */ - } + p = search_embedded_absfilename (nm, endp); + if (p) + /* Start over with the new string, so we check the file-name-handler + again. Important with filenames like "/home/foo//:/hello///there" + which whould substitute to "/:/hello///there" rather than "/there". */ + return Fsubstitute_in_file_name + (make_specified_string (p, -1, endp - p, + STRING_MULTIBYTE (filename))); #ifdef VMS - return make_specified_string (nm, -1, strlen (nm), - STRING_MULTIBYTE (filename)); + return filename; #else /* See if any variables are substituted into the string @@ -2263,22 +2287,11 @@ *x = 0; /* If /~ or // appears, discard everything through first slash. */ - - for (p = xnm; p != x; p++) - if ((p[0] == '~' -#if defined (APOLLO) || defined (WINDOWSNT) || defined(CYGWIN) - || (IS_DIRECTORY_SEP (p[0]) && p - 1 != xnm) -#else /* not (APOLLO || WINDOWSNT || CYGWIN) */ - || IS_DIRECTORY_SEP (p[0]) -#endif /* not (APOLLO || WINDOWSNT || CYGWIN) */ - ) - && p != xnm && IS_DIRECTORY_SEP (p[-1])) - xnm = p; -#ifdef DOS_NT - else if (IS_DRIVE (p[0]) && p[1] == ':' - && p > xnm && IS_DIRECTORY_SEP (p[-1])) - xnm = p; -#endif + while ((p = search_embedded_absfilename (xnm, x))) + /* This time we do not start over because we've already expanded envvars + and replaced $$ with $. Maybe we should start over as well, but we'd + need to quote some $ to $$ first. */ + xnm = p; return make_specified_string (xnm, -1, x - xnm, STRING_MULTIBYTE (filename)); @@ -2961,24 +2974,8 @@ (filename) Lisp_Object filename; { - const unsigned char *ptr; - CHECK_STRING (filename); - ptr = SDATA (filename); - if (IS_DIRECTORY_SEP (*ptr) || *ptr == '~' -#ifdef VMS -/* ??? This criterion is probably wrong for '<'. */ - || index (ptr, ':') || index (ptr, '<') - || (*ptr == '[' && (ptr[1] != '-' || (ptr[2] != '.' && ptr[2] != ']')) - && ptr[1] != '.') -#endif /* VMS */ -#ifdef DOS_NT - || (IS_DRIVE (*ptr) && ptr[1] == ':' && IS_DIRECTORY_SEP (ptr[2])) -#endif - ) - return Qt; - else - return Qnil; + return file_name_absolute_p (SDATA (filename)) ? Qt : Qnil; } /* Return nonzero if file FILENAME exists and can be executed. */ diff -r 45e5f0224d81 -r 360860a0006f src/keyboard.c --- a/src/keyboard.c Mon Mar 28 04:24:51 2005 +0000 +++ b/src/keyboard.c Mon Apr 04 16:43:15 2005 +0000 @@ -514,6 +514,10 @@ Lisp_Object Qselect_window; Lisp_Object Qhelp_echo; +#ifdef HAVE_MOUSE +Lisp_Object Qmouse_fixup_help_message; +#endif + /* Symbols to denote kinds of events. */ Lisp_Object Qfunction_key; Lisp_Object Qmouse_click; @@ -2298,6 +2302,11 @@ return; } +#ifdef HAVE_MOUSE + if (!noninteractive && STRINGP (help)) + help = call1 (Qmouse_fixup_help_message, help); +#endif + if (STRINGP (help) || NILP (help)) { if (!NILP (Vshow_help_function)) @@ -11010,6 +11019,11 @@ Qmenu_bar = intern ("menu-bar"); staticpro (&Qmenu_bar); +#ifdef HAVE_MOUSE + Qmouse_fixup_help_message = intern ("mouse-fixup-help-message"); + staticpro (&Qmouse_fixup_help_message); +#endif + Qabove_handle = intern ("above-handle"); staticpro (&Qabove_handle); Qhandle = intern ("handle"); diff -r 45e5f0224d81 -r 360860a0006f src/lisp.h --- a/src/lisp.h Mon Mar 28 04:24:51 2005 +0000 +++ b/src/lisp.h Mon Apr 04 16:43:15 2005 +0000 @@ -1861,7 +1861,8 @@ NATNUMP (case_temp2)) \ ? XFASTINT (case_temp2) : case_temp1) -extern Lisp_Object Vascii_downcase_table; +extern Lisp_Object Vascii_downcase_table, Vascii_upcase_table; +extern Lisp_Object Vascii_canon_table, Vascii_eqv_table; /* Number of bytes of structure consed since last GC. */ diff -r 45e5f0224d81 -r 360860a0006f src/ralloc.c --- a/src/ralloc.c Mon Mar 28 04:24:51 2005 +0000 +++ b/src/ralloc.c Mon Apr 04 16:43:15 2005 +0000 @@ -28,6 +28,7 @@ #include #include "lisp.h" /* Needed for VALBITS. */ +#include "blockinput.h" #ifdef HAVE_UNISTD_H #include @@ -1255,7 +1256,9 @@ #endif #ifdef DOUG_LEA_MALLOC - mallopt (M_TOP_PAD, 64 * 4096); + BLOCK_INPUT; + mallopt (M_TOP_PAD, 64 * 4096); + UNBLOCK_INPUT; #else #ifndef SYSTEM_MALLOC /* Give GNU malloc's morecore some hysteresis diff -r 45e5f0224d81 -r 360860a0006f src/search.c --- a/src/search.c Mon Mar 28 04:24:51 2005 +0000 +++ b/src/search.c Mon Apr 04 16:43:15 2005 +0000 @@ -293,7 +293,7 @@ CHECK_STRING (string); bufp = compile_pattern (string, &search_regs, (!NILP (current_buffer->case_fold_search) - ? DOWNCASE_TABLE : Qnil), + ? current_buffer->case_canon_table : Qnil), posix, !NILP (current_buffer->enable_multibyte_characters)); @@ -399,7 +399,7 @@ bufp = compile_pattern (regexp, &search_regs, (!NILP (current_buffer->case_fold_search) - ? DOWNCASE_TABLE : Qnil), + ? current_buffer->case_canon_table : Qnil), posix, STRING_MULTIBYTE (string)); immediate_quit = 1; @@ -499,7 +499,7 @@ regexp = string_make_unibyte (regexp); re_match_object = Qt; bufp = compile_pattern (regexp, 0, - Vascii_downcase_table, 0, + Vascii_canon_table, 0, 0); immediate_quit = 1; val = re_search (bufp, string, len, 0, len, 0); @@ -516,7 +516,7 @@ int val; struct re_pattern_buffer *bufp; - bufp = compile_pattern (regexp, 0, Vascii_downcase_table, + bufp = compile_pattern (regexp, 0, Vascii_canon_table, 0, STRING_MULTIBYTE (string)); immediate_quit = 1; re_match_object = string; @@ -1175,7 +1175,9 @@ unsigned char *patbuf; int multibyte = !NILP (current_buffer->enable_multibyte_characters); unsigned char *base_pat = SDATA (string); - int charset_base = -1; + /* Set to nozero if we find a non-ASCII char that need + translation. */ + int charset_base = 0; int boyer_moore_ok = 1; /* MULTIBYTE says whether the text to be searched is multibyte. @@ -1221,9 +1223,17 @@ base_pat = raw_pattern; if (multibyte) { + /* Fill patbuf by translated characters in STRING while + checking if we can use boyer-moore search. If TRT is + non-nil, we can use boyer-moore search only if TRT can be + represented by the byte array of 256 elements. For that, + all non-ASCII case-equivalents of all case-senstive + characters in STRING must belong to the same charset and + row. */ + while (--len >= 0) { - unsigned char str[MAX_MULTIBYTE_LENGTH]; + unsigned char str_base[MAX_MULTIBYTE_LENGTH], *str; int c, translated, inverse; int in_charlen, charlen; @@ -1233,50 +1243,62 @@ if (RE && *base_pat == '\\') { len--; + raw_pattern_size--; len_byte--; base_pat++; } c = STRING_CHAR_AND_LENGTH (base_pat, len_byte, in_charlen); - /* Translate the character, if requested. */ - TRANSLATE (translated, trt, c); - /* If translation changed the byte-length, go back - to the original character. */ - charlen = CHAR_STRING (translated, str); - if (in_charlen != charlen) + if (NILP (trt)) { - translated = c; - charlen = CHAR_STRING (c, str); + str = base_pat; + charlen = in_charlen; } - - /* If we are searching for something strange, - an invalid multibyte code, don't use boyer-moore. */ - if (! ASCII_BYTE_P (translated) - && (charlen == 1 /* 8bit code */ - || charlen != in_charlen /* invalid multibyte code */ - )) - boyer_moore_ok = 0; - - TRANSLATE (inverse, inverse_trt, c); - - /* Did this char actually get translated? - Would any other char get translated into it? */ - if (translated != c || inverse != c) + else { - /* Keep track of which character set row - contains the characters that need translation. */ - int charset_base_code = c & ~CHAR_FIELD3_MASK; - int inverse_charset_base = inverse & ~CHAR_FIELD3_MASK; - - if (charset_base_code != inverse_charset_base) - boyer_moore_ok = 0; - else if (charset_base == -1) - charset_base = charset_base_code; - else if (charset_base != charset_base_code) - /* If two different rows appear, needing translation, - then we cannot use boyer_moore search. */ - boyer_moore_ok = 0; + /* Translate the character. */ + TRANSLATE (translated, trt, c); + charlen = CHAR_STRING (translated, str_base); + str = str_base; + + /* Check if C has any other case-equivalents. */ + TRANSLATE (inverse, inverse_trt, c); + /* If so, check if we can use boyer-moore. */ + if (c != inverse && boyer_moore_ok) + { + /* Check if all equivalents belong to the same + charset & row. Note that the check of C + itself is done by the last iteration. Note + also that we don't have to check ASCII + characters because boyer-moore search can + always handle their translation. */ + while (1) + { + if (! ASCII_BYTE_P (inverse)) + { + if (SINGLE_BYTE_CHAR_P (inverse)) + { + /* Boyer-moore search can't handle a + translation of an eight-bit + character. */ + boyer_moore_ok = 0; + break; + } + else if (charset_base == 0) + charset_base = inverse & ~CHAR_FIELD3_MASK; + else if ((inverse & ~CHAR_FIELD3_MASK) + != charset_base) + { + boyer_moore_ok = 0; + break; + } + } + if (c == inverse) + break; + TRANSLATE (inverse, inverse_trt, inverse); + } + } } /* Store this character into the translated pattern. */ @@ -1300,6 +1322,7 @@ if (RE && *base_pat == '\\') { len--; + raw_pattern_size--; base_pat++; } c = *base_pat++; @@ -1533,16 +1556,18 @@ return n; } -/* Do Boyer-Moore search N times for the string PAT, +/* Do Boyer-Moore search N times for the string BASE_PAT, whose length is LEN/LEN_BYTE, from buffer position POS/POS_BYTE until LIM/LIM_BYTE. DIRECTION says which direction we search in. TRT and INVERSE_TRT are translation tables. - - This kind of search works if all the characters in PAT that have - nontrivial translation are the same aside from the last byte. This - makes it possible to translate just the last byte of a character, - and do so after just a simple test of the context. + Characters in PAT are already translated by TRT. + + This kind of search works if all the characters in BASE_PAT that + have nontrivial translation are the same aside from the last byte. + This makes it possible to translate just the last byte of a + character, and do so after just a simple test of the context. + CHARSET_BASE is nonzero iff there is such a non-ASCII character. If that criterion is not satisfied, do not call this function. */ @@ -1569,8 +1594,13 @@ int multibyte = ! NILP (current_buffer->enable_multibyte_characters); unsigned char simple_translate[0400]; - int translate_prev_byte = 0; - int translate_anteprev_byte = 0; + /* These are set to the preceding bytes of a byte to be translated + if charset_base is nonzero. As the maximum byte length of a + multibyte character is 4, we have to check at most three previous + bytes. */ + int translate_prev_byte1 = 0; + int translate_prev_byte2 = 0; + int translate_prev_byte3 = 0; #ifdef C_ALLOCA int BM_tab_space[0400]; @@ -1636,6 +1666,23 @@ for (i = 0; i < 0400; i++) simple_translate[i] = i; + if (charset_base) + { + /* Setup translate_prev_byte1/2/3 from CHARSET_BASE. Only a + byte following them are the target of translation. */ + int sample_char = charset_base | 0x20; + unsigned char str[MAX_MULTIBYTE_LENGTH]; + int len = CHAR_STRING (sample_char, str); + + translate_prev_byte1 = str[len - 2]; + if (len > 2) + { + translate_prev_byte2 = str[len - 3]; + if (len > 3) + translate_prev_byte3 = str[len - 4]; + } + } + i = 0; while (i != infinity) { @@ -1645,57 +1692,37 @@ i = infinity; if (! NILP (trt)) { - int ch; - int untranslated; - int this_translated = 1; - - if (multibyte - /* Is *PTR the last byte of a character? */ - && (pat_end - ptr == 1 || CHAR_HEAD_P (ptr[1]))) + /* If the byte currently looking at is a head of a character + to check case-equivalents, set CH to that character. An + ASCII character and a non-ASCII character matching with + CHARSET_BASE are to be checked. */ + int ch = -1; + + if (ASCII_BYTE_P (*ptr) || ! multibyte) + ch = *ptr; + else if (charset_base && CHAR_HEAD_P (*ptr)) { - unsigned char *charstart = ptr; - while (! CHAR_HEAD_P (*charstart)) - charstart--; - untranslated = STRING_CHAR (charstart, ptr - charstart + 1); - if (charset_base == (untranslated & ~CHAR_FIELD3_MASK)) - { - TRANSLATE (ch, trt, untranslated); - if (! CHAR_HEAD_P (*ptr)) - { - translate_prev_byte = ptr[-1]; - if (! CHAR_HEAD_P (translate_prev_byte)) - translate_anteprev_byte = ptr[-2]; - } - } - else - { - this_translated = 0; - ch = *ptr; - } + ch = STRING_CHAR (ptr, pat_end - ptr); + if (charset_base != (ch & ~CHAR_FIELD3_MASK)) + ch = -1; } - else if (!multibyte) - TRANSLATE (ch, trt, *ptr); - else - { - ch = *ptr; - this_translated = 0; - } - - if (ch > 0400) - j = ((unsigned char) ch) | 0200; - else - j = (unsigned char) ch; - + + j = *ptr; if (i == infinity) stride_for_teases = BM_tab[j]; BM_tab[j] = dirlen - i; /* A translation table is accompanied by its inverse -- see */ /* comment following downcase_table for details */ - if (this_translated) + if (ch >= 0) { int starting_ch = ch; - int starting_j = j; + int starting_j; + + if (ch > 0400) + starting_j = ((unsigned char) ch) | 0200; + else + starting_j = (unsigned char) ch; while (1) { TRANSLATE (ch, inverse_trt, ch); @@ -1821,9 +1848,13 @@ || ((cursor == tail_end_ptr || CHAR_HEAD_P (cursor[1])) && (CHAR_HEAD_P (cursor[0]) - || (translate_prev_byte == cursor[-1] - && (CHAR_HEAD_P (translate_prev_byte) - || translate_anteprev_byte == cursor[-2]))))) + /* Check if this is the last byte of + a translable character. */ + || (translate_prev_byte1 == cursor[-1] + && (CHAR_HEAD_P (translate_prev_byte1) + || (translate_prev_byte2 == cursor[-2] + && (CHAR_HEAD_P (translate_prev_byte2) + || (translate_prev_byte3 == cursor[-3])))))))) ch = simple_translate[*cursor]; else ch = *cursor; @@ -1901,9 +1932,13 @@ || ((ptr == tail_end_ptr || CHAR_HEAD_P (ptr[1])) && (CHAR_HEAD_P (ptr[0]) - || (translate_prev_byte == ptr[-1] - && (CHAR_HEAD_P (translate_prev_byte) - || translate_anteprev_byte == ptr[-2]))))) + /* Check if this is the last byte of a + translable character. */ + || (translate_prev_byte1 == ptr[-1] + && (CHAR_HEAD_P (translate_prev_byte1) + || (translate_prev_byte2 == ptr[-2] + && (CHAR_HEAD_P (translate_prev_byte2) + || translate_prev_byte3 == ptr[-3]))))))) ch = simple_translate[*ptr]; else ch = *ptr; diff -r 45e5f0224d81 -r 360860a0006f src/xdisp.c --- a/src/xdisp.c Mon Mar 28 04:24:51 2005 +0000 +++ b/src/xdisp.c Mon Apr 04 16:43:15 2005 +0000 @@ -462,7 +462,7 @@ Lisp_Object Qmenu_bar_update_hook, Vmenu_bar_update_hook; -/* Nonzero if overlay arrow has been displayed once in this window. */ +/* Nonzero if an overlay arrow has been displayed in this window. */ static int overlay_arrow_seen; @@ -15262,10 +15262,9 @@ mark this glyph row as the one containing the overlay arrow. This is clearly a mess with variable size fonts. It would be better to let it be displayed like cursors under X. */ - if (! overlay_arrow_seen - && (overlay_arrow_string - = overlay_arrow_at_row (it, row, &overlay_arrow_bitmap), - !NILP (overlay_arrow_string))) + if ((overlay_arrow_string + = overlay_arrow_at_row (it, row, &overlay_arrow_bitmap), + !NILP (overlay_arrow_string))) { /* Overlay arrow in window redisplay is a fringe bitmap. */ if (STRINGP (overlay_arrow_string)) diff -r 45e5f0224d81 -r 360860a0006f src/xterm.c --- a/src/xterm.c Mon Mar 28 04:24:51 2005 +0000 +++ b/src/xterm.c Mon Apr 04 16:43:15 2005 +0000 @@ -129,9 +129,7 @@ #ifdef HAVE_XAW3D #include #include -#define ARROW_SCROLLBAR -#define XAW_ARROW_SCROLLBARS -#include +#include #else /* !HAVE_XAW3D */ #include #include @@ -4560,6 +4558,7 @@ f->output_data.x->scroll_bar_bottom_shadow_pixel = pixel; } +#ifdef XtNbeNiceToColormap /* Tell the toolkit about them. */ if (f->output_data.x->scroll_bar_top_shadow_pixel == -1 || f->output_data.x->scroll_bar_bottom_shadow_pixel == -1) @@ -4583,16 +4582,17 @@ pixel = f->output_data.x->scroll_bar_top_shadow_pixel; if (pixel != -1) { - XtSetArg (av[ac], "topShadowPixel", pixel); + XtSetArg (av[ac], XtNtopShadowPixel, pixel); ++ac; } pixel = f->output_data.x->scroll_bar_bottom_shadow_pixel; if (pixel != -1) { - XtSetArg (av[ac], "bottomShadowPixel", pixel); + XtSetArg (av[ac], XtNbottomShadowPixel, pixel); ++ac; } } +#endif widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass, f->output_data.x->edit_widget, av, ac); @@ -4738,30 +4738,11 @@ XawScrollbarSetThumb (widget, top, shown); else { -#ifdef HAVE_XAW3D - ScrollbarWidget sb = (ScrollbarWidget) widget; - int scroll_mode = 0; - - /* `scroll_mode' only exists with Xaw3d + ARROW_SCROLLBAR. */ - if (xaw3d_arrow_scroll) - { - /* Xaw3d stupidly ignores resize requests while dragging - so we have to make it believe it's not in dragging mode. */ - scroll_mode = sb->scrollbar.scroll_mode; - if (scroll_mode == 2) - sb->scrollbar.scroll_mode = 0; - } -#endif /* Try to make the scrolling a tad smoother. */ if (!xaw3d_pick_top) shown = min (shown, old_shown); XawScrollbarSetThumb (widget, top, shown); - -#ifdef HAVE_XAW3D - if (xaw3d_arrow_scroll && scroll_mode == 2) - sb->scrollbar.scroll_mode = scroll_mode; -#endif } } }