changeset 90136:7a3341d65a12

Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-33 Merge from emacs--cvs-trunk--0 Patches applied: * emacs--cvs-trunk--0 (patch 223-227) - Update from CVS
author Miles Bader <miles@gnu.org>
date Sat, 02 Apr 2005 22:40:25 +0000
parents baa2d4aa0064 (current diff) 728460f45e1e (diff)
children e465b832ab21
files admin/ChangeLog admin/FOR-RELEASE etc/ChangeLog etc/NEWS etc/TUTORIAL etc/TUTORIAL.bg etc/TUTORIAL.cn etc/TUTORIAL.cs etc/TUTORIAL.de etc/TUTORIAL.es etc/TUTORIAL.fr etc/TUTORIAL.it etc/TUTORIAL.ja etc/TUTORIAL.ko etc/TUTORIAL.nl etc/TUTORIAL.pl etc/TUTORIAL.ro etc/TUTORIAL.ru etc/TUTORIAL.sk etc/TUTORIAL.sl etc/TUTORIAL.sv etc/TUTORIAL.th etc/TUTORIAL.zh lisp/ChangeLog lisp/calc/calc-embed.el lisp/calc/calc-graph.el lisp/calc/calc.el lisp/emacs-lisp/autoload.el lisp/emacs-lisp/easy-mmode.el lisp/files.el lisp/generic.el lisp/ido.el lisp/language/thai-word.el lisp/mail/rmail.el lisp/mouse.el lisp/pcvs.el lisp/progmodes/scheme.el lisp/simple.el lisp/tooltip.el lisp/vc-hooks.el lispref/ChangeLog lispref/nonascii.texi lwlib/ChangeLog lwlib/xlwmenu.c lwlib/xlwmenuP.h man/ChangeLog man/calc.texi man/calendar.texi man/cmdargs.texi man/files.texi man/maintaining.texi src/ChangeLog src/alloc.c src/casetab.c src/coding.c src/keyboard.c src/lisp.h src/ralloc.c src/search.c src/xterm.c
diffstat 62 files changed, 1378 insertions(+), 631 deletions(-) [+]
line wrap: on
line diff
--- a/admin/ChangeLog	Thu Mar 31 11:27:46 2005 +0000
+++ b/admin/ChangeLog	Sat Apr 02 22:40:25 2005 +0000
@@ -1,3 +1,16 @@
+2005-03-30  Marcelo Toledo  <marcelo@marcelotoledo.org>
+
+	* 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  <teirllm@auburn.edu>
+
+	* FOR-RELEASE (TO BE DONE SHORTLY BEFORE RELEASE): New section.
+	Add `undo-ask-before-discard' to it.
+
 2005-03-02  Miles Bader  <miles@gnu.org>
 
 	* quick-install-emacs: Only use the mkdir --verbose option if the
--- a/admin/FOR-RELEASE	Thu Mar 31 11:27:46 2005 +0000
+++ b/admin/FOR-RELEASE	Sat Apr 02 22:40:25 2005 +0000
@@ -1,8 +1,8 @@
 Tasks needed before the next release.
 
-* THINGS THAT HAVE TO BE DONE SHORTLY BEFORE RELEASE
+* TO BE DONE SHORTLY BEFORE RELEASE
 
-`undo-ask-before-discard', currently set to t for debugging purposes
+** `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
@@ -23,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
@@ -150,7 +152,7 @@
 man/buffers.texi    "Luc Teirlinck"  Chong Yidong
 man/building.texi   "Ted Zlatanov" <tzz@lifelogs.com>
 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
@@ -216,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
@@ -245,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 <ogi@fmi.uni-sofia.bg>
+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 <matsl@contactor.se>
+etc/TUTORIAL.th
+etc/TUTORIAL.zh
+
+
+
 
 Local variables:
 mode: outline
--- a/etc/ChangeLog	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/ChangeLog	Sat Apr 02 22:40:25 2005 +0000
@@ -1,3 +1,31 @@
+2005-04-02  Richard M. Stallman  <rms@gnu.org>
+	
+	* 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  <marcelo@marcelotoledo.org>
+
+        * 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 <ogi@fmi.uni-sofia.bg>.
+        
+        * TUTORIAL.sv: Sync some other changes with the TUTORIAL version
+        1.61 in CVS by Mats Lidell <matsl@contactor.se>.
+
+
+2005-04-01  Lute Kamstra  <lute@gnu.org>
+
+	* TUTORIAL.nl: Fix title line.
+
 2005-03-30  Thien-Thi Nguyen  <ttn@gnu.org>
 
 	* TUTORIAL: Add title line.
--- a/etc/NEWS	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/NEWS	Sat Apr 02 22:40:25 2005 +0000
@@ -2804,6 +2804,10 @@
 
 * 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
--- a/etc/TUTORIAL	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL	Sat Apr 02 22:40:25 2005 +0000
@@ -1,5 +1,4 @@
-Emacs Tutorial
-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
--- a/etc/TUTORIAL.bg	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.bg	Sat Apr 02 22:40:25 2005 +0000
@@ -1,8 +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).  Вместо да се изписват с пълно име всеки път, ние ще използваме
 следните съкращения:
@@ -16,7 +15,7 @@
 		клавиша ESC и след това въведете <знак>.  Ние
 		записваме <ESC>, за да отбележим клавиша ESC.
 
-Важна бележка: в края на Емакс сесията въведете двата знака C-x C-c.
+Важна бележка: в края на Emacs сесията въведете двата знака C-x C-c.
 Знаците ">>" отляво ви дават указание да изпълните команда.  Например:
 <<Blank lines inserted here by startup of help-with-tutorial>>
 >> Сега въведете C-v (Покажи следващия екран), за да се придвижите към
@@ -94,7 +93,7 @@
 
 Всеки ред от текст завършва със знак за нов ред, който служи за
 отделянето на реда от следващия ред.  Последният ред във вашия файл
-трябва да има знак за нов ред в края (но Емакс не изисква такъв,
+трябва да има знак за нов ред в края (но Emacs не изисква такъв,
 когато прочита файла).
 
 >> Опитайте C-b в началото на ред.  Това трябва да ви придвижи в края
@@ -110,7 +109,7 @@
 
 Когато се придвижвате след горния или долния край на екрана, текстът
 отвъд края се измества към екрана.  Това се нарича "скролиране".  То
-позволява на Емакс да придвижва курсора към зададеното място в текста,
+позволява на Emacs да придвижва курсора към зададеното място в текста,
 без да го изкарва извън екрана.
 
 >> Опитайте се да придвижите курсора след долния край на екрана с C-n
@@ -193,7 +192,7 @@
 Вие можете също да се придвижвате с клавишите-стрелки, ако вашият
 терминал има такива.  Ние препоръчваме да научите C-b, C-f, C-n и C-p
 по три причини.  Първо, те работят на всички видове терминали.  Второ,
-веднъж след като добиете практика в използването на Емакс, ще
+веднъж след като добиете практика в използването на Emacs, ще
 откриете, че въвеждането на тези Control-знаци е по-бързо от
 въвеждането на клавишите стрелки, защото не трябва да премествате
 ръката си далеч от областта на клавишите с букви.  Трето, веднъж след
@@ -201,7 +200,7 @@
 можете също така лесно да научите по-напредналите команди за движение
 на курсора.
 
-Повечето Емакс команди приемат числов аргумент; за повечето от тях той
+Повечето Emacs команди приемат числов аргумент; за повечето от тях той
 служи като брояч на повторения.  Начинът, по който давате числов
 брояч, е с въвеждане на C-u, последвано от въвеждане на цифрите, и
 всичко това преди въвеждане на самата команда.  Ако имате клавиш META
@@ -233,7 +232,7 @@
 
 Ако използвате графичен интерфейс, като X11 или MS-Windows, би
 трябвало да има тънка правоъгълна област, наречена плъзгач (scroll
-bar), в лявата страна на прозореца на Емакс.  Вие можете да скролирате
+bar), в лявата страна на прозореца на Emacs.  Вие можете да скролирате
 текста, щракайки с мишката в плъзгача.
 
 >> Опитайте да натиснете средния бутон на върха на осветената област
@@ -245,10 +244,10 @@
    нагоре и надолу, като движите мишката.
 
 
-* КОГАТО ЕМАКС Е БЛОКИРАЛ
+* КОГАТО EMACS Е БЛОКИРАЛ
 -------------------------
 
-Ако Емакс спре да отговаря на вашите команди, вие можете да го спрете
+Ако Emacs спре да отговаря на вашите команди, вие можете да го спрете
 безопасно, като въведете C-g.  Може да използвате C-g, за да спрете
 команда, която се изпълнява твърде дълго.
 
@@ -265,15 +264,15 @@
 * ЗАБРАНЕНИ КОМАНДИ
 -------------------
 
-Някои команди на Емакс са "забранени", така че начинаещите потребители
+Някои команди на Emacs са "забранени", така че начинаещите потребители
 да не могат да ги употребят по погрешка.
 
-Ако въведете някоя от забранените команди, Емакс извежда съобщение,
+Ако въведете някоя от забранените команди, Emacs извежда съобщение,
 казвайки каква е била командата и питайки ви дали искате да продължите
 напред и да изпълните командата.
 
-Ако наистина искате да изпробвате командата, въведете клавиша интервал
-в отговор на въпроса.  Обикновено ако не искате да изпълните
+Ако наистина искате да изпробвате командата, въведете <SPC> (клавиша
+интервал) в отговор на въпроса.  Обикновено ако не искате да изпълните
 забранената команда, отговаряте на въпроса с "n".
 
 >> Въведете C-x C-l (която е забранена команда), и след това въведете
@@ -283,7 +282,7 @@
 * ПРОЗОРЦИ
 ----------
 
-Емакс може да управлява няколко прозореца, всеки извеждайки свой
+Emacs може да управлява няколко прозореца, всеки извеждайки свой
 собствен текст.  Ние ще обясним по-късно как да използвате няколко
 прозореца.  Точно сега ние искаме да обясним как да се отървете от
 допълнителни прозорци и да се върнете към основното редактиране с един
@@ -313,13 +312,13 @@
 ----------------------
 
 Ако искате да вмъкнете текст, просто го въведете.  Знаците, които
-могат да се виждат, като А, 7, * и т.н., се възприемат от Емакс като
+могат да се виждат, като А, 7, * и т.н., се възприемат от Emacs като
 текст и се вмъкват веднага.  Въведете <Return> (клавишът за връщане в
 началото на реда), за да вмъкнете знак за нов ред.
 
 Може да изтриете последния знак, който сте въвели, с въвеждане на
 <Delback>.  <Delback> е клавиш от клавиатурата -- същият, който
-обикновено използвате извън Емакс, за да изтриете последния въведен от
+обикновено използвате извън Emacs, за да изтриете последния въведен от
 вас знак.  Обикновено е голям клавиш, на няколко реда разстояние от
 клавиша <Return>, и обикновено е отбелязан с "Delete", "Del" или
 "Backspace".
@@ -359,24 +358,24 @@
 >> Въведете <Return>, за да вмъкнете наново знака за нов ред, който
    изтрихте.
 
-Запомнете, че на повечето команди на Емакс може да бъде зададен брояч
+Запомнете, че на повечето команди на Emacs може да бъде зададен брояч
 на повторенията; това включва вмъкването на текстови знаци.
 Повтарянето на текстов знак го вмъква няколко пъти.
 
 >> Опитайте това сега -- въведете C-u 8 *, за да вмъкнете ********.
 
-Сега вие сте научили най-основните начини за въвеждане на нещо в Емакс
+Сега вие сте научили най-основните начини за въвеждане на нещо в Emacs
 и поправяне на грешки.  Можете също така да изтривате думи или редове.
 Ето обобщение на изтриващите действия:
 
-	<Delback>    изтриване на знака точно преди курсора
-	C-d   	     изтриване на знака точно след курсора
+	<Delback>    Изтриване на знака точно преди курсора
+	C-d   	     Изтриване на знака точно след курсора
 
-	M-<Delback>  изтриване на думата непосредствено преди курсора
-	M-d	     изтриване на думата след курсора
+	M-<Delback>  Изтриване на думата непосредствено преди курсора
+	M-d	     Изтриване на думата след курсора
 
-	C-k	     изтриване от мястото на курсора до края на реда
-	M-k	     изтриване до края на текущото изречение
+	C-k	     Изтриване от мястото на курсора до края на реда
+	M-k	     Изтриване до края на текущото изречение
 
 Забележете, че <Delback> и C-d, сравнени с M-<Delback> и M-d,
 разширяват подобието, започнато от C-f и M-f (добре, <Delback> не е
@@ -386,12 +385,12 @@
 
 Можете също да премахнете всяка част от буфера с един универсален
 начин.  Придвижете се до единия край на частта и въведете C-@ или
-C-интервал (което и да е от двете).  Придвижете се до другия край на
-частта и въведете C-w.  Това ще изреже целия текст между тези два
-края.
+C-<SPC> (което и да е от двете).  (<SPC> е клавишът интервал.)
+Придвижете се до другия край на частта и въведете C-w.  Това ще изреже
+целия текст между тези два края.
 
 >> Придвижете курсора до знака "М" в началото на предишния абзац.
->> Въведете C-интервал.  Емакс трябва да изведе съобщение "Mark set" в
+>> Въведете C-<SPC>.  Emacs трябва да изведе съобщение "Mark set" в
    долния край на екрана.
 >> Придвижете курсора до буквата "р" в "край" на втория ред от абзаца.
 >> Въведете C-w.  Това ще изреже текста, започващ от "М" и завършващ
@@ -421,9 +420,9 @@
 Връщането обратно на текст се нарича "вмъкване".  (Мислете за него
 като за изваждане обратно, или дръпване обратно, на текст, който е бил
 изрязан.)  Можете да вмъквате изрязания текст или на същото място,
-откъдето е бил премахнат, или на друго място в буфера, даже и в
-различен файл.  Можете да вмъквате един и същ текст няколко пъти; това
-прави няколко копия от него.
+откъдето е бил премахнат, или на друго място в редактирания текст,
+даже и в различен файл.  Можете да вмъквате един и същ текст няколко
+пъти; това прави няколко копия от него.
 
 Командата за вмъкване е C-y.  Тя вмъква наново последния изрязан текст
 в текущото място на курсора.
@@ -502,25 +501,25 @@
 ---------
 
 За да направите текста, който редактирате, постоянен, трябва да го
-сложите във файл.  В противен случай той ще изчезне, когато Емакс
+сложите във файл.  В противен случай той ще изчезне, когато Emacs
 приключи.  За да сложите вашия текст във файл, трябва да "намерите"
 файла преди да въвеждате текст.  (Това също се нарича "посещаване" на
 файла.)
 
-Намиране на файл означава, че виждате съдържанието му в Емакс.  В
+Намиране на файл означава, че виждате съдържанието му в Emacs.  В
 много случаи това е като да редактирате самия файл.  Обаче промените,
-които правите, използвайки Емакс, не остават постоянни, докато не
+които правите, използвайки Emacs, не остават постоянни, докато не
 "запишете" файла.  Това е така, за да се предотврати оставянето на
 полупроменен файл в системата, когато не искате това.  Дори когато
-записвате, Емакс оставя началния файл под променено име, в случай, че
+записвате, Emacs оставя началния файл под променено име, в случай, че
 по-късно решите, че вашите промени са били грешка.
 
 Ако погледнете в дъното на екрана, ще видите ред, който започва и
 завършва с тирета и започва с "-R:-- TUTORIAL.bg" или нещо подобно.
 Тази част от екрана показва името на файла, който сте посетили.  Точно
 сега вие сте посетили файл, наречен "TUTORIAL.bg", който е вашето
-лично копие-чернова на Емакс въведението.  Когато намерите файл в
-Емакс, името на този файл ще се появи на същото място.
+лично копие-чернова на Emacs въведението.  Когато намерите файл в
+Emacs, името на този файл ще се появи на същото място.
 
 Особеност на командата за намиране на файл е, че трябва да кажете
 името на файла, който искате.  Ние го наричаме "четене на аргумент от
@@ -529,10 +528,10 @@
 
 	C-x C-f   Намиране на файл
 
-Емакс ви подканя да въведете името на файла.  Името на файла, което
+Emacs ви подканя да въведете името на файла.  Името на файла, което
 напишете, се появява в дъното на екрана.  Редът в дъното на екрана се
 нарича минибуфер, когато се използва за този вид вход.  Можете да
-използвате обикновените команди за редактиране на Емакс, за да
+използвате обикновените команди за редактиране на Emacs, за да
 редактирате името на файла.
 
 Когато въвеждате името на файла (или какъвто и да е вход в
@@ -553,12 +552,12 @@
 
 	C-x C-s   Запазване на файла
 
-Това копира текста от Емакс във файла.  Първия път, когато това се
-направи, Емакс преименува началния файл с ново име, така че той да не
+Това копира текста от Emacs във файла.  Първия път, когато това се
+направи, Emacs преименува началния файл с ново име, така че той да не
 се изгуби.  Новото име се построява с добавяне на "~" в края на името
 на началния файл.
 
-Когато запазването е свършило, Емакс извежда името на файла, който е
+Когато запазването е свършило, Emacs извежда името на файла, който е
 бил записан.  Трябва да записвате достатъчно често, така че да не
 изгубите много работа, ако системата се срине по някаква причина.
 
@@ -566,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 всъщност ще
 създаде файла с текста, който сте въвели.  Оттам нататък може да
 считате, че редактирате вече съществуващ файл.
 
@@ -586,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 <Return>.
    Вмъкнете малко текст, редактирайте го и запазете "foo" с въвеждане
@@ -596,16 +595,16 @@
    Накрая въведете C-x C-f TUTORIAL.bg <Return>, за да се върнете
    обратно във въведението.
 
-Емакс запазва текста на всеки файл в обект, наричан "буфер".
-Намирането на файл прави нов буфер в Емакс.  За да видите списък на
-буферите, които в момента съществуват във вашия Емакс, въведете
+Emacs запазва текста на всеки файл в обект, наричан "буфер".
+Намирането на файл прави нов буфер в Emacs.  За да видите списък на
+буферите, които в момента съществуват във вашия Emacs, въведете
 
 	C-x C-b   Показване на буферите
 
 >> Опитайте C-x C-b сега.
 
 Вижте как всеки буфер има име, а понякога и име на файл за файла,
-чието съдържание държи.  ВСЕКИ текст, който виждате в Емакс прозорец,
+чието съдържание държи.  ВСЕКИ текст, който виждате в Emacs прозорец,
 е винаги част от някакъв буфер.
 
 >> Въведете C-x 1, за да махнете списъка с буферите.
@@ -627,13 +626,13 @@
 Списъкът с буферите, който правите с C-x C-b, винаги ви показва името
 на всеки буфер.
 
-ВСЕКИ текст, който виждате в Емакс прозорец, е винаги част от някакъв
+ВСЕКИ текст, който виждате в Emacs прозорец, е винаги част от някакъв
 буфер.  Някои буфери не съответстват на файлове.  Например буферът,
 именуван "*Buffer List*", не съответства на файл.  Това е буферът,
 който съдържа списъка с буферите, които сте направили с C-x C-b.
 Буферът, именуван "*Messages*", също не съответства на файл; той
 съдържа съобщенията, които се появяват в дъното на екрана по време на
-Емакс сесията.
+Emacs сесията.
 
 >> Въведете C-x b *Messages* <Return>, за да видите буфера със
    съобщенията.  След това въведете C-x C-b TUTORIAL <Return>, за да
@@ -641,7 +640,7 @@
 
 Ако направите промени в текста на един файл и тогава намерите друг
 файл, това няма да запише първия файл.  Неговите промени остават вътре
-в Емакс, в буфера на файла.  Създаването или редактирането на буфера
+в Emacs, в буфера на файла.  Създаването или редактирането на буфера
 на втория файл няма ефект върху буфера на първия файл.  Това е много
 полезно, но също означава, че се нуждаете от удобен начин да запазите
 буфера на първия файл.  Ще е неудобно да превключите обратно с C-x
@@ -660,8 +659,8 @@
 * РАЗШИРЯВАНЕ НА НАБОРА КОМАНДИ
 -------------------------------
 
-Има много, много повече команди на Емакс, отколкото могат да се сложат
-на всички контролни и мета знаци.  Емакс заобикаля това с X (eXtended)
+Има много, много повече команди на Emacs, отколкото могат да се сложат
+на всички контролни и мета знаци.  Emacs заобикаля това с X (eXtended)
 командата.  Това става по два начина:
 
 	C-x	Знаково разширяване.  Последвано от един знак.
@@ -669,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<TAB>" и Емакс ще завърши
+"replace-string".  Просто въведете "repl s<TAB>" и Emacs ще завърши
 името.  (<TAB> е клавишът Tab, обикновено намиращ се над клавиша
 CapsLock или клавиша Shift близо до левия край на клавиатурата.)
 Завършете името на командата с <Return>.
@@ -735,11 +734,11 @@
 
 Когато сте направили промени във файл, но още не сте го запазили, те
 могат да бъдат загубени, ако компютърът внезапно се изключи.  За да ви
-предпази от такива ситуации, Емакс периодично запазва "автоматично
+предпази от такива ситуации, Emacs периодично запазва "автоматично
 запазван" файл за всеки файл, който редактирате.  Името на автоматично
 запазвания файл има # в началото и в края; например, ако вашият файл е
 с име "hello.c", името на неговия автоматично запазван файл ще бъде
-"#hello.c#".  Когато запазвате файл по обикновения начин, Емакс
+"#hello.c#".  Когато запазвате файл по обикновения начин, Emacs
 изтрива неговия автоматично записван файл.
 
 Ако компютърът зависне, може да възстановите вашата автоматично
@@ -753,7 +752,7 @@
 * ЕХО ОБЛАСТТА
 --------------
 
-Ако Емакс види, че въвеждате многознакови команди бавно, ще ви ги
+Ако Emacs види, че въвеждате многознакови команди бавно, ще ви ги
 покаже в дъното на екрана, в област, наричана "ехо област".  Ехо
 областта обхваща последния ред от екрана.
 
@@ -764,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 и цифрите показват мястото по друг начин: това е номерът на
 текущия ред на точката.
@@ -789,7 +788,7 @@
 Fundamental (Основен), който използвате в момента.  Това е пример за
 "главен режим" (major mode).
 
-Емакс има много главни режими.  Някои от тях са предвидени за
+Emacs има много главни режими.  Някои от тях са предвидени за
 редактиране на различни езици и/или видове текст, като например режим
 Лисп, режим Текст и други.  Във всеки един момент от време точно един
 главен режим е активен и неговото име може винаги да бъде намерено в
@@ -808,7 +807,7 @@
 
 >> Въведете M-x text mode<Return>.
 
-Не се безпокойте, никоя от Емакс командите, които сте научили, няма да
+Не се безпокойте, никоя от Emacs командите, които сте научили, няма да
 се промени по някакъв съществен начин.  Но може да забележите, че M-f
 и M-b сега възприемат апострофите (') като част от думите.  Преди
 това, в основния режим (Fundamental), M-f и M-b се възприемаха като
@@ -837,7 +836,7 @@
 
 Един главен режим, който е много полезен, особено за редактиране на
 текст на естествен език, е режимът на автоматично запълване (Auto Fill
-mode).  Когато този режим е включен, Емакс автоматично разделя реда
+mode).  Когато този режим е включен, Emacs автоматично разделя реда
 при мястото между думите, когато вмъквате текст и направите ред, който
 е твърде дълъг.
 
@@ -857,7 +856,7 @@
 аргумент на командата.
 
 >> Въведете C-x f с аргумент 20.  (C-u 2 0 C-x f).
-   Сега въведете някакъв текст и вижте как Емакс запълва редовете с по
+   Сега въведете някакъв текст и вижте как Emacs запълва редовете с по
    не повече от 20 знака.  После върнете обратно границата на 70,
    използвайки C-x f отново.
 
@@ -872,12 +871,12 @@
 * ТЪРСЕНЕ
 ---------
 
-Емакс може да извършва търсения на низове (това са последователности
+Emacs може да извършва търсения на низове (това са последователности
 от знаци или думи) или напред в текста, или назад в него.  Търсенето
 на низ е придвижваща курсора команда; тя премества курсора на
 следващото място, където се среща низът.
 
-Командата за търсене на Емакс се различава от командата за търсене на
+Командата за търсене на Emacs се различава от командата за търсене на
 повечето редактори по това, че тя е "постъпкова".  Това означава, че
 търсенето се извършва още докато въвеждате текста, който търсите.
 
@@ -885,7 +884,7 @@
 търсене назад.  НО ПОЧАКАЙТЕ!  Не ги пробвайте сега.
 
 Когато въведете C-s, ще забележите, че низът "I-search" се появява
-като подсказка в ехо областта.  Това ви казва, че Емакс е в това,
+като подсказка в ехо областта.  Това ви казва, че Emacs е в това,
 което се нарича постъпково търсене, чакайки ви да въвеждате текста,
 който искате да търсите.  <Return> приключва търсенето.
 
@@ -897,19 +896,19 @@
 >> Сега въведете <Delback> три пъти и вижте как се придвижва курсора.
 >> Въведете <Return>, за да прекратите търсенето.
 
-Забелязахте ли какво стана?  Емакс, когато търси постъпково, се опитва
+Забелязахте ли какво стана?  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 за съвет как да се справите с тази
 "способност".
 
 Ако сте в средата на постъпково търсене и въведете <Delback>, ще
@@ -931,9 +930,9 @@
 
 
 * МНОЖЕСТВО ПРОЗОРЦИ
-----------------
+--------------------
 
-Една от привлекателните способности на Емакс е тази, че може да
+Една от привлекателните способности на Emacs е тази, че може да
 гледате повече от един прозорец на екрана в даден момент от време.
 
 >> Придвижете курсора до този ред и въведете C-u 0 C-l (това е
@@ -944,7 +943,7 @@
    остава на по-горния прозорец.
 
 >> Въведете C-M-v, за да скролирате долния прозорец.  (Ако нямате
-   истински клавиш META, въведете ESC C-v.)
+   истински клавиш META, въведете <ESC> C-v.)
 
 >> Въведете C-x o ("o" от "other" -- "друг"), за да придвижите
    курсора в долния прозорец.
@@ -973,10 +972,10 @@
 първи", защото и двата клавиша действат, модифицирайки знака, който
 сте въвели.
 
-Ако нямате истински клавиш META и използвате ESC вместо това, редът
-има значение: трябва да въвеждате ESC, последван от CONTROL-v, защото
-CONTROL-ESC v няма да работи.  Това е така, защото ESC е собствен
-знак, а не модификатор.
+Ако нямате истински клавиш META и използвате <ESC> вместо това, редът
+има значение: трябва да въвеждате <ESC>, последван от CONTROL-v,
+защото CONTROL-<ESC> v няма да работи.  Това е така, защото <ESC> е
+собствен знак, а не модификатор.
 
 >> Въведете C-x 1 (в горния прозорец), за да махнете долния прозорец.
 
@@ -1009,13 +1008,13 @@
 на главния режим.  Например, може да видите [(Fundamental)] вместо
 (Fundamental).
 
-За да се махнете от вложеното ниво на редактиране, въведете ESC ESC
-ESC.  Това е обща команда за "излизане".  Може и да я използвате за
-махане (скриване) на допълнителни прозорци, както и за да се махнете
-от минибуфера.
+За да се махнете от вложеното ниво на редактиране, въведете <ESC>
+<ESC> <ESC>.  Това е обща команда за "излизане".  Може и да я
+използвате за махане (скриване) на допълнителни прозорци, както и за
+да се махнете от минибуфера.
 
->> Въведете M-x, за да влезете в минибуфер; тогава въведете ESC ESC
-   ESC, за да излезете.
+>> Въведете M-x, за да влезете в минибуфер; тогава въведете <ESC> <ESC>
+   <ESC>, за да излезете.
 
 Не можете да използвате C-g, за да излезете от вложено ниво на
 редактиране.  Това е така, защото C-g се използва за прекратяване на
@@ -1026,16 +1025,16 @@
 ----------------------------------
 
 В това въведение се опитахме да осигурим достатъчно информация, за да
-започнете да използвате Емакс.  Има толкова много още в Емакс, че не е
+започнете да използвате Emacs.  Има толкова много още в Emacs, че не е
 възможно то да бъде обяснено всичкото тук.  Обаче може да поискате да
-научите повече за Емакс, тъй като той притежава още много полезни
-способности.  Емакс има команди за четене на документацията на Емакс
+научите повече за Emacs, тъй като той притежава още много полезни
+способности.  Emacs има команди за четене на документацията на Emacs
 командите.  Тези "помощни" команди всички започват със знака
 CONTROL-h, който се нарича "знакът за помощ".
 
 За да използвате възможностите на тази помощ, въведете знака C-h и
 след това знака, казващ какъв вид помощ искате.  Ако НАИСТИНА сте се
-изгубили, въведете C-h ? и Емакс ще ви каже с какво може да ви
+изгубили, въведете C-h ? и Emacs ще ви каже с какво може да ви
 помогне.  Ако сте въвели C-h и решите, че не се нуждаете от помощ,
 просто въведете C-g, за да я прекратите.
 
@@ -1047,7 +1046,7 @@
 
 Най-основното помощно средство е C-h c.  Въведете C-h, знака c и
 команден знак или последователност от знаци, образуващи команда;
-тогава Емакс ще изведе много кратко описание на командата.
+тогава Emacs ще изведе много кратко описание на командата.
 
 >> Type C-h c C-p.
 
@@ -1057,7 +1056,7 @@
 	(C-p изпълнява командата предишен-ред)
 
 Това ви казва "името на функцията".  Имената на функциите се използват
-най-вече за настройване и разширяване на Емакс.  Но тъй като имената
+най-вече за настройване и разширяване на Emacs.  Но тъй като имената
 на функциите са избрани така, че да показват какво прави командата, те
 могат да служат и за много кратка документация -- достатъчна, за да ви
 припомни команди, които вече сте учили.
@@ -1071,7 +1070,7 @@
 >> Въведете C-h k C-p.
 
 Това извежда документацията на функцията, както и нейното име, в
-отделен Емакс прозорец.  Когато я прочетете, въведете C-x 1, за да
+отделен Emacs прозорец.  Когато я прочетете, въведете C-x 1, за да
 махнете помощния текст.  Не е нужно да правите това точно сега.  Може
 да редактирате, докато се обръщате към помощния текст за справка, и
 след това да въведете C-x 1.
@@ -1082,14 +1081,14 @@
 		функцията.
 
 >> Опитайте с въвеждане на C-h f previous-line<Return>.
-   Това извежда цялата информация, която Емакс знае за функцията,
+   Това извежда цялата информация, която Emacs знае за функцията,
    която осъществява командата C-p.
 
 Подобна команда, C-h v, извежда документацията на променливите, които
-може да променяте, за да настройвате поведението на Емакс.  Трябва да
-въведете името на променливата, когато Емакс ви подскаже това.
+може да променяте, за да настройвате поведението на Emacs.  Трябва да
+въведете името на променливата, когато Emacs ви подскаже това.
 
-   C-h a	Команда Апропос.  Въведете ключова дума и Емакс ще
+   C-h a	Команда Апропос.  Въведете ключова дума и Emacs ще
 		покаже списък на всички команди, чието име съдържа
 		тази ключова дума.  Тези команди могат всички да бъдат
 		извикани чрез META-x.  За някои команди командата
@@ -1112,18 +1111,18 @@
 		специален буфер, наричан "*info*", където може да
 		четете ръководствата на инсталираните във вашата
 		система пакети.  Въведете m emacs <Return>, за да
-		четете ръководството на Емакс.  Ако никога преди това
-		не сте използвали Info, въведете ? и Емакс ще включи
+		четете ръководството на Emacs.  Ако никога преди това
+		не сте използвали Info, въведете ? и Emacs ще включи
 		въведение във възможностите на режима Инфо.  Веднъж
 		след като сте преминали това въведение, трябва да се
-		консултирате с Емакс Инфо ръководството като ваша
+		консултирате с Emacs Инфо ръководството като ваша
 		основна документация.
 
 
 * ОЩЕ ВЪЗМОЖНОСТИ
 -----------------
 
-Може да научите повече за Емакс с четене на неговото ръководство, или
+Може да научите повече за Emacs с четене на неговото ръководство, или
 като книга, или в Инфо (използвайте менюто помощ (Help) или въведете
 F10 h r).  Две възможности, които може да желаете в началото, са
 довършване (completion), което спестява писане, и dired, който
@@ -1131,26 +1130,26 @@
 
 Довършването е начин да избягвате ненужно писане.  Например, ако
 искате да превключите към буфера *Messages*, може да въведете C-x b
-*M<Tab> и Емакс ще запълни останалата част от името на буфера,
+*M<Tab> и Emacs ще запълни останалата част от името на буфера,
 доколкото може да се определи от това, което сте въвели.  Довършването
-е описано в Инфо-ръководството на Емакс в страницата "Довършване"
+е описано в Инфо-ръководството на Emacs в страницата "Довършване"
 ("Completion").
 
 Dired ви позволява да гледате списъка от файлове в директория (и като
 възможност: нейните поддиректории), да се придвижвате в този списък,
 да посещавате, преименувате, изтривате и изобщо действате върху
-файловете.  Dired е описан в Инфо-ръководството на Емакс в страницата
+файловете.  Dired е описан в Инфо-ръководството на Emacs в страницата
 "Dired".
 
-Ръководството на Емакс описва още много други възможности на
+Ръководството на Emacs описва още много други възможности на
 редактора.
 
 
 * ЗАКЛЮЧЕНИЕ
 ------------
 
-Запомнете: за да излезете безвъзвратно от Емакс, използвайте C-x C-c.
-За да излезете временно в обвивка, така че да се върнете в Емакс
+Запомнете: за да излезете безвъзвратно от Emacs, използвайте C-x C-c.
+За да излезете временно в обвивка, така че да се върнете в Emacs
 по-късно, използвайте C-z.
 
 Това въведение е предвидено да бъде разбираемо за всички нови
@@ -1161,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
@@ -1184,8 +1183,8 @@
    under the above conditions, provided also that they
    carry prominent notices stating who last altered them.
 
-Условията за копиране на самия Емакс са по-сложни, но в същия дух.
-Моля, прочетете файла COPYING и тогава давайте копия на ГНУ Емакс на
+Условията за копиране на самия Emacs са по-сложни, но в същия дух.
+Моля, прочетете файла COPYING и тогава давайте копия на GNU Emacs на
 свои приятели.  Помогнете да спрем затвореността на програмите
 ("притежанието"), като използваме, пишем и споделяме свободен софтуер!
 
--- a/etc/TUTORIAL.cn	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.cn	Sat Apr 02 22:40:25 2005 +0000
@@ -1,5 +1,4 @@
-Emacs їмЛЩЦёДП
-ДъХэФЪФД¶Б Emacs їмЛЩЦёДПЈЁ Emacs tutorial Ј©ЎЈЗлјыТіОІУР№ШёґЦЖМхјюЎЈ
+Emacs їмЛЩЦёДП.
 Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.
 
 Emacs ЦёБоНЁіЈ°ьє¬УР CONTROL јьЈЁУРК±єтТФ CTRL »т CTL Аґ±кКѕЈ©»тКЗ 
--- a/etc/TUTORIAL.cs	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.cs	Sat Apr 02 22:40:25 2005 +0000
@@ -1,4 +1,4 @@
-tutoriбl k Emacsu
+tutoriбl k Emacsu.
 Copyright (c) 1985 Free Software Foundation, Inc;  podmнnky viz na konci.
 Do иe№tiny pшeloѕil Milan Zamazal <pdm@zamazal.org>.
 
--- a/etc/TUTORIAL.de	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.de	Sat Apr 02 22:40:25 2005 +0000
@@ -1,4 +1,3 @@
-Einfьhrung in Emacs
 Einfьhrung in Emacs.  (c) 2002, 2003 Free Software Foundation, Inc.
 
 Emacs-Befehle beinhalten im allgemeinen die CONTROL-Taste (manchmal
--- a/etc/TUTORIAL.es	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.es	Sat Apr 02 22:40:25 2005 +0000
@@ -1,7 +1,5 @@
-tutorial de Emacs
-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
--- a/etc/TUTORIAL.fr	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.fr	Sat Apr 02 22:40:25 2005 +0000
@@ -1,4 +1,3 @@
-Didacticiel d'Emacs
 Didacticiel d'Emacs.  Voir la fin de ce document pour les conditions.
 Copyright (c) 1985, 2001, 2002 Free Software Foundation, Inc.
 
--- a/etc/TUTORIAL.it	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.it	Sat Apr 02 22:40:25 2005 +0000
@@ -1,4 +1,3 @@
-Esercitazione di Emacs
 Esercitazione di Emacs.  Copyright (c) 2003 Free Software Foundation, Inc.
 Condizioni d'uso alla fine del file.
 
--- a/etc/TUTORIAL.ja	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.ja	Sat Apr 02 22:40:25 2005 +0000
@@ -1,5 +1,4 @@
-Emacs $BF~Lg%,%$%I$G$9(B
-$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$G$9(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%-!<!J%-!<%H%C%W$K(B
--- a/etc/TUTORIAL.ko	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.ko	Sat Apr 02 22:40:25 2005 +0000
@@ -1,4 +1,4 @@
-$(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B
+$(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B.
 $(C@z@[1G(B (c) 1985, 2001 Free Software Foundation, Inc;  $(C3!?!4B(B $(C:9;g(B $(CA60G@L(B
 $(C@V=@4O4Y(B.  $(CAv1](B $(C@P0m(B $(C@V4B(B $(C@L(B $(C1[@:(B $(C@L8F=:(B(Emacs) $(CAvD'<-@T4O4Y(B.
 
--- a/etc/TUTORIAL.nl	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.nl	Sat Apr 02 22:40:25 2005 +0000
@@ -1,5 +1,4 @@
-Emacs-inleiding
-Je leest nu de Emacs-inleiding.  De kopieervoorwaarden staan onderaan.
+Emacs-inleiding.  De kopieervoorwaarden staan onderaan.
 Copyright (c) 1985, 1996, 1997, 2003, 2004, 2005 Free Software Foundation
 
 De meeste Emacs-commando's gebruiken de CONTROL-toets (soms CTRL of CTL
--- a/etc/TUTORIAL.pl	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.pl	Sat Apr 02 22:40:25 2005 +0000
@@ -1,5 +1,4 @@
-krуtki samouczek Emacsa
-Czytasz wіa¶nie krуtki samouczek Emacsa. Copyright (c) 1985, 2001
+krуtki samouczek Emacsa. Copyright (c) 1985, 2001
 Free Software Foundation, Inc. Szczegуіy na koсcu pliku.
 
 Polecenia Emacsa wymagaj± na ogуі wci¶niкcia klawisza CONTROL (oznaczanego
--- a/etc/TUTORIAL.pt_BR	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.pt_BR	Sat Apr 02 22:40:25 2005 +0000
@@ -1,6 +1,5 @@
-Tutorial do Emacs
-Copyright (c) 2004 Free Software Foundation, Inc;  Veja no fim as
-condiзхes.
+Tutorial do Emacs. Veja no fim as condiзхes para cуpia.
+Copyright (c) 2004, 2005 Free Software Foundation.
 
 Os comandos do Emacs geralmente envolvem a tecla CONTROL (algumas vezes
 nomeada CTRL ou CTL) ou a tecla META (algumas vezes nomeada EDIT ou
@@ -131,8 +130,8 @@
    vocк pode observar a aзгo do M-f e M-b de varias lugares dentro e no
    meio de palavras.
 
-Observe o paralelismo entre C-f e C-b em uma mгo, e M-f e M-b na
-outra. Muito freqьentemente os caracteres Meta sгo usados para operaзхes
+Observe o paralelismo entre C-f e C-b por um lado, e M-f e M-b por outro
+lado. Muito freqьentemente os caracteres Meta sгo usados para operaзхes
 relacionadas com as unidades definidas pela linguagem (palavras,
 sentenзas, parбgrafos), enquanto caracteres Control operam nas unidades
 bбsicas que sгo independente do que vocк estб editando (caracteres,
@@ -860,7 +859,7 @@
 
 Se vocк estiver no meio de uma pesquisa incremental e digitar <Delete>,
 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 <Delete>. Isso ira apagar o "u" da
--- a/etc/TUTORIAL.ro	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.ro	Sat Apr 02 22:40:25 2005 +0000
@@ -1,4 +1,4 @@
-tutorialului de Emacs
+tutorialului de Emacs. 
 Copyright (c) 1998 Free Software Foundation  -*-coding: latin-2;-*-
 Traducere din englezг de Tudor Hulubei <tudor@gnu.org>.
 Mulюumiri Aidei Hulubei <aida@chang.pub.ro> pentru corecturi єi sugestii.
--- a/etc/TUTORIAL.ru	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.ru	Sat Apr 02 22:40:25 2005 +0000
@@ -1,5 +1,4 @@
-ХЮЕВОЙЛ Emacs
-чЩ ЮЙФБЕФЕ ХЮЕВОЙЛ Emacs.  хУМПЧЙС ЛПРЙТПЧБОЙС Ч ЛПОГЕ ЖБКМБ.
+ХЮЕВОЙЛ Emacs.
 Copyright (c) 1985, 1996, 2004 Free Software Foundation, Inc.
 
 дМС ХРТБЧМЕОЙС Emacs ПВЩЮОП ЙУРПМШЪХЕФУС ЛМАЮ (УПЮЕФБОЙЕ ЛМБЧЙЫ ЛМБЧЙБФХТЩ
--- a/etc/TUTORIAL.sk	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.sk	Sat Apr 02 22:40:25 2005 +0000
@@ -1,4 +1,4 @@
-tъtorial k Emacsu
+tъtorial k Emacsu.
 Copyright (c) 1985 Free Software Foundation, Inc; podmienky pozri na konci.
 Do иe№tiny preloѕil Milan Zamazal <pdm@zamazal.org>, do slovenиiny Miroslav
 Va№ko <zemiak@zoznam.sk>.
--- a/etc/TUTORIAL.sl	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.sl	Sat Apr 02 22:40:25 2005 +0000
@@ -1,4 +1,3 @@
-Prvo berilo za Emacs
 Prvo berilo za Emacs. Pogoji uporabe in raz№irjanja so navedeni na koncu.
 Copyright (c) 1985, 1996, 1997, 2001, 2002 Free Software Foundation, Inc.
 
--- a/etc/TUTORIAL.sv	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.sv	Sat Apr 02 22:40:25 2005 +0000
@@ -1,7 +1,5 @@
-anvдndarhandledningen till Emacs
-Detta дr den Svenska anvдndarhandledningen till Emacs. I slutet finns
-kopieringsvillkoren. Copyright (c) 1985, 1996, 1998, 2001, 2002 Free
-Software Foundation, Inc.
+anvдndarhandledningen till Emacs. I slutet finns kopieringsvillkoren.
+Copyright (c) 1985, 1996, 1998, 2001, 2002 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
--- a/etc/TUTORIAL.th	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.th	Sat Apr 02 22:40:25 2005 +0000
@@ -1,4 +1,4 @@
-0,T7h1R9!S0EQ1'0HV1!IR0$Yh10AW1M!RCc0*i10MU1aA!0Jl1(B
+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.
--- a/etc/TUTORIAL.zh	Thu Mar 31 11:27:46 2005 +0000
+++ b/etc/TUTORIAL.zh	Sat Apr 02 22:40:25 2005 +0000
@@ -1,5 +1,4 @@
-Emacs §Ціt«ь«nЎ]
-±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 
--- a/lisp/ChangeLog	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/ChangeLog	Sat Apr 02 22:40:25 2005 +0000
@@ -1,4 +1,108 @@
-2005-03-31  Kenichi Handa  <handa@etlken2>
+2005-04-02  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* 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  <gray@Mirddin.farlep.net>  (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  <belanger@truman.edu>
+
+	* 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  <monnier@iro.umontreal.ca>
+
+	* 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  <spiegel@gnu.org>
+
+	* 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  <monnier@iro.umontreal.ca>
+
+	* generic.el (define-generic-mode): Add indentation rule.
+
+2005-03-31  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* 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  <handa@m17n.org>
+
+	* international/characters.el: Enable the correct case setting for
+	dotless-i and dotted-I.
+
+2005-04-01  Kim F. Storm  <storm@cua.dk>
+
+	* 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  <rms@gnu.org>
+
+	* 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  <lute@gnu.org>
+
+	* 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  <storm@cua.dk>
+
+	* 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  <handa@m17n.org>
+
+	* 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
@@ -69,13 +173,13 @@
 	* 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-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): Improved visible section in window.  And
-	use `org-fit-agenda-window'.
+	(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.
@@ -84,12 +188,10 @@
 	(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): renamed from
-	`org-table-copy-from-above'.  When current field is non-empty, it
-	is copied to next row.
-	(org-table-copy-from-above): Fixed bug which made it
-	impossible to copy fields containing only a single non-white
-	character.
+	(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  <storm@cua.dk>
 
--- a/lisp/calc/calc-embed.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/calc/calc-embed.el	Sat Apr 02 22:40:25 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 <daveg@synaptics.com>
 ;; Maintainer: Jay Belanger <belanger@truman.edu>
@@ -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)
--- a/lisp/calc/calc-graph.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/calc/calc-graph.el	Sat Apr 02 22:40:25 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 <daveg@synaptics.com>
 ;; Maintainer: Jay Belanger <belanger@truman.edu>
@@ -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")
 
--- a/lisp/calc/calc.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/calc/calc.el	Sat Apr 02 22:40:25 2005 +0000
@@ -206,9 +206,121 @@
 
 (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 :value-type symbol))
+
+(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'.")
--- a/lisp/emacs-lisp/autoload.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/emacs-lisp/autoload.el	Sat Apr 02 22:40:25 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)
--- a/lisp/emacs-lisp/easy-mmode.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/emacs-lisp/easy-mmode.el	Sat Apr 02 22:40:25 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 <Georges.Brun-Cottan@inria.fr>
 ;; Maintainer: Stefan Monnier <monnier@gnu.org>
@@ -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
--- a/lisp/files.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/files.el	Sat Apr 02 22:40:25 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")
--- a/lisp/generic.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/generic.el	Sat Apr 02 22:40:25 2005 +0000
@@ -217,58 +217,72 @@
 additional setup.
 
 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)))
+  (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"))))
 
     `(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
+	 :group (or (custom-current-group)
+		    ',(intern (replace-regexp-in-string
+			       "-mode\\'" "" mode-name))))
+
+       (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)
@@ -392,7 +406,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
--- a/lisp/ido.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/ido.el	Sat Apr 02 22:40:25 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))
--- a/lisp/language/thai-word.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/language/thai-word.el	Sat Apr 02 22:40:25 2005 +0000
@@ -10780,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
--- a/lisp/mail/rmail.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/mail/rmail.el	Sat Apr 02 22:40:25 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)))
--- a/lisp/mouse.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/mouse.el	Sat Apr 02 22:40:25 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
--- a/lisp/pcvs.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/pcvs.el	Sat Apr 02 22:40:25 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)))))
 
@@ -1133,7 +1145,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 +1834,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))
--- a/lisp/progmodes/scheme.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/progmodes/scheme.el	Sat Apr 02 22:40:25 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))
 
--- a/lisp/simple.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/simple.el	Sat Apr 02 22:40:25 2005 +0000
@@ -5238,6 +5238,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))
--- a/lisp/tooltip.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/tooltip.el	Sat Apr 02 22:40:25 2005 +0000
@@ -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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/url/vc-dav.el	Sat Apr 02 22:40:25 2005 +0000
@@ -0,0 +1,184 @@
+;;; vc-dav.el --- vc.el support for WebDAV
+
+;; Copyright (C) 2001 Free Software Foundation, Inc.
+
+;; Author: Bill Perry <wmperry@gnu.org>
+;; Maintainer: Bill Perry <wmperry@gnu.org>
+;; Keywords: url, vc
+
+;; 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:
+
+;;; Code:
+
+(require 'url)
+(require 'url-dav)
+
+;;; Required functions for a vc backend
+(defun vc-dav-registered (url)
+  "Return t iff URL is registered with a DAV aware server."
+  (url-dav-vc-registered url))
+
+(defun vc-dav-state (url)
+  "Return the current version control state of URL.
+For a list of possible values, see `vc-state'."
+  ;; Things we can support for WebDAV
+  ;;
+  ;; up-to-date - use lockdiscovery
+  ;; edited     - check for an active lock by us
+  ;; USER       - use lockdiscovery + owner
+  ;;
+  ;; These don't make sense for WebDAV
+  ;; needs-patch
+  ;; needs-merge
+  ;; unlocked-changes
+  (let ((locks (url-dav-active-locks url)))
+    (cond
+     ((null locks) 'up-to-date)
+     ((assoc url locks)
+      ;; SOMEBODY has a lock... let's find out who.
+      (setq locks (cdr (assoc url locks)))
+      (if (rassoc url-dav-lock-identifier locks)
+	  ;; _WE_ have a lock
+	  'edited
+	(cdr (car locks)))))))
+	
+(defun vc-dav-checkout-model (url)
+  "Indicate whether URL needs to be \"checked out\" before it can be edited.
+See `vc-checkout-model' for a list of possible values."
+  ;; The only thing we can support with webdav is 'locking
+  'locking)
+
+;; This should figure out the version # of the file somehow.  What is
+;; the most appropriate property in WebDAV to look at for this?
+(defun vc-dav-workfile-version (url)
+  "Return the current workfile version of URL."
+  "Unknown")
+
+(defun vc-dav-register (url &optional rev comment)
+  "Register URL in the DAV backend."
+  ;; Do we need to do anything here?  FIXME?
+  )
+
+(defun vc-dav-checkin (url rev comment)
+  "Commit changes in URL to WebDAV.
+If REV is non-nil, that should become the new revision number.
+COMMENT is used as a check-in comment."
+  ;; This should PUT the resource and release any locks that we hold.
+  )
+
+(defun vc-dav-checkout (url &optional editable rev destfile)
+  "Check out revision REV of URL into the working area.
+
+If EDITABLE is non-nil URL should be writable by the user and if
+locking is used for URL, a lock should also be set.
+
+If REV is non-nil, that is the revision to check out.  If REV is the
+empty string, that means to check ou tht ehead of the trunk.
+
+If optional arg DESTFILE is given, it is an alternate filename to
+write the contents to.
+"
+  ;; This should LOCK the resource.
+  )
+
+(defun vc-dav-revert (url &optional contents-done)
+  "Revert URL back to the current workfile version.
+
+If optional arg CONTENTS-DONE is non-nil, then the contents of FILE
+have already been reverted from a version backup, and this function
+only needs to update the status of URL within the backend.
+"
+  ;; Should do a GET if !contents_done
+  ;; Should UNLOCK the file.
+  )
+
+(defun vc-dav-print-log (url)
+  "Insert the revision log of URL into the *vc* buffer."
+  )
+
+(defun vc-dav-diff (url &optional rev1 rev2)
+  "Insert the diff for URL into the *vc-diff* buffer.
+If REV1 and REV2 are non-nil report differences from REV1 to REV2.
+If REV1 is nil, use the current workfile version as the older version.
+If REV2 is nil, use the current workfile contents as the nwer version.
+
+It should return a status of either 0 (no differences found), or
+1 (either non-empty diff or the diff is run asynchronously).
+"
+  ;; We should do this asynchronously...
+  ;; How would we do it at all, that is the question!
+  )
+
+
+
+;;; Optional functions
+;; Should be faster than vc-dav-state - but how?
+(defun vc-dav-state-heuristic (url)
+  "Estimate the version control state of URL at visiting time."
+  (vc-dav-state url))
+
+;; This should use url-dav-get-properties with a depth of `1' to get
+;; all the properties.
+(defun vc-dav-dir-state (url)
+  "find the version control state of all files in DIR in a fast way."
+  )
+
+(defun vc-dav-workfile-unchanged-p (url)
+  "Return non-nil if URL is unchanged from its current workfile version."
+  ;; Probably impossible with webdav
+  )
+
+(defun vc-dav-responsible-p (url)
+  "Return non-nil if DAV considers itself `responsible' for URL."
+  ;; Check for DAV support on the web server.
+  t)
+
+(defun vc-dav-could-register (url)
+  "Return non-nil if URL could be registered under this backend."
+  ;; Check for DAV support on the web server.
+  t)
+
+;;; Unimplemented functions
+;;
+;; vc-dav-latest-on-branch-p(URL)
+;;    Return non-nil if the current workfile version of FILE is the
+;;    latest on its branch.  There are no branches in webdav yet.
+;;
+;; vc-dav-mode-line-string(url)
+;;    Return a dav-specific mode line string for URL. Are there any
+;;    specific states that we want exposed?
+;;
+;; vc-dav-dired-state-info(url)
+;;    Translate the `vc-state' property of URL into a string that can
+;;    be used in a vc-dired buffer.  Are there any extra states that
+;;    we want exposed?
+;;
+;; vc-dav-receive-file(url rev)
+;;    Let this backend `receive' a file that is already registered
+;;    under another backend.  The default just calls `register', which
+;;    should be sufficient for WebDAV.
+;;
+;; vc-dav-unregister(url)
+;;    Unregister URL.  Not possible with WebDAV, other than by
+;;    deleting the resource.
+
+(provide 'vc-dav)
+
+;; arch-tag: 0a0fb9fe-8190-4c0a-a179-5c291d3a467e
+;;; vc-dav.el ends here
--- a/lisp/vc-hooks.el	Thu Mar 31 11:27:46 2005 +0000
+++ b/lisp/vc-hooks.el	Sat Apr 02 22:40:25 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))
--- a/lispref/ChangeLog	Thu Mar 31 11:27:46 2005 +0000
+++ b/lispref/ChangeLog	Sat Apr 02 22:40:25 2005 +0000
@@ -1,3 +1,12 @@
+2005-04-01  Richard M. Stallman  <rms@gnu.org>
+
+	* nonascii.texi (Coding System Basics): Clarify previous change.
+
+2005-04-01  Kenichi Handa  <handa@m17n.org>
+
+	* nonascii.texi (Coding System Basics): Describe about rondtrip
+	identity of coding systems.
+
 2005-03-29  Chong Yidong  <cyd@stupidchicken.com>
 
 	* text.texi (Buffer Contents): Add filter-buffer-substring and
--- a/lispref/nonascii.texi	Thu Mar 31 11:27:46 2005 +0000
+++ b/lispref/nonascii.texi	Sat Apr 02 22:40:25 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 text then encoding the result in the same coding system can
+produce a different byte sequence from the one you originally decoded.
+However, the following coding systems do guarantee that the result
+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, when 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}).  When you encode Unicode characters
+with @code{iso-latin-2} and decode them back 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
--- a/lwlib/ChangeLog	Thu Mar 31 11:27:46 2005 +0000
+++ b/lwlib/ChangeLog	Sat Apr 02 22:40:25 2005 +0000
@@ -1,3 +1,16 @@
+2005-04-01  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	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  <jan.h.d@swipnet.se>
 
 	* xlwmenuP.h: Temporary #undef HAVE_X_I18N until FontSet for UTF-8
--- a/lwlib/xlwmenu.c	Thu Mar 31 11:27:46 2005 +0000
+++ b/lwlib/xlwmenu.c	Sat Apr 02 22:40:25 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
 
--- a/lwlib/xlwmenuP.h	Thu Mar 31 11:27:46 2005 +0000
+++ b/lwlib/xlwmenuP.h	Sat Apr 02 22:40:25 2005 +0000
@@ -24,9 +24,6 @@
 #include "xlwmenu.h"
 #include <X11/CoreP.h>
 
-/* 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;
--- a/man/ChangeLog	Thu Mar 31 11:27:46 2005 +0000
+++ b/man/ChangeLog	Sat Apr 02 22:40:25 2005 +0000
@@ -1,3 +1,29 @@
+2005-04-01  Jay Belanger  <belanger@truman.edu>
+
+	* 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  <lute@gnu.org>
+
+	* maintaining.texi (Change Log): add-change-log-entry uses
+	add-log-mailing-address.
+
+2005-03-31  Luc Teirlinck  <teirllm@auburn.edu>
+
+	* 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  <eggert@cs.ucla.edu>
+
+	* calendar.texi (Calendar Systems): Say that the Persian calendar
+	implemented here is the arithmetical one championed by Birashk.
+
 2005-03-30  Glenn Morris  <gmorris@ast.cam.ac.uk>
 
 	* programs.texi (Fortran Motion): Fix previous change.
@@ -21,7 +47,7 @@
 	(Longlines): New node.
 	(Auto Fill): Don't index "word wrap" here.
 	(Filling): Add Longlines to menu.
-	
+
 2005-03-29  Richard M. Stallman  <rms@gnu.org>
 
 	* xresources.texi: Minor fixes.
--- a/man/calc.texi	Thu Mar 31 11:27:46 2005 +0000
+++ b/man/calc.texi	Sat Apr 02 22:40:25 2005 +0000
@@ -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.
@@ -10613,11 +10613,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 +12301,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 +29104,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 +29117,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 +29906,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 +30609,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 +30757,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 +34607,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{KEY} . @var{VALUE})}; for example, 
+@code{(latex-mode . latex)} is one such pair.  If Calc embedded is
+activated in a buffer whose major mode is @var{KEY}, it will set itself
+to use the language @var{VALUE}.
+
+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
--- a/man/calendar.texi	Thu Mar 31 11:27:46 2005 +0000
+++ b/man/calendar.texi	Sat Apr 02 22:40:25 2005 +0000
@@ -691,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
--- a/man/cmdargs.texi	Thu Mar 31 11:27:46 2005 +0000
+++ b/man/cmdargs.texi	Sat Apr 02 22:40:25 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
--- a/man/files.texi	Thu Mar 31 11:27:46 2005 +0000
+++ b/man/files.texi	Sat Apr 02 22:40:25 2005 +0000
@@ -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
@@ -1375,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
 
--- a/man/maintaining.texi	Thu Mar 31 11:27:46 2005 +0000
+++ b/man/maintaining.texi	Sat Apr 02 22:40:25 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
--- a/src/ChangeLog	Thu Mar 31 11:27:46 2005 +0000
+++ b/src/ChangeLog	Sat Apr 02 22:40:25 2005 +0000
@@ -1,3 +1,56 @@
+2005-04-02  Jan Dj,Ad(Brv  <jan.h.d@swipnet.se>
+
+	* alloc.c (allocate_string_data): Call BLOCK_INPUT before calling
+	mallopt.
+
+	* ralloc.c (r_alloc_init): Ditto.
+
+2005-04-01  Kenichi Handa  <handa@m17n.org>
+
+	* 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  <monnier@iro.umontreal.ca>
+
+	* 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  <handa@m17n.org>
+
+	* coding.c (syms_of_coding): Fix previous change.
+
+2005-03-30  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* fileio.c (search_embedded_absfilename): Fix last change.
+
+2005-03-25  Kenichi Handa  <handa@m17n.org>
+
+	* coding.c (syms_of_coding): Suggest to use set-coding-category in
+	the docstring of coding-category-list.
+
+2005-03-31  Kim F. Storm  <storm@cua.dk>
+
+	* 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  <storm@cua.dk>
 
 	* xdisp.c (display_line): Allow multiple overlay arrows in window.
@@ -15,7 +68,7 @@
 
 2005-03-26  Lennart Borgman  <lennart.borgman.073@student.lu.se>
 
-	* 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.
--- a/src/alloc.c	Thu Mar 31 11:27:46 2005 +0000
+++ b/src/alloc.c	Sat Apr 02 22:40:25 2005 +0000
@@ -1933,14 +1933,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;
--- a/src/casetab.c	Thu Mar 31 11:27:46 2005 +0000
+++ b/src/casetab.c	Sat Apr 02 22:40:25 2005 +0000
@@ -161,7 +161,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;
--- a/src/coding.c	Thu Mar 31 11:27:46 2005 +0000
+++ b/src/coding.c	Sat Apr 02 22:40:25 2005 +0000
@@ -9357,7 +9357,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;
 
--- a/src/keyboard.c	Thu Mar 31 11:27:46 2005 +0000
+++ b/src/keyboard.c	Sat Apr 02 22:40:25 2005 +0000
@@ -523,6 +523,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;
@@ -2304,6 +2308,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))
@@ -10873,6 +10882,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");
--- a/src/lisp.h	Thu Mar 31 11:27:46 2005 +0000
+++ b/src/lisp.h	Sat Apr 02 22:40:25 2005 +0000
@@ -1879,7 +1879,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.  */
 
--- a/src/ralloc.c	Thu Mar 31 11:27:46 2005 +0000
+++ b/src/ralloc.c	Sat Apr 02 22:40:25 2005 +0000
@@ -28,6 +28,7 @@
 
 #include <config.h>
 #include "lisp.h"		/* Needed for VALBITS.  */
+#include "blockinput.h"
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -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
--- a/src/search.c	Thu Mar 31 11:27:46 2005 +0000
+++ b/src/search.c	Sat Apr 02 22:40:25 2005 +0000
@@ -259,7 +259,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));
 
@@ -365,7 +365,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;
@@ -465,7 +465,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);
@@ -482,7 +482,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;
@@ -1253,6 +1253,7 @@
 	      if (RE && *base_pat == '\\')
 		{
 		  len--;
+		  raw_pattern_size--;
 		  base_pat++;
 		}
 	      c = *base_pat++;
@@ -1487,16 +1488,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.  */
 
@@ -1523,8 +1526,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];
@@ -1590,6 +1598,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)
     {
@@ -1777,9 +1802,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;
@@ -1857,9 +1886,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;
--- a/src/xterm.c	Thu Mar 31 11:27:46 2005 +0000
+++ b/src/xterm.c	Sat Apr 02 22:40:25 2005 +0000
@@ -131,9 +131,7 @@
 #ifdef HAVE_XAW3D
 #include <X11/Xaw3d/Simple.h>
 #include <X11/Xaw3d/Scrollbar.h>
-#define ARROW_SCROLLBAR
-#define XAW_ARROW_SCROLLBARS
-#include <X11/Xaw3d/ScrollbarP.h>
+#include <X11/Xaw3d/ThreeD.h>
 #else /* !HAVE_XAW3D */
 #include <X11/Xaw/Simple.h>
 #include <X11/Xaw/Scrollbar.h>
@@ -4553,6 +4551,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)
@@ -4576,16 +4575,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);
@@ -4731,30 +4731,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
 	  }
       }
   }