changeset 90614:8dd8c8286063

Merge from emacs--devo--0 Patches applied: * emacs--devo--0 (patch 460-475) - Update from CVS - Merge from gnus--rel--5.10 * gnus--rel--5.10 (patch 145-152) - Merge from emacs--devo--0 - Update from CVS Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-118
author Miles Bader <miles@gnu.org>
date Sun, 15 Oct 2006 02:54:13 +0000
parents 7a2fdfcc7f71 (current diff) 7d511b8dc9c6 (diff)
children 93ead736a6ac
files AUTHORS ChangeLog admin/FOR-RELEASE admin/make-tarball.txt etc/ChangeLog etc/NEWS etc/TUTORIAL.bg leim/ChangeLog leim/Makefile.in leim/quail/latin-ltx.el lib-src/ChangeLog lib-src/makefile.w32-in lisp/ChangeLog lisp/allout.el lisp/apropos.el lisp/autoinsert.el lisp/completion.el lisp/dnd.el lisp/emacs-lisp/advice.el lisp/emacs-lisp/cl.el lisp/files.el lisp/filesets.el lisp/gnus/ChangeLog lisp/gnus/gnus-demon.el lisp/gnus/gnus-sum.el lisp/gnus/gnus-util.el lisp/gnus/mm-util.el lisp/gnus/mm-uu.el lisp/gnus/pop3.el lisp/help-at-pt.el lisp/help.el lisp/ido.el lisp/info-look.el lisp/international/mule-cmds.el lisp/isearch.el lisp/mail/rmail.el lisp/mouse-sel.el lisp/newcomment.el lisp/progmodes/cperl-mode.el lisp/progmodes/gdb-ui.el lisp/progmodes/sh-script.el lisp/shell.el lisp/simple.el lisp/strokes.el lisp/subr.el lisp/textmodes/org.el lisp/textmodes/reftex-global.el lisp/textmodes/reftex-vars.el lisp/textmodes/two-column.el lisp/url/url-https.el lisp/vc-hooks.el lisp/wid-edit.el lispref/ChangeLog lispref/frames.texi lispref/keymaps.texi lispref/lists.texi lispref/searching.texi man/ChangeLog man/ack.texi man/building.texi man/ebrowse.texi man/emacs.texi man/faq.texi man/gnus-faq.texi man/gnus.texi man/widget.texi nt/INSTALL src/ChangeLog src/dispextern.h src/dispnew.c src/eval.c src/frame.c src/image.c src/keyboard.c src/keymap.c src/lisp.h src/macterm.c src/minibuf.c src/process.c src/regex.c src/regex.h src/search.c src/sysdep.c src/w32fns.c src/xdisp.c src/xmenu.c src/xterm.c
diffstat 96 files changed, 5581 insertions(+), 2727 deletions(-) [+]
line wrap: on
line diff
--- a/AUTHORS	Thu Oct 05 12:20:23 2006 +0000
+++ b/AUTHORS	Sun Oct 15 02:54:13 2006 +0000
@@ -112,13 +112,13 @@
 Andreas Luik: changed xfns.c xterm.c
 
 Andreas Schwab: changed Makefile.in files.el lisp.h xdisp.c alloc.c
-  configure.in fns.c coding.c dired.el editfns.c info.el print.c eval.c
+  configure.in fns.c print.c coding.c dired.el editfns.c info.el eval.c
   fileio.c simple.el buffer.c minibuf.c xterm.c emacs.c keyboard.c
-  process.c and 443 other files
+  process.c and 444 other files
 
 Andreas Seltenreich: changed nnweb.el gnus-art.el gnus-ml.el gnus-srvr.el
-  gnus-start.el gnus-util.el gnus.el gnus.texi mm-url.el url-cookie.el
-  url-http.el
+  gnus-start.el gnus-util.el gnus.el gnus.texi mm-url.el nnslashdot.el
+  url-cookie.el url-http.el
 
 Andrew Choi: wrote mac-win.el
 and changed macterm.c mac.c macfns.c INSTALL macmenu.c darwin.h macterm.h
@@ -236,6 +236,8 @@
 
 Bob Halley: changed esh-io.el
 
+Bob Rogers: changed ffap.el
+
 Bob Weiner: changed info.el quail.el
 
 Boris Goldowsky: wrote avoid.el descr-text.el enriched.el facemenu.el
@@ -309,17 +311,18 @@
 Cheng Gao: changed MORE.STUFF flymake.el tips.texi url-dired.el
   url-file.el url-handlers.el url-http.el url-nfs.el
 
-Chong Yidong: changed cus-edit.el custom.el display.texi longlines.el
-  files.el simple.el text.texi custom.texi files.texi cus-theme.el
-  info.el keyboard.c wid-edit.el xterm.c frames.texi image-mode.el
-  misc.texi mouse.el sendmail.el xfns.c anti.texi and 152 other files
+Chong Yidong: changed cus-edit.el custom.el simple.el display.texi
+  longlines.el files.el text.texi custom.texi files.texi wid-edit.el
+  cus-theme.el info.el keyboard.c xterm.c compile.el frames.texi
+  image-mode.el keymaps.texi misc.texi mouse.el sendmail.el
+  and 156 other files
 
 Chris Hanson: changed xscheme.el scheme.el xterm.c hpux.h x11term.c
   hp9000s300.h keyboard.c process.c texinfmt.el emacsclient.c sort.el
   syntax.c texnfo-upd.el x11fns.c xfns.c dired.el fileio.c hp9000s800.h
   indent.c info.el man.el and 17 other files
 
-Chris Moore: changed wdired.el
+Chris Moore: changed dired.el wdired.el
 
 Chris Prince: changed w32term.c
 
@@ -430,7 +433,7 @@
   welsh.el
 and changed configure.in Makefile.in help.el fortran.el browse-url.el
   mule-cmds.el simple.el xterm.c cus-edit.el files.el info.el mule.el
-  wid-edit.el vc.el fns.c rfc2047.el bindings.el cus-start.el buffer.c
+  wid-edit.el fns.c vc.el rfc2047.el bindings.el cus-start.el buffer.c
   byte-opt.el bytecomp.el and 729 other files
 
 Dave Pearson: wrote 5x5.el quickurl.el
@@ -475,10 +478,9 @@
   etags-vmslib.c fortran.el hexl.c isearch.el and 12 other files
 
 David Kastrup: changed greek.el replace.el search.c ange-ftp.el faq.texi
-  calc.el meta-mode.el process.c search.texi DEBUG MAILINGLISTS
-  Makefile.in autoload.el browse-url.el buffer.c building.texi
-  calc-alg.el configure.in cus-theme.el desktop.el dispnew.c
-  and 21 other files
+  help.el mouse.el Makefile.in calc.el desktop.el keymaps.texi
+  meta-mode.el process.c search.texi DEBUG MAILINGLISTS autoload.el
+  browse-url.el buffer.c building.texi calc-alg.el and 30 other files
 
 David K,Ae(Bgedal: wrote tempo.el
 and changed sendmail.el xmenu.c
@@ -535,6 +537,8 @@
 
 Denis Howe: wrote browse-url.el
 
+Denis St,A|(Bnkel: changed ibuf-ext.el
+
 Derek Atkins: changed pgg-pgp.el
 
 Derek L. Davies: changed gud.el
@@ -607,7 +611,7 @@
 and changed msdos.c Makefile.in files.el makefile.w32-in info.el fileio.c
   startup.el mainmake.v2 config.bat menu-bar.el pc-win.el simple.el
   internal.el msdos.h xfaces.c frame.c rmail.el dosfns.c faces.el
-  frame.el emacs.c and 514 other files
+  frame.el emacs.c and 517 other files
 
 Emanuele Giaquinta: changed rxvt.el configure.in etags.c frame.el
   sh-script.el text.texi
@@ -802,7 +806,7 @@
   calendar.texi appt.el sh-script.el timeclock.el cal-menu.el
   cal-hebrew.el cal-islam.el files.el holidays.el programs.texi
   scroll-all.el startup.el cal-coptic.el cal-julian.el cal-move.el
-  cal-tex.el cal-x.el and 36 other files
+  cal-tex.el cal-x.el and 37 other files
 
 Glynn Clements: wrote gamegrid.el snake.el tetris.el
 
@@ -966,9 +970,9 @@
 
 Jan Dj,Ad(Brv: wrote dnd.el x-dnd.el
 and changed gtkutil.c xterm.c xfns.c xmenu.c xterm.h gtkutil.h
-  configure.in keyboard.c Makefile.in config.in configure frames.texi
-  emacs.c x-win.el xselect.c alloc.c xlwmenu.c startup.el xdisp.c
-  xresources.texi fileio.c and 171 other files
+  configure.in keyboard.c Makefile.in config.in frames.texi configure
+  x-win.el emacs.c xselect.c alloc.c xlwmenu.c startup.el xdisp.c
+  xresources.texi cus-start.el and 172 other files
 
 Jan Nieuwenhuizen: changed info.el TUTORIAL.nl emacs.c emacsclient.c
   gnus-start.el gud.el nnmh.el server.el startup.el
@@ -990,13 +994,13 @@
 and changed w32fns.c w32term.c w32menu.c w32-win.el w32term.h
   makefile.w32-in w32.c w32bdf.c w32-fns.el w32select.c w32console.c
   w32gui.h w32proc.c keyboard.c mule-cmds.el emacs.c fileio.c w32bdf.h
-  w32inevt.c config.nt configure.bat and 78 other files
+  w32inevt.c config.nt configure.bat and 79 other files
 
 Jay Belanger: changed calc.texi calc.el calc-ext.el calc-embed.el
   calc-aent.el calc-prog.el calc-arith.el calc-help.el calc-lang.el
-  calcalg2.el calc-graph.el calc-store.el calc-units.el calc-misc.el
-  calc-yank.el calc-alg.el calc-poly.el calccomp.el calc-mode.el
-  calc-rewr.el calc-sel.el and 26 other files
+  calcalg2.el COPYING calc-graph.el calc-store.el calc-units.el
+  calc-misc.el calc-yank.el calc-alg.el calc-poly.el calccomp.el
+  calc-mode.el calc-rewr.el and 34 other files
 
 Jay K. Adams: wrote jka-cmpr-hook.el jka-compr.el
 
@@ -1006,6 +1010,8 @@
 
 Jeff Dwork: changed ehelp.el facemenu.el
 
+Jeff Miller: changed appt.el
+
 Jeff Morgenthaler: changed flow-ctrl.el vt200.el vt201.el vt220.el
   vt240.el
 
@@ -1101,10 +1107,10 @@
 Joev Dubach: changed nntp.el
 
 Johan Bockg,Ae(Brd: changed erc.el erc-backend.el cl-macs.el erc-match.el
-  erc-nickserv.el erc-ring.el erc-speak.el erc-track.el align.el
-  calendar.el cl.texi custom.el dired-aux.el display.texi erc-bbdb.el
-  erc-button.el erc-compat.el erc-dcc.el erc-list.el erc-log.el
-  erc-nicklist.el and 9 other files
+  erc-nickserv.el erc-ring.el erc-speak.el erc-track.el simple.el
+  align.el calendar.el cl.texi custom.el dired-aux.el display.texi
+  erc-bbdb.el erc-button.el erc-compat.el erc-dcc.el erc-list.el
+  erc-log.el and 10 other files
 
 Johan Vromans: wrote forms-d2.el forms.el iso-acc.el
 and changed complete.el
@@ -1203,7 +1209,7 @@
 Juanma Barranquero: changed makefile.w32-in help-fns.el subr.el faces.el
   files.el w32fns.c cperl-mode.el replace.el simple.el eval.c
   sh-script.el vhdl-mode.el comint.el org.el xdisp.c allout.el bs.el
-  desktop.el idlwave.el keyboard.c process.c and 549 other files
+  desktop.el idlwave.el keyboard.c process.c and 550 other files
 
 Juergen Hoetzel: changed url-handlers.el
 
@@ -1217,8 +1223,8 @@
 
 Juri Linkov: changed info.el simple.el isearch.el replace.el compile.el
   faces.el display.texi grep.el descr-text.el cus-edit.el dired.el
-  dired-aux.el edebug.el files.el lisp-mode.el lisp.el mule.el
-  compare-w.el desktop.el files.texi font-lock.el and 220 other files
+  dired-aux.el edebug.el files.el lisp-mode.el lisp.el modes.texi mule.el
+  compare-w.el desktop.el files.texi and 220 other files
 
 Justin Sheehy: changed gnus-sum.el nntp.el
 
@@ -1246,9 +1252,9 @@
 
 Karl Berry: changed info.texi emacs.texi elisp.texi emacs-xtra.texi
   filelock.c anti.texi building.texi cmdargs.texi copyright.el
-  customize.texi dired.c faq.texi gnu.texi help.texi macos.texi
-  minibuf.texi msdog.texi mule.texi sending.texi texinfo.el texinfo.tex
-  and 64 other files
+  custom.texi customize.texi dired.c display.texi faq.texi frames.texi
+  gnu.texi help.texi macos.texi minibuf.texi msdog.texi mule.texi
+  and 65 other files
 
 Karl Chen: changed files.el align.el cc-vars.el gnus-art.el help-mode.el
   jka-cmpr-hook.el make-mode.el perl-mode.el python.el tex-mode.el
@@ -1278,7 +1284,7 @@
 Katsumi Yamaoka: wrote canlock.el
 and changed gnus-art.el message.el gnus-sum.el gnus.texi mm-decode.el
   mm-view.el gnus-util.el gnus-msg.el gnus.el mm-util.el lpath.el
-  gnus-start.el gnus-group.el mm-uu.el rfc2047.el dgnushack.el
+  gnus-start.el rfc2047.el gnus-group.el mm-uu.el dgnushack.el
   gnus-agent.el nntp.el mml.el nnrss.el nnheader.el and 71 other files
 
 Kaveh R. Ghazi: changed delta88k.h xterm.c
@@ -1316,7 +1322,7 @@
 Kenichi Handa: wrote cyrillic.el isearch-x.el py-punct.el pypunct-b5.el
   quail.el thai-word.el
 and changed coding.c mule-cmds.el mule.el charset.c fileio.c xterm.c
-  fns.c ccl.c mule-conf.el Makefile.in fontset.c charset.h coding.h
+  fns.c ccl.c Makefile.in mule-conf.el fontset.c charset.h coding.h
   fontset.el mule-diag.el xdisp.c editfns.c process.c insdel.c
   japanese.el characters.el and 277 other files
 
@@ -1361,10 +1367,10 @@
 
 Kim F. Storm: wrote bindat.el cua-base.el cua-gmrk.el cua-rect.el
   ido.el keypad.el kmacro.el
-and changed xdisp.c dispextern.h simple.el xterm.c window.c keyboard.c
-  process.c w32term.c lisp.h subr.el dispnew.c fringe.c macterm.c
-  display.texi alloc.c fns.c xfaces.c xfns.c xterm.h .gdbinit buffer.c
-  and 235 other files
+and changed xdisp.c dispextern.h simple.el window.c xterm.c keyboard.c
+  process.c w32term.c dispnew.c subr.el lisp.h fringe.c macterm.c
+  display.texi fns.c alloc.c xfaces.c xfns.c xterm.h keymap.c .gdbinit
+  and 238 other files
 
 Kim-Minh Kaplan: changed gnus-picon.el gnus-sum.el gnus-start.el
   gnus-win.el gnus-xmas.el gnus.texi message.el nndraft.el nnml.el
@@ -1486,7 +1492,7 @@
 
 Maciek Pasternacki: changed nnrss.el
 
-Magnus Henoch: changed ispell.el
+Magnus Henoch: changed ispell.el rcirc.el
 
 Manuel Serrano: wrote flyspell.el
 
@@ -1584,10 +1590,10 @@
 
 Martin Neitzel: changed sc.el
 
-Martin Rudalics: changed cus-edit.el wid-edit.el font-lock.el insdel.c
-  syntax.c buffer.c buffer.h casefiddle.c cus-start.el custom.el
-  editfns.c fileio.c files.el find-func.el hideif.el info.el jit-lock.el
-  lisp-mode.el lisp.h midnight.el mouse.el and 5 other files
+Martin Rudalics: changed cus-edit.el wid-edit.el cus-start.el files.el
+  font-lock.el insdel.c syntax.c buffer.c buffer.h casefiddle.c custom.el
+  dispextern.h editfns.c eldoc.el fileio.c find-func.el hideif.el info.el
+  jit-lock.el lisp-mode.el lisp.h and 13 other files
 
 Martin Stjernholm: wrote cc-bytecomp.el
 and changed cc-engine.el cc-cmds.el cc-langs.el cc-defs.el cc-mode.el
@@ -1604,8 +1610,8 @@
 
 Masatake Yamato: wrote cc-subword.el ld-script.el
 and changed etags.el asm-mode.el xdisp.c bindings.el hexl.el man.el
-  simple.el wid-edit.el compile.el faces.el pcvs.el register.el
-  ruler-mode.el add-log.el buffer.c cus-face.el dired-x.el display.texi
+  simple.el wid-edit.el add-log.el compile.el faces.el pcvs.el
+  register.el ruler-mode.el buffer.c cus-face.el dired-x.el display.texi
   etags.c font-lock.el gdb-ui.el and 57 other files
 
 Masayuki Ataka: changed texinfmt.el texinfo.el characters.el make-mode.el
@@ -1691,7 +1697,7 @@
   erc-stamp.el erc-log.el erc-autoaway.el erc-identd.el erc-track.el
   erc-match.el erc-dcc.el erc-notify.el erc-goodies.el erc-ibuffer.el
   erc-list.el erc-pcomplete.el erc-spelling.el erc-bbdb.el erc-compat.el
-  erc-nicklist.el erc-*.el and 41 other files
+  erc-nicklist.el and 42 other files
 
 Michael Piotrowski: changed ps-print.el
 
@@ -1713,14 +1719,17 @@
 
 Michael Staats: wrote pc-select.el
 
-Michael Welsh Duggan: changed lisp.h w32term.c buffer.c gnus-spec.el
-  keyboard.c nnmail.el termhooks.h url-http.el w32-win.el w32fns.c
-  w32menu.c w32term.h xdisp.c xterm.c
+Michael Welsh Duggan: changed lisp.h sh-script.el w32term.c buffer.c
+  gnus-spec.el keyboard.c nnmail.el termhooks.h url-http.el w32-win.el
+  w32fns.c w32menu.c w32term.h xdisp.c xterm.c
 
 Michal Jankowski: changed insdel.c keyboard.c
 
-Micha,Ak(Bl Cadilhac: changed ispell.el dispnew.c make-mode.el pong.el
-  print.c process.c startup.el
+Michal Nazarewicz: changed ispell.el
+
+Micha,Ak(Bl Cadilhac: changed ispell.el cus-edit.el dispnew.c ido.el info.el
+  life.el lpr.el make-mode.el pong.el print.c process.c startup.el
+  uni-input.el
 
 Michelangelo Grigni: wrote ffap.el
 and changed gnus-score.el
@@ -1750,8 +1759,8 @@
 Milan Zamazal: wrote czech.el glasses.el tildify.el
 and changed slovak.el abbrev.el compile.el filecache.el files.el
 
-Miles Bader: wrote button.el image-file.el macroexp.el mb-depth.el
-  minibuf-eldef.el rfn-eshadow.el
+Miles Bader: wrote button.el image-file.el macroexp.el minibuf-eldef.el
+  rfn-eshadow.el
 and changed comint.el faces.el simple.el editfns.c xfaces.c info.el
   xdisp.c minibuf.c wid-edit.el xterm.c subr.el window.el cus-edit.el
   diff-mode.el dispextern.h xfns.c help.el lisp.h quick-install-emacs
@@ -1760,7 +1769,7 @@
 Miyashita Hisashi: changed ccl.c coding.c coding.h mule-cmds.el
   mule-conf.el mule.el pop3.el
 
-Miyoshi Masanori: changed mouse.el xdisp.c
+Miyoshi Masanori: changed mouse.el smtpmail.el xdisp.c
 
 Morioka Tomohiko: changed rmail.el rmailout.el rmailsum.el fns.c
   message.el nnheader.el nnmail.el rmailkwd.el smiley.el
@@ -1858,6 +1867,8 @@
 
 Olli Savia: changed etags.c syssignal.h
 
+Osamu Yamane: changed smtpmail.el
+
 Oscar Figueiredo: wrote eudc-bob.el eudc-export.el eudc-hotlist.el
   eudc-vars.el eudc.el eudcb-bbdb.el eudcb-ldap.el eudcb-ph.el ldap.el
 and changed ph.el
@@ -1879,7 +1890,7 @@
 and changed editfns.c vc.el Makefile.in configure.in vc-hooks.el data.c
   emacs.c gnus.el calendar.el config.in floatfns.c process.c sysdep.c
   dired.el xterm.c callproc.c fileio.c filelock.c lread.c print.c
-  rmail.el and 287 other files
+  rmail.el and 290 other files
 
 Paul Fisher: changed fns.c
 
@@ -2030,9 +2041,9 @@
 Reiner Steib: wrote gmm-utils.el
 and changed gnus-art.el message.el gnus.texi gnus-sum.el gnus.el
   gnus-group.el mml.el gnus-faq.texi gnus-score.el gnus-start.el
-  gnus-util.el gnus-msg.el message.texi gnus-agent.el files.el mm-util.el
+  gnus-util.el gnus-msg.el message.texi gnus-agent.el mm-util.el files.el
   spam-report.el nnweb.el spam.el deuglify.el mm-decode.el
-  and 156 other files
+  and 161 other files
 
 Remek Trzaska: changed gnus-ems.el
 
@@ -2060,8 +2071,8 @@
   easymenu.el font-lock.el image-mode.el menu-bar.el paren.el
 and changed keyboard.c files.el simple.el xterm.c xdisp.c rmail.el
   fileio.c process.c sysdep.c xfns.c buffer.c Makefile.in window.c
-  configure.in subr.el editfns.c emacs.c sendmail.el startup.el info.el
-  dispnew.c and 1331 other files
+  configure.in subr.el startup.el emacs.c editfns.c sendmail.el info.el
+  dispnew.c and 1334 other files
 
 Richard Mlynarik: wrote cl-indent.el ebuff-menu.el ehelp.el env.c
   rfc822.el terminal.el yow.el
@@ -2126,7 +2137,7 @@
   message.el puresize.h replace.el files.texi gnus-fun.el gnus.texi
   help-fns.el make-dist rcirc.el subr.el Makefile.in antlr-mode.el
   bookmark.el buffer.c comint.el diary-lib.el dired.el
-  and 119 other files
+  and 121 other files
 
 Roman Belenov: changed which-func.el
 
@@ -2174,8 +2185,8 @@
 and changed mh-e.el mh-utils.el mh-seq.el mh-index.el mh-comp.el
   mh-mime.el mh-customize.el mh-loaddefs.el mh-funcs.el Makefile
   mh-alias.el mh-pick.el mh-unit.el mh-init.el mh-identity.el mh-make.el
-  mh-xemacs-toolbar.el mh-xemacs-compat.el mh-inc.el highlight.xpm
-  mh-func.el and 7 other files
+  mh-xemacs-toolbar.el mh-xemacs-compat.el pgg-gpg.el mh-inc.el
+  highlight.xpm and 7 other files
 
 Schlumberger Technology Corporation: changed gud.el
 
@@ -2224,8 +2235,8 @@
   mml-sec.el mml-smime.el nnfolder.el nnimap.el nnml.el rfc2104.el
   sieve-manage.el sieve-mode.el sieve.el smime.el starttls.el tls.el
   url-imap.el
-and changed message.el gnus-sum.el gnus-art.el smtpmail.el pgg-gpg.el
-  pgg.el gnus-agent.el mml2015.el mml.el mm-decode.el mml1991.el
+and changed message.el gnus-sum.el gnus-art.el smtpmail.el pgg.el
+  pgg-gpg.el gnus-agent.el mml2015.el mml.el mm-decode.el mml1991.el
   gnus-group.el gnus-msg.el gnus.el pgg-pgp5.el gnus-cache.el
   gnus-sieve.el browse-url.el gnus-int.el mail-source.el pgg-parse.el
   and 91 other files
@@ -2242,7 +2253,8 @@
 
 Skip Collins: changed w32fns.c w32term.c w32term.h
 
-Slawomir Nowaczyk: changed TUTORIAL.pl emacs.py flyspell.el ls-lisp.el
+Slawomir Nowaczyk: changed python.el TUTORIAL.pl emacs.py flyspell.el
+  ls-lisp.el
 
 Spencer Thomas: changed dabbrev.el emacsclient.c emacsserver.c gnus.texi
   server.el tcp.c unexec.c
@@ -2253,15 +2265,17 @@
   log-view.el pcvs-defs.el pcvs-info.el pcvs-parse.el pcvs-util.el
   reveal.el smerge-mode.el
 and changed vc.el font-lock.el pcvs.el newcomment.el subr.el lisp.h
-  keyboard.c tex-mode.el fill.el keymap.c alloc.c compile.el
-  easy-mmode.el files.el simple.el info.el regex.c syntax.c vc-hooks.el
-  xdisp.c sh-script.el and 509 other files
+  keyboard.c keymap.c tex-mode.el fill.el alloc.c compile.el files.el
+  regex.c easy-mmode.el simple.el info.el syntax.c xdisp.c vc-hooks.el
+  sh-script.el and 511 other files
 
 Stephan Stahl: changed which-func.el buff-menu.el buffer.c dired-x.texi
   ediff-mult.el
 
 Stephen A. Wood: changed fortran.el
 
+Stephen Berman: changed allout.el
+
 Stephen Eglen: wrote iswitchb.el mspools.el
 and changed diary-lib.el locate.el octave-inf.el replace.el hexl.el
   info-look.el sendmail.el spell.el uce.el MORE.STUFF add-log.el
@@ -2269,8 +2283,9 @@
   bib-mode.el bruce.el c-mode.el ccl.el and 71 other files
 
 Stephen Gildea: wrote mh-funcs.el mh-pick.el refcard.tex
-and changed time-stamp.el mh-e.el mh-utils.el mh-comp.el mh-customize.el
-  fileio.c files.el fortran.el mh-e.texi mh-mime.el mwheel.el tex-mode.el
+and changed time-stamp.el mh-e.el mh-comp.el mh-utils.el mh-customize.el
+  fileio.c files.el fortran.el mh-e.texi mh-junk.el mh-mime.el mwheel.el
+  tex-mode.el
 
 Stephen J. Turnbull: changed ediff-init.el strings.texi subr.el
 
@@ -2396,7 +2411,7 @@
 
 Tobias C. Rittweiler: changed font-lock.el
 
-Toby Allsopp: changed eudc.el
+Toby Allsopp: changed ldap.el eudc.el
 
 Toby Speight: changed window.el
 
@@ -2527,7 +2542,7 @@
 
 Wolfgang Glas: changed unexsgi.c
 
-Wolfgang Jenkner: changed pcvs.el
+Wolfgang Jenkner: changed conf-mode.el pcvs.el
 
 Wolfgang Rupprecht: wrote float-sup.el floatfns.c sup-mouse.el
 and changed process.c alloc.c callint.c config.h.in config.in
@@ -2544,10 +2559,10 @@
 
 Yagi Tatsuya: changed gnus-art.el gnus-start.el
 
-Yamamoto Mitsuharu: changed macterm.c mac-win.el macfns.c mac.c macterm.h
+Yamamoto Mitsuharu: changed macterm.c macfns.c mac-win.el mac.c macterm.h
   macgui.h image.c macmenu.c macselect.c keyboard.c makefile.MPW xdisp.c
-  emacs.c macos.texi xfaces.c Makefile.in config.h darwin.h dispextern.h
-  w32term.c Info.plist and 61 other files
+  emacs.c config.h macos.texi xfaces.c Makefile.in darwin.h dispextern.h
+  w32term.c INSTALL and 66 other files
 
 Yann Dirson: changed imenu.el
 
--- a/ChangeLog	Thu Oct 05 12:20:23 2006 +0000
+++ b/ChangeLog	Sun Oct 15 02:54:13 2006 +0000
@@ -1,3 +1,7 @@
+2006-10-03  Kim F. Storm  <storm@cua.dk>
+
+	* AUTHORS: Regenerate.
+
 2006-09-30  Eli Zaretskii  <eliz@gnu.org>
 
 	* configure: Regenerated.
--- a/admin/FOR-RELEASE	Thu Oct 05 12:20:23 2006 +0000
+++ b/admin/FOR-RELEASE	Sun Oct 15 02:54:13 2006 +0000
@@ -2,12 +2,13 @@
 
 * TO BE DONE SHORTLY BEFORE RELEASE
 
-** Update release dates of manuals.
-
 ** Check for widow and orphan lines in manuals;
 make sure all the pages really look ok in the manual as formatted.
 
+** Check for text in manuals that assumes current version is 21.
+
 ** Update AUTHORS.
+[Done 2006-10-03]
 
 ** Regenerate the postscript files of the reference cards in etc.
 
@@ -34,22 +35,16 @@
 attention of Windows users to fixing them.
 
 ** Drew Adams 12 Aug bug rpt: overlay  display artifact: trace left behind
-Windows only bug.
+Windows only bug. Bug appears only when Cleartype enabled, probably related
+to the hack introduced on 2005-07-01 to fix some other Cleartype problem. 
 
 ** henman@it.to-be.co.jp 09 Aug 2006: ispell.el problem on Cygwin.
   (Did we decide that is unreproducible?)
 
-** kitty@dre.vanderbilt.edu Sep 20 says make-frame ignores left and top.
-
 * BUGS
 
-** Enrico Schwass, Sep 13 help-gnu-emacs: display japanese outputdoesnt work quite right
-
-** XIM hotkey doesn't work in Emacs with gnome-settings-demon.
-
-** jpff@codemist.co.uk, Sep 29: rmail g gets Wrong type argument error.
-
-** M.P.Hodges@rl.ac.uk Sep 30: list-processes and process sentinels not run.
+** hashiz@tomba.meridiani.jp, Oct 6: bootstrap failure on FreeBSD 6.2
+Can't be reproduced on GNU/Linux.
 
 * DOCUMENTATION
 
--- a/admin/make-tarball.txt	Thu Oct 05 12:20:23 2006 +0000
+++ b/admin/make-tarball.txt	Sun Oct 15 02:54:13 2006 +0000
@@ -62,8 +62,11 @@
      echo directory: emacs/pretest > FILE.directive      (for a pretest)
      echo directory: emacs > FILE.directive              (for a release)
      gpg --clearsign FILE.directive
-    Upload by anonymous ftp to ftp://ftp-upload.gnu.org/incoming/ftp/
-    the files FILE, FILE.sig, FILE.directive.asc
+    Upload by anonymous ftp to ftp://ftp-upload.gnu.org/ the files FILE,
+    FILE.sig, FILE.directive.asc.
+    For a release, place the files in the /incoming/ftp directory.
+    For a pretest, place the files in /incoming/alpha instead, so that
+    they appear on ftp://alpha.gnu.org/.
 
 13. After five minutes, verify that the files are visible at
     ftp://alpha.gnu.org/gnu/emacs/pretest/ for a pretest, at
--- a/etc/ChangeLog	Thu Oct 05 12:20:23 2006 +0000
+++ b/etc/ChangeLog	Sun Oct 15 02:54:13 2006 +0000
@@ -1,3 +1,16 @@
+2006-10-09  David Kastrup  <dak@gnu.org>
+
+	* DEVEL.HUMOR: Add the topic line for last entry since that was
+	what the joke was about.
+
+2006-10-07  Ognyan Kulev  <ogi@fmi.uni-sofia.bg>
+
+	* TUTORIAL.bg: Synchronize with TUTORIAL.
+
+2006-10-06  Juanma Barranquero  <lekktu@gmail.com>
+
+	* DEVEL.HUMOR: New file.
+
 2006-09-30  Chong Yidong  <cyd@stupidchicken.com>
 
 	* PROBLEMS: Document Emacs/XIM/gnome-settings-terminal clash.
@@ -26,7 +39,7 @@
 
 2006-09-15  David Kastrup  <dak@gnu.org>
 
-	* NEWS: explain new behavior and arguments of `key-binding' and
+	* NEWS: Explain new behavior and arguments of `key-binding' and
 	`command-remapping'.
 
 2006-09-11  Paul Eggert  <eggert@cs.ucla.edu>
@@ -216,8 +229,7 @@
 
 2006-06-19  Carsten Dominik  <dominik@science.uva.nl>
 
-	* orgcard.tex (section{Clocking Time}): Add new clocking
-	commands.
+	* orgcard.tex (section{Clocking Time}): Add new clocking commands.
 	(section{Structure Editing}): Add global archiving command.
 
 2006-06-14  Thien-Thi Nguyen  <ttn@gnu.org>
@@ -304,8 +316,7 @@
 
 2006-05-24  Carsten Dominik  <dominik@science.uva.nl>
 
-	* orgcard.tex: (section{Motion}): Added the item navigation
-	commands.
+	* orgcard.tex (section{Motion}): Added the item navigation commands.
 	(section{Publishing}): New section.
 	(section{Links}): Documented elisp and shell links.
 
@@ -317,8 +328,7 @@
 
 	* pl-refcard.tex (Local variables): Add compile-command.
 
-	* ru-refcard.tex (Local variables): Add compile-command and
-	coding.
+	* ru-refcard.tex (Local variables): Add compile-command and coding.
 
 	* pt-br-refcard.tex: Don't \input psfig.
 
@@ -332,7 +342,7 @@
 	* pl-refcard.tex (section{Info}): Ditto.  Translation suggested by
 	Slawomir Nowaczyk <slawomir.nowaczyk.847@student.lu.se>.
 
-	* cs-refcard.tex (section{Info}): Use `s' instead of `M-s'. Entry
+	* cs-refcard.tex (section{Info}): Use `s' instead of `M-s'.  Entry
 	for `i' is not translated yet.
 
 	* pt-br-refcard.tex (section{Info}): Ditto.
@@ -413,7 +423,7 @@
 
 2006-04-11  Carsten Dominik  <dominik@science.uva.nl>
 
-	* orgcard.tex: (section{Tables}): Document column narrowing.
+	* orgcard.tex (section{Tables}): Document column narrowing.
 	(section{Links}): Document bracket links.
 
 2006-04-11  Kenichi Handa  <handa@m17n.org>
@@ -442,11 +452,11 @@
 	New bitmaps for new images.
 
 	* images/refresh.xpm, images/sort-ascending.xpm,
-	* images/sort-descending.xpm: Update with GTK 2.x images. Note
+	* images/sort-descending.xpm: Update with GTK 2.x images.  Note
 	that the default GTK icons are not overridden by the GNOME theme
-	due to a bug which was fixed in GNOME 2.15. Once GNOME 2.16 is in
+	due to a bug which was fixed in GNOME 2.15.  Once GNOME 2.16 is in
 	wide circulation, then the GTK icons should be replaced with the
-	equivalent GNOME icons. Until then, we should be consistent with
+	equivalent GNOME icons.  Until then, we should be consistent with
 	GTK first, then GNOME.
 
 	* images/mail/repack.xpm, images/mail/reply-from.xpm:
@@ -504,9 +514,9 @@
 
 2006-03-11  Bill Wohler  <wohler@newt.com>
 
-	* NEWS: Document `image-load-path-for-library'. Note that all
+	* NEWS: Document `image-load-path-for-library'.  Note that all
 	images have been moved from lisp into etc/images in `find-image'
-	item. Fix typo in `copy-tree'.
+	item.  Fix typo in `copy-tree'.
 
 2006-03-09  Reiner Steib  <Reiner.Steib@gmx.de>
 
@@ -528,7 +538,7 @@
 
 2006-02-22  Carsten Dominik  <dominik@science.uva.nl>
 
-	* orgcard.tex: (section{Links}): Rewritten to cover the modified
+	* orgcard.tex (section{Links}): Rewritten to cover the modified
 	link system.
 
 2006-02-18  Bill Wohler  <wohler@newt.com>
@@ -602,11 +612,11 @@
 
 2006-01-23  Michael Albinus  <michael.albinus@gmx.de>
 
-	* NEWS: tramp can be removed by M-x tramp-unload-tramp.
+	* NEWS: Tramp can be removed by M-x tramp-unload-tramp.
 
 2006-01-15  Dan Nicolaescu  <dann@ics.uci.edu>
 
-	* e/eterm-color.ti: Re-enable the ri entry. Add kich1.
+	* e/eterm-color.ti: Re-enable the ri entry.  Add kich1.
 
 2006-01-13  Richard M. Stallman  <rms@gnu.org>
 
@@ -711,7 +721,7 @@
 2005-10-27  Dan Nicolaescu  <dann@ics.uci.edu>
 
 	* e/eterm-color.ti (el1): Undo 2005-10-23 change.
-	Add some comments on how to update this file. Add ri
+	Add some comments on how to update this file.  Add ri
 	capability that has long been supported by term.el.
 
 2005-10-25  Nick Roberts  <nickrob@snap.net.nz>
@@ -738,7 +748,7 @@
 
 2005-10-17  Bill Wohler  <wohler@newt.com>
 
-	Moved all remaining images from lisp/toolbar to etc/images. The
+	Moved all remaining images from lisp/toolbar to etc/images.  The
 	low resolution images were placed in their own directory (low-color).
 
 	* images/attach.*, images/cancel.*, images/close.*:
@@ -885,7 +895,7 @@
 
 	* GNUS-NEWS: Fix IDNA notes.
 
-2005-09-27  Jay Belanger <belanger@truman.edu>
+2005-09-27  Jay Belanger  <belanger@truman.edu>
 
 	* calccard.tex: Update `versionnumber', remove `versiondate'.
 	(Error Recovery): Refer to "initial state" rather than "default state".
@@ -1292,7 +1302,7 @@
 
 2004-09-26  Dan Nicolaescu  <dann@ics.uci.edu>
 
-	* e/eterm.ti: Comment out smcup, rmcup. Add kbs, kdch1, rc, sc.
+	* e/eterm.ti: Comment out smcup, rmcup.  Add kbs, kdch1, rc, sc.
 	Reformat.
 	* e/eterm: Regenerate.
 
@@ -1403,7 +1413,7 @@
 
 2004-06-10  Lars Hansen  <larsh@math.ku.dk>
 
-	* NEWS: Describe dired-omit-mode. Describe desktop package changes.
+	* NEWS: Describe dired-omit-mode.  Describe desktop package changes.
 
 2004-05-29  Steven Tamm  <steventamm@mac.com>
 
@@ -1426,7 +1436,7 @@
 
 2004-04-13  Marcelo Toledo  <marcelo@gnu.org>
 
-	* TUTORIAL.pt_BR: initial check-in.
+	* TUTORIAL.pt_BR: Initial check-in.
 
 2004-05-06  Dave Love  <fx@gnu.org>
 
@@ -1790,7 +1800,7 @@
 
 2001-08-05  Pavel Jan,Am(Bk  <Pavel@Janik.cz>
 
-	* TUTORIAL.cs, TUTORIAL.sk, cs-refcard.tex, sk-refcard.tex: e-mail
+	* TUTORIAL.cs, TUTORIAL.sk, cs-refcard.tex, sk-refcard.tex: E-mail
 	address of Milan Zamazal changed.
 
 2001-08-04  Pavel Jan,Am(Bk  <Pavel@Janik.cz>
@@ -1904,7 +1914,7 @@
 2001-01-08  Kevin Gallagher  <kevingal@onramp.net>
 
 	* edt-user.doc: Updated to reflect EDT Emulation version 4.0
-        enhancements.
+	enhancements.
 
 2000-12-29  Gerd Moellmann  <gerd@gnu.org>
 
@@ -2229,7 +2239,7 @@
 
 1995-06-28  Eric S. Raymond  <esr@spiff.gnu.ai.mit.edu>
 
-	* termcap.dat, termcap.ucb: deleted and replaced.
+	* termcap.dat, termcap.ucb: Deleted and replaced.
 
 	* termcap: New termcap file from the ncurses project; bigger,
 	better, brighter, does away with waxy yellow buildup.  Email
@@ -2322,7 +2332,7 @@
 
 1993-06-16  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)
 
-        Bring mumbleclean targets into conformance with GNU coding standards.
+	Bring mumbleclean targets into conformance with GNU coding standards.
 	* Makefile (distclean): Don't remove backup and autosave files.
 	These are easy to get rid of in other ways, and a pain to lose.
 	(mostlyclean, realclean): New targets.
@@ -2345,7 +2355,7 @@
 
 1993-05-22  Jim Blandy  (jimb@geech.gnu.ai.mit.edu)
 
-        * Version 19.7 released.
+	* Version 19.7 released.
 
 1993-05-19  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)
 
@@ -2366,7 +2376,7 @@
 	out of date.  This file referenced LNEWS when it should have
 	said news.texi; fixed.
 
-	news.texi: invocation-name now exists.
+	* news.texi: invocation-name now exists.
 
 1993-03-27  Eric S. Raymond  (eric@geech.gnu.ai.mit.edu)
 
@@ -2386,7 +2396,7 @@
 
 1993-03-19  Eric S. Raymond  (eric@geech.gnu.ai.mit.edu)
 
-	* MACHINES: Deleted some VMS caveats. If the src and lisp
+	* MACHINES: Deleted some VMS caveats.  If the src and lisp
 	ChangeLogs are correct,	dired and mail and process control are now
 	fully supported.
 
@@ -2408,7 +2418,7 @@
 	I nuked it.  Let the file mod date serve.  Merged in APOLLO and
 	SUNBUG files.  Changed references to 18.* to past tense.
 
-	* emacs.names: merged into JOKES.  I faked a mail header from the
+	* emacs.names: Merged into JOKES.  I faked a mail header from the
 	Unknown User to delimit the first (unheaded) bit.
 
 	* Makefile (relock, unlock): New productions.
@@ -2420,30 +2430,30 @@
 	the Emacs distribution, I have the following changes in the etc
 	directory:
 
-	* CHARACTERS: merged into TO-DO file under the heading "Long Range:"
-
-	* DIFF, CCADIFF and GOSDIFF: merged into a new outline file titled
+	* CHARACTERS: Merged into TO-DO file under the heading "Long Range:"
+
+	* DIFF, CCADIFF, GOSDIFF: Merged into a new outline file titled
 	OTHER.EMACSES.  The present names don't really convey anything.
 	Various key bindings and feature descriptions have been updated.
 
-	* NICKLES.WORTH.  Nuked.  This is copyrighted material that could land
+	* NICKLES.WORTH: Nuked.  This is copyrighted material that could land
 	FSF in hot water.
 
-	* INTERVAL.IDEAS:  Nuked.  RMS's thinking, and indeed the
+	* INTERVAL.IDEAS: Nuked.  RMS's thinking, and indeed the
 	implementation of intervals, have progressed way beyond this.
 
-	* RCP:  Nuked.  It no longer said anything but "Ooops, sorry!"
-
-	* ED.WORSHIP, GNU.JOKES: merged into a mailbox called JOKES.
+	* RCP: Nuked.  It no longer said anything but "Ooops, sorry!"
+
+	* ED.WORSHIP, GNU.JOKES: Merged into a mailbox called JOKES.
 	Future jokes can accumulate there.
 
-	* DISTRIB: the actual domestic order form is now ORDERS.USA.
+	* DISTRIB: The actual domestic order form is now ORDERS.USA.
 	The DISTRIB text now mentions 19.
 
-	* ORDERS.USA: created.  This is just the order form.  DISTRIB
+	* ORDERS.USA: Created.  This is just the order form.  DISTRIB
 	has a pointer to it at the beginning.
 
-	* EUROPE: renamed to ORDERS.EUROPE.  DISTRIB now has a pointer
+	* EUROPE: Renamed to ORDERS.EUROPE.  DISTRIB now has a pointer
 	to it at the beginning.
 
 	* OOOONEWS, OOOONEWS: Nuked.  It's version  19 --- nobody needs the
@@ -2455,7 +2465,7 @@
 
 1993-03-17  Eric S. Raymond  (eric@mole.gnu.ai.mit.edu)
 
-	* XENIX: nuked (moved to =XENIX).  The hackery it describes is
+	* XENIX: Nuked (moved to =XENIX).  The hackery it describes is
 	no longer necessary in the presence of 19's function-key-map
 	feature; I've added an explanation to the beginning of the file.
 
@@ -2560,7 +2570,7 @@
 
 1992-03-31  Jim Blandy  (jimb@pogo.cs.oberlin.edu)
 
-    	* lib-src/Makefile, etc/MACHINES, etc/NEWS: Changed references to
+	* lib-src/Makefile, etc/MACHINES, etc/NEWS: Changed references to
 	`config.emacs' to `configure'.
 
 	* lib-src/Makefile: Adjusted for renaming of share-lib to etc.
@@ -2656,7 +2666,7 @@
 	* etags.c (C_entries): Process token before handling end of line.
 	When inner loops reach end of line, just back up.
 	Let the real end of line processing happen in just one place.
-	(consider_token):  Likewise.
+	(consider_token): Likewise.
 
 1991-04-11  Jim Blandy  (jimb@geech.gnu.ai.mit.edu)
 
@@ -2727,7 +2737,7 @@
 
 1990-08-30  David Lawrence  (tale@pogo.ai.mit.edu)
 
-	* emacs.1:  Add break before -nw option.
+	* emacs.1: Add break before -nw option.
 
 1990-08-19  David J. MacKenzie  (djm@apple-gunkies)
 
@@ -2769,7 +2779,7 @@
 
 1990-03-14  Joseph Arceneaux  (jla@churchy.ai.mit.edu)
 
-	* etags.c (getit):  Recognize '$' as beginning identifiers.
+	* etags.c (getit): Recognize '$' as beginning identifiers.
 
 1990-02-22  David Lawrence  (tale@pogo.ai.mit.edu)
 
@@ -2891,15 +2901,15 @@
 
 1989-04-18  Richard Stallman  (rms@sugar-bombs.ai.mit.edu)
 
-	* loadst.c: on bsd4.3, use gettimeofday instead of CPUSTATES.
+	* loadst.c: On bsd4.3, use gettimeofday instead of CPUSTATES.
 
 1989-03-15  Jeff Peck  (rms@sugar-bombs.ai.mit.edu)
 
 	* emacstool.c: setenv IN_EMACSTOOL=t, TERM=sun, TERMCAP=.
 
-	* emacsstool.1: update to document environment variables.
-
-1989-02-21  Mosur Mohan (email@notavailable)
+	* emacsstool.1: Update to document environment variables.
+
+1989-02-21  Mosur Mohan  (email@notavailable)
 
 	* etags.c (PAS_funcs): New function.
 
@@ -2913,7 +2923,7 @@
 
 1989-02-15  Richard Stallman  (rms@sugar-bombs.ai.mit.edu)
 
-	* etags.c: Prolog support from Sunichirou Sugou
+	* etags.c: Prolog support from Sunichirou Sugou.
 
 1989-02-03  Richard Stallman  (rms@sugar-bombs.ai.mit.edu)
 
@@ -2926,7 +2936,7 @@
 1989-01-19  Sam Kendall  (email@notavailable)
 
 	* etags.c: Greatly rewritten for C++ support and for multiple tags
-        per line.
+	per line.
 
 1989-01-03  Richard Stallman  (rms@sugar-bombs.ai.mit.edu)
 
@@ -2936,8 +2946,8 @@
 
 1988-12-31  Richard Mlynarik  (mly@rice-chex.ai.mit.edu)
 
-        * env.c:  Add decl for my-index
-        * etags.c (file-entries): .oak => scheme
+	* env.c: Add decl for my-index.
+	* etags.c (file-entries): .oak => scheme
 
 1988-12-30  Richard Stallman  (rms@sugar-bombs.ai.mit.edu)
 
@@ -2981,8 +2991,8 @@
 
 1988-11-29  Richard Mlynarik  (mly@pickled-brain.ai.mit.edu)
 
-        * movemail.c:  Better error message when can't create tempname.
-        This file needs a great deal of extra error-checking and lucid reporting...
+	* movemail.c: Better error message when can't create tempname.
+	This file needs a great deal of extra error-checking and lucid reporting...
 
 1988-11-16  Richard Stallman  (rms@sugar-bombs.ai.mit.edu)
 
@@ -3000,7 +3010,7 @@
 
 1988-09-24  Richard Stallman  (rms@gluteus.ai.mit.edu)
 
-	* etags.c (main): default setting of eflag was backwards.
+	* etags.c (main): Default setting of eflag was backwards.
 
 1988-09-23  Richard Stallman  (rms@sugar-bombs.ai.mit.edu)
 
@@ -3065,8 +3075,8 @@
 
 1988-05-13  Chris Hanson  (cph@kleph)
 
-	* emacsclient.c: Delete references to unused variable `out'.  This
-	caused a bus error when used under hp-ux.
+	* emacsclient.c: Delete references to unused variable `out'.
+	This caused a bus error when used under hp-ux.
 
 1988-05-06  Richard Stallman  (rms@frosted-flakes.ai.mit.edu)
 
@@ -3083,7 +3093,7 @@
 1988-04-28  Richard Stallman  (rms@frosted-flakes.ai.mit.edu)
 
 	* movemail.c: #undef close, since config can #define it on V.3.
-	* emacsclient.c, fakemail.c, loadst.c, server.c: likewise.
+	* emacsclient.c, fakemail.c, loadst.c, server.c: Likewise.
 
 1988-04-26  Richard Stallman  (rms@lucky-charms.ai.mit.edu)
 
@@ -3094,9 +3104,9 @@
 
 1988-03-20  Richard M. Stallman  (rms@wilson)
 
-	* server.c [not BSD and not HAVE_SYSVIPC]: fix error message.
-
-	* loadst.c (main) [XENIX]: use /usr/spool/mail, not /usr/mail.
+	* server.c [not BSD and not HAVE_SYSVIPC]: Fix error message.
+
+	* loadst.c (main) [XENIX]: Use /usr/spool/mail, not /usr/mail.
 
 ;; Local Variables:
 ;; coding: iso-2022-7bit
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/DEVEL.HUMOR	Sun Oct 15 02:54:13 2006 +0000
@@ -0,0 +1,138 @@
+---------------- -*- mode: text; coding: utf-8; fill-column: 70 -*- --
+--                                                                  --
+-- Humor (sometimes unintended) on the Emacs developer's list       --
+--                                                                  --
+----------------------------------------------------------------------
+
+  "Is it legal for a `struct interval' to have a total_length field of
+zero?"
+  "We can't be arrested for it as far as I know, but it is definitely
+invalid for an interval to have zero length."
+                                                -- Miles Bader and RMS
+
+----------------------------------------------------------------------
+
+Re: lost argument and doc string
+
+I remember when I lost an argument.  Boy did that hurt!  ;-).
+                                                      -- RMS
+
+----------------------------------------------------------------------
+
+  "'Cowardly' is not an adverb, although it looks like one.  It is an
+adjective.  It makes a statement about general temperament, rather
+than a specific occasion.  I don't think Emacs has a general
+temperament."
+  "Mine does."
+                                             -- RMS and Eli Zaretskii
+
+----------------------------------------------------------------------
+
+  "In order to bring the user's attention to the minibuffer when an
+item such as 'Edit -> Search' is activated from the menu, I was just
+thinking that we could draw a big rectangle around the minibuffer,
+blinking (or zooming in-and-out) until some input is typed in."
+  "How about dancing elephants?"
+  "They don't fit in my office."
+  "Well once the elephants are done, your office will be much...
+bigger."
+                  -- Stefan Monnier, Miles Bader and Kai Grossjohann
+
+----------------------------------------------------------------------
+
+I remember these versions as yard-rocks (is that between inch-pebbles
+and mile-stones?).
+                                                   -- Kai Grossjohann
+
+----------------------------------------------------------------------
+
+  "I think it depends on video drivers.  I cannot reproduce it on my
+home PC, but I can at work."
+  "Can you try to find a workaround at work?  (I guess you don't need
+a homearound at home.  ;-)"
+                                              -- Jason Rumney and RMS
+
+----------------------------------------------------------------------
+
+By the way, I also really really hate this unibyte/multibyte problem.
+Sometimes I think I should have opposed to the introduction of such a
+concept more strongly.
+
+    imagine there's no unibyte
+    it's easy if you try
+    no bytes below us
+    above us only chars
+    imagine all the people living in multibyte
+
+                                                     -- Kenichi Handa
+
+----------------------------------------------------------------------
+
+I try to uphold the ideals that I was taught to value as an American,
+but every year I get less and less help from the United States.
+                                                              -- RMS
+
+----------------------------------------------------------------------
+
+  "If the terminfo entry is most likely wrong, and we know it, then it
+doesn't make sense to follow it."
+  "Nevertheless, until now, we always did."
+  "So.... should we not fix old bugs?"
+  "Why fix an old bug if you can write three new ones in the same
+time?"
+                       -- Miles Bader, Eli Zaretskii and David Kastrup
+
+----------------------------------------------------------------------
+
+  [...] As is well known, people who speak American English tend to
+be more resource-conscious and try to avoid wasting precious bits
+transferring those redundant "u"s.
+  Think of the number of occurrences of "color" and "behavior" in the
+Emacs tarball, multiply that by the number of times it'll be
+downloaded, stored on hard disks, archived, ...that's a substantial
+saving.
+                                                    -- Stefan Monnier
+
+----------------------------------------------------------------------
+
+Re: Parent of a derived mode's keymap.
+
+  "I can't decide whether the title of this thread is more fitting for
+a blues song or a pulp fiction booklet.  It certainly projects drama."
+  "Hey, it says derived, not deprived."
+  "Actually, for some keymaps 'depraved' would fit better."
+  "I knew it!  You're one of them vi lovers!  There is nothing wrong
+with Emacs using escape, meta, alt, control, and shift!"
+                                     -- David Kastrup and Lute Kamstra
+
+----------------------------------------------------------------------
+
+  "Aren't user-defined constants useful in other languages?"
+  "The only user-defined constant is ignorance.  (With programmers,
+this is a variable concept ;-)"
+                        -- Juanma Barranquero and Thien-Thi Nguyen
+
+----------------------------------------------------------------------
+
+  "Uh, 'archaic' and 'alive' is not a contradiction."
+  "Yes it is.  'Archaic' does not mean 'old' or 'early'.  It means
+'obsolete'."
+  "'He arche' in Greek means 'the beginning'.  John 1 starts off with
+'En arche en ho Logos': in the beginning, there was the word.  Now of
+course we all know that Emacs was there before Word, but this might
+have escaped John's notice."
+                                             -- David Kastrup and RMS
+
+----------------------------------------------------------------------
+
+Re: patch for woman (woman-topic-at-point)
+
+  "Sorry for the long message.  I wanted to make the problem clear
+also for people not familiar with `woman'."
+  "Most hackers, I take?
+   For a moment there I thought you had a patch that you could put on
+a woman, and it would make her come right to the topic at point
+without attempting any course of action that requires an advance
+course in divination.
+   There'd be quite a sensational market for that, you know."
+                                    -- Emilio Lopes and David Kastrup
--- a/etc/NEWS	Thu Oct 05 12:20:23 2006 +0000
+++ b/etc/NEWS	Sun Oct 15 02:54:13 2006 +0000
@@ -983,6 +983,12 @@
 horizontally or vertically, a saved window configuration is restored,
 or when the frame is resized.
 
++++
+*** The %c and %l constructs are now ignored in frame-title-format.
+Due to technical limitations in how Emacs interacts with windowing
+systems, these constructs often failed to render properly, and could
+even cause Emacs to crash.
+
 ** Cursor display changes:
 
 +++
--- a/etc/TUTORIAL.bg	Thu Oct 05 12:20:23 2006 +0000
+++ b/etc/TUTORIAL.bg	Sun Oct 15 02:54:13 2006 +0000
@@ -1,6 +1,6 @@
-Âúâåäåíèå â Emacs. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà.
+Âúâåäåíèåòî íà Åìàêñ. Óñëîâèÿòà çà êîïèðàíå ñà â êðàÿ íà òåêñòà.
 
-Êîìàíäèòå íà Emacs íàé-÷åñòî âêëþ÷âàò êëàâèøèòå CONTROL (ïîíÿêîãà
+Êîìàíäèòå íà Åìàêñ íàé-÷åñòî âêëþ÷âàò êëàâèøèòå CONTROL (ïîíÿêîãà
 îòáåëÿçâàí ñ CTRL èëè CTL) è META (ïîíÿêîãà îòáåëÿçâàí ñ EDIT èëè
 ALT).  Âìåñòî äà ñå èçïèñâàò ñ ïúëíî èìå âñåêè ïúò, íèå ùå èçïîëçâàìå
 ñëåäíèòå ñúêðàùåíèÿ:
@@ -14,7 +14,7 @@
 		êëàâèøà ESC è ñëåä òîâà âúâåäåòå <çíàê>.  Íèå
 		çàïèñâàìå <ESC>, çà äà îòáåëåæèì êëàâèøà ESC.
 
-Âàæíà áåëåæêà: â êðàÿ íà Emacs ñåñèÿòà âúâåäåòå äâàòà çíàêà C-x C-c.
+Âàæíà áåëåæêà: â êðàÿ íà Åìàêñ ñåñèÿòà âúâåäåòå äâàòà çíàêà C-x C-c.
 Çíàöèòå ">>" îòëÿâî âè äàâàò óêàçàíèå äà èçïúëíèòå êîìàíäà.  Íàïðèìåð:
 <<Blank lines inserted here by startup of help-with-tutorial>>
 >> Ñåãà âúâåäåòå C-v (Ïîêàæè ñëåäâàùèÿ åêðàí), çà äà ñå ïðèäâèæèòå êúì
@@ -92,7 +92,7 @@
 
 Âñåêè ðåä îò òåêñò çàâúðøâà ñúñ çíàê çà íîâ ðåä, êîéòî ñëóæè çà
 îòäåëÿíåòî íà ðåäà îò ñëåäâàùèÿ ðåä.  Ïîñëåäíèÿò ðåä âúâ âàøèÿ ôàéë
-òðÿáâà äà èìà çíàê çà íîâ ðåä â êðàÿ (íî Emacs íå èçèñêâà òàêúâ,
+òðÿáâà äà èìà çíàê çà íîâ ðåä â êðàÿ (íî Åìàêñ íå èçèñêâà òàêúâ,
 êîãàòî ïðî÷èòà ôàéëà).
 
 >> Îïèòàéòå C-b â íà÷àëîòî íà ðåä.  Òîâà òðÿáâà äà âè ïðèäâèæè â êðàÿ
@@ -108,7 +108,7 @@
 
 Êîãàòî ñå ïðèäâèæâàòå ñëåä ãîðíèÿ èëè äîëíèÿ êðàé íà åêðàíà, òåêñòúò
 îòâúä êðàÿ ñå èçìåñòâà êúì åêðàíà.  Òîâà ñå íàðè÷à "ñêðîëèðàíå".  Òî
-ïîçâîëÿâà íà Emacs äà ïðèäâèæâà êóðñîðà êúì çàäàäåíîòî ìÿñòî â òåêñòà,
+ïîçâîëÿâà íà Åìàêñ äà ïðèäâèæâà êóðñîðà êúì çàäàäåíîòî ìÿñòî â òåêñòà,
 áåç äà ãî èçêàðâà èçâúí åêðàíà.
 
 >> Îïèòàéòå ñå äà ïðèäâèæèòå êóðñîðà ñëåä äîëíèÿ êðàé íà åêðàíà ñ C-n
@@ -191,7 +191,7 @@
 Âèå ìîæåòå ñúùî äà ñå ïðèäâèæâàòå ñ êëàâèøèòå-ñòðåëêè, àêî âàøèÿò
 òåðìèíàë èìà òàêèâà.  Íèå ïðåïîðú÷âàìå äà íàó÷èòå C-b, C-f, C-n è C-p
 ïî òðè ïðè÷èíè.  Ïúðâî, òå ðàáîòÿò íà âñè÷êè âèäîâå òåðìèíàëè.  Âòîðî,
-âåäíúæ ñëåä êàòî äîáèåòå ïðàêòèêà â èçïîëçâàíåòî íà Emacs, ùå
+âåäíúæ ñëåä êàòî äîáèåòå ïðàêòèêà â èçïîëçâàíåòî íà Åìàêñ, ùå
 îòêðèåòå, ÷å âúâåæäàíåòî íà òåçè Control-çíàöè å ïî-áúðçî îò
 âúâåæäàíåòî íà êëàâèøèòå ñòðåëêè, çàùîòî íå òðÿáâà äà ïðåìåñòâàòå
 ðúêàòà ñè äàëå÷ îò îáëàñòòà íà êëàâèøèòå ñ áóêâè.  Òðåòî, âåäíúæ ñëåä
@@ -199,7 +199,7 @@
 ìîæåòå ñúùî òàêà ëåñíî äà íàó÷èòå ïî-íàïðåäíàëèòå êîìàíäè çà äâèæåíèå
 íà êóðñîðà.
 
-Ïîâå÷åòî Emacs êîìàíäè ïðèåìàò ÷èñëîâ àðãóìåíò; çà ïîâå÷åòî îò òÿõ òîé
+Ïîâå÷åòî Åìàêñ êîìàíäè ïðèåìàò ÷èñëîâ àðãóìåíò; çà ïîâå÷åòî îò òÿõ òîé
 ñëóæè êàòî áðîÿ÷ íà ïîâòîðåíèÿ.  Íà÷èíúò, ïî êîéòî äàâàòå ÷èñëîâ
 áðîÿ÷, å ñ âúâåæäàíå íà C-u, ïîñëåäâàíî îò âúâåæäàíå íà öèôðèòå, è
 âñè÷êî òîâà ïðåäè âúâåæäàíå íà ñàìàòà êîìàíäà.  Àêî èìàòå êëàâèø META
@@ -231,7 +231,7 @@
 
 Àêî èçïîëçâàòå ãðàôè÷åí èíòåðôåéñ, êàòî X11 èëè MS-Windows, áè
 òðÿáâàëî äà èìà òúíêà ïðàâîúãúëíà îáëàñò, íàðå÷åíà ïëúçãà÷ (scroll
-bar), â ëÿâàòà ñòðàíà íà ïðîçîðåöà íà Emacs.  Âèå ìîæåòå äà ñêðîëèðàòå
+bar), â ëÿâàòà ñòðàíà íà ïðîçîðåöà íà Åìàêñ.  Âèå ìîæåòå äà ñêðîëèðàòå
 òåêñòà, ùðàêàéêè ñ ìèøêàòà â ïëúçãà÷à.
 
 >> Îïèòàéòå äà íàòèñíåòå ñðåäíèÿ áóòîí íà âúðõà íà îñâåòåíàòà îáëàñò
@@ -243,10 +243,10 @@
    íàãîðå è íàäîëó, êàòî äâèæèòå ìèøêàòà.
 
 
-* ÊÎÃÀÒÎ EMACS Å ÁËÎÊÈÐÀË
+* ÊÎÃÀÒÎ ÅÌÀÊÑ Å ÁËÎÊÈÐÀË
 -------------------------
 
-Àêî Emacs ñïðå äà îòãîâàðÿ íà âàøèòå êîìàíäè, âèå ìîæåòå äà ãî ñïðåòå
+Àêî Åìàêñ ñïðå äà îòãîâàðÿ íà âàøèòå êîìàíäè, âèå ìîæåòå äà ãî ñïðåòå
 áåçîïàñíî, êàòî âúâåäåòå C-g.  Ìîæå äà èçïîëçâàòå C-g, çà äà ñïðåòå
 êîìàíäà, êîÿòî ñå èçïúëíÿâà òâúðäå äúëãî.
 
@@ -263,15 +263,15 @@
 * ÇÀÁÐÀÍÅÍÈ ÊÎÌÀÍÄÈ
 -------------------
 
-Íÿêîè êîìàíäè íà Emacs ñà "çàáðàíåíè", òàêà ÷å íà÷èíàåùèòå ïîòðåáèòåëè
+Íÿêîè êîìàíäè íà Åìàêñ ñà "çàáðàíåíè", òàêà ÷å íà÷èíàåùèòå ïîòðåáèòåëè
 äà íå ìîãàò äà ãè óïîòðåáÿò ïî ïîãðåøêà.
 
-Àêî âúâåäåòå íÿêîÿ îò çàáðàíåíèòå êîìàíäè, Emacs èçâåæäà ñúîáùåíèå,
+Àêî âúâåäåòå íÿêîÿ îò çàáðàíåíèòå êîìàíäè, Åìàêñ èçâåæäà ñúîáùåíèå,
 êàçâàéêè êàêâà å áèëà êîìàíäàòà è ïèòàéêè âè äàëè èñêàòå äà ïðîäúëæèòå
 íàïðåä è äà èçïúëíèòå êîìàíäàòà.
 
-Àêî íàèñòèíà èñêàòå äà èçïðîáâàòå êîìàíäàòà, âúâåäåòå <SPC> (êëàâèøà
-èíòåðâàë) â îòãîâîð íà âúïðîñà.  Îáèêíîâåíî àêî íå èñêàòå äà èçïúëíèòå
+Àêî íàèñòèíà èñêàòå äà èçïðîáâàòå êîìàíäàòà, âúâåäåòå êëàâèøà èíòåðâàë
+â îòãîâîð íà âúïðîñà.  Îáèêíîâåíî àêî íå èñêàòå äà èçïúëíèòå
 çàáðàíåíàòà êîìàíäà, îòãîâàðÿòå íà âúïðîñà ñ "n".
 
 >> Âúâåäåòå C-x C-l (êîÿòî å çàáðàíåíà êîìàíäà), è ñëåä òîâà âúâåäåòå
@@ -281,7 +281,7 @@
 * ÏÐÎÇÎÐÖÈ
 ----------
 
-Emacs ìîæå äà óïðàâëÿâà íÿêîëêî ïðîçîðåöà, âñåêè èçâåæäàéêè ñâîé
+Åìàêñ ìîæå äà óïðàâëÿâà íÿêîëêî ïðîçîðåöà, âñåêè èçâåæäàéêè ñâîé
 ñîáñòâåí òåêñò.  Íèå ùå îáÿñíèì ïî-êúñíî êàê äà èçïîëçâàòå íÿêîëêî
 ïðîçîðåöà.  Òî÷íî ñåãà íèå èñêàìå äà îáÿñíèì êàê äà ñå îòúðâåòå îò
 äîïúëíèòåëíè ïðîçîðöè è äà ñå âúðíåòå êúì îñíîâíîòî ðåäàêòèðàíå ñ åäèí
@@ -311,13 +311,13 @@
 ----------------------
 
 Àêî èñêàòå äà âìúêíåòå òåêñò, ïðîñòî ãî âúâåäåòå.  Çíàöèòå, êîèòî
-ìîãàò äà ñå âèæäàò, êàòî À, 7, * è ò.í., ñå âúçïðèåìàò îò Emacs êàòî
+ìîãàò äà ñå âèæäàò, êàòî À, 7, * è ò.í., ñå âúçïðèåìàò îò Åìàêñ êàòî
 òåêñò è ñå âìúêâàò âåäíàãà.  Âúâåäåòå <Return> (êëàâèøúò çà âðúùàíå â
 íà÷àëîòî íà ðåäà), çà äà âìúêíåòå çíàê çà íîâ ðåä.
 
 Ìîæå äà èçòðèåòå ïîñëåäíèÿ çíàê, êîéòî ñòå âúâåëè, ñ âúâåæäàíå íà
 <Delback>.  <Delback> å êëàâèø îò êëàâèàòóðàòà -- ñúùèÿò, êîéòî
-îáèêíîâåíî èçïîëçâàòå èçâúí Emacs, çà äà èçòðèåòå ïîñëåäíèÿ âúâåäåí îò
+îáèêíîâåíî èçïîëçâàòå èçâúí Åìàêñ, çà äà èçòðèåòå ïîñëåäíèÿ âúâåäåí îò
 âàñ çíàê.  Îáèêíîâåíî å ãîëÿì êëàâèø, íà íÿêîëêî ðåäà ðàçñòîÿíèå îò
 êëàâèøà <Return>, è îáèêíîâåíî å îòáåëÿçàí ñ "Delete", "Del" èëè
 "Backspace".
@@ -357,24 +357,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> íå å
@@ -384,12 +384,12 @@
 
 Ìîæåòå ñúùî äà ïðåìàõíåòå âñÿêà ÷àñò îò áóôåðà ñ åäèí óíèâåðñàëåí
 íà÷èí.  Ïðèäâèæåòå ñå äî åäèíèÿ êðàé íà ÷àñòòà è âúâåäåòå C-@ èëè
-C-<SPC> (êîåòî è äà å îò äâåòå).  (<SPC> å êëàâèøúò èíòåðâàë.)
-Ïðèäâèæåòå ñå äî äðóãèÿ êðàé íà ÷àñòòà è âúâåäåòå C-w.  Òîâà ùå èçðåæå
-öåëèÿ òåêñò ìåæäó òåçè äâà êðàÿ.
+C-èíòåðâàë (êîåòî è äà å îò äâåòå).  Ïðèäâèæåòå ñå äî äðóãèÿ êðàé íà
+÷àñòòà è âúâåäåòå C-w.  Òîâà ùå èçðåæå öåëèÿ òåêñò ìåæäó òåçè äâà
+êðàÿ.
 
 >> Ïðèäâèæåòå êóðñîðà äî çíàêà "Ì" â íà÷àëîòî íà ïðåäèøíèÿ àáçàö.
->> Âúâåäåòå C-<SPC>.  Emacs òðÿáâà äà èçâåäå ñúîáùåíèå "Mark set" â
+>> Âúâåäåòå C-èíòåðâàë.  Åìàêñ òðÿáâà äà èçâåäå ñúîáùåíèå "Mark set" â
    äîëíèÿ êðàé íà åêðàíà.
 >> Ïðèäâèæåòå êóðñîðà äî áóêâàòà "ð" â "êðàé" íà âòîðèÿ ðåä îò àáçàöà.
 >> Âúâåäåòå C-w.  Òîâà ùå èçðåæå òåêñòà, çàïî÷âàù îò "Ì" è çàâúðøâàù
@@ -419,9 +419,9 @@
 Âðúùàíåòî îáðàòíî íà òåêñò ñå íàðè÷à "âìúêâàíå".  (Ìèñëåòå çà íåãî
 êàòî çà èçâàæäàíå îáðàòíî, èëè äðúïâàíå îáðàòíî, íà òåêñò, êîéòî å áèë
 èçðÿçàí.)  Ìîæåòå äà âìúêâàòå èçðÿçàíèÿ òåêñò èëè íà ñúùîòî ìÿñòî,
-îòêúäåòî å áèë ïðåìàõíàò, èëè íà äðóãî ìÿñòî â ðåäàêòèðàíèÿ òåêñò,
-äàæå è â ðàçëè÷åí ôàéë.  Ìîæåòå äà âìúêâàòå åäèí è ñúù òåêñò íÿêîëêî
-ïúòè; òîâà ïðàâè íÿêîëêî êîïèÿ îò íåãî.
+îòêúäåòî å áèë ïðåìàõíàò, èëè íà äðóãî ìÿñòî â áóôåðà, äàæå è â
+ðàçëè÷åí ôàéë.  Ìîæåòå äà âìúêâàòå åäèí è ñúù òåêñò íÿêîëêî ïúòè; òîâà
+ïðàâè íÿêîëêî êîïèÿ îò íåãî.
 
 Êîìàíäàòà çà âìúêâàíå å C-y.  Òÿ âìúêâà íàíîâî ïîñëåäíèÿ èçðÿçàí òåêñò
 â òåêóùîòî ìÿñòî íà êóðñîðà.
@@ -500,25 +500,25 @@
 ---------
 
 Çà äà íàïðàâèòå òåêñòà, êîéòî ðåäàêòèðàòå, ïîñòîÿíåí, òðÿáâà äà ãî
-ñëîæèòå âúâ ôàéë.   ïðîòèâåí ñëó÷àé òîé ùå èç÷åçíå, êîãàòî Emacs
+ñëîæèòå âúâ ôàéë.   ïðîòèâåí ñëó÷àé òîé ùå èç÷åçíå, êîãàòî Åìàêñ
 ïðèêëþ÷è.  Çà äà ñëîæèòå âàøèÿ òåêñò âúâ ôàéë, òðÿáâà äà "íàìåðèòå"
 ôàéëà ïðåäè äà âúâåæäàòå òåêñò.  (Òîâà ñúùî ñå íàðè÷à "ïîñåùàâàíå" íà
 ôàéëà.)
 
-Íàìèðàíå íà ôàéë îçíà÷àâà, ÷å âèæäàòå ñúäúðæàíèåòî ìó â Emacs.  Â
+Íàìèðàíå íà ôàéë îçíà÷àâà, ÷å âèæäàòå ñúäúðæàíèåòî ìó â Åìàêñ.  Â
 ìíîãî ñëó÷àè òîâà å êàòî äà ðåäàêòèðàòå ñàìèÿ ôàéë.  Îáà÷å ïðîìåíèòå,
-êîèòî ïðàâèòå, èçïîëçâàéêè Emacs, íå îñòàâàò ïîñòîÿííè, äîêàòî íå
+êîèòî ïðàâèòå, èçïîëçâàéêè Åìàêñ, íå îñòàâàò ïîñòîÿííè, äîêàòî íå
 "çàïèøåòå" ôàéëà.  Òîâà å òàêà, çà äà ñå ïðåäîòâðàòè îñòàâÿíåòî íà
 ïîëóïðîìåíåí ôàéë â ñèñòåìàòà, êîãàòî íå èñêàòå òîâà.  Äîðè êîãàòî
-çàïèñâàòå, Emacs îñòàâÿ íà÷àëíèÿ ôàéë ïîä ïðîìåíåíî èìå, â ñëó÷àé, ÷å
+çàïèñâàòå, Åìàêñ îñòàâÿ íà÷àëíèÿ ôàéë ïîä ïðîìåíåíî èìå, â ñëó÷àé, ÷å
 ïî-êúñíî ðåøèòå, ÷å âàøèòå ïðîìåíè ñà áèëè ãðåøêà.
 
 Àêî ïîãëåäíåòå â äúíîòî íà åêðàíà, ùå âèäèòå ðåä, êîéòî çàïî÷âà è
-çàâúðøâà ñ òèðåòà è çàïî÷âà ñ "-R:-- TUTORIAL.bg" èëè íåùî ïîäîáíî.
+çàâúðøâà ñ òèðåòà è çàïî÷âà ñ "-b:-- TUTORIAL.bg" èëè íåùî ïîäîáíî.
 Òàçè ÷àñò îò åêðàíà ïîêàçâà èìåòî íà ôàéëà, êîéòî ñòå ïîñåòèëè.  Òî÷íî
 ñåãà âèå ñòå ïîñåòèëè ôàéë, íàðå÷åí "TUTORIAL.bg", êîéòî å âàøåòî
-ëè÷íî êîïèå-÷åðíîâà íà Emacs âúâåäåíèåòî.  Êîãàòî íàìåðèòå ôàéë â
-Emacs, èìåòî íà òîçè ôàéë ùå ñå ïîÿâè íà ñúùîòî ìÿñòî.
+ëè÷íî êîïèå-÷åðíîâà íà Åìàêñ âúâåäåíèåòî.  Êîãàòî íàìåðèòå ôàéë â
+Åìàêñ, èìåòî íà òîçè ôàéë ùå ñå ïîÿâè íà ñúùîòî ìÿñòî.
 
 Îñîáåíîñò íà êîìàíäàòà çà íàìèðàíå íà ôàéë å, ÷å òðÿáâà äà êàæåòå
 èìåòî íà ôàéëà, êîéòî èñêàòå.  Íèå ãî íàðè÷àìå "÷åòåíå íà àðãóìåíò îò
@@ -527,10 +527,10 @@
 
 	C-x C-f   Íàìèðàíå íà ôàéë
 
-Emacs âè ïîäêàíÿ äà âúâåäåòå èìåòî íà ôàéëà.  Èìåòî íà ôàéëà, êîåòî
+Åìàêñ âè ïîäêàíÿ äà âúâåäåòå èìåòî íà ôàéëà.  Èìåòî íà ôàéëà, êîåòî
 íàïèøåòå, ñå ïîÿâÿâà â äúíîòî íà åêðàíà.  Ðåäúò â äúíîòî íà åêðàíà ñå
 íàðè÷à ìèíèáóôåð, êîãàòî ñå èçïîëçâà çà òîçè âèä âõîä.  Ìîæåòå äà
-èçïîëçâàòå îáèêíîâåíèòå êîìàíäè çà ðåäàêòèðàíå íà Emacs, çà äà
+èçïîëçâàòå îáèêíîâåíèòå êîìàíäè çà ðåäàêòèðàíå íà Åìàêñ, çà äà
 ðåäàêòèðàòå èìåòî íà ôàéëà.
 
 Êîãàòî âúâåæäàòå èìåòî íà ôàéëà (èëè êàêúâòî è äà å âõîä â
@@ -551,12 +551,12 @@
 
 	C-x C-s   Çàïàçâàíå íà ôàéëà
 
-Òîâà êîïèðà òåêñòà îò Emacs âúâ ôàéëà.  Ïúðâèÿ ïúò, êîãàòî òîâà ñå
-íàïðàâè, Emacs ïðåèìåíóâà íà÷àëíèÿ ôàéë ñ íîâî èìå, òàêà ÷å òîé äà íå
+Òîâà êîïèðà òåêñòà îò Åìàêñ âúâ ôàéëà.  Ïúðâèÿ ïúò, êîãàòî òîâà ñå
+íàïðàâè, Åìàêñ ïðåèìåíóâà íà÷àëíèÿ ôàéë ñ íîâî èìå, òàêà ÷å òîé äà íå
 ñå èçãóáè.  Íîâîòî èìå ñå ïîñòðîÿâà ñ äîáàâÿíå íà "~" â êðàÿ íà èìåòî
 íà íà÷àëíèÿ ôàéë.
 
-Êîãàòî çàïàçâàíåòî å ñâúðøèëî, Emacs èçâåæäà èìåòî íà ôàéëà, êîéòî å
+Êîãàòî çàïàçâàíåòî å ñâúðøèëî, Åìàêñ èçâåæäà èìåòî íà ôàéëà, êîéòî å
 áèë çàïèñàí.  Òðÿáâà äà çàïèñâàòå äîñòàòú÷íî ÷åñòî, òàêà ÷å äà íå
 èçãóáèòå ìíîãî ðàáîòà, àêî ñèñòåìàòà ñå ñðèíå ïî íÿêàêâà ïðè÷èíà.
 
@@ -564,19 +564,19 @@
    Òîâà òðÿáâà äà èçâåäå "Wrote ...TUTORIAL.bg" â äúíîòî íà åêðàíà.
 
 ÇÀÁÅËÅÆÊÀ: Íà íÿêîè ñèñòåìè âúâåæäàíåòî íà C-x C-s ùå çàìðúçè åêðàíà è
-âèå íÿìà äà âèæäàòå ïîâå÷å èçõîä îò Emacs.  Òîâà ïîêàçâà, ÷å åäíà
+âèå íÿìà äà âèæäàòå ïîâå÷å èçõîä îò Åìàêñ.  Òîâà ïîêàçâà, ÷å åäíà
 "ñïîñîáíîñò" íà îïåðàöèîííàòà ñèñòåìà, íàðè÷àíà "óïðàâëåíèå íà ïîòîêà"
-(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà êúì Emacs.  Çà äà
+(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà êúì Åìàêñ.  Çà äà
 ðàçìðàçèòå åêðàíà, âúâåäåòå C-q.  Òîãàâà âèæòå ñåêöèÿòà "Ñïîíòàííî
 âêëþ÷âàíå íà ïîñòúïêîâî òúðñåíå" (Spontaneous Entry to Incremental
-Search) â ðúêîâîäñòâîòî íà Emacs çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè
+Search) â ðúêîâîäñòâîòî íà Åìàêñ çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè
 "ñïîñîáíîñò".
 
 Ìîæå äà íàìåðèòå ñúùåñòâóâàù ôàéë, äà ãî ðàçãëåäàòå è äà ãî
 ðåäàêòèðàòå.  Ìîæåòå ñúùî äà íàìåðèòå ôàéë, êîéòî íå ñúùåñòâóâà.  Òîâà
-å íà÷èíúò çà ñúçäàâàíå íà íîâè ôàéëîâå â Emacs: íàìèðàòå ôàéëà, êîéòî
+å íà÷èíúò çà ñúçäàâàíå íà íîâè ôàéëîâå â Åìàêñ: íàìèðàòå ôàéëà, êîéòî
 ùå áúäå â íà÷àëîòî ïðàçåí, è òîãàâà çàïî÷âàòå âìúêâàíåòî íà òåêñòà çà
-ôàéëà.  Êîãàòî ãîâîðèòå çà "çàïèñâàíå" íà ôàéë, Emacs âñúùíîñò ùå
+ôàéëà.  Êîãàòî ãîâîðèòå çà "çàïèñâàíå" íà ôàéë, Åìàêñ âñúùíîñò ùå
 ñúçäàäå ôàéëà ñ òåêñòà, êîéòî ñòå âúâåëè.  Îòòàì íàòàòúê ìîæå äà
 ñ÷èòàòå, ÷å ðåäàêòèðàòå âå÷å ñúùåñòâóâàù ôàéë.
 
@@ -584,9 +584,9 @@
 * ÁÓÔÅÐÈ
 --------
 
-Àêî íàìåðèòå âòîðè ôàéë ñ C-x C-f, ïúðâèÿò ôàéë îñòàâà â Emacs.
+Àêî íàìåðèòå âòîðè ôàéë ñ C-x C-f, ïúðâèÿò ôàéë îñòàâà â Åìàêñ.
 Ìîæåòå äà ïðåâêëþ÷èòå îáðàòíî êúì íåãî, êàòî ãî íàìåðèòå ïàê ñ C-x
-C-f.  Ïî òîçè íà÷èí ìîæå äà ïîëó÷èòå äîñòà íà áðîé ôàéëîâå â Emacs.
+C-f.  Ïî òîçè íà÷èí ìîæå äà ïîëó÷èòå äîñòà íà áðîé ôàéëîâå â Åìàêñ.
 
 >> Ñúçäàéòå ôàéë ñ èìå "foo", âúâåæäàéêè C-x C-f foo <Return>.
    Âìúêíåòå ìàëêî òåêñò, ðåäàêòèðàéòå ãî è çàïàçåòå "foo" ñ âúâåæäàíå
@@ -594,16 +594,16 @@
    Íàêðàÿ âúâåäåòå C-x C-f TUTORIAL.bg <Return>, çà äà ñå âúðíåòå
    îáðàòíî âúâ âúâåäåíèåòî.
 
-Emacs çàïàçâà òåêñòà íà âñåêè ôàéë â îáåêò, íàðè÷àí "áóôåð".
-Íàìèðàíåòî íà ôàéë ïðàâè íîâ áóôåð â Emacs.  Çà äà âèäèòå ñïèñúê íà
-áóôåðèòå, êîèòî â ìîìåíòà ñúùåñòâóâàò âúâ âàøèÿ Emacs, âúâåäåòå
+Åìàêñ çàïàçâà òåêñòà íà âñåêè ôàéë â îáåêò, íàðè÷àí "áóôåð".
+Íàìèðàíåòî íà ôàéë ïðàâè íîâ áóôåð â Åìàêñ.  Çà äà âèäèòå ñïèñúê íà
+áóôåðèòå, êîèòî â ìîìåíòà ñúùåñòâóâàò âúâ âàøèÿ Åìàêñ, âúâåäåòå
 
 	C-x C-b   Ïîêàçâàíå íà áóôåðèòå
 
 >> Îïèòàéòå C-x C-b ñåãà.
 
 Âèæòå êàê âñåêè áóôåð èìà èìå, à ïîíÿêîãà è èìå íà ôàéë çà ôàéëà,
-÷èåòî ñúäúðæàíèå äúðæè.  ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â Emacs ïðîçîðåö,
+÷èåòî ñúäúðæàíèå äúðæè.  ÂÑÅÊÈ òåêñò, êîéòî âèæäàòå â Åìàêñ ïðîçîðåö,
 å âèíàãè ÷àñò îò íÿêàêúâ áóôåð.
 
 >> Âúâåäåòå C-x 1, çà äà ìàõíåòå ñïèñúêà ñ áóôåðèòå.
@@ -625,13 +625,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>, çà äà
@@ -639,7 +639,7 @@
 
 Àêî íàïðàâèòå ïðîìåíè â òåêñòà íà åäèí ôàéë è òîãàâà íàìåðèòå äðóã
 ôàéë, òîâà íÿìà äà çàïèøå ïúðâèÿ ôàéë.  Íåãîâèòå ïðîìåíè îñòàâàò âúòðå
-â Emacs, â áóôåðà íà ôàéëà.  Ñúçäàâàíåòî èëè ðåäàêòèðàíåòî íà áóôåðà
+â Åìàêñ, â áóôåðà íà ôàéëà.  Ñúçäàâàíåòî èëè ðåäàêòèðàíåòî íà áóôåðà
 íà âòîðèÿ ôàéë íÿìà åôåêò âúðõó áóôåðà íà ïúðâèÿ ôàéë.  Òîâà å ìíîãî
 ïîëåçíî, íî ñúùî îçíà÷àâà, ÷å ñå íóæäàåòå îò óäîáåí íà÷èí äà çàïàçèòå
 áóôåðà íà ïúðâèÿ ôàéë.  Ùå å íåóäîáíî äà ïðåâêëþ÷èòå îáðàòíî ñ C-x
@@ -658,8 +658,8 @@
 * ÐÀÇØÈÐßÂÀÍÅ ÍÀ ÍÀÁÎÐÀ ÊÎÌÀÍÄÈ
 -------------------------------
 
-Èìà ìíîãî, ìíîãî ïîâå÷å êîìàíäè íà Emacs, îòêîëêîòî ìîãàò äà ñå ñëîæàò
-íà âñè÷êè êîíòðîëíè è ìåòà çíàöè.  Emacs çàîáèêàëÿ òîâà ñ X (eXtended)
+Èìà ìíîãî, ìíîãî ïîâå÷å êîìàíäè íà Åìàêñ, îòêîëêîòî ìîãàò äà ñå ñëîæàò
+íà âñè÷êè êîíòðîëíè è ìåòà çíàöè.  Åìàêñ çàîáèêàëÿ òîâà ñ X (eXtended)
 êîìàíäàòà.  Òîâà ñòàâà ïî äâà íà÷èíà:
 
 	C-x	Çíàêîâî ðàçøèðÿâàíå.  Ïîñëåäâàíî îò åäèí çíàê.
@@ -667,49 +667,49 @@
 		èìå.
 
 Òåçè êîìàíäè ñà îáùî âçåòî ïîëåçíè, íî ïî-ìàëêî, îòêîëêîòî êîìàíäèòå,
-êîèòî äîñåãà ñòå íàó÷èëè.  Âå÷å âèäÿõòå íÿêîëêî îò òÿõ: íàïðèìåð
-êîìàíäèòå âúðõó ôàéëîâå C-x C-f çà íàìèðàíå (Find) è C-x C-s çà
-çàïàçâàíå (Save).  Äðóã ïðèìåð å êîìàíäàòà çà êðàé íà Emacs ñåñèÿòà --
-òîâà å êîìàíäàòà C-x C-c.  (Íå ñå áåçïîêîéòå, ÷å ìîæå äà èçãóáèòå
-âñè÷êè ïðîìåíè, êîèòî ñòå íàïðàâèëè; C-x C-c ïðåäëàãà äà çàïàçè âñåêè
-ïðîìåíåí ôàéë, ïðåäè äà ïðåìàõíå Emacs.)
+êîèòî äîñåãà ñòå íàó÷èëè.  Âå÷å âèäÿõòå äâå îò òÿõ: êîìàíäèòå âúðõó
+ôàéëîâå C-x C-f çà íàìèðàíå (Find) è C-x C-s çà çàïàçâàíå (Save).
+Äðóã ïðèìåð å êîìàíäàòà çà êðàé íà Åìàêñ ñåñèÿòà -- òîâà å êîìàíäàòà
+C-x C-c.  (Íå ñå áåçïîêîéòå, ÷å ìîæå äà èçãóáèòå âñè÷êè ïðîìåíè, êîèòî
+ñòå íàïðàâèëè; C-x C-c ïðåäëàãà äà çàïàçè âñåêè ïðîìåíåí ôàéë, ïðåäè
+äà ïðåìàõíå Åìàêñ.)
 
-C-z å êîìàíäàòà çà èçëèçàíå îò Emacs *âðåìåííî* -- òàêà ÷å äà ìîæåòå
-äà ñå âúðíåòå êúì ñúùàòà Emacs ñåñèÿ ïî-êúñíî.
+C-z å êîìàíäàòà çà èçëèçàíå îò Åìàêñ *âðåìåííî* -- òàêà ÷å äà ìîæåòå
+äà ñå âúðíåòå êúì ñúùàòà Åìàêñ ñåñèÿ ïî-êúñíî.
 
-Íà ñèñòåìè, êîèòî ïîçâîëÿâàò òîâà, C-z "èçîñòàâÿ" (suspend) Emacs,
-ò.å. âðúùà êúì îáâèâêàòà, íî íå ðàçðóøàâà Emacs.   ïîâå÷åòî îáâèâêè
-ìîæåòå äà ïðîäúëæèòå Emacs ñåñèÿòà ñ êîìàíäàòà "fg" èëè ñ "%emacs".
+Íà ñèñòåìè, êîèòî ïîçâîëÿâàò òîâà, C-z "èçîñòàâÿ" (suspend) Åìàêñ,
+ò.å. âðúùà êúì îáâèâêàòà, íî íå ðàçðóøàâà Åìàêñ.   ïîâå÷åòî îáâèâêè
+ìîæåòå äà ïðîäúëæèòå Åìàêñ ñåñèÿòà ñ êîìàíäàòà "fg" èëè ñ "%emacs".
 
 Íà ñèñòåìè, êîèòî íå ïîçâîëÿâàò èçîñòàâÿíå, C-z ñúçäàâà íîâà
-ïîäîáâèâêà, êîÿòî âúðâè ïîä Emacs, çà äà âè äàäå øàíñ äà ñòàðòèðàòå
-äðóãè ïðîãðàìè è äà ñå âúðíåòå êúì Emacs ñëåä òîâà; òîâà íå å èñòèíñêî
-"èçëèçàíå" îò Emacs.   òîçè ñëó÷àé êîìàíäàòà íà îáâèâêàòà "exit" å
-îáèêíîâåíèÿò íà÷èí äà ñå âúðíåòå îáðàòíî êúì Emacs îò ïîäîáâèâêàòà.
+ïîäîáâèâêà, êîÿòî âúðâè ïîä Åìàêñ, çà äà âè äàäå øàíñ äà ñòàðòèðàòå
+äðóãè ïðîãðàìè è äà ñå âúðíåòå êúì Åìàêñ ñëåä òîâà; òîâà íå å èñòèíñêî
+"èçëèçàíå" îò Åìàêñ.   òîçè ñëó÷àé êîìàíäàòà íà îáâèâêàòà "exit" å
+îáèêíîâåíèÿò íà÷èí äà ñå âúðíåòå îáðàòíî êúì Åìàêñ îò ïîäîáâèâêàòà.
 
 Ìîìåíòúò äà èçïîëçâàòå C-x C-c å, êîãàòî èñêàòå äà èçëåçåòå îò
-ñèñòåìàòà.  Òîâà å è ïðàâèëíàòà êîìàíäà çà èçëèçàíå, êîãàòî Emacs å
+ñèñòåìàòà.  Òîâà å è ïðàâèëíàòà êîìàíäà çà èçëèçàíå, êîãàòî Åìàêñ å
 èçâèêàí îò ïîùåíñêà ïðîãðàìà èëè äðóãè ñòðàíè÷íè ïðîãðàìè, òúé êàòî òå
-ìîæå è äà íå çíàÿò êàê äà ñå ñïðàâÿò ñ èçîñòàâÿíåòî íà Emacs.  Ïðè
+ìîæå è äà íå çíàÿò êàê äà ñå ñïðàâÿò ñ èçîñòàâÿíåòî íà Åìàêñ.  Ïðè
 îáèêíîâåíè îáñòîÿòåëñòâà, îáà÷å, àêî íå ñòå òðúãíàëè äà èçëèçàòå îò
-ñèñòåìàòà, ïî-äîáðå å äà èçîñòàâèòå Emacs ñ C-z, âìåñòî äà èçëèçàòå îò
-Emacs.
+ñèñòåìàòà, ïî-äîáðå å äà èçîñòàâèòå Åìàêñ ñ C-z, âìåñòî äà èçëèçàòå îò
+Åìàêñ.
 
 Èìà ìíîãî êîìàíäè C-x.  Åòî ñïèñúê íà òåçè, êîèòî ñòå íàó÷èëè:
 
-	C-x C-f		Íàìèðàíå íà ôàéë
-	C-x C-s		Çàïàçâàíå íà ôàéë
-	C-x C-b		Ñïèñúê íà áóôåðèòå
-	C-x C-c		Èçëèçàíå îò Emacs
-	C-x 1		Èçòðèâàíå íà âñè÷êè ïðîçîðöè, îñâåí åäèí
-	C-x u		Îòìÿíà
+	C-x C-f		Íàìèðàíå íà ôàéë.
+	C-x C-s		Çàïàçâàíå íà ôàéë.
+	C-x C-b		Ñïèñúê íà áóôåðèòå.
+	C-x C-c		Èçëèçàíå îò Åìàêñ.
+	C-x 1		Èçòðèâàíå íà âñè÷êè ïðîçîðöè îñâåí åäèí.
+	C-x u		Îòìÿíà.
 
 Èìåíóâàíèòå ðàçøèðåíè êîìàíäè ñà êîìàíäè, êîèòî ñå èçïîëçâàò äàæå îùå
 ïî-ðÿäêî, èëè êîìàíäè, êîèòî ñå èçïîëçâàò ñàìî â îïðåäåëåíè ðåæèìè.
 Ïðèìåð å êîìàíäàòà replace-string, êîÿòî çàìåíÿ ãëîáàëíî åäèí íèç ñ
-äðóã.  Êîãàòî âúâåäåòå M-x, Emacs âè ïîäñêàçâà â äúíîòî íà åêðàíà ñ
+äðóã.  Êîãàòî âúâåäåòå M-x, Åìàêñ âè ïîäñêàçâà â äúíîòî íà åêðàíà ñ
 M-x è âèå òðÿáâà äà âúâåäåòå èìåòî íà êîìàíäàòà, â òîçè ñëó÷àé
-"replace-string".  Ïðîñòî âúâåäåòå "repl s<TAB>" è Emacs ùå çàâúðøè
+"replace-string".  Ïðîñòî âúâåäåòå "repl s<TAB>" è Åìàêñ ùå çàâúðøè
 èìåòî.  (<TAB> å êëàâèøúò Tab, îáèêíîâåíî íàìèðàù ñå íàä êëàâèøà
 CapsLock èëè êëàâèøà Shift áëèçî äî ëåâèÿ êðàé íà êëàâèàòóðàòà.)
 Çàâúðøåòå èìåòî íà êîìàíäàòà ñ <Return>.
@@ -733,11 +733,11 @@
 
 Êîãàòî ñòå íàïðàâèëè ïðîìåíè âúâ ôàéë, íî îùå íå ñòå ãî çàïàçèëè, òå
 ìîãàò äà áúäàò çàãóáåíè, àêî êîìïþòúðúò âíåçàïíî ñå èçêëþ÷è.  Çà äà âè
-ïðåäïàçè îò òàêèâà ñèòóàöèè, Emacs ïåðèîäè÷íî çàïàçâà "àâòîìàòè÷íî
+ïðåäïàçè îò òàêèâà ñèòóàöèè, Åìàêñ ïåðèîäè÷íî çàïàçâà "àâòîìàòè÷íî
 çàïàçâàí" ôàéë çà âñåêè ôàéë, êîéòî ðåäàêòèðàòå.  Èìåòî íà àâòîìàòè÷íî
 çàïàçâàíèÿ ôàéë èìà # â íà÷àëîòî è â êðàÿ; íàïðèìåð, àêî âàøèÿò ôàéë å
 ñ èìå "hello.c", èìåòî íà íåãîâèÿ àâòîìàòè÷íî çàïàçâàí ôàéë ùå áúäå
-"#hello.c#".  Êîãàòî çàïàçâàòå ôàéë ïî îáèêíîâåíèÿ íà÷èí, Emacs
+"#hello.c#".  Êîãàòî çàïàçâàòå ôàéë ïî îáèêíîâåíèÿ íà÷èí, Åìàêñ
 èçòðèâà íåãîâèÿ àâòîìàòè÷íî çàïèñâàí ôàéë.
 
 Àêî êîìïþòúðúò çàâèñíå, ìîæå äà âúçñòàíîâèòå âàøàòà àâòîìàòè÷íî
@@ -751,7 +751,7 @@
 * ÅÕÎ ÎÁËÀÑÒÒÀ
 --------------
 
-Àêî Emacs âèäè, ÷å âúâåæäàòå ìíîãîçíàêîâè êîìàíäè áàâíî, ùå âè ãè
+Àêî Åìàêñ âèäè, ÷å âúâåæäàòå ìíîãîçíàêîâè êîìàíäè áàâíî, ùå âè ãè
 ïîêàæå â äúíîòî íà åêðàíà, â îáëàñò, íàðè÷àíà "åõî îáëàñò".  Åõî
 îáëàñòòà îáõâàùà ïîñëåäíèÿ ðåä îò åêðàíà.
 
@@ -762,18 +762,18 @@
 Ðåäúò òî÷íî íàä åõî îáëàñòòà ñå íàðè÷à "ðåä íà ðåæèìà" (mode line).
 Òîé ïîêàçâà íåùî êàòî:
 
--D:**  TUTORIAL.bg       63% L749    (Fundamental)---------------------
+-b:**  TUTORIAL.bg          (Fundamental)--L670--58%----------------
 
-Òîçè ðåä äàâà ïîëåçíà èíôîðìàöèÿ çà ñúñòîÿíèåòî íà Emacs è òåêñòà,
+Òîçè ðåä äàâà ïîëåçíà èíôîðìàöèÿ çà ñúñòîÿíèåòî íà Åìàêñ è òåêñòà,
 êîéòî ðåäàêòèðàòå.
 
 Âå÷å çíàåòå êàêâî îçíà÷àâà èìåòî íà ôàéëà -- òîâà å ôàéëúò, êîéòî ñòå
-íàìåðèëè.  NN% ïîêàçâà âàøàòà òåêóùà ïîçèöèÿ â òåêñòà; òîâà îçíà÷àâà,
-÷å NN ïðîöåíòà îò òåêñòà å íàä âúðõà íà åêðàíà.  Àêî íà÷àëîòî íà ôàéëà
-å íà åêðàíà, ùå ñå ïîêàçâà --Top-- (âðúõ) âìåñòî --00%--.  Àêî êðàÿò
-íà ôàéëà å íà åêðàíà, ùå ñå ïîêàçâà --Bot-- (äúíî).  Àêî ãëåäàòå
-òåêñò, êîéòî å òîëêîâà ìàëúê, ÷å ñå ïîêàçâà èçöÿëî íà åêðàíà, ðåäúò íà
-ðåæèìà ùå èçâåäå --All--.
+íàìåðèëè.  -NN%-- ïîêàçâà âàøàòà òåêóùà ïîçèöèÿ â òåêñòà; òîâà
+îçíà÷àâà, ÷å NN ïðîöåíòà îò òåêñòà å íàä âúðõà íà åêðàíà.  Àêî
+íà÷àëîòî íà ôàéëà å íà åêðàíà, ùå ñå ïîêàçâà --Top-- (âðúõ) âìåñòî
+--00%--.  Àêî êðàÿ íà ôàéëà å íà åêðàíà, ùå ñå ïîêàçâà --Bot-- (äúíî).
+Àêî ãëåäàòå òåêñò, êîéòî å òîëêîâà ìàëúê, ÷å ñå ïîêàçâà èçöÿëî íà
+åêðàíà, ðåäúò íà ðåæèìà ùå èçâåäå --All--.
 
 Çíàêúò L è öèôðèòå ïîêàçâàò ìÿñòîòî ïî äðóã íà÷èí: òîâà å íîìåðúò íà
 òåêóùèÿ ðåä íà òî÷êàòà.
@@ -787,7 +787,7 @@
 Fundamental (Îñíîâåí), êîéòî èçïîëçâàòå â ìîìåíòà.  Òîâà å ïðèìåð çà
 "ãëàâåí ðåæèì" (major mode).
 
-Emacs èìà ìíîãî ãëàâíè ðåæèìè.  Íÿêîè îò òÿõ ñà ïðåäâèäåíè çà
+Åìàêñ èìà ìíîãî ãëàâíè ðåæèìè.  Íÿêîè îò òÿõ ñà ïðåäâèäåíè çà
 ðåäàêòèðàíå íà ðàçëè÷íè åçèöè è/èëè âèäîâå òåêñò, êàòî íàïðèìåð ðåæèì
 Ëèñï, ðåæèì Òåêñò è äðóãè.  Âúâ âñåêè åäèí ìîìåíò îò âðåìå òî÷íî åäèí
 ãëàâåí ðåæèì å àêòèâåí è íåãîâîòî èìå ìîæå âèíàãè äà áúäå íàìåðåíî â
@@ -806,7 +806,7 @@
 
 >> Âúâåäåòå M-x text mode<Return>.
 
-Íå ñå áåçïîêîéòå, íèêîÿ îò Emacs êîìàíäèòå, êîèòî ñòå íàó÷èëè, íÿìà äà
+Íå ñå áåçïîêîéòå, íèêîÿ îò Åìàêñ êîìàíäèòå, êîèòî ñòå íàó÷èëè, íÿìà äà
 ñå ïðîìåíè ïî íÿêàêúâ ñúùåñòâåí íà÷èí.  Íî ìîæå äà çàáåëåæèòå, ÷å M-f
 è M-b ñåãà âúçïðèåìàò àïîñòðîôèòå (') êàòî ÷àñò îò äóìèòå.  Ïðåäè
 òîâà, â îñíîâíèÿ ðåæèì (Fundamental), M-f è M-b ñå âúçïðèåìàõà êàòî
@@ -835,7 +835,7 @@
 
 Åäèí ãëàâåí ðåæèì, êîéòî å ìíîãî ïîëåçåí, îñîáåíî çà ðåäàêòèðàíå íà
 òåêñò íà åñòåñòâåí åçèê, å ðåæèìúò íà àâòîìàòè÷íî çàïúëâàíå (Auto Fill
-mode).  Êîãàòî òîçè ðåæèì å âêëþ÷åí, Emacs àâòîìàòè÷íî ðàçäåëÿ ðåäà
+mode).  Êîãàòî òîçè ðåæèì å âêëþ÷åí, Åìàêñ àâòîìàòè÷íî ðàçäåëÿ ðåäà
 ïðè ìÿñòîòî ìåæäó äóìèòå, êîãàòî âìúêâàòå òåêñò è íàïðàâèòå ðåä, êîéòî
 å òâúðäå äúëúã.
 
@@ -855,7 +855,7 @@
 àðãóìåíò íà êîìàíäàòà.
 
 >> Âúâåäåòå C-x f ñ àðãóìåíò 20.  (C-u 2 0 C-x f).
-   Ñåãà âúâåäåòå íÿêàêúâ òåêñò è âèæòå êàê Emacs çàïúëâà ðåäîâåòå ñ ïî
+   Ñåãà âúâåäåòå íÿêàêúâ òåêñò è âèæòå êàê Åìàêñ çàïúëâà ðåäîâåòå ñ ïî
    íå ïîâå÷å îò 20 çíàêà.  Ïîñëå âúðíåòå îáðàòíî ãðàíèöàòà íà 70,
    èçïîëçâàéêè C-x f îòíîâî.
 
@@ -870,12 +870,12 @@
 * ÒÚÐÑÅÍÅ
 ---------
 
-Emacs ìîæå äà èçâúðøâà òúðñåíèÿ íà íèçîâå (òîâà ñà ïîñëåäîâàòåëíîñòè
+Åìàêñ ìîæå äà èçâúðøâà òúðñåíèÿ íà íèçîâå (òîâà ñà ïîñëåäîâàòåëíîñòè
 îò çíàöè èëè äóìè) èëè íàïðåä â òåêñòà, èëè íàçàä â íåãî.  Òúðñåíåòî
 íà íèç å ïðèäâèæâàùà êóðñîðà êîìàíäà; òÿ ïðåìåñòâà êóðñîðà íà
 ñëåäâàùîòî ìÿñòî, êúäåòî ñå ñðåùà íèçúò.
 
-Êîìàíäàòà çà òúðñåíå íà Emacs ñå ðàçëè÷àâà îò êîìàíäàòà çà òúðñåíå íà
+Êîìàíäàòà çà òúðñåíå íà Åìàêñ ñå ðàçëè÷àâà îò êîìàíäàòà çà òúðñåíå íà
 ïîâå÷åòî ðåäàêòîðè ïî òîâà, ÷å òÿ å "ïîñòúïêîâà".  Òîâà îçíà÷àâà, ÷å
 òúðñåíåòî ñå èçâúðøâà îùå äîêàòî âúâåæäàòå òåêñòà, êîéòî òúðñèòå.
 
@@ -883,7 +883,7 @@
 òúðñåíå íàçàä.  ÍÎ ÏÎ×ÀÊÀÉÒÅ!  Íå ãè ïðîáâàéòå ñåãà.
 
 Êîãàòî âúâåäåòå C-s, ùå çàáåëåæèòå, ÷å íèçúò "I-search" ñå ïîÿâÿâà
-êàòî ïîäñêàçêà â åõî îáëàñòòà.  Òîâà âè êàçâà, ÷å Emacs å â òîâà,
+êàòî ïîäñêàçêà â åõî îáëàñòòà.  Òîâà âè êàçâà, ÷å Åìàêñ å â òîâà,
 êîåòî ñå íàðè÷à ïîñòúïêîâî òúðñåíå, ÷àêàéêè âè äà âúâåæäàòå òåêñòà,
 êîéòî èñêàòå äà òúðñèòå.  <Return> ïðèêëþ÷âà òúðñåíåòî.
 
@@ -895,19 +895,19 @@
 >> Ñåãà âúâåäåòå <Delback> òðè ïúòè è âèæòå êàê ñå ïðèäâèæâà êóðñîðà.
 >> Âúâåäåòå <Return>, çà äà ïðåêðàòèòå òúðñåíåòî.
 
-Çàáåëÿçàõòå ëè êàêâî ñòàíà?  Emacs, êîãàòî òúðñè ïîñòúïêîâî, ñå îïèòâà
+Çàáåëÿçàõòå ëè êàêâî ñòàíà?  Åìàêñ, êîãàòî òúðñè ïîñòúïêîâî, ñå îïèòâà
 äà íàìåðè ñëåäâàùîòî ñúâïàäåíèå íà íèçà, êîéòî ñå âúâåæäà.  Çà äà
 îòèäåòå íà ñëåäâàùîòî ñúâïàäåíèå íà "òúðñíå", ïðîñòî îòíîâî âúâåäåòå
-C-s.  Àêî íÿìà òàêîâà ñúâïàäåíèå, Emacs áèáèïâà è âè êàçâà, ÷å
+C-s.  Àêî íÿìà òàêîâà ñúâïàäåíèå, Åìàêñ áèáèïâà è âè êàçâà, ÷å
 òúðñåíåòî å "ïðîâàëåíî" (failing).  C-g ñúùî ïðåêðàòÿâà òúðñåíåòî.
 
 ÇÀÁÅËÅÆÊÀ: Íà íÿêîè ñèñòåìè âúâåæäàíåòî íà C-s ùå çàìðàçè åêðàíà è âèå
-íÿìà äà ìîæå äà âèäèòå ïîâå÷å ðåàêöèÿ îò Emacs.  Òîâà ïîêàçâà, ÷å
+íÿìà äà ìîæå äà âèäèòå ïîâå÷å ðåàêöèÿ îò Åìàêñ.  Òîâà ïîêàçâà, ÷å
 "ñïîñîáíîñò" íà îïåðàöèîííàòà ñèñòåìà, íàðå÷åíà "óïðàâëåíèå íà ïîòîêà"
-(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà äî Emacs.  Çà äà
+(flow control), å ïðèõâàíàëà C-s è íå ãî ïðîïóñêà äî Åìàêñ.  Çà äà
 ðàçìðàçèòå åêðàíà, âúâåäåòå C-q.  Òîãàâà âèæòå ñåêöèÿòà "Ñïîíòàííî
 âêëþ÷âàíå íà ïîñòúïêîâîòî òúðñåíå" (Spontaneous Entry to Incremental
-Search) â ðúêîâîäñòâîòî íà Emacs çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè
+Search) â ðúêîâîäñòâîòî íà Åìàêñ çà ñúâåò êàê äà ñå ñïðàâèòå ñ òàçè
 "ñïîñîáíîñò".
 
 Àêî ñòå â ñðåäàòà íà ïîñòúïêîâî òúðñåíå è âúâåäåòå <Delback>, ùå
@@ -929,9 +929,9 @@
 
 
 * ÌÍÎÆÅÑÒÂÎ ÏÐÎÇÎÐÖÈ
---------------------
+----------------
 
-Åäíà îò ïðèâëåêàòåëíèòå ñïîñîáíîñòè íà Emacs å òàçè, ÷å ìîæå äà
+Åäíà îò ïðèâëåêàòåëíèòå ñïîñîáíîñòè íà Åìàêñ å òàçè, ÷å ìîæå äà
 ãëåäàòå ïîâå÷å îò åäèí ïðîçîðåö íà åêðàíà â äàäåí ìîìåíò îò âðåìå.
 
 >> Ïðèäâèæåòå êóðñîðà äî òîçè ðåä è âúâåäåòå C-u 0 C-l (òîâà å
@@ -942,7 +942,7 @@
    îñòàâà íà ïî-ãîðíèÿ ïðîçîðåö.
 
 >> Âúâåäåòå C-M-v, çà äà ñêðîëèðàòå äîëíèÿ ïðîçîðåö.  (Àêî íÿìàòå
-   èñòèíñêè êëàâèø META, âúâåäåòå <ESC> C-v.)
+   èñòèíñêè êëàâèø META, âúâåäåòå ESC C-v.)
 
 >> Âúâåäåòå C-x o ("o" îò "other" -- "äðóã"), çà äà ïðèäâèæèòå
    êóðñîðà â äîëíèÿ ïðîçîðåö.
@@ -971,10 +971,10 @@
 ïúðâè", çàùîòî è äâàòà êëàâèøà äåéñòâàò, ìîäèôèöèðàéêè çíàêà, êîéòî
 ñòå âúâåëè.
 
-Àêî íÿìàòå èñòèíñêè êëàâèø META è èçïîëçâàòå <ESC> âìåñòî òîâà, ðåäúò
-èìà çíà÷åíèå: òðÿáâà äà âúâåæäàòå <ESC>, ïîñëåäâàí îò CONTROL-v,
-çàùîòî CONTROL-<ESC> v íÿìà äà ðàáîòè.  Òîâà å òàêà, çàùîòî <ESC> å
-ñîáñòâåí çíàê, à íå ìîäèôèêàòîð.
+Àêî íÿìàòå èñòèíñêè êëàâèø META è èçïîëçâàòå ESC âìåñòî òîâà, ðåäúò
+èìà çíà÷åíèå: òðÿáâà äà âúâåæäàòå ESC, ïîñëåäâàí îò CONTROL-v, çàùîòî
+CONTROL-ESC v íÿìà äà ðàáîòè.  Òîâà å òàêà, çàùîòî ESC å ñîáñòâåí
+çíàê, à íå ìîäèôèêàòîð.
 
 >> Âúâåäåòå C-x 1 (â ãîðíèÿ ïðîçîðåö), çà äà ìàõíåòå äîëíèÿ ïðîçîðåö.
 
@@ -1007,13 +1007,13 @@
 íà ãëàâíèÿ ðåæèì.  Íàïðèìåð, ìîæå äà âèäèòå [(Fundamental)] âìåñòî
 (Fundamental).
 
-Çà äà ñå ìàõíåòå îò âëîæåíîòî íèâî íà ðåäàêòèðàíå, âúâåäåòå <ESC>
-<ESC> <ESC>.  Òîâà å îáùà êîìàíäà çà "èçëèçàíå".  Ìîæå è äà ÿ
-èçïîëçâàòå çà ìàõàíå (ñêðèâàíå) íà äîïúëíèòåëíè ïðîçîðöè, êàêòî è çà
-äà ñå ìàõíåòå îò ìèíèáóôåðà.
+Çà äà ñå ìàõíåòå îò âëîæåíîòî íèâî íà ðåäàêòèðàíå, âúâåäåòå ESC ESC
+ESC.  Òîâà å îáùà êîìàíäà çà "èçëèçàíå".  Ìîæå è äà ÿ èçïîëçâàòå çà
+ìàõàíå (ñêðèâàíå) íà äîïúëíèòåëíè ïðîçîðöè, êàêòî è çà äà ñå ìàõíåòå
+îò ìèíèáóôåðà.
 
->> Âúâåäåòå M-x, çà äà âëåçåòå â ìèíèáóôåð; òîãàâà âúâåäåòå <ESC> <ESC>
-   <ESC>, çà äà èçëåçåòå.
+>> Âúâåäåòå M-x, çà äà âëåçåòå â ìèíèáóôåð; òîãàâà âúâåäåòå ESC ESC
+   ESC, çà äà èçëåçåòå.
 
 Íå ìîæåòå äà èçïîëçâàòå C-g, çà äà èçëåçåòå îò âëîæåíî íèâî íà
 ðåäàêòèðàíå.  Òîâà å òàêà, çàùîòî C-g ñå èçïîëçâà çà ïðåêðàòÿâàíå íà
@@ -1024,16 +1024,16 @@
 ----------------------------------
 
  òîâà âúâåäåíèå ñå îïèòàõìå äà îñèãóðèì äîñòàòú÷íî èíôîðìàöèÿ, çà äà
-çàïî÷íåòå äà èçïîëçâàòå Emacs.  Èìà òîëêîâà ìíîãî îùå â Emacs, ÷å íå å
+çàïî÷íåòå äà èçïîëçâàòå Åìàêñ.  Èìà òîëêîâà ìíîãî îùå â Åìàêñ, ÷å íå å
 âúçìîæíî òî äà áúäå îáÿñíåíî âñè÷êîòî òóê.  Îáà÷å ìîæå äà ïîèñêàòå äà
-íàó÷èòå ïîâå÷å çà Emacs, òúé êàòî òîé ïðèòåæàâà îùå ìíîãî ïîëåçíè
-ñïîñîáíîñòè.  Emacs èìà êîìàíäè çà ÷åòåíå íà äîêóìåíòàöèÿòà íà Emacs
+íàó÷èòå ïîâå÷å çà Åìàêñ, òúé êàòî òîé ïðèòåæàâà îùå ìíîãî ïîëåçíè
+ñïîñîáíîñòè.  Åìàêñ èìà êîìàíäè çà ÷åòåíå íà äîêóìåíòàöèÿòà íà Åìàêñ
 êîìàíäèòå.  Òåçè "ïîìîùíè" êîìàíäè âñè÷êè çàïî÷âàò ñúñ çíàêà
 CONTROL-h, êîéòî ñå íàðè÷à "çíàêúò çà ïîìîù".
 
 Çà äà èçïîëçâàòå âúçìîæíîñòèòå íà òàçè ïîìîù, âúâåäåòå çíàêà C-h è
 ñëåä òîâà çíàêà, êàçâàù êàêúâ âèä ïîìîù èñêàòå.  Àêî ÍÀÈÑÒÈÍÀ ñòå ñå
-èçãóáèëè, âúâåäåòå C-h ? è Emacs ùå âè êàæå ñ êàêâî ìîæå äà âè
+èçãóáèëè, âúâåäåòå C-h ? è Åìàêñ ùå âè êàæå ñ êàêâî ìîæå äà âè
 ïîìîãíå.  Àêî ñòå âúâåëè C-h è ðåøèòå, ÷å íå ñå íóæäàåòå îò ïîìîù,
 ïðîñòî âúâåäåòå C-g, çà äà ÿ ïðåêðàòèòå.
 
@@ -1045,7 +1045,7 @@
 
 Íàé-îñíîâíîòî ïîìîùíî ñðåäñòâî å C-h c.  Âúâåäåòå C-h, çíàêà c è
 êîìàíäåí çíàê èëè ïîñëåäîâàòåëíîñò îò çíàöè, îáðàçóâàùè êîìàíäà;
-òîãàâà Emacs ùå èçâåäå ìíîãî êðàòêî îïèñàíèå íà êîìàíäàòà.
+òîãàâà Åìàêñ ùå èçâåäå ìíîãî êðàòêî îïèñàíèå íà êîìàíäàòà.
 
 >> Type C-h c C-p.
 
@@ -1055,7 +1055,7 @@
 	(C-p èçïúëíÿâà êîìàíäàòà ïðåäèøåí-ðåä)
 
 Òîâà âè êàçâà "èìåòî íà ôóíêöèÿòà".  Èìåíàòà íà ôóíêöèèòå ñå èçïîëçâàò
-íàé-âå÷å çà íàñòðîéâàíå è ðàçøèðÿâàíå íà Emacs.  Íî òúé êàòî èìåíàòà
+íàé-âå÷å çà íàñòðîéâàíå è ðàçøèðÿâàíå íà Åìàêñ.  Íî òúé êàòî èìåíàòà
 íà ôóíêöèèòå ñà èçáðàíè òàêà, ÷å äà ïîêàçâàò êàêâî ïðàâè êîìàíäàòà, òå
 ìîãàò äà ñëóæàò è çà ìíîãî êðàòêà äîêóìåíòàöèÿ -- äîñòàòú÷íà, çà äà âè
 ïðèïîìíè êîìàíäè, êîèòî âå÷å ñòå ó÷èëè.
@@ -1069,7 +1069,7 @@
 >> Âúâåäåòå C-h k C-p.
 
 Òîâà èçâåæäà äîêóìåíòàöèÿòà íà ôóíêöèÿòà, êàêòî è íåéíîòî èìå, â
-îòäåëåí Emacs ïðîçîðåö.  Êîãàòî ÿ ïðî÷åòåòå, âúâåäåòå C-x 1, çà äà
+îòäåëåí Åìàêñ ïðîçîðåö.  Êîãàòî ÿ ïðî÷åòåòå, âúâåäåòå C-x 1, çà äà
 ìàõíåòå ïîìîùíèÿ òåêñò.  Íå å íóæíî äà ïðàâèòå òîâà òî÷íî ñåãà.  Ìîæå
 äà ðåäàêòèðàòå, äîêàòî ñå îáðúùàòå êúì ïîìîùíèÿ òåêñò çà ñïðàâêà, è
 ñëåä òîâà äà âúâåäåòå C-x 1.
@@ -1080,14 +1080,14 @@
 		ôóíêöèÿòà.
 
 >> Îïèòàéòå ñ âúâåæäàíå íà C-h f previous-line<Return>.
-   Òîâà èçâåæäà öÿëàòà èíôîðìàöèÿ, êîÿòî Emacs çíàå çà ôóíêöèÿòà,
+   Òîâà èçâåæäà öÿëàòà èíôîðìàöèÿ, êîÿòî Åìàêñ çíàå çà ôóíêöèÿòà,
    êîÿòî îñúùåñòâÿâà êîìàíäàòà C-p.
 
 Ïîäîáíà êîìàíäà, C-h v, èçâåæäà äîêóìåíòàöèÿòà íà ïðîìåíëèâèòå, êîèòî
-ìîæå äà ïðîìåíÿòå, çà äà íàñòðîéâàòå ïîâåäåíèåòî íà Emacs.  Òðÿáâà äà
-âúâåäåòå èìåòî íà ïðîìåíëèâàòà, êîãàòî Emacs âè ïîäñêàæå òîâà.
+ìîæå äà ïðîìåíÿòå, çà äà íàñòðîéâàòå ïîâåäåíèåòî íà Åìàêñ.  Òðÿáâà äà
+âúâåäåòå èìåòî íà ïðîìåíëèâàòà, êîãàòî Åìàêñ âè ïîäñêàæå òîâà.
 
-   C-h a	Êîìàíäà Àïðîïîñ.  Âúâåäåòå êëþ÷îâà äóìà è Emacs ùå
+   C-h a	Êîìàíäà Àïðîïîñ.  Âúâåäåòå êëþ÷îâà äóìà è Åìàêñ ùå
 		ïîêàæå ñïèñúê íà âñè÷êè êîìàíäè, ÷èåòî èìå ñúäúðæà
 		òàçè êëþ÷îâà äóìà.  Òåçè êîìàíäè ìîãàò âñè÷êè äà áúäàò
 		èçâèêàíè ÷ðåç META-x.  Çà íÿêîè êîìàíäè êîìàíäàòà
@@ -1110,18 +1110,18 @@
 		ñïåöèàëåí áóôåð, íàðè÷àí "*info*", êúäåòî ìîæå äà
 		÷åòåòå ðúêîâîäñòâàòà íà èíñòàëèðàíèòå âúâ âàøàòà
 		ñèñòåìà ïàêåòè.  Âúâåäåòå m emacs <Return>, çà äà
-		÷åòåòå ðúêîâîäñòâîòî íà Emacs.  Àêî íèêîãà ïðåäè òîâà
-		íå ñòå èçïîëçâàëè Info, âúâåäåòå ? è Emacs ùå âêëþ÷è
+		÷åòåòå ðúêîâîäñòâîòî íà Åìàêñ.  Àêî íèêîãà ïðåäè òîâà
+		íå ñòå èçïîëçâàëè Info, âúâåäåòå ? è Åìàêñ ùå âêëþ÷è
 		âúâåäåíèå âúâ âúçìîæíîñòèòå íà ðåæèìà Èíôî.  Âåäíúæ
 		ñëåä êàòî ñòå ïðåìèíàëè òîâà âúâåäåíèå, òðÿáâà äà ñå
-		êîíñóëòèðàòå ñ Emacs Èíôî ðúêîâîäñòâîòî êàòî âàøà
+		êîíñóëòèðàòå ñ Åìàêñ Èíôî ðúêîâîäñòâîòî êàòî âàøà
 		îñíîâíà äîêóìåíòàöèÿ.
 
 
 * ÎÙÅ ÂÚÇÌÎÆÍÎÑÒÈ
 -----------------
 
-Ìîæå äà íàó÷èòå ïîâå÷å çà Emacs ñ ÷åòåíå íà íåãîâîòî ðúêîâîäñòâî, èëè
+Ìîæå äà íàó÷èòå ïîâå÷å çà Åìàêñ ñ ÷åòåíå íà íåãîâîòî ðúêîâîäñòâî, èëè
 êàòî êíèãà, èëè â Èíôî (èçïîëçâàéòå ìåíþòî ïîìîù (Help) èëè âúâåäåòå
 F10 h r).  Äâå âúçìîæíîñòè, êîèòî ìîæå äà æåëàåòå â íà÷àëîòî, ñà
 äîâúðøâàíå (completion), êîåòî ñïåñòÿâà ïèñàíå, è dired, êîéòî
@@ -1129,26 +1129,26 @@
 
 Äîâúðøâàíåòî å íà÷èí äà èçáÿãâàòå íåíóæíî ïèñàíå.  Íàïðèìåð, àêî
 èñêàòå äà ïðåâêëþ÷èòå êúì áóôåðà *Messages*, ìîæå äà âúâåäåòå C-x b
-*M<Tab> è Emacs ùå çàïúëíè îñòàíàëàòà ÷àñò îò èìåòî íà áóôåðà,
+*M<Tab> è Åìàêñ ùå çàïúëíè îñòàíàëàòà ÷àñò îò èìåòî íà áóôåðà,
 äîêîëêîòî ìîæå äà ñå îïðåäåëè îò òîâà, êîåòî ñòå âúâåëè.  Äîâúðøâàíåòî
-å îïèñàíî â Èíôî-ðúêîâîäñòâîòî íà Emacs â ñòðàíèöàòà "Äîâúðøâàíå"
+å îïèñàíî â Èíôî-ðúêîâîäñòâîòî íà Åìàêñ â ñòðàíèöàòà "Äîâúðøâàíå"
 ("Completion").
 
 Dired âè ïîçâîëÿâà äà ãëåäàòå ñïèñúêà îò ôàéëîâå â äèðåêòîðèÿ (è êàòî
 âúçìîæíîñò: íåéíèòå ïîääèðåêòîðèè), äà ñå ïðèäâèæâàòå â òîçè ñïèñúê,
 äà ïîñåùàâàòå, ïðåèìåíóâàòå, èçòðèâàòå è èçîáùî äåéñòâàòå âúðõó
-ôàéëîâåòå.  Dired å îïèñàí â Èíôî-ðúêîâîäñòâîòî íà Emacs â ñòðàíèöàòà
+ôàéëîâåòå.  Dired å îïèñàí â Èíôî-ðúêîâîäñòâîòî íà Åìàêñ â ñòðàíèöàòà
 "Dired".
 
-Ðúêîâîäñòâîòî íà Emacs îïèñâà îùå ìíîãî äðóãè âúçìîæíîñòè íà
+Ðúêîâîäñòâîòî íà Åìàêñ îïèñâà îùå ìíîãî äðóãè âúçìîæíîñòè íà
 ðåäàêòîðà.
 
 
 * ÇÀÊËÞ×ÅÍÈÅ
 ------------
 
-Çàïîìíåòå: çà äà èçëåçåòå áåçâúçâðàòíî îò Emacs, èçïîëçâàéòå C-x C-c.
-Çà äà èçëåçåòå âðåìåííî â îáâèâêà, òàêà ÷å äà ñå âúðíåòå â Emacs
+Çàïîìíåòå: çà äà èçëåçåòå áåçâúçâðàòíî îò Åìàêñ, èçïîëçâàéòå C-x C-c.
+Çà äà èçëåçåòå âðåìåííî â îáâèâêà, òàêà ÷å äà ñå âúðíåòå â Åìàêñ
 ïî-êúñíî, èçïîëçâàéòå C-z.
 
 Òîâà âúâåäåíèå å ïðåäâèäåíî äà áúäå ðàçáèðàåìî çà âñè÷êè íîâè
@@ -1159,10 +1159,10 @@
 * ÊÎÏÈÐÀÍÅ
 ----------
 
-Òîâà âúâåäåíèå ïðîèçëèçà îò äúëãà ïîðåäèöà âúâåäåíèÿ â Emacs,
-çàïî÷âàéêè îò åäíî, íàïèñàíî îò Ñòþúðò Êðàêðàôò çà íà÷àëíèÿ Emacs.
+Òîâà âúâåäåíèå ïðîèçëèçà îò äúëãà ïîðåäèöà âúâåäåíèÿ â Åìàêñ,
+çàïî÷âàéêè îò åäíî, íàïèñàíî îò Ñòþúðò Êðàêðàôò çà íà÷àëíèÿ Åìàêñ.
 
-Òàçè âåðñèÿ íà âúâåäåíèåòî, êàêòî è GNU Emacs, å çàùèòåíà ñ àâòîðñêè
+Òàçè âåðñèÿ íà âúâåäåíèåòî, êàêòî è ÃÍÓ Åìàêñ, å çàùèòåíà ñ àâòîðñêè
 ïðàâà è èäâà ñ ðàçðåøåíèå äà ðàçïðîñòðàíÿâàòå êîïèÿ ïðè ñëåäíèòå
 óñëîâèÿ:
 
@@ -1183,8 +1183,8 @@
    under the above conditions, provided also that they
    carry prominent notices stating who last altered them.
 
-Óñëîâèÿòà çà êîïèðàíå íà ñàìèÿ Emacs ñà ïî-ñëîæíè, íî â ñúùèÿ äóõ.
-Ìîëÿ, ïðî÷åòåòå ôàéëà COPYING è òîãàâà äàâàéòå êîïèÿ íà GNU Emacs íà
+Óñëîâèÿòà çà êîïèðàíå íà ñàìèÿ Åìàêñ ñà ïî-ñëîæíè, íî â ñúùèÿ äóõ.
+Ìîëÿ, ïðî÷åòåòå ôàéëà COPYING è òîãàâà äàâàéòå êîïèÿ íà ÃÍÓ Åìàêñ íà
 ñâîè ïðèÿòåëè.  Ïîìîãíåòå äà ñïðåì çàòâîðåíîñòòà íà ïðîãðàìèòå
 ("ïðèòåæàíèåòî"), êàòî èçïîëçâàìå, ïèøåì è ñïîäåëÿìå ñâîáîäåí ñîôòóåð!
 
--- a/leim/ChangeLog	Thu Oct 05 12:20:23 2006 +0000
+++ b/leim/ChangeLog	Sun Oct 15 02:54:13 2006 +0000
@@ -1,3 +1,17 @@
+2006-10-12  Kenichi Handa  <handa@m17n.org>
+
+	* Makefile.in (install): Be sure to make ${INSTALLDIR} before `cd'
+	to it.
+
+2006-10-05  Chong Yidong  <cyd@stupidchicken.com>
+
+	* quail/latin-ltx.el: Fix typo in previous change.
+
+2006-10-05  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* quail/latin-ltx.el: Remove rules that start with { since they are
+	redundant and hence impact the { key for no good reason.
+
 2006-10-02  Kenichi Handa  <handa@m17n.org>
 
 	* Makefile.in (install): Fix previous change.
--- a/leim/Makefile.in	Thu Oct 05 12:20:23 2006 +0000
+++ b/leim/Makefile.in	Sun Oct 15 02:54:13 2006 +0000
@@ -216,13 +216,12 @@
 	sed -n '/^[^;]/ p' < ${srcdir}/leim-ext.el >> $@
 
 install: all
+	if [ ! -d ${INSTALLDIR} ] ; then \
+          ${srcdir}/${dot}${dot}/mkinstalldirs ${INSTALLDIR}; \
+	else true; fi
 	if [ x`(cd ${INSTALLDIR} && /bin/pwd)` != x`(/bin/pwd)` ] ; then \
-	  if [ -d ${INSTALLDIR} ] ; then \
-	    rm -rf ${INSTALLDIR}/leim-list.el; \
-	    rm -rf ${INSTALLDIR}/quail ${INSTALLDIR}/ja-dic ; \
-	  else \
-	    ${srcdir}/${dot}${dot}/mkinstalldirs ${INSTALLDIR}; \
-	  fi; \
+	  rm -rf ${INSTALLDIR}/leim-list.el; \
+	  rm -rf ${INSTALLDIR}/quail ${INSTALLDIR}/ja-dic ; \
 	  echo "Copying leim files to ${INSTALLDIR} ..." ; \
 	  if [ x`(cd ${srcdir} && /bin/pwd)` = x`(/bin/pwd)` ] ; then \
 	    tar -chf - leim-list.el quail ja-dic \
--- a/leim/quail/latin-ltx.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/leim/quail/latin-ltx.el	Sun Oct 15 02:54:13 2006 +0000
@@ -45,17 +45,17 @@
 
 (quail-define-rules
  ("!`" ?¡)
- ("{\\pounds}" ?£) ("\\pounds" ?£)
- ("{\\S}" ?§) ("\\S" ?§)
+ ("\\pounds" ?£) ;; ("{\\pounds}" ?£)
+ ("\\S" ?§) ;; ("{\\S}" ?§)
  ("\\\"{}" ?¨)
- ("{\\copyright}" ?©) ("\\copyright" ?©)
+ ("\\copyright" ?©) ;; ("{\\copyright}" ?©)
  ("$^a$" ?ª)
  ("\\={}" ?¯)
  ("$\\pm$" ?±) ("\\pm" ?±)
  ("$^2$" ?²)
  ("$^3$" ?³)
  ("\\'{}" ?´)
- ("{\\P}" ?¶) ("\\P" ?¶)
+ ("\\P" ?¶) ;; ("{\\P}" ?¶)
  ;; Fixme: Yudit has the equivalent of ("\\cdot" ?â‹…), for U+22C5, DOT
  ;; OPERATOR, whereas · is MIDDLE DOT.  JadeTeX translates both to
  ;; \cdot.
@@ -71,8 +71,8 @@
  ("\\~{A}" ?Ã)  ("\\~A" ?Ã)
  ("\\\"{A}" ?Ä)  ("\\\"A" ?Ä)
  ("\\\k{A}" ?Ä„)
- ("{\\AA}" ?Ã…) ("\\AA" ?Ã…)
- ("{\\AE}" ?Æ) ("\\AE" ?Æ)
+ ("\\AA" ?Ã…) ;; ("{\\AA}" ?Ã…)
+ ("\\AE" ?Æ) ;; ("{\\AE}" ?Æ)
  ("\\c{C}" ?Ç)  ("\\cC" ?Ç)
  ("\\`{E}" ?È)  ("\\`E" ?È)
  ("\\'{E}" ?É)  ("\\'E" ?É)
@@ -93,14 +93,14 @@
  ("\\\"{O}" ?Ö)  ("\\\"O" ?Ö)
  ("\\\k{O}" ?Ǫ)
  ("$\\times$" ?×) ("\\times" ?×)
- ("{\\O}" ?Ø) ("\\O" ?Ø)
+ ("\\O" ?Ø) ;; ("{\\O}" ?Ø)
  ("\\`{U}" ?Ù) ("\\`U" ?Ù)
  ("\\'{U}" ?Ú) ("\\'U" ?Ú)
  ("\\^{U}" ?Û) ("\\^U" ?Û)
  ("\\\"{U}" ?Ü) ("\\\"U" ?Ü)
  ("\\\k{U}" ?Ų)
  ("\\'{Y}" ?Ã) ("\\'Y" ?Ã)
- ("{\\ss}" ?ß) ("\\ss" ?ß)
+ ("\\ss" ?ß) ;; ("{\\ss}" ?ß)
 
  ("\\`{a}" ?à) ("\\`a" ?à)
  ("\\'{a}" ?á) ("\\'a" ?á)
@@ -108,8 +108,8 @@
  ("\\~{a}" ?ã) ("\\~a" ?ã)
  ("\\\"{a}" ?ä) ("\\\"a" ?ä)
  ("\\\k{a}" ?Ä…)
- ("{\\aa}" ?Ã¥) ("\\aa" ?Ã¥)
- ("{\\ae}" ?æ) ("\\ae" ?æ)
+ ("\\aa" ?Ã¥) ;; ("{\\aa}" ?Ã¥)
+ ("\\ae" ?æ) ;; ("{\\ae}" ?æ)
  ("\\c{c}" ?ç) ("\\cc" ?ç)
  ("\\`{e}" ?è) ("\\`e" ?è)
  ("\\'{e}" ?é) ("\\'e" ?é)
@@ -130,7 +130,7 @@
  ("\\\"{o}" ?ö) ("\\\"o" ?ö)
  ("\\\k{o}" ?Ç«)
  ("$\\div$" ?÷) ("\\div" ?÷)
- ("{\\o}" ?ø) ("\\o" ?ø)
+ ("\\o" ?ø) ;; ("{\\o}" ?ø)
  ("\\`{u}" ?ù) ("\\`u" ?ù)
  ("\\'{u}" ?ú) ("\\'u" ?ú)
  ("\\^{u}" ?û) ("\\^u" ?û)
@@ -181,7 +181,7 @@
  ("\\u{\\i}" ?Ä­) ("\\ui" ?Ä­)
 
  ("\\.{I}" ?Ä°) ("\\.I" ?Ä°)
- ("{\\i}" ?ı) ("\\i" ?ı)
+ ("\\i" ?ı) ;; ("{\\i}" ?ı)
  ("\\^{J}" ?Ä´) ("\\^J" ?Ä´)
  ("\\^{\\j}" ?ĵ) ("\\^j" ?ĵ)
  ("\\c{K}" ?Ķ) ("\\cK" ?Ķ)
@@ -191,8 +191,8 @@
  ("\\c{L}" ?Ä») ("\\cL" ?Ä»)
  ("\\c{l}" ?ļ) ("\\cl" ?ļ)
 
- ("{\\L}" ?Å) ("\\L" ?Å)
- ("{\\l}" ?Å‚) ("\\l" ?Å‚)
+ ("\\L" ?Å) ;; ("{\\L}" ?Å)
+ ("\\l" ?Å‚) ;; ("{\\l}" ?Å‚)
  ("\\'{N}" ?Ń) ("\\'N" ?Ń)
  ("\\'{n}" ?Å„) ("\\'n" ?Å„)
  ("\\c{N}" ?Å…) ("\\cN" ?Å…)
@@ -206,8 +206,8 @@
 
  ("\\H{O}" ?Å) ("\\HO" ?Å)
  ("\\U{o}" ?Å‘) ("\\Uo" ?Å‘)
- ("{\\OE}" ?Å’) ("\\OE" ?Å’)
- ("{\\oe}" ?Å“) ("\\oe" ?Å“)
+ ("\\OE" ?Å’) ;; ("{\\OE}" ?Å’)
+ ("\\oe" ?Å“) ;; ("{\\oe}" ?Å“)
  ("\\'{R}" ?Å”) ("\\'R" ?Å”)
  ("\\'{r}" ?Å•) ("\\'r" ?Å•)
  ("\\c{R}" ?Å–) ("\\cR" ?Å–)
--- a/lib-src/ChangeLog	Thu Oct 05 12:20:23 2006 +0000
+++ b/lib-src/ChangeLog	Sun Oct 15 02:54:13 2006 +0000
@@ -1,3 +1,7 @@
+2006-10-09  Eli Zaretskii  <eliz@gnu.org>
+
+	* makefile.w32-in (../src/config.h): Fix error message.
+
 2006-09-30  Eli Zaretskii  <eliz@gnu.org>
 
 	* .cvsignore: Add blessmail.
@@ -19,7 +23,7 @@
 	
 2006-08-07  Masatake YAMATO  <jet@gyve.org>
 
-	* etags.c (TEX_mode): Check getc retruns EOF.
+	* etags.c (TEX_mode): Check getc returns EOF.
 	File ended without newline causes infinite loop.
 
 2002-07-30  Adrian Aichner  <adrian@xemacs.org>  (tiny change)
--- a/lib-src/makefile.w32-in	Thu Oct 05 12:20:23 2006 +0000
+++ b/lib-src/makefile.w32-in	Sun Oct 15 02:54:13 2006 +0000
@@ -308,7 +308,7 @@
 # Headers we would preprocess if we could.
 #
 ../src/config.h:	../nt/$(CONFIG_H)
-			echo config.h has changed. Re-run configure.bat.
+			echo $(CONFIG_H) has changed.  Re-run configure.bat.
 			exit -1
 
 getopt.h:		getopt_.h
--- a/lisp/ChangeLog	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/ChangeLog	Sun Oct 15 02:54:13 2006 +0000
@@ -1,3 +1,538 @@
+2006-10-15  Kim F. Storm  <storm@cua.dk>
+
+	* filesets.el (filesets-run-cmd--repl-fn): Use shell-quote-argument.
+
+2006-10-14  Lennart Borgman  <lennart.borgman.073@student.lu.se>
+
+	* filesets.el (filesets-cmd-shell-command): Quote buffer-file-name
+	to protect whitespace and metacharacters from the shell.
+
+2006-10-13  Giorgos Keramidas  <keramida@ceid.upatras.gr>  (tiny change)
+
+	* apropos.el (apropos-pattern-quoted): Fix a typo in a doc
+	string.
+
+2006-10-13  Eli Zaretskii  <eliz@gnu.org>
+
+	* subr.el (start-process-shell-command): Doc fix.
+
+2006-10-13  Andrea Russo  <rastandy@salug.it>  (tiny change)
+
+	* info-look.el <maxima-mode, inferior-maxima-mode>: Allow [0-9] in
+	the regexp for Maxima symbols.
+
+2006-10-13  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* vc-hooks.el (vc-ignore-dir-regexp): Make it into a defcustom.
+	(vc-find-root): Don't walk higher up than ~.
+
+2006-10-12  Chong Yidong  <cyd@stupidchicken.com>
+
+	* international/utf-8.el (utf-translate-cjk-load-tables):
+	Avoid clobbering last-coding-system-used during load.
+
+2006-10-12  Carsten Dominik  <dominik@science.uva.nl>
+
+	* textmodes/reftex-global.el (reftex-create-tags-file): Quote file
+	arguments.
+
+2006-10-12  Richard Stallman  <rms@gnu.org>
+
+	* files.el (file-name-history): Add defvar.
+	(save-some-buffers-action-alist): Improve description strings.
+
+2006-10-12  Andreas Schwab  <schwab@suse.de>
+
+	* files.el (auto-mode-alist): Match change log file name also with
+	a dash before a numeric extension.
+
+2006-10-11  Ilya Zakharevich  <ilyaz@cpan.org>
+
+	* progmodes/cperl-mode.el: Merge from upstream, upto version 5.22.
+	After 5.0:
+	(cperl-add-tags-recurse-noxs-fullpath): New function (for -batch mode).
+
+	After 5.1: Major edit.  Summary of most visible changes:
+
+	- Multiple <<HERE per line allowed.
+	- Handles multiline subroutine declaration headers (with comments).
+	  (The exception is `cperl-etags' - but it is not used in the rest
+	  of the mode.)
+	- Fontifies multiline my/our declarations (even with comments,
+	  and with legacy `font-lock').
+	- Major speedup of syntaxification, both immediate and postponed
+	  (3.5x to 15x [for different CPUs and versions of Emacs] on the
+	  huge real-life document I tested).
+	- New bindings, edits to imenu.
+	- "_" is made into word-char during fontification/syntaxification;
+	  some attempts to recognize non-word "_" during other operations too.
+	- Detect bug in Emacs with `looking-at' inside `narrow' and bulk out.
+	- autoload some more perldoc-related stuff
+	- New convenience features: ISpell POD/HEREDOCs, narrow-to-HEREDOC.
+	- Attempt to incorporate XEmacs edits which reached me.
+
+	Fine-grained changelog:
+	(cperl-hook-after-change): New configuration variable.
+	(cperl-vc-sccs-header): Likewise.
+	(cperl-vc-sccs-header): Likewise.
+	(cperl-vc-header-alist): Default via two preceding variables.
+	(cperl-invalid-face): Remove double quoting under XEmacs
+		(still needed under 21.2).
+	(cperl-tips): Update URLs for resources.
+	(cperl-problems): Likewise.
+	(cperl-praise): Mention new features.
+	New C-c key bindings: for `cperl-find-bad-style',
+	`cperl-pod-spell', `cperl-here-doc-spell', `cperl-narrow-to-here-doc',
+	`cperl-perdoc', and `cperl-perldoc-at-point'.
+	CPerl Mode menu changes:	"Fix style by spaces", "Imenu on Perl Info"
+	moved, new submenu of Tools with Ispell entries and narrowing.
+	(cperl-after-sub-regexp): New defsubst.
+	(cperl-imenu--function-name-regexp-perl): Use `cperl-after-sub-regexp'.
+		Allows heads up to head4.
+		Allow "package;".
+	(defun-prompt-regexp): Use `cperl-after-sub-regexp'.
+	(paren-backwards-message): ??? Something for XEmacs???
+	(cperl-mode): Never auto-switch abbrev-mode off.
+		Try to allow '_' be non-word char.
+		Do not use `font-lock-unfontify-region-function' on XEmacs.
+		Reset syntax cache on mode start.
+		Support multiline facification (even on legacy `font-lock').
+	(cperl-facemenu-add-face-function): ??? Some contributed code ???
+	(cperl-after-change-function): Since `font-lock' and `lazy-lock'
+		refuse to inform us whether the fontification is due to lazy
+		calling or due to edit to a buffer, install our own hook
+		(controlled by `cperl-hook-after-change').
+	(cperl-electric-pod): =cut may have been recognized as start.
+	(cperl-block-p): Move, updatedfor attributes.
+	(cperl-calculate-indent): Try to allow '_' be non-word char
+		Support subs with attributes.
+	(cperl-where-am-i): Queit (?) a warning.
+	(cperl-cached-syntax-table)	New function.
+	(cperl-forward-re): Use `cperl-cached-syntax-table'.
+	(cperl-unwind-to-safe): Recognize `syntax-type' property
+		changing in a middle of line.
+	(cperl-find-sub-attrs): New function.
+	(cperl-find-pods-heres): Allow many <<EOP per line.
+		Allow subs with attributes.
+		Major speedups (3.5x..15x on a real-life test file nph-proxy.pl).
+		Recognize "extproc " (OS/2) case-folded and only at start.
+		/x on s///x with empty replacement was not recognized.
+		Better comments.
+	(cperl-after-block-p): Remarks on diff with `cperl-block-p'.
+		Allow subs with attributes, labels.
+		Do not confuse "else::foo" with "else".
+		Minor optimizations...
+	(cperl-after-expr-p): Try to allow '_' be non-word char.
+	(cperl-fill-paragraph): Try to detect a major bug in Emacs
+	        with `looking-at' inside `narrow' and bulk out if found.
+	(cperl-imenu--create-perl-index): Updates for new
+	        `cperl-imenu--function-name-regexp-perl'.
+	(cperl-outline-level): Likewise.
+	(cperl-init-faces): Allow multiline subroutine headers
+	        and my/our declarations, and ones with comments.
+		Allow subroutine attributes.
+	(cperl-imenu-on-info): Better docstring.
+	(cperl-etags): Rudimentary support for attributes.
+		Support for packages and "package;".
+	(cperl-add-tags-recurse-noxs): Better (?) docstring.
+	(cperl-add-tags-recurse-noxs-fullpath): Likewise.
+	(cperl-tags-hier-init): Misprint for `fboundp' fixed.
+	(cperl-not-bad-style-regexp): Try to allow '_' be non-word char.
+	(cperl-perldoc): Add autoload.
+	(cperl-perldoc-at-point): Likewise.
+	(cperl-here-doc-spell): New function.
+	(cperl-pod-spell): Likewise.
+	(cperl-map-pods-heres): Likewise.
+	(cperl-get-here-doc-region): Likewise.
+	(cperl-font-lock-fontify-region-function): Likewise (backward
+		compatibility for legacy `font-lock').
+	(cperl-font-lock-unfontify-region-function): Fix style.
+	(cperl-fontify-syntaxically): Recognize and optimize away deferred
+		calls with no-change.  Governed by `cperl-hook-after-change'.
+	(cperl-fontify-update): Recognize that syntaxification region
+		can be larger than fontification one.
+		XXXX we leave `cperl-postpone' property, so this is quadratic...
+	(cperl-fontify-update-bad): Temporary placeholder until
+	        it is clear how to implement `cperl-fontify-update'.
+	(cperl-time-fontification): New function.
+	(attrib-group): New text attribute.
+	(multiline): New value: `syntax-type' text attribute.
+
+	After 5.2:
+	(cperl-emulate-lazy-lock): New function.
+	(cperl-fontify-syntaxically): Would skip large regions.
+	Add `cperl-time-fontification', `cperl-emulate-lazy-lock' to menu.
+	Some globals were declared, but uninitialized.
+
+	After 5.3, 5.4:
+	(cperl-facemenu-add-face-function): Add docs, fix U<>.
+	Copyright message updated.
+	(cperl-init-faces): Work around a bug in `font-lock'. May slow
+			facification down a bit.
+		Misprint for my|our|local for old `font-lock'
+			"our" was not fontified same as "my|local".
+		Highlight variables after "my" etc even in
+			a middle of an expression.
+		Do not facify multiple variables after my etc
+			unless parentheses are present.
+
+	After 5.5, 5.6
+	(cperl-fontify-syntaxically): after-change hook could reset.
+	(cperl-syntax-done-to) to a middle of line; unwind to BOL.
+
+	After 5.7:
+	(cperl-init-faces): Allow highlighting of local ($/).
+	(cperl-problems-old-emaxen): New variable (for the use of DOCSTRING).
+	(cperl-problems): Remove fixed problems.
+	(cperl-find-pods-heres): Recognize #-comments in m##x too.
+		Recognize charclasses (unless delimiter is \).
+	(cperl-fontify-syntaxically): Unwinding to safe was done in wrong order.
+	(cperl-regexp-scan): Update docs.
+	(cperl-beautify-regexp-piece): Use information got from regexp scan.
+
+	After 5.8:
+	Major user visible changes:
+	Recognition and fontification of character classes in RExen.
+	Variable indentation of RExen according to groups.
+
+	(cperl-find-pods-heres): Recognize POSIX classes in REx charclasses.
+		Fontify REx charclasses in variable-name face.
+		Fontify POSIX charclasses in "type" face.
+		Fontify unmatched "]" in function-name face.
+		Mark first-char of HERE-doc as `front-sticky'.
+		Reset `front-sticky' property when needed.
+	(cperl-calculate-indent): Indents //x -RExen accordning to parens level.
+	(cperl-to-comment-or-eol): Recognize ends of `syntax-type' constructs.
+	(cperl-backward-to-noncomment): Recognize stringy `syntax-type'
+		constructs.  Support `narrow'ed buffers.
+	(cperl-praise): Remove a reservation.
+	(cperl-make-indent): New function.
+	(cperl-indent-for-comment): Use `cperl-make-indent'.
+	(cperl-indent-line): Likewise.
+	(cperl-lineup): Likewise.
+	(cperl-beautify-regexp-piece): Likewise.
+	(cperl-contract-level): Likewise.
+	(cperl-toggle-set-debug-unwind): New function.
+		New menu entry for this.
+	(fill-paragraph-function): Use when `boundp'.
+	(cperl-calculate-indent): Take into account groups when indenting RExen.
+	(cperl-to-comment-or-eol): Recognize # which end a string.
+	(cperl-modify-syntax-type): Make only syntax-table property non-sticky.
+	(cperl-fill-paragraph): Return t: needed for `fill-paragraph-function'.
+	(cperl-fontify-syntaxically): More clear debugging message.
+	(cperl-pod2man-build-command): Check (XEmacs) `Man-filter-list'.
+	(cperl-init-faces): More complicated highlight even on XEmacs (new).
+	Merge cosmetic changes from XEmacs.
+
+	After 5.9:
+	(cperl-1+): Move to before the first use.
+	(cperl-1-): Likewise.
+
+	After 5.10:
+
+	This code may lock Emacs hard!!!  Use on your own risk!
+
+	(cperl-font-locking): New internal variable.
+	(cperl-beginning-of-property): New function.
+	(cperl-calculate-indent): Use `cperl-beginning-of-property'
+	instead of `previous-single-property-change'.
+	(cperl-unwind-to-safe): Likewise.
+	(cperl-after-expr-p): Likewise.
+	(cperl-get-here-doc-region): Likewise.
+	(cperl-font-lock-fontify-region-function): Likewise.
+	(cperl-to-comment-or-eol): Do not call `cperl-update-syntaxification'
+			recursively.
+		Bound `next-single-property-change' via `point-max'.
+	(cperl-unwind-to-safe): Bound likewise
+	(cperl-font-lock-fontify-region-function): Likewise
+	(cperl-find-pods-heres): Mark as recursive for `cperl-to-comment-or-eol'
+		Initialization of `cperl-font-lock-multiline-start' could be
+		missed if the "main" fontification did not run due to the
+		keyword being already fontified.
+	(cperl-pod-spell): Return t from do-one-chunk function.
+	(cperl-map-pods-heres): Stop when the worker returns nil.
+		Call `cperl-update-syntaxification'.
+	(cperl-get-here-doc-region): Call `cperl-update-syntaxification'.
+	(cperl-get-here-doc-delim): Remove unused function.
+
+	After 5.11:
+
+	The possible lockup of Emacs (introduced in 5.10) fixed.
+
+	(cperl-unwind-to-safe): `cperl-beginning-of-property' won't return nil.
+	(cperl-syntaxify-for-menu): New customization variable.
+	(cperl-select-this-pod-or-here-doc): New function.
+	(cperl-get-here-doc-region): Extra argument.
+		Do not adjust pos by 1.
+
+	New menu entries
+		(Perl/Tools): Selection of current POD or HERE-DOC section.
+		(Debugging CPerl:) backtrace on fontification.
+
+	After 5.12:
+	(cperl-cached-syntax-table): Use `car-safe'.
+	(cperl-forward-re): Remove spurious argument SET-ST.
+		Add documentation.
+	(cperl-forward-group-in-re): New function.
+	(cperl-find-pods-heres): Find and highlight (?{}) blocks in RExen
+	(XXXX Temporary (?) hack is to syntax-mark them as comment).
+
+	After 5.13:
+	(cperl-string-syntax-table): Make { and } not-grouping
+	  (Sometimes they ARE grouping in RExen, but matching them would only
+	   confuse in many situations when they are not)
+	(beginning-of-buffer): Replace two occurences with goto-char...
+	(cperl-calculate-indent): `char-after' could be nil...
+	(cperl-find-pods-heres): REx can start after "[" too.
+		Hightlight (??{}) in RExen too.
+	(cperl-maybe-white-and-comment-rex): New constant
+	(cperl-white-and-comment-rex): Likewise.
+		XXXX Not very efficient, but hard to make
+		better while keeping 1 group.
+
+	After 5.13:
+	(cperl-find-pods-heres): $foo << identifier() is not a HERE-DOC.
+		Likewise for 1 << identifier.
+
+	After 5.14:
+	(cperl-find-pods-heres): Different logic for $foo .= <<EOF etc.
+		Error-less condition-case could fail.
+	(cperl-font-lock-fontify-region-function): Likewise.
+	(cperl-init-faces): Likewise.
+
+	After 5.15:
+	(cperl-find-pods-heres): Support property REx-part2.
+	(cperl-calculate-indent): Likewise.
+		Don't special-case REx with non-empty 1st line.
+	(cperl-find-pods-heres): In RExen, highlight non-literal backslashes.
+		Invert highlighting of charclasses:
+			now the envelop is highlighted.
+		Highlight many others 0-length builtins.
+	(cperl-praise): Mention indenting and highlight in RExen.
+
+	After 5.15:
+	(cperl-find-pods-heres): Highlight capturing parens in REx.
+
+	After 5.16:
+	(cperl-find-pods-heres): Highlight '|' for alternation
+	Initialize `font-lock-warning-face' if not present.
+	(cperl-find-pods-heres): Use `font-lock-warning-face' instead of
+			 `font-lock-function-name-face'.
+	(cperl-look-at-leading-count): Likewise.
+	(cperl-find-pods-heres): Localize `font-lock-variable-name-face',
+			`font-lock-keyword-face' (needed for
+			batch processing), etc...
+		Use `font-lock-builtin-face' for builtin in REx
+			Now `font-lock-variable-name-face'
+			is used for interpolated variables
+		Use "talking aliases" for faces inside REx
+		Highlight parts of REx (except in charclasses)
+			according to the syntax and/or semantic
+		Syntax-mark a {}-part of (?{}) as "comment"
+			(it was the ()-part)
+		Better logic to distinguish what is what in REx
+	(cperl-tips-faces): Document REx highlighting
+	(cperl-praise): Mention REx syntax highlight etc.
+
+	After 5.17:
+	(cperl-find-sub-attrs): Would not always manage to print error message.
+	(cperl-find-pods-heres): Localize `font-lock-constant-face'.
+
+	After 5.18:
+	(cperl-find-pods-heres): Misprint in REx for parsing REx.
+		Very minor optimization.
+		`my-cperl-REx-modifiers-face' got quoted.
+		Recognize "print $foo <<END" as HERE-doc.
+		Put `REx-interpolated' text attribute if needed.
+	(cperl-invert-if-unless-modifiers): New function.
+	(cperl-backward-to-start-of-expr): Likewise.
+	(cperl-forward-to-end-of-expr): Likewise.
+	(cperl-invert-if-unless): Works in "the opposite way" too.
+		Cursor position on return is on the switch-word.
+		Indents comments better.
+	(REx-interpolated): New text attribute.
+	(cperl-next-interpolated-REx): New function.
+	(cperl-next-interpolated-REx-0): Likewise.
+	(cperl-next-interpolated-REx-1): Likewise.
+	"\C-c\C-x", "\C-c\C-y", "\C-c\C-v":	New keybinding for these functions.
+	Perl/Regexp menu: 3 new entries for `cperl-next-interpolated-REx'.
+	(cperl-praise): Mention finded interpolated RExen.
+
+	After 5.19:
+	(cperl-init-faces): Highlight %$foo, @$foo too.
+	(cperl-short-docs): Better docs for system, exec.
+	(cperl-find-pods-heres): Better detect << after print {FH} <<EOF etc.
+		Would not find HERE-doc ended by EOF without NL.
+	(cperl-short-docs): Correct not-doubled \-escapes.
+	start block: Put some `defvar' for stuff gone from XEmacs.
+
+	After 5.20:
+	initial comment: Extend copyright, fix email address.
+	(cperl-indent-comment-at-column-0): New customization variable.
+	(cperl-comment-indent): Indentation after $#a would increasy by 1.
+	(cperl-mode): Make `defun-prompt-regexp' grok BEGIN/END etc.
+	(cperl-find-pods-heres): Mark CODE of s///e as `syntax-type' `multiline'
+	(cperl-at-end-of-expr): Would fail if @BAR=12 follows after ";".
+	(cperl-init-faces): If `cperl-highlight-variables-indiscriminately'
+			highlight $ in $foo too (UNTESTED).
+	(cperl-set-style): Docstring missed some available styles.
+	toplevel: Menubar/Perl/Indent-Styles had FSF, now K&R.
+		Change "Current" to "Memorize Current".
+	(cperl-indent-wrt-brace): New customization variable; the default is
+		as for pre-5.2 version.
+	(cperl-styles-entries): Keep `cperl-extra-newline-before-brace-multiline'.
+	(cperl-style-alist): Likewise.
+	(cperl-fix-line-spacing): Support `cperl-merge-trailing-else' being nil,
+		and `cperl-extra-newline-before-brace' etc
+		being t
+	(cperl-indent-exp): Plans B and C to find continuation blocks even
+		if `cperl-extra-newline-before-brace' is t.
+
+	After 5.21:
+	Improve some docstrings concerning indentation.
+	(cperl-indent-rules-alist): New variable.
+	(cperl-sniff-for-indent): New function name
+		(separated from `cperl-calculate-indent').
+	(cperl-calculate-indent): Separate the sniffer and the indenter;
+		uses `cperl-sniff-for-indent' now.
+	(cperl-comment-indent): Test for `cperl-indent-comment-at-column-0'
+		was inverted;
+		Support `comment-column' = 0.
+
+2006-10-11  Martin Rudalics <rudalics@gmx.at>
+
+	* dnd.el (dnd-handle-one-url): Fix typo in doc-string.
+	* help-at-pt.el (scan-buf-move-to-region): Likewise.
+	* longlines.el (longlines-window-change-function): Likewise.
+	* simple.el (undo-ask-before-discard): Likewise.
+	* wid-edit.el (widget-field-prompt-internal)
+	(widget-documentation-link-p): Likewise.
+
+2006-10-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* progmodes/sh-script.el (sh-get-kw): | is not among the allowed chars
+	for a keyword.
+
+2006-10-09  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* newcomment.el (comment-valid-prefix-p): Make the check
+	more thorough.  From an idea by Martin Rudalics <rudalics@gmx.at>.
+	(comment-indent-new-line): Adjust call.
+
+2006-10-09  Ken Manheimer  <ken.manheimer@gmail.com>
+
+	* allout.el (allout-back-to-current-heading): Base on lower-level
+	routines to get proper disqualification of aberrant topics.
+
+2006-10-09  Richard Stallman  <rms@gnu.org>
+
+	* textmodes/two-column.el (2C-two-columns): Doc fix.
+
+2006-10-09  Kim F. Storm  <storm@cua.dk>
+
+	* shell.el (explicit-csh-args, explicit-bash-args): Add comment
+	about implicit use.
+
+2006-10-08  Richard Stallman  <rms@gnu.org>
+
+	* textmodes/two-column.el (2C-two-columns): Doc fix.
+
+2006-10-08  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* files.el: Mark `buffer-read-only' as safe-local-variable.
+
+2006-10-08  Nick Roberts  <nickrob@snap.net.nz>
+
+	* progmodes/gdb-ui.el (gdb-speedbar-expand-node): Burp if
+	GUD buffer has been killed.
+
+2006-10-07  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* completion.el (add-completions-from-c-buffer):
+	Don't presume an error's second element is a string.
+	Use looking-at rather than buffer-substring + member.
+
+2006-10-07  Eli Zaretskii  <eliz@gnu.org>
+
+	* mail/rmail.el (rmail-redecode-body): If the old encoding is
+	`undecided', call find-coding-systems-region to find a proper
+	non-trivial encoding.
+	(rmail-mime-charset-pattern): Allow a TAB between "Content-Type"
+	and "text/plain".
+
+2006-10-07  Kevin Ryde  <user42@zip.com.au>
+
+	* textmodes/reftex-vars.el (defgroup reftex): Update home page
+	url-link.
+
+	* strokes.el (defgroup strokes): Remove invalid url-link.
+
+2006-10-07  Magnus Henoch  <mange@freemail.hu>
+
+	* autoinsert.el (auto-insert-alist): Doc fix.
+
+2006-10-07  Johan Bockg,be(Brd  <bojohan@dd.chalmers.se>
+
+	* mouse-sel.el (mouse-insert-selection-internal):
+	Use insert-for-yank, so that yank handlers are run.
+
+2006-10-07  Kim F. Storm  <storm@cua.dk>
+
+	* ido.el (ido-file-extension-aux): Fix comparison.
+
+2006-10-06  Kim F. Storm  <storm@cua.dk>
+
+	* ido.el (ido-wide-find-dirs-or-files): Use shell-quote-argument.
+
+2006-10-05  Juanma Barranquero  <lekktu@gmail.com>
+
+	* emacs-lisp/advice.el (ad-remove-advice, ad-parse-arglist)
+	(ad-make-mapped-call): Use `let', not `let*'.
+
+2006-10-05  Chong Yidong  <cyd@stupidchicken.com>
+
+	* international/mule-cmds.el (coding-system-change-eol-conversion):
+	Ensure the coding system is initialized before calling
+	coding-system-eol-type.
+
+2006-10-04  Carsten Dominik  <dominik@science.uva.nl>
+
+	* textmodes/org.el (org-rm-props, org-activate-plain-links)
+	(org-activate-angle-links, org-activate-dates)
+	(org-activate-target-links, org-activate-camels)
+	(org-activate-tags): Add `rear-nonsticky' text property to avoid
+	textproperty keymaps from being active beyond the end of a line.
+	(org-unfontify-region): Also remove `rear-nonsticky' property.
+
+2006-10-04  Kenichi Handa  <handa@m17n.org>
+
+	* international/code-pages.el (next): Table fixed.
+
+2006-10-04  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* progmodes/sh-script.el (sh-prev-thing): Remove (forward-char 1) now
+	that it's been made unnecessary by removing narrowing.
+
+2006-10-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* progmodes/sh-script.el (sh-prev-thing): Massage to untangle the
+	control flow a bit, simplify another bit, and add comments.
+
+2006-10-03  David Kastrup  <dak@gnu.org>
+
+	* help.el (describe-mode): For clicks on mode-line, use "@"
+	interactive argument to get the major mode of the click instead of
+	the current buffer.
+
+	* isearch.el (isearch-mouse-2): Use new semantics of `key-binding'
+	in order to better redirect mouse-2 clicks.  Also allow default
+	bindings to apply.
+
+2006-10-03  Kim F. Storm  <storm@cua.dk>
+
+	* emacs-lisp/cl.el (pushnew-internal): Remove defvar.
+	(pushnew): Fix last change.
+
 2006-10-03  Denis St,A|(Bnkel  <dstuenkel@googlemail.com>  (tiny change)
 
 	* ibuf-ext.el (eval, view-and-eval) <define-ibuffer-op>:
@@ -7,7 +542,7 @@
 
 	* progmodes/sh-script.el (sh-prev-thing): Fix last change.
 
-2006-10-02  MIYOSHI Masanori <miyoshi@meadowy.org>  (tiny change)
+2006-10-02  MIYOSHI Masanori  <miyoshi@meadowy.org>  (tiny change)
 
 	* mail/smtpmail.el (smtpmail-try-auth-methods): Fix typo in
 	2006-09-28 commit.
@@ -16,7 +551,7 @@
 
 	* international/code-pages.el (iso-8859-6): Table fixed.
 
-2006-10-01  Chris Moore <christopher.ian.moore@gmail.com>  (tiny change)
+2006-10-01  Chris Moore  <christopher.ian.moore@gmail.com>  (tiny change)
 
 	* dired.el (dired-build-subdir-alist): Fix previous change.
 
@@ -141,7 +676,7 @@
 	* international/mule.el (after-insert-file-set-coding):
 	If VISIT, don't let set-buffer-multibyte make undo info.
 
-2006-09-28  Osamu Yamane  <yamane@green.ocn.ne.jp> (tiny change)
+2006-09-28  Osamu Yamane  <yamane@green.ocn.ne.jp>  (tiny change)
 
 	* mail/smtpmail.el (smtpmail-try-auth-methods): Do not break long
 	lines in base64-encoded authentication response.
@@ -217,7 +752,7 @@
 	* help.el (describe-key-briefly, describe-key): Don't expect an
 	extra up event if a down-event is generated by a popup menu.
 
-2006-09-23  Michal Nazarewicz  <mnazarewicz@gmail.com> (tiny change)
+2006-09-23  Michal Nazarewicz  <mnazarewicz@gmail.com>  (tiny change)
 
 	* textmodes/ispell.el (ispell-change-dictionary): Don't check the
 	local dictionary when changing the global dictionary.
@@ -265,8 +800,7 @@
 
 2006-09-22  Chong Yidong  <cyd@stupidchicken.com>
 
-	* files.el (save-some-buffers-action-alist): Display diff in
-	view-mode.
+	* files.el (save-some-buffers-action-alist): Display diff in view-mode.
 
 2006-09-22  Masatake YAMATO  <jet@gyve.org>
 
@@ -284,11 +818,6 @@
 	* mouse.el (mouse-posn-property): Fix typo for `event-start' in
 	doc string.
 
-2006-09-21  Kim F. Storm  <storm@cua.dk>
-
-	* emacs-lisp/cl.el (pushnew-internal): Remove defvar.
-	(pushnew): Fix last change.
-
 2006-09-21  Kenichi Handa  <handa@m17n.org>
 
 	* language/european.el ("Latin-1"): Add windows-1252 to
@@ -305,8 +834,7 @@
 
 2006-09-20  Kenichi Handa  <handa@m17n.org>
 
-	* isearch.el (isearch-process-search-char): Cancel the previous
-	change.
+	* isearch.el (isearch-process-search-char): Cancel the previous change.
 	(isearch-search-string): New function.
 	(isearch-search): Use isearch-search-string.
 	(isearch-lazy-highlight-search): Likewise.
@@ -4192,7 +4720,7 @@
 	compatibility function (Emacs 18/19).
 	(idlwave-is-continuation-line): Always return point at start of
 	previous non-blank continuation line.
-	`keyword-parameters': Fix continued comment font-lock matcher.
+	(keyword-parameters): Fix continued comment font-lock matcher.
 	(idlwave-font-lock-fontify-region): Written, use as
 	font-lock-fontify-region-function, to fix continued keyword
 	fontification issues.
@@ -4445,7 +4973,7 @@
 	(mac-TIFF-to-string): New functions.
 	(x-get-selection, x-selection-value)
 	(mac-select-convert-to-string): Use them.
-	(mac-text-encoding-mac-japanese-basic-variant):	New constant.
+	(mac-text-encoding-mac-japanese-basic-variant): New constant.
 	(mac-dnd-types-alist): New customization variable.
 	(mac-dnd-handle-furl, mac-dnd-handle-hfs, mac-dnd-insert-utxt)
 	(mac-dnd-insert-TEXT, mac-dnd-insert-TIFF, mac-dnd-drop-data)
--- a/lisp/allout.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/allout.el	Sun Oct 15 02:54:13 2006 +0000
@@ -2736,24 +2736,22 @@
     (1- allout-recent-prefix-end)))
 ;;;_   > allout-back-to-current-heading ()
 (defun allout-back-to-current-heading ()
-  "Move to heading line of current topic, or beginning if already on the line.
-
-Return value of point, unless we started outside of (before any) topics,
-in which case we return nil."
+  "Move to heading line of current topic, or beginning if not in a topic.
+
+If interactive, we position at the end of the prefix.
+
+Return value of resulting point, unless we started outside
+of (before any) topics, in which case we return nil."
 
   (allout-beginning-of-current-line)
-  (if (or (allout-on-current-heading-p)
-          (and (re-search-backward (concat "^\\(" allout-regexp "\\)")
-                                   nil 'move)
-               (progn (while (allout-hidden-p)
-                        (allout-beginning-of-current-line)
-                        (if (not (looking-at allout-regexp))
-                            (re-search-backward allout-regexp
-                                                nil 'move)))
-                      (allout-prefix-data))))
-      (if (interactive-p)
-          (allout-end-of-prefix)
-        (point))))
+  (let ((bol-point (point)))
+    (allout-goto-prefix-doublechecked)
+    (if (<= (point) bol-point)
+        (if (interactive-p)
+            (allout-end-of-prefix)
+          (point))
+      (goto-char (point-min))
+      nil)))
 ;;;_   > allout-back-to-heading ()
 (defalias 'allout-back-to-heading 'allout-back-to-current-heading)
 ;;;_   > allout-pre-next-prefix ()
--- a/lisp/apropos.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/apropos.el	Sun Oct 15 02:54:13 2006 +0000
@@ -142,7 +142,7 @@
   "Apropos pattern as entered by user.")
 
 (defvar apropos-pattern-quoted nil
-  "Apropos pattern passed through `regexp-quoute'.")
+  "Apropos pattern passed through `regexp-quote'.")
 
 (defvar apropos-words ()
   "Current list of apropos words extracted from `apropos-pattern'.")
--- a/lisp/autoinsert.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/autoinsert.el	Sun Oct 15 02:54:13 2006 +0000
@@ -215,7 +215,7 @@
 ;;; " (file-name-nondirectory (buffer-file-name)) " ends here\n"))
   "A list specifying text to insert by default into a new file.
 Elements look like (CONDITION . ACTION) or ((CONDITION . DESCRIPTION) . ACTION).
-CONDITION maybe a regexp that must match the new file's name, or it may be
+CONDITION may be a regexp that must match the new file's name, or it may be
 a symbol that must match the major mode for this element to apply.
 Only the first matching element is effective.
 Optional DESCRIPTION is a string for filling `auto-insert-prompt'.
--- a/lisp/completion.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/completion.el	Sun Oct 15 02:54:13 2006 +0000
@@ -1885,7 +1885,7 @@
     (save-excursion
       (goto-char (point-min))
       (catch 'finish-add-completions
-	(with-syntax-table completion-c-def-syntax-table
+        (with-syntax-table completion-c-def-syntax-table
           (while t
             ;; we loop here only when scan-sexps fails
             ;; (i.e. unbalance exps.)
@@ -1895,8 +1895,7 @@
                   (cond
                    ((= (preceding-char) ?#)
                     ;; preprocessor macro, see if it's one we handle
-                    (setq string (buffer-substring (point) (+ (point) 6)))
-                    (cond ((member string '("define" "ifdef "))
+                    (cond ((looking-at "\\(define\\|ifdef\\)\\>")
                            ;; skip forward over definition symbol
                            ;; and add it to database
                            (and (forward-word 2)
@@ -1944,9 +1943,9 @@
                (throw 'finish-add-completions t))
               (error
                ;; Check for failure in scan-sexps
-               (if (or (string-equal (nth 1 e)
-                                     "Containing expression ends prematurely")
-                       (string-equal (nth 1 e) "Unbalanced parentheses"))
+               (if (member (nth 1 e)
+                           '("Containing expression ends prematurely"
+                             "Unbalanced parentheses"))
                    ;; unbalanced paren., keep going
                    ;;(ding)
                    (forward-line 1)
--- a/lisp/dnd.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/dnd.el	Sun Oct 15 02:54:13 2006 +0000
@@ -91,7 +91,7 @@
 If no match is found here, and the value of `browse-url-browser-function'
 is a pair of (REGEXP . FUNCTION), those regexps are tried for a match.
 If no match is found, just call `dnd-insert-text'.
-WINDOW is where the drop happend, ACTION is the action for the drop,
+WINDOW is where the drop happened, ACTION is the action for the drop,
 URL is what has been dropped.
 Returns ACTION."
   (require 'browse-url)
--- a/lisp/emacs-lisp/advice.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/emacs-lisp/advice.el	Sun Oct 15 02:54:13 2006 +0000
@@ -2409,7 +2409,7 @@
 in that CLASS."
   (interactive (ad-read-advice-specification "Remove advice of"))
   (if (ad-is-advised function)
-      (let* ((advice-to-remove (ad-find-advice function class name)))
+      (let ((advice-to-remove (ad-find-advice function class name)))
 	(if advice-to-remove
 	    (ad-set-advice-info-field
 	     function class
@@ -2747,7 +2747,7 @@
 A three-element list is returned, where the 1st element is the list of
 required arguments, the 2nd is the list of optional arguments, and the 3rd
 is the name of an optional rest parameter (or nil)."
-  (let* (required optional rest)
+  (let (required optional rest)
     (setq rest (car (cdr (memq '&rest arglist))))
     (if rest (setq arglist (reverse (cdr (memq '&rest (reverse arglist))))))
     (setq optional (cdr (memq '&optional arglist)))
@@ -2958,7 +2958,7 @@
 
 (defun ad-make-mapped-call (source-arglist target-arglist target-function)
   "Make form to call TARGET-FUNCTION with args from SOURCE-ARGLIST."
-  (let* ((mapped-form (ad-map-arglists source-arglist target-arglist)))
+  (let ((mapped-form (ad-map-arglists source-arglist target-arglist)))
     (if (eq (car mapped-form) 'funcall)
 	(cons target-function (cdr (cdr mapped-form)))
       (prog1 mapped-form
--- a/lisp/emacs-lisp/cl.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/emacs-lisp/cl.el	Sun Oct 15 02:54:13 2006 +0000
@@ -149,8 +149,6 @@
   (if (symbolp place) (list 'setq place (list 'cons x place))
     (list 'callf2 'cons x place)))
 
-(defvar pushnew-internal)
-
 (defmacro pushnew (x place &rest keys)
   "(pushnew X PLACE): insert X at the head of the list if not already there.
 Like (push X PLACE), except that the list is unmodified if X is `eql' to
@@ -159,7 +157,8 @@
 \n(fn X PLACE [KEYWORD VALUE]...)"
   (if (symbolp place)
       (if (null keys)
- 	  `(if (memql ,x ,place) ,place (setq ,place (cons ,x ,place)))
+ 	  `(let ((x ,x))
+	     (if (memql x ,place) ,place (setq ,place (cons x ,place))))
 	(list 'setq place (list* 'adjoin x place keys)))
     (list* 'callf2 'adjoin x place keys)))
 
--- a/lisp/files.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/files.el	Sun Oct 15 02:54:13 2006 +0000
@@ -514,6 +514,9 @@
   :type 'boolean
   :group 'view)
 
+(defvar file-name-history nil
+  "History list of file names entered in the minibuffer.")
+
 (put 'ange-ftp-completion-hook-function 'safe-magic t)
 (defun ange-ftp-completion-hook-function (op &rest args)
   "Provides support for ange-ftp host name completion.
@@ -1906,7 +1909,7 @@
      ("\\.[sS]\\'" . asm-mode)
      ("\\.asm\\'" . asm-mode)
      ("[cC]hange\\.?[lL]og?\\'" . change-log-mode)
-     ("[cC]hange[lL]og\\.[0-9]+\\'" . change-log-mode)
+     ("[cC]hange[lL]og[-.][0-9]+\\'" . change-log-mode)
      ("\\$CHANGE_LOG\\$\\.TXT" . change-log-mode)
      ("\\.scm\\.[0-9]*\\'" . scheme-mode)
      ("\\.[ck]?sh\\'\\|\\.shar\\'\\|/\\.z?profile\\'" . sh-mode)
@@ -2397,10 +2400,10 @@
 ;;
 ;; For variables defined in the C source code the declaration should go here:
 
-;; FIXME: Some variables should be moved according to the rules above.
 (mapc (lambda (pair)
 	(put (car pair) 'safe-local-variable (cdr pair)))
-      '((fill-column                     . integerp) ;; C source code
+      '((buffer-read-only                . booleanp) ;; C source code
+	(fill-column                     . integerp) ;; C source code
 	(indent-tabs-mode                . booleanp) ;; C source code
 	(left-margin                     . integerp) ;; C source code
 	(no-update-autoloads             . booleanp)
@@ -3730,7 +3733,7 @@
        (recursive-edit)
        ;; Return nil to ask about BUF again.
        nil)
-     "view this file")
+     "view this buffer")
     (?d (lambda (buf)
 	  (save-window-excursion
 	    (diff-buffer-with-file buf))
@@ -3738,7 +3741,7 @@
 		       (lambda (ignore) (exit-recursive-edit)))
 	  (recursive-edit)
 	  nil)
-	"view changes in file"))
+	"view changes in this buffer"))
   "ACTION-ALIST argument used in call to `map-y-or-n-p'.")
 
 (defvar buffer-save-without-query nil
--- a/lisp/filesets.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/filesets.el	Sun Oct 15 02:54:13 2006 +0000
@@ -1603,7 +1603,7 @@
 		      ((equal arg "<file-name>")
 		       (buffer-file-name))
 		      ((equal arg "<<file-name>>")
-		       (filesets-quote (buffer-file-name)))
+		       (shell-quote-argument (buffer-file-name)))
 		      (t
 		       arg))))
 
@@ -1701,7 +1701,7 @@
 		  ok)
 	      t)))
     (when ok
-      (let ((cmd (format txt (buffer-file-name))))
+      (let ((cmd (format txt (shell-quote-argument (buffer-file-name)))))
 	(message "Filesets: %s" cmd)
 	(filesets-cmd-show-result cmd
 				  (shell-command-to-string cmd))))))
--- a/lisp/gnus/ChangeLog	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/gnus/ChangeLog	Sun Oct 15 02:54:13 2006 +0000
@@ -1,3 +1,56 @@
+2006-10-13  Andreas Seltenreich  <uwi7@rz.uni-karlsruhe.de>
+
+	* mm-uu.el (mm-uu-pgp-signed-extract-1): Use RFC 2440 definition of
+	"blank line" when searching for end of armor headers.
+
+2006-10-11  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* gmm-utils.el (gmm-write-region): Fix variable name.
+
+2006-10-10  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* gmm-utils.el (gmm-write-region): New function based on compatibility
+	code from `mm-make-temp-file'.
+
+	* mm-util.el (mm-make-temp-file): Use `gmm-write-region'.
+
+	* nnmaildir.el (nnmaildir--update-nov)
+	(nnmaildir-request-replace-article, nnmaildir-request-accept-article):
+	Use `gmm-write-region'.
+
+2006-10-04  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* gnus-sum.el (gnus-summary-make-menu-bar): Clarify
+	gnus-summary-limit-to-articles.
+
+2006-10-04  Romain Francoise  <romain@orebokech.com>
+
+	* gnus-util.el (gnus-alist-to-hashtable, gnus-hashtable-to-alist):
+	Moved here (and renamed) from gnus-registry.el.
+
+	* gnus-registry.el: Require gnus-util.
+	Use `gnus-alist-to-hashtable' and `gnus-hashtable-to-alist'.
+
+2006-10-04  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* pop3.el (pop3-authentication-scheme): Clarify doc.
+	(pop3-movemail): Warn about pop3-leave-mail-on-server.
+
+2006-10-04  Dave Love  <fx@gnu.org>
+
+	* pop3.el (pop3-authentication-scheme): Add custom version.
+
+2006-10-04  Jesper Harder  <harder@ifa.au.dk>
+
+	* pop3.el (pop3-leave-mail-on-server): Don't quote nil in
+	doc string.  Improve doc string.
+
+2006-10-03  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+	* gnus-util.el (gnus-with-local-quit): New macro.
+
+	* gnus-demon.el (gnus-demon): Replace with-local-quit with it.
+
 2006-09-28  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gmm-utils.el (gmm): Adjust custom version.
@@ -1273,7 +1326,7 @@
 	as a buffer-local variable.  This avoids creating truncated
 	dribble files as a result of a hang up, eg.
 
-2005-11-04 Ken Manheimer  <ken.manheimer@gmail.com>
+2005-11-04  Ken Manheimer  <ken.manheimer@gmail.com>
 
 	* pgg-pgp.el (pgg-pgp-encrypt-region, pgg-pgp-decrypt-region)
 	(pgg-pgp-encrypt-symmetric-region, pgg-pgp-encrypt-symmetric)
@@ -4017,7 +4070,7 @@
 
 	* gnus-sum.el (gnus-summary-insert-subject): Remove list identifiers.
 
-2004-09-03  Hiroshi Fujishima <pooh@nature.tsukuba.ac.jp>  (tiny change)
+2004-09-03  Hiroshi Fujishima  <pooh@nature.tsukuba.ac.jp>  (tiny change)
 
 	* spam-stat.el (spam-stat-reduce-size): Set spam-stat-dirty.
 	(spam-stat-save): Accept prefix argument.
@@ -4164,17 +4217,17 @@
 
 	* gnus-sum.el (gnus-newsgroup-variables): Doc fix.
 
-2004-08-26  YAGI Tatsuya <ynyaaa@ybb.ne.jp>  (tiny change)
+2004-08-26  YAGI Tatsuya  <ynyaaa@ybb.ne.jp>  (tiny change)
 
 	* gnus-art.el (gnus-article-next-page): Fix the way to find a real
 	end-of-buffer.
 
-2004-08-26  Stefan Wiens <s.wi@gmx.net>  (tiny change)
+2004-08-26  Stefan Wiens  <s.wi@gmx.net>  (tiny change)
 
 	* gnus-sum.el (gnus-read-header): Don't remove a header for the
 	parent article of a sparse article in the thread hashtb.
 
-2004-08-26  David Hedbor <dhedbor@real.com>  (tiny change)
+2004-08-26  David Hedbor  <dhedbor@real.com>  (tiny change)
 
 	* nnmail.el (nnmail-split-lowercase-expanded): New user option.
 	(nnmail-expand-newtext): Lowercase expanded entries if
@@ -4370,7 +4423,7 @@
 	* gnus-msg.el (gnus-summary-followup-with-original):
 	Document yanking of region when active.
 
-2004-04-13 Kevin Greiner  <kgreiner@xpediantsolutions.com>
+2004-04-13  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el: Merged 7.3 through 7.7 updates into branch.
 	Revision 7.2 changes excluded to maintain compatibility with all
--- a/lisp/gnus/ChangeLog.2	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/gnus/ChangeLog.2	Sun Oct 15 02:54:13 2006 +0000
@@ -1,4 +1,4 @@
-2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2004-01-04  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Gnus v5.10.6 is released.
 
@@ -10,7 +10,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2004-01-04 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2004-01-04  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Gnus v5.10.5 is released.
 
@@ -58,7 +58,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2004-01-03 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2004-01-03  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Gnus v5.10.4 is released.
 
@@ -81,10 +81,9 @@
 	* gnus-nocem.el (gnus-nocem-enter-article): Use the real group
 	hashtb (tiny patch).
 
-2004-01-02  Kai Grossjohann  <kai@emptydomain.de>
-
-	* nnml.el (nnml-save-mail): Grok compressed articles.  From
-	Michael Albinus <Michael.Albinus@alcatel.de>.
+2004-01-02  Michael Albinus  <Michael.Albinus@alcatel.de>
+
+	* nnml.el (nnml-save-mail): Grok compressed articles.
 
 2004-01-02  Teodor Zlatanov  <tzz@lifelogs.com>
 
@@ -144,20 +143,16 @@
 	(gnus-summary-goto-article): Allow `%40'.
 	(gnus-summary-refer-article): Convert `%40' to `@'.
 
-2003-12-30  Simon Josefsson  <jas@extundo.com>
+2003-12-30  Arne J,Ax(Brgensen  <arne@arnested.dk>
 
 	* smime.el (smime-crl-check): New.
-	(smime-verify-region): Use it.  From Arne J,Ax(Brgensen
-	<arne@arnested.dk> in <87llpk9v5q.fsf@seamus.arnested.dk> (tiny
-	change).
+	(smime-verify-region): Use it.
 
 2003-12-30  Reiner Steib  <Reiner.Steib@gmx.de>
 
-	* gnus-score.el (gnus-score-edit-file-at-point): Consider the
-	whole match element.  From Karl Pfl,Ad(Bsterer <sigurd@12move.de>.
-	(gnus-score-find-trace): Use it.  Added `f' and `t' commands,
-	added quick help.  With some suggestions from Karl Pfl,Ad(Bsterer
-	<sigurd@12move.de>.
+	(gnus-score-find-trace): Use gnus-score-edit-file-at-point.  Added
+	`f' and `t' commands, added quick help.  With some suggestions
+	from Karl Pfl,Ad(Bsterer <sigurd@12move.de>.
 
 	* gnus-util.el (gnus-emacs-version): Added doc-string.
 
@@ -165,6 +160,11 @@
 	(mml-attach-file): Use it.
 	(mml-preview): Added MIME preview to gnus-buffers.
 
+2003-12-30  Karl Pfl,Ad(Bsterer  <sigurd@12move.de>
+
+	* gnus-score.el (gnus-score-edit-file-at-point): Consider the
+	whole match element.
+
 2003-12-30  Jesper Harder  <harder@ifa.au.dk>
 
 	* gnus-sum.el (gnus-summary-make-menu-bar): Add ellipses.
@@ -179,7 +179,7 @@
 	(gnus-secondary-method-p): Extend servers to methods before comparing.
 	(gnus-secondary-method-p): Revert.
 
-2003-12-30 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-12-30  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Gnus v5.10.3 is released.
 
@@ -189,7 +189,7 @@
 	Suggested by Steinar Bang <sb@dod.no>.
 	(gnus-agent-auto-agentize-methods): Customize.
 
-2003-12-29  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-12-29  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 	* gnus.el (gnus-server-to-method): Fixed bug in 2003-12-22
 	check-in.
 
@@ -210,10 +210,9 @@
 	* mml1991.el (mml1991-pgg-encrypt): Decode according to CTE before
 	encrypting.
 
-2003-12-28  Jesper Harder  <harder@ifa.au.dk>
+2003-12-28  Ivan Boldyrev  <boldyrev@uiggm.nsc.ru>  (tiny change).
 
 	* mml1991.el (mml1991-pgg-sign): Use unibyte when re-encoding.
-	From Ivan Boldyrev <boldyrev@uiggm.nsc.ru> (tiny change).
 
 2003-12-26  Katsumi Yamaoka  <yamaoka@jpl.org>
 
@@ -243,7 +242,7 @@
 	* dgnushack.el (dgnushack-compile): Increase the value for
 	max-specpdl-size when compiling Gnus with Emacs 20.
 
-2003-12-22  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-12-22  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 	* gnus-int.el (gnus-open-server): Fixed the server status such
 	that an agentized server, when opened offline, has a status of
 	offline.  Also fixes bug whereby the agent's backend was called
@@ -268,7 +267,7 @@
 	* gnus-agent.el (gnus-agent-read-agentview): Use
 	car-less-than-car.
 
-2003-12-20  Artem Chuprina <ran@ran.pp.ru>  (tiny change)
+2003-12-20  Artem Chuprina  <ran@ran.pp.ru>  (tiny change)
 
 	* message.el (message-yank-buffer): Bind message-reply-buffer to
 	a buffer rather than a string.
@@ -379,7 +378,7 @@
 
 	* pgg.el (pgg-run-at-time): Ditto.
 
-2003-12-11  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-12-11  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agent-possibly-alter-active): New Function.
 	(gnus-agent-regenerate-group): When necessary, alter the group's
@@ -401,17 +400,14 @@
 
 	* message.el (message-get-reply-headers): Narrow to headers.
 
-2003-12-10  Teodor Zlatanov  <tzz@lifelogs.com>
-
-	* spam.el (spam-disable-spam-split-during-ham-respool): new
-	variable.  From lorentey@elte.hu (L,Bu(Brentey K,Ba(Broly)
-	(spam-ham-copy-or-move-routine): respect
-	spam-disable-spam-split-during-ham-respool.  From
-	lorentey@elte.hu (L,Bu(Brentey K,Ba(Broly)
-	(spam-split-disabled): new variable.  From
-	lorentey@elte.hu (L,Bu(Brentey K,Ba(Broly)
-	(spam-split): respect spam-split-disabled.  From
-	lorentey@elte.hu (L,Bu(Brentey K,Ba(Broly)
+2003-12-10  L,Bu(Brentey K,Ba(Broly  <lorentey@elte.hu>
+
+	* spam.el (spam-disable-spam-split-during-ham-respool): New
+	variable.
+	(spam-ham-copy-or-move-routine): Respect
+	spam-disable-spam-split-during-ham-respool.
+	(spam-split-disabled): New variable.
+	(spam-split): Respect spam-split-disabled.
 
 2003-12-10  Katsumi Yamaoka  <yamaoka@jpl.org>
 
@@ -427,19 +423,21 @@
 	input.
 	(pgg-decode-armor-region): Don't parse packet if decoding fail.
 
-2003-12-09  Teodor Zlatanov  <tzz@lifelogs.com>
+2003-12-09  L,Bu(Brentey K,Ba(Broly  <lorentey@elte.hu>
 
 	* spam.el (spam-check-bogofilter): run in the correct buffer.
-	From lorentey@elte.hu (L,Bu(Brentey K,Ba(Broly).
-	(spam-bogofilter-database-directory): correct customization
-	group.  From Xavier Maillard <zedek@gnu-rox.org>.
+
+2003-12-09  Xavier Maillard  <zedek@gnu-rox.org>
+
+	* spam.el (spam-bogofilter-database-directory): correct
+	customization group.
 
 2003-12-09  Per Abrahamsen  <abraham@dina.kvl.dk>
 
 	* nnmail.el (nnmail-lazy, nnmail-split-fancy): New widgets.
 	(nnmail-split-fancy): Use it.
 
-2003-12-08  Joel Ray Holveck <joelh@piquan.org>  (tiny change)
+2003-12-08  Joel Ray Holveck  <joelh@piquan.org>  (tiny change)
 
 	* gnus-sum.el (gnus-summary-save-parts-1): Consider the "name"
 	parameter of Content-Type.
@@ -509,32 +507,32 @@
 	* gnus-util.el: Require alist and provide tm-view when compiling
 	with XEmacs.
 
-2003-12-03  Steve Youngs  <sryoungs@bigpond.net.au>
+2003-12-03  Jerry James  <james@xemacs.org>  (tiny change)
 
 	* gnus-xmas.el: Add autoloads for macros defined in gnus.el.
-	From Jerry James <james@xemacs.org>.
 
 	* gnus-util.el: Get rmail definitions when compiling.
-	From Jerry James <james@xemacs.org>.
 
 	* dns.el: Require gnus-xmas at compile time instead of trying to
 	autoload `gnus-xmas-open-network-stream' because it wasn't picking
 	up the macro.
-	From Jerry James <james@xemacs.org>.
-
-2003-12-01  Kevin Greiner <kgreiner@xpediantsolutions.com>
+
+2003-12-01  Kevin Greiner  <kgreiner@xpediantsolutions.com>
+
 	* gnus-agent.el (gnus-agent-consider-all-articles): Updated
 	docstring.
 	(gnus-predicate-implies-unread, gnus-predicate-implies-unread-1):
 	Fixed implementation such that the predicate `true' no longer
 	evaluates to t.
 
-2003-12-01  Teodor Zlatanov  <tzz@lifelogs.com>
+2003-12-01  Adrian Lanz  <lanz@fowi.ethz.ch>  (tiny change)
 
 	* spam.el (spam-check-bogofilter): check the bogofilter headers
-	AFTER the save-excursion scope is over.  From Adrian Lanz
-	<lanz@fowi.ethz.ch>.
-	(spam-fetch-field-message-id-fast): doc fix
+	AFTER the save-excursion scope is over.
+
+2003-12-01  Teodor Zlatanov  <tzz@lifelogs.com>
+
+	* spam.el (spam-fetch-field-message-id-fast): Doc fix
 
 2003-12-01  Simon Josefsson  <jas@extundo.com>
 
@@ -549,24 +547,26 @@
 	(gnus-agent-expire-group-1): Only print a message for an article
 	when there actually was something done to it.
 
+	* gnus-agent.el (gnus-agent-expire-unagentized-dirs): Custom fix.
+
+2003-11-30  Kenichi Handa  <handa@m17n.org>
+
 	* mm-util.el (mm-enable-multibyte): Call set-buffer-multibyte with
 	'to argument.  Fixes something or other in Emacs 22, and is
-	backwards compatible.  From Kenichi Handa <handa@m17n.org>.
-
-	* gnus-agent.el (gnus-agent-expire-unagentized-dirs): Custom fix.
+	backwards compatible.
 
 2003-11-30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
 	* gnus-agent.el (gnus-agent-covered-methods): Remove nil methods.
 
-2003-11-29  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-11-29  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 	* gnus-start.el (gnus-activate-group): The active range of the
 	group must include the articles known to the agent.
 
 	* gnus.el (gnus-agent-method-p): Accept a server name as the
 	method being tested.
 
-2003-11-29  Alexander Kreuzer <alex@freesources.org>  (tiny change)
+2003-11-29  Alexander Kreuzer  <alex@freesources.org>  (tiny change)
 
 	* nnrss.el (nnrss-check-group): Set xml when nnrss-use-local is t.
 
@@ -669,7 +669,7 @@
 
 	* dgnushack.el (mapc): Add the compiler macro for Emacs 20.
 
-2003-11-24  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-11-24  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 	* gnus-srvr.el (gnus-server-insert-server-line): The server names
 	used in gnus-agent are different (for example, the native server
 	uses the alias "native") from the names in gnus-srvr.
@@ -681,7 +681,7 @@
 	new gnus-server-named-server function to get gnus-agent compatible
 	names from the server buffer.
 
-2003-11-20  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-11-20  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus.el (gnus-agent-covered-methods): Documented use of
 	named servers, not methods, to identity agentized groups.
@@ -762,12 +762,12 @@
 	* gnus-score.el (gnus-decay-score): Return a surely smaller value
 	than the argument in XEmacs.
 
-2003-11-18  Reiner Steib  <Reiner.Steib@gmx.de>
+2003-11-18  Sam Steingold  <sds@gnu.org>
 
 	* message.el (message-insert-to): Don't use `gnus-message'.
 	(message-header-synonyms): New variable.
 	(message-carefully-insert-headers): Use it (check for synonyms).
-	Added doc-string.  From Sam Steingold <sds@gnu.org>.
+	Added doc-string.
 
 2003-11-17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
@@ -848,12 +848,15 @@
 
 2003-11-10  Reiner Steib  <Reiner.Steib@gmx.de>
 
+	* message.el (message-mode-field-menu): Moved some entries, added
+	`message-insert-wide-reply'.
+	(message-change-subject): Fixed comment.
+
+2003-11-10  Sam Steingold  <sds@gnu.org>
+
 	* message.el (message-insert-to): Do error out when the user
 	requested no Cc.  Don't insert empty To.  Can be added to
-	`message-setup-hook' now.  From Sam Steingold <sds@gnu.org>.
-	(message-mode-field-menu): Moved some entries, added
-	`message-insert-wide-reply'.
-	(message-change-subject): Fixed comment.
+	`message-setup-hook' now.
 
 2003-11-10  Simon Josefsson  <jas@extundo.com>
 
@@ -870,7 +873,7 @@
 	* pgg-gpg.el (pgg-gpg-all-secret-keys): New variable.
 	(pgg-gpg-lookup-all-secret-keys): New function.
 	(pgg-gpg-select-matching-key): Likewise.
-	(pgg-gpg-decrypt-region): Use new functions.  
+	(pgg-gpg-decrypt-region): Use new functions.
 
 2003-11-07  Teodor Zlatanov  <tzz@lifelogs.com>
 
@@ -1321,8 +1324,9 @@
 	* gnus-sum.el (gnus-summary-respool-query): Don't narrow to head,
 	it's done by nnmail-article-group.
 
+2003-10-12  Mark Hood  <markhood@speakeasy.net>  (tiny change)
+
 	* gnus-uu.el (gnus-uu-grab-articles): Fix misplaced parens.
-	From Mark Hood <markhood@speakeasy.net> (tiny change)
 
 2003-10-10  Jesper Harder  <harder@ifa.au.dk>
 
@@ -1386,10 +1390,10 @@
 
 	* spam.el (spam-install-hooks-function): Added Autoload cookie.
 
-2003-10-02  Jesper Harder  <harder@ifa.au.dk>
+2003-10-02  Michael Shields  <shields@msrl.com>
 
 	* pgg-def.el (pgg-default-keyserver-address): Change to
-	subkeys.pgp.net.  From Michael Shields <shields@msrl.com>
+	subkeys.pgp.net.
 
 2003-10-01  Simon Josefsson  <jas@extundo.com>
 
@@ -1463,19 +1467,21 @@
 
 	* gnus.el (gnus-group-charter-alist): Update.
 
+2003-09-10  Eric Knauel	  <knauel@informatik.uni-tuebingen.de>
+
+	* spam-report.el: Use mm-url.el functions for external URL loading
+	when the built-in HTTP GET is insufficient (e.g. proxies are in
+	the way).
+
 2003-09-10  Teodor Zlatanov  <tzz@lifelogs.com>
 
-	* spam-report.el: use mm-url.el functions for external URL
-	loading when the built-in HTTP GET is insufficient (e.g. proxies
-	are in the way).  From Eric Knauel
-	<knauel@informatik.uni-tuebingen.de>.
-	(spam-report-url-ping-function): new option, defaults to the
-	built-in HTTP GET (spam-report-url-ping-plain)
-	(spam-report-url-ping): calls spam-report-url-ping-function now
-	(spam-report-url-ping-plain): new function, does what
-	spam-report-url-ping used to do
-	(spam-report-url-ping-mm-url): function that delegates to
-	mm-url.el (autoloaded)
+	* spam-report.el (spam-report-url-ping-function): New option,
+	defaults to the built-in HTTP GET (spam-report-url-ping-plain).
+	(spam-report-url-ping): Call spam-report-url-ping-function.
+	(spam-report-url-ping-plain): New function, does what
+	spam-report-url-ping used to do.
+	(spam-report-url-ping-mm-url): Function that delegates to
+	mm-url.el (autoloaded).
 
 2003-09-08  Teodor Zlatanov  <tzz@lifelogs.com>
 
@@ -1576,12 +1582,11 @@
 	(mml-insert-mime-headers): Use it.  Based on (tiny) patch from
 	Lars Balker Rasmussen <lars@balker.org>.
 
-2003-08-30  Simon Josefsson  <jas@extundo.com>
+2003-08-30  Gaute Strokkenes  <gs234@srcf.ucam.org>  (tiny change)
 
 	* mail-source.el (mail-source-fetch-imap): Pass correct buffer to
 	imap-open, reverts 2003-03-17 change.  Reverse remove before
-	calling gnus-compress-sequence.  From Gaute Strokkenes
-	<gs234@srcf.ucam.org> (tiny change).
+	calling gnus-compress-sequence.
 
 2003-08-29  Simon Josefsson  <jas@extundo.com>
 
@@ -1601,11 +1606,10 @@
 	the files it may be using.  Reported by David Coe
 	<davidc@debian.org>.
 
-2003-08-27  Jesper Harder  <harder@ifa.au.dk>
+2003-08-27  Vagn Johansen  <v@johansen.mail.dk>  (tiny change)
 
 	* gnus-cache.el (gnus-cache-generate-active): Fix bug in
-	replacement.  From Vagn Johansen <v@johansen.mail.dk> (tiny
-	change).
+	replacement.
 
 2003-08-25  Katsumi Yamaoka  <yamaoka@jpl.org>
 
@@ -1711,10 +1715,9 @@
 	* gnus.el (gnus-refer-article-method): Ditto.
 	* message.el (message-courtesy-message): Ditto.
 
-2003-08-06  Jesper Harder  <harder@ifa.au.dk>
+2003-08-06  Chunyu Wang  <spr@db.cs.hit.edu.cn>  (tiny patch)
 
 	* gnus-art.el (gnus-header-face-alist): Fix "Newsgroups" entry.
-	From Chunyu Wang <spr@db.cs.hit.edu.cn> (tiny patch)
 
 2003-08-05  Katsumi Yamaoka  <yamaoka@jpl.org>
 
@@ -1840,8 +1843,7 @@
 	* imap.el (imap-arrival-filter): Fix test for missing process
 	buffer.
 
-2003-07-09  Kai Gro,A_(Bjohann  <kai.grossjohann@gmx.net>
-	From Gaute B Strokkenes <gs234@cam.ac.uk> (tiny patch).
+2003-07-09  Gaute B Strokkenes  <gs234@cam.ac.uk>  (tiny patch).
 
 	* imap.el (imap-wait-for-tag): Clarify comment.  Use timeout zero
 	for second, after-process-has-died, accept-process-output.
@@ -1897,25 +1899,25 @@
 	(message-canlock-generate)
 	(message-generate-new-buffer-clone-locals): Docstring fixes.
 
-2003-07-07  Kai Gro,A_(Bjohann  <kai.grossjohann@gmx.net>
+2003-07-07  Gaute B Strokkenes	<gs234@cam.ac.uk>  (tiny patch)
 
 	* imap.el (imap-wait-for-tag): After the process has died, look
-	for more output still pending.  From Gaute B Strokkenes
-	<gs234@cam.ac.uk> (tiny patch).
+	for more output still pending.
 
 2003-07-07  Teodor Zlatanov  <tzz@lifelogs.com>
 
 	* spam.el (spam-bogofilter-score): redisplay article normally
 	after spam-bogofilter-score is called
 
+2003-07-06  Michael Piotrowski  <mxp@dynalabs.de>  (tiny change)
+
+	* gnus-sum.el (gnus-print-buffer): Apply emphasis.
+
 2003-07-06  Jesper Harder  <harder@ifa.au.dk>
 
 	* message.el (message-send-mail-with-sendmail): Handle
 	non-numeric return values.
 
-	* gnus-sum.el (gnus-print-buffer): Apply emphasis.
-	From Michael Piotrowski <mxp@dynalabs.de> (tiny change).
-
 	* gnus-start.el (gnus-clear-system): Revert change from
 	2003-06-19.
 
@@ -2012,10 +2014,12 @@
 
 2003-06-20  Jesper Harder  <harder@ifa.au.dk>
 
+	* spam.el (spam-spamoracle-learn): insert-string is obsolete.
+
+2003-06-20  Jan Rychter  <jan@rychter.com>
+
 	* gnus-msg.el (gnus-configure-posting-styles): Remove unused
-	variable.  From Jan Rychter <jan@rychter.com>.
-
-	* spam.el (spam-spamoracle-learn): insert-string is obsolete.
+	variable.
 
 2003-06-19  Teodor Zlatanov  <tzz@lifelogs.com>
 
@@ -2049,11 +2053,10 @@
 	* gnus-util.el (gnus-extract-address-components): Added
 	doc-string.
 
-2003-06-16  Kai Gro,A_(Bjohann  <kai.grossjohann@gmx.net>
+2003-06-16  Michael Albinus  <Michael.Albinus@alcatel.de>
 
 	* nnml.el (nnml-current-group-article-to-file-alist): Don't read
-	overview when using compressed files.  From Michael Albinus
-	<Michael.Albinus@alcatel.de>.
+	overview when using compressed files.
 
 2003-06-16  Katsumi Yamaoka  <yamaoka@jpl.org>
 
@@ -2071,8 +2074,7 @@
 	* gnus-sum.el (gnus-summary-force-verify-and-decrypt): Bind
 	`gnus-article-emulate-mime'.
 
-2003-06-15  Kai Gro,A_(Bjohann  <kai.grossjohann@gmx.net>
-	From Tommi Vainikainen <thv+gnus@iki.fi>.
+2003-06-15  Tommi Vainikainen  <thv+gnus@iki.fi>
 
 	* message.el (message-is-yours-p): New function.  Separated common
 	code from message-cancel-news and message-supersede.  Added
@@ -2080,10 +2082,10 @@
 	resort.
 	(message-cancel-news, message-supersede): Use message-is-yours-p.
 
-2003-06-13  Kai Gro,A_(Bjohann  <kai.grossjohann@gmx.net>
+2003-06-13  Niklas Morberg  <niklas.morberg@axis.com>
 
 	* nnimap.el (nnimap-split-articles): Narrow the right buffer to
-	the headers.  From Niklas Morberg <niklas.morberg@axis.com>.
+	the headers.
 
 2003-06-12  Dave Love  <fx@gnu.org>
 
@@ -2100,9 +2102,7 @@
 	* spam.el (spam-check-bogofilter-headers): fix for when the score
 	is requested but the message is not spam
 
-2003-06-09  Teodor Zlatanov  <tzz@lifelogs.com>
-	From Eric
-	<knauel@informatik.uni-tuebingen.de>
+2003-06-09  Eric Knauel  <knauel@informatik.uni-tuebingen.de>
 
 	* spam.el (spam-use-spamoracle): new variable
 	(spam-install-hooks): add spamoracle to the list of conditions
@@ -2145,8 +2145,7 @@
 	* gnus-srvr.el (gnus-browse-foreign-server): Parse garbage NNTP
 	groups correctly.
 
-2003-06-06  Kai Gro,A_(Bjohann  <kai.grossjohann@gmx.net>
-	From Benjamin Rutt <rutt+news@cis.ohio-state.edu>.
+2003-06-06  Benjamin Rutt  <rutt+news@cis.ohio-state.edu>.
 
 	* message.el (message-fetch-field): Augment documentation to state
 	the narrowed-to-headers restriction.
@@ -2172,11 +2171,9 @@
 	* rfc2047.el (rfc2047-encode-region): Don't error out on invalid
 	strings.
 
-2003-06-04  Jesper Harder  <harder@ifa.au.dk>
+2003-06-04  Ivan Boldyrev  <boldyrev+nospam@cgitftp.uiggm.nsc.ru>  (tiny change)
 
 	* mml1991.el (mml1991-pgg-sign): Insert pgg output as unibyte.
-	From: Ivan Boldyrev <boldyrev+nospam@cgitftp.uiggm.nsc.ru> (tiny
-	change)
 
 2003-06-03  Dave Love  <fx@gnu.org>
 
@@ -2203,11 +2200,10 @@
 	* message.el (message-fetch-field): Mention narrow-to-headers
 	requirement.
 
-2003-06-03  Jesper Harder  <harder@ifa.au.dk>
+2003-06-03  Eric Eide  <eeide@cs.utah.edu>
 
 	* gnus-xmas.el (gnus-xmas-create-image): Use
-	insert-file-contents-literally.  From: Eric Eide
-	<eeide@cs.utah.edu>
+	insert-file-contents-literally.
 
 2003-06-02  Teodor Zlatanov  <tzz@lifelogs.com>
 
@@ -2312,7 +2308,7 @@
 
 	* dgnushack.el (assq-delete-all): Removed the compiler macro.
 
-2003-05-14  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-05-14  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agentize): Updated documentation to match
 	usage.
@@ -2325,7 +2321,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-05-14 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-05-14  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Gnus v5.10.2 is released.
 
@@ -2384,7 +2380,7 @@
 	in message.  Suggested by Yoichi NAKAYAMA <yoichi@geiin.org>.
 	* pop3.el (pop3-movemail): Ditto.
 
-2003-05-12  Colin Marquardt <c.marquardt@alcatel.de>  (tiny change)
+2003-05-12  Colin Marquardt  <c.marquardt@alcatel.de>  (tiny change)
 
 	* gnus.el (gnus-agent): Docstring fix.
 
@@ -2396,7 +2392,7 @@
 	(gnus-registry-add-group): add a modification timestamp to each entry
 	(gnus-registry-install-hooks): new function
 
-2003-05-12  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-05-12  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agent-cat-name): Eval macro while compiling.
 	(gnus-agent-cat-disable-undownloaded-faces): New function.
@@ -2494,13 +2490,15 @@
 	* gnus-registry.el (gnus-registry-cache-file): new file variable
 	(gnus-registry-cache-read, gnus-registry-cache-save): new
 	functions
-	(gnus-registry-cache-whitespace): new function.  From Dan
-	Christensen <jdc@chow.mat.jhu.edu>
 	(gnus-registry-save, gnus-registry-read): use the new
 	gnus-registry-cache-{read|save} functions, and change the name
 	from gnus-registry-translate-{from|to}-alist
 	(gnus-registry-clear): fixed so it doesn't refer to old function name
 
+2003-05-09  Dan Christensen  <jdc@chow.mat.jhu.edu>
+
+	* gnus-registry.el (gnus-registry-cache-whitespace): new function.
+
 2003-05-09  Jesper Harder  <harder@ifa.au.dk>
 
 	* gnus-picon.el (gnus-picon-transform-address): Parse the encoded
@@ -2515,8 +2513,9 @@
 	nnmail-split-fancy-with-parent-ignore-groups can be a single regex
 	in addition to a list of regexes.
 
-	* spam.el (spam-use-regex-headers): docstring fix.  From Niklas
-	Morberg <niklas.morberg@axis.com>
+2003-05-08  Niklas Morberg  <niklas.morberg@axis.com>
+
+	* spam.el (spam-use-regex-headers): docstring fix.
 
 2003-05-08  Kai Gro,A_(Bjohann  <kai.grossjohann@gmx.net>
 
@@ -2587,7 +2586,7 @@
 	* mm-bodies.el (mm-decode-coding-region-safely): Remove.
 	(mm-decode-body): Don't use mm-decode-coding-region-safely.
 
-2003-05-03  Vasily Korytov <deskpot@despammed.com>  (tiny change)
+2003-05-03  Vasily Korytov  <deskpot@despammed.com>  (tiny change)
 
 	* gnus-util.el (gnus-multiple-choice): Add ", ?".
 
@@ -2704,13 +2703,13 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-05-01  Teodor Zlatanov  <tzz@lifelogs.com>
-
-	* spam-report.el (spam-report-gmane-regex): docstring fix.  From
-	Jon Ericson <Jon.Ericson@jpl.nasa.gov> (tiny change)
+2003-05-01  Jon Ericson  <Jon.Ericson@jpl.nasa.gov>  (tiny change)
+
+	* spam-report.el (spam-report-gmane-regex): docstring fix.
 
 	* gnus.el (gnus-install-group-spam-parameters): docstring fix.
-	From Jon Ericson <Jon.Ericson@jpl.nasa.gov> (tiny change)
+
+2003-05-01  Teodor Zlatanov  <tzz@lifelogs.com>
 
 	* gnus-registry.el (gnus-registry-fetch-extra)
 	(gnus-registry-store-extra, gnus-registry-group-count): new functions
@@ -2718,11 +2717,11 @@
 	(gnus-registry-add-group): changed to work with extra data element
 	if present
 
-2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-05-01  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Gnus v5.10.1 is released.
 
-2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-05-01  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.24 is released.
 
@@ -2741,7 +2740,7 @@
 
 	* gnus.el: Update copyright for several files.
 
-2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-05-01  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.23 is released.
 
@@ -2749,7 +2748,7 @@
 
 	* spam-stat.el (spam-stat-test-directory): Compare against zero.
 
-2003-05-01  Trey Jackson <tjackson@ichips.intel.com>  (tiny change)
+2003-05-01  Trey Jackson  <tjackson@ichips.intel.com>  (tiny change)
 
 	* spam-stat.el (spam-stat-test-directory): Skip 0 length files.
 
@@ -2766,11 +2765,11 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-05-01  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.22 is released.
 
-2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-05-01  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.21 is released.
 
@@ -2778,7 +2777,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-05-01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-05-01  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.20 is released.
 
@@ -2871,7 +2870,7 @@
 	* mm-util.el (mm-charset-to-coding-system): Use user specified
 	charset unless coding-system-get is fboundp.
 
-2003-04-30  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-04-30  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agent-cat-defaccessor, gnus-agent-cat-name):
 	Wrapped in eval-when-compile.
@@ -2977,7 +2976,7 @@
 	(gnus-mime-display-multipart-related-as-mixed): Added doc-strings,
 	allow customization.
 
-2003-04-27  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-04-27  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* dgnushack.el (dgnushack-compile-verbosely): New function.  Not
 	currently called (See source for explanation).
@@ -2990,11 +2989,11 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-04-27 06:47:31 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-04-27 06:47:31  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.19 is released.
 
-2003-04-27  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-04-27  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-registry.el (gnus-register-spool-action): Replaced literal
 	carriage-return character with its escape sequence.
@@ -3140,11 +3139,10 @@
 
 	* smime.el (smime-decrypt-region): Insert From header.
 
-2003-04-21  Kai Gro,A_(Bjohann  <kai.grossjohann@gmx.net>
+2003-04-21  Gaute B Strokkenes	<gs234@cam.ac.uk>  (tiny change)
 
 	* gnus-fun.el (gnus-face-from-file, gnus-convert-png-to-face):
-	Max length of header is 726, not 740.  From Gaute B Strokkenes
-	<gs234@cam.ac.uk>.
+	Max length of header is 726, not 740.
 
 2003-04-20  Jesper Harder  <harder@ifa.au.dk>
 
@@ -3269,7 +3267,7 @@
 	(spam-summary-prepare-exit): check the report-gmane spam processor
 	and run spam-report-gmane-register-routine if it's active
 
-	From John Wiegley <johnw@gnu.org>
+2003-04-16  John Wiegley  <johnw@gnu.org>
 
 	* spam.el (spam-bogofilter-score): check bogofilter headers before
 	checking bogofilter itself
@@ -3302,7 +3300,7 @@
 	* nndiary.el (nndiary-compute-reminders): Don't use setf with
 	nthcdr.
 
-2003-04-16  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-04-16  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agent-make-cat): Added optional parameter to
 	specify a predicate other than false.
@@ -3320,13 +3318,11 @@
 
 	* spam.el (spam-split): added save-restriction to save-excursion
 
-2003-04-15  Reiner Steib  <Reiner.Steib@gmx.de>
-	From Julien Avarre <julien@avarre.com>
+2003-04-15  Julien Avarre  <julien@avarre.com>
 
 	* gnus-fun.el: Fixed autoload cookie.
 
-2003-04-15  Paul Jarc  <prj@po.cwru.edu>
-	From Remi Letot  <remi.letot@easynet.be>
+2003-04-15  Remi Letot  <remi.letot@easynet.be>
 
 	* nnmaildir.el (nnmaildir-request-scan): Use gnus-remove-if
 	instead of remove-if.
@@ -3380,7 +3376,7 @@
 
 	* gnus.el (gnus-group-prefixed-name): Clean up.
 
-2003-04-13  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-04-13  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agent-group-pathname): Bind
 	gnus-command-method so that gnus-agent-directory will always
@@ -3396,7 +3392,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-04-13 01:12:01 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-04-13 01:12:01  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.18 is released.
 
@@ -3451,7 +3447,7 @@
 	(mm-encode-body): Don't corrupt UTF-16.
 	(mm-body-encoding): Pay attention to mm-body-charset-encoding-alist.
 
-2003-04-10  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-04-10  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agent-get-undownloaded-list): Articles in
 	the CACHE are now detected and handled the same as an article
@@ -3477,7 +3473,7 @@
 	* gnus-sum.el (gnus-summary-make-menu-bar): Disable "Import file"
 	and "Create article" items in non-editable groups.
 
-2003-04-09  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-04-09  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agent-write-active): Added option of
 	replacing, rather than updating, the agent's active file.  Do NOT
@@ -3590,7 +3586,7 @@
 	* gnus-sum.el: XEmacs doesn't support the 5th arg to 'load', so
 	don't use it when loading gnus-sum.el if we're in XEmacs.
 
-2003-04-05  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-04-05  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound
 	print-escape-nonascii to fix more characters in compiled format
@@ -3601,7 +3597,7 @@
 	* gnus-audio.el (gnus-audio-au-player, gnus-audio-wav-player):
 	Fix customization type.
 
-2003-04-04  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-04-04  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound
 	print-quoted, print-readably, print-escape-multibyte, and
@@ -3661,7 +3657,7 @@
 	* nntp.el (nntp-via-rlogin-command-switches): Doc fix.
 	(nntp-open-via-rlogin-and-telnet): Disable the telnet linemode.
 
-2003-03-31  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-03-31  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-start.el (gnus-gnus-to-quick-newsrc-format): Bound
 	print-escape-newlines to print escape sequences rather than
@@ -3684,7 +3680,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-03-31 20:08:19 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-03-31 20:08:19  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.17 is released.
 
@@ -3767,20 +3763,24 @@
 	(gnus-read-newsrc-el-file): call the gnus-read-newsrc-el-hook
 
 	* gnus-registry.el (gnus-registry-translate-to-alist)
-	(gnus-registry-translate-from-alist, alist-to-hashtable)
-	(hashtable-to-alist): new functions
+	(gnus-registry-translate-from-alist: new functions
 	(gnus-register-spool-action): add a spool item to the registry
 
 	* gnus.el (gnus-variable-list): added gnus-registry-alist to the
 	list of saved variables
 	(gnus-registry-alist): new variable
 
+2003-03-28  Andreas Fuchs  <asf@void.at>
+
+	* gnus-registry.el (alist-to-hashtable, hashtable-to-alist): New
+	functions.
+
 2003-03-27  Simon Josefsson  <jas@extundo.com>
 
 	* gnus-art.el (article-decode-group-name): Be correct instead of
 	smart.
 
-2003-03-27  Katsumi Yamaoka <yamaoka@jpl.org>
+2003-03-27  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* lpath.el: Bind url-current-object for Emacs; bind
 	gnus-agent-expire-current-dirs for XEmacs; fbind open-ssl-stream
@@ -3795,7 +3795,7 @@
 	* gnus-msg.el (gnus-mailing-list-groups): Fix customize type and
 	doc string.
 
-2003-03-26  Kevin Ryde <user42@zip.com.au>
+2003-03-26  Kevin Ryde  <user42@zip.com.au>
 
 	* gnus-sum.el (gnus-summary-find-for-reselect): Renamed from
 	gnus-summary-find-uncancelled, skip temporary articles inserted by
@@ -3805,7 +3805,7 @@
 
 	* smiley.el (smiley-buffer): New function.
 
-2003-03-26  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-03-26  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agent-fetch-selected-article): Replaced
 	gnus-summary-update-line (which updated the article's face) with
@@ -3813,7 +3813,7 @@
 	face by calling gnus-summary-update-line AND updates the download
 	mark to show that the article was fetched).
 
-2003-03-23  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-03-23  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agent-expire-unagentized-dirs): Provides
 	option of deleting agent directories for groups/servers that are
@@ -3878,7 +3878,7 @@
 	* gnus-art.el (gnus-treat-display-xface): Don't enable if
 	icontopbm isn't available.
 
-2003-03-21  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2003-03-21  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-int.el (gnus-open-server): Catch errors in backend's
 	open-server method.  Returns nil rather than crashing startup.
@@ -3905,7 +3905,7 @@
 	* message.el (message-split-line): New function.
 	(message-mode-map): Remap split-line to message-split-line.
 
-2003-03-20  Katsumi Yamaoka <yamaoka@jpl.org>
+2003-03-20  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* message.el (message-make-overlay): Defalias it to make-overlay.
 	(message-delete-overlay): Defalias it to delete-overlay.
@@ -3929,7 +3929,7 @@
 	* nnrss.el (nnrss-fetch): Fetch the local stuff.
 	(nnrss-check-group): Use it.
 
-2003-03-20 Mark A. Hershberger  <mah@everybody.org>
+2003-03-20  Mark A. Hershberger  <mah@everybody.org>
 
 	* nnrss.el: Primitive XML Name-space support.  This means that RSS
 	feeds like Kevin Burton's[1] can now be read in Gnus.
@@ -3956,7 +3956,7 @@
 
 	* gnus-group.el (gnus-group-make-rss-group): New function.
 
-2003-03-20  Katsumi Yamaoka <yamaoka@jpl.org>
+2003-03-20  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* message.el (message-idna-to-ascii-rhs-1): Don't use replace-*
 	for highlight overlays.
@@ -4053,7 +4053,7 @@
 
 	* gnus.el (gnus-version-number): Bump.
 
-2003-03-18 00:38:22 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-03-18 00:38:22  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.16 is released.
 
@@ -4533,7 +4533,7 @@
 
 	* message.el (message-make-fqdn): Protect against nil user-mail.
 
-2003-02-28  Vasily Korytov <deskpot@myrealbox.com>
+2003-02-28  Vasily Korytov  <deskpot@myrealbox.com>
 
 	* gnus-art.el (gnus-boring-article-headers): New values:
 	'to-list and 'cc-list.
@@ -4615,10 +4615,11 @@
 
 	* gnus-start.el (gnus-backup-startup-file): Fixed custom type.
 
-2003-02-24  Ted Zlatanov <tzz@lifelogs.com>
+2003-02-24  Ted Zlatanov  <tzz@lifelogs.com>
+
 	* spam.el: disabled spam-get-article-as-filename
 
-	From Michael Shields  <shields@msrl.com>
+2003-02-24  Michael Shields  <shields@msrl.com>
 
 	* gnus-group.el (gnus-group-is-exiting-without-update-p): New.
 	* gnus-sum.el (gnus-summary-exit-no-update): Use it.
@@ -4632,8 +4633,7 @@
 	no spam.
 	* spam.el (spam-ham-move-routine): New `copy' argument.
 
-2003-02-24  Kai Gro,A_(Bjohann  <kai.grossjohann@uni-duisburg.de>
-	From Martin Thornquist <martint@ifi.uio.no>
+2003-02-24  Martin Thornquist  <martint@ifi.uio.no>
 
 	* gnus-topic.el (gnus-topic-select-group): Select last group if
 	after last group.
@@ -4750,16 +4750,19 @@
 	* gnus-start.el (gnus-get-unread-articles-in-group): Make sure
 	the entry for the group exists before we alter it.
 
+2003-02-22  David S Goldberg  <david.goldberg6@verizon.net>  (tiny change)
+
+	* message.el (message-mode): MML tags separate paragraphs.
+
 2003-02-22  Kai Gro,A_(Bjohann  <kai.grossjohann@uni-duisburg.de>
 
-	* message.el (message-mode): MML tags separate paragraphs.  Small
-	change from David S Goldberg <david.goldberg6@verizon.net>.
-
 	* gnus-agent.el (gnus-agent-get-undownloaded-list): Sort
 	`gnus-newsgroup-headers'.
 
+2003-02-22  Karl Pfl,Ad(Bsterer  <sigurd@12move.de>
+
 	* gnus-art.el (gnus-article-refer-article): Grok more message id
-	formats.  From Karl Pfl,Ad(Bsterer <sigurd@12move.de>.
+	formats.
 
 2003-02-22  Jesper Harder  <harder@ifa.au.dk>
 
@@ -4776,8 +4779,7 @@
 	(gnus-register-spool-action): added hashtable of message ID keys
 	with message motion data
 
-2003-02-21  Florian Weimer  <fw@deneb.enyo.de>
-	From Reiner Steib  <Reiner.Steib@gmx.de>.
+2003-02-21  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gnus-art.el (gnus-button-mid-or-mail-heuristic-alist): New
 	variable, used in `gnus-button-mid-or-mail-heuristic'.
@@ -4907,11 +4909,11 @@
 	(spam-mark-spam-as-expired-and-move-routine): made the article
 	move conditional, so it's not called even if there's nothing to move
 
-2003-02-13  Kai Gro,A_(Bjohann  <kai.grossjohann@uni-duisburg.de>
+2003-02-13  Kurt B. Kaiser  <kbk@shore.net>
 
 	* message.el (message-unix-mail-delimiter): Accept any whitespace
 	after the email address and before the date; do not require the
-	space character.  From Kurt B. Kaiser <kbk@shore.net>.
+	space character.
 
 2003-02-13  Katsumi Yamaoka  <yamaoka@jpl.org>
 
@@ -5019,7 +5021,7 @@
 
 	* gnus.el (gnus-version-number): Bumped.
 
-2003-02-08 23:23:27 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-02-08 23:23:27  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.15 is released.
 
@@ -5366,7 +5368,7 @@
 
 	* gnus.el (gnus-version-number): Bumped.
 
-2003-01-24 20:32:44 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-01-24 20:32:44  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.14 is released.
 
@@ -5490,7 +5492,7 @@
 
 	* gnus.el (gnus-version-number): Bumped version number.
 
-2003-01-21 07:15:41 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-01-21 07:15:41  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.13 is released.
 
@@ -5671,7 +5673,7 @@
 
 	* gnus-audio.el (gnus-audio-au-player): Use executable-find.
 
-2003-01-13  Jhair Tocancipa Triana <jhair_tocancipa@@gmx.net>
+2003-01-13  Jhair Tocancipa Triana  <jhair_tocancipa@@gmx.net>
 
 	* gnus-audio.el (gnus-audio-au-player, gnus-audio-wav-player): Use
 	  /usr/bin/play as default player.
@@ -5753,7 +5755,7 @@
 	* gnus.el (gnus-version-number): Bumped version.
 	(gnus-summary-line-format): Doc fix.
 
-2003-01-12 22:02:49 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-01-12 22:02:49  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.12 is released.
 
@@ -5800,7 +5802,7 @@
 
 	* gnus.el (gnus-version-number): Bumped version number.
 
-2003-01-12 13:46:20 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-01-12 13:46:20  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.11 is released.
 
@@ -6276,7 +6278,7 @@
 
 	* gnus.el (gnus-version-number): Bump version number.
 
-2003-01-05 01:53:30 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-01-05 01:53:30  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.10 is released.
 
@@ -6284,7 +6286,7 @@
 
 	* gnus.el (gnus-version-number): Fix version number.
 
-2003-01-05 01:40:09 Lars Magne Ingebrigtsen <lars@ingebrigtsen.no>
+2003-01-05 01:40:09  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.08 is released.
 
@@ -6788,11 +6790,10 @@
 
 	* binhex.el (binhex-decoder-program): Fix docstring.
 
-2002-12-21  Kai Gro,A_(Bjohann  <kai.grossjohann@uni-duisburg.de>
+2002-12-21  Laurent Martelli  <laurent@bearteam.org>
 
 	* mm-decode.el (mm-mailcap-command): Do not backslash-quote
 	special chars if the mailcap file uses single quotes around %s.
-	From Laurent Martelli <laurent@bearteam.org>.
 
 2002-12-19  Paul Jarc  <prj@po.cwru.edu>
 
@@ -6833,7 +6834,7 @@
 	* nntp.el (nntp-with-open-group-first-pass): Do not wrap in
 	eval-when-compile.  Suggested by Kevin Greiner.
 
-2002-12-13  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2002-12-13  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agent-max-fetch-size): New, defcustom.
 	(gnus-agent-fetch-headers): Initialize gnus-agent-overview-buffer
@@ -6845,13 +6846,13 @@
 	Multiple chunks in the same group may perform arbitrarily large
 	updates.
 
-2002-12-12  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2002-12-12  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agent-fetch-selected-article): Added call to
 	gnus-summary-update-download-mark to update the article in the
 	summary.
 
-2002-12-11  Kevin Greiner <kgreiner@xpediantsolutions.com>
+2002-12-11  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus.el (gnus-summary-high-uncached-face,
 	gnus-summary-normal-uncached-face, gnus-summary-low-uncached-face)
@@ -7069,7 +7070,7 @@
 	* gnus-sum.el (gnus-summary-insert-old-articles): No longer passes
 	compressed range to gnus-summary-insert-articles.
 
-2002-11-26  Kevin Ryde <user42@zip.com.au>
+2002-11-26  Kevin Ryde  <user42@zip.com.au>
 
 	* gnus-art.el (gnus-mime-copy-part): Look for filename
 	parameter under content-disposition, not content-type.
@@ -7107,7 +7108,7 @@
 	* gnus-agent.el (gnus-agent-check-overview-buffer): Make debugger
 	print message on entry.
 
-	From Kevin Greiner <kgreiner@xpediantsolutions.com>.
+2002-11-25  Kevin Greiner  <kgreiner@xpediantsolutions.com>.
 
 	* gnus-range.el (gnus-range-difference): New function.
 	* gnus-sum.el (gnus-summary-insert-old-articles): Use it.
@@ -7118,8 +7119,7 @@
 	gnus-remove-from-range instead of gnus-range-difference which
 	doesn't exist.
 
-2002-11-23  Kai Gro,A_(Bjohann  <kai.grossjohann@uni-duisburg.de>
-	From Kevin Greiner <kgreiner@xpediantsolutions.com>.
+2002-11-23  Kevin Greiner  <kgreiner@xpediantsolutions.com>
 
 	* gnus-agent.el (gnus-agent-downloaded-article-face): New face,
 	used for showing which articles have been downloaded.
@@ -7229,7 +7229,7 @@
 	* nnimap.el (nnimap-request-expire-articles): Compress sequence
 	before storing \Deleted mark on expired articles.
 
-2002-11-17  Shenghuo Zhu <zsh@cs.rochester.edu>
+2002-11-17  Shenghuo Zhu  <zsh@cs.rochester.edu>
 	Trivial patch from Markus Rost <rost@math.ohio-state.edu>
 
 	* gnus-sum.el (gnus-summary-goto-unread): Doc fix - escape open
@@ -7319,19 +7319,18 @@
 	* gnus-group.el (gnus-group-delete-group):
 	gnus-cache-active-hashtb might be void.
 
-2002-11-02  Simon Josefsson  <jas@extundo.com>
+2002-11-02  Raymond Scholz  <ray-2002@zonix.de>
 
 	* pgg-gpg.el (pgg-gpg-encrypt-region): Makes PGG respect the
-	setting of the default user ID.  From Raymond Scholz
-	<ray-2002@zonix.de>.
+	setting of the default user ID.
 
 2002-11-01  Jesper Harder  <harder@ifa.au.dk>
 
 	* mm-bodies.el (mm-body-encoding): Don't return 8bit for 7bit
 	charset.
 
-2002-10-31  Ted Zlatanov <tzz@lifelogs.com>
-	From Alex Schroeder <alex@emacswiki.org>
+2002-10-31  Alex Schroeder  <alex@emacswiki.org>
+
 	* spam-stat.el (spam-stat-process-directory): add dir to message
 	(spam-stat-reduce-size): No longer remove words
 	with values close to 0.5, because the default value is 0.2.
@@ -7394,8 +7393,7 @@
 	* mml.el (mml-mode-map): Fixed keybindings for mml-secure-*
 	functions.
 
-2002-10-28  Katsumi Yamaoka  <yamaoka@jpl.org>
-	From mah@everybody.org (Mark A. Hershberger).
+2002-10-28  Mark A. Hershberger  <mah@everybody.org>
 
 	* mm-url.el (mm-url-insert-file-contents): Make it return the same
 	type values ("url" size) regardless of the values of
@@ -7643,7 +7641,7 @@
 
 	* gnus-spec.el (gnus-pad-form): Use gnus-string-width-function.
 
-2002-10-11  Ted Zlatanov <tzz@lifelogs.com>
+2002-10-11  Ted Zlatanov  <tzz@lifelogs.com>
 
 	* spam.el (spam-check-ifile): added ifile as a spam checking
 	backend, and spam-use-ifle as the variable to toggle that check.
@@ -7653,7 +7651,7 @@
 	* message.el (message-beginning-of-line): New variable.
 	(message-beginning-of-line): Use it.
 
-2002-10-11  Ted Zlatanov <tzz@lifelogs.com>
+2002-10-11  Ted Zlatanov  <tzz@lifelogs.com>
 
 	* spam.el: more compilation fixes for BBDB
 
@@ -7689,7 +7687,7 @@
 	(mml2015-unabbrev-trust-alist): New.
 	(mml2015-gpg-extract-signature-details): Use it.
 
-2002-10-10  Ted Zlatanov <tzz@lifelogs.com>
+2002-10-10  Ted Zlatanov  <tzz@lifelogs.com>
 
 	* spam.el: compilation fixes, spam-check-bbdb function is nil if no
 	BBDB installed
@@ -7817,7 +7815,7 @@
 
 	* pgg.el, pgg-gpg.el, pgg-pgp5.el: Don't depend on luna.el.
 
-2002-09-29  Daiki Ueno <ueno@unixuser.org>
+2002-09-29  Daiki Ueno  <ueno@unixuser.org>
 
 	* pgg.el: Remove dependency on calist.el.
 
@@ -7858,13 +7856,12 @@
 
 	* message.el (message-required-mail-headers): Remove Lines:.
 
-2002-10-03  Kai Gro,A_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Jesper Harder.
+2002-10-03  Jesper Harder  <harder@ifa.au.dk>
 
 	* gnus-group.el (gnus-group-fetch-charter,
 	gnus-group-fetch-control): Prompt for group if given a prefix
 	argument.
-	* gnus-sum.el (t): Add gnus-group-fetch-charter and
+	* gnus-sum.el: Add gnus-group-fetch-charter and
 	gnus-group-fetch-control to summary key map and menu.
 
 2002-10-03  Paul Jarc  <prj@po.cwru.edu>
@@ -7879,13 +7876,12 @@
 	(gnus-agent-fetch-selected-article): New function for
 	gnus-select-article-hook or gnus-mark-article-hook.
 
-2002-10-02  Katsumi Yamaoka  <yamaoka@jpl.org>
-	From Peter von der Ahe <nospam2159@daimi.au.dk>.
+2002-10-02  Peter von der Ahe  <nospam2159@daimi.au.dk>
 
 	* gnus-ems.el (gnus-x-splash): Set coding-system-for-read to
 	raw-text.
 
-2002-09-30  Ted Zlatanov <tzz@lifelogs.com>
+2002-09-30  Ted Zlatanov  <tzz@lifelogs.com>
 
 	* spam.el: merged changes from pinard@iro.umontreal.ca (Fran,Ag(Bois
 	Pinard).
@@ -7926,8 +7922,7 @@
 
 	* nnimap.el (nnimap-fixup-unread-after-getting-new-news): Remove.
 
-2002-09-27  Katsumi Yamaoka  <yamaoka@jpl.org>
-	From Mats Lidell <matsl@contactor.se>.
+2002-09-27  Mats Lidell  <matsl@contactor.se>
 
 	* gnus-art.el (gnus-article-mode-syntax-table): Replace "-" to " ".
 
@@ -8078,20 +8073,19 @@
 	* nnmaildir.el (nnmaildir--grp-add-art): fix minimum article
 	number when article 1 does not exist.
 
-2002-09-25  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-09-25  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gnus-art.el (gnus-button-handle-apropos-variable): Fall back to
 	apropos if apropos-variable does not exist.
 	(gnus-button-guessed-mid-regexp)
 	(gnus-button-handle-describe-prefix, gnus-button-alist): Better
-	regexes.  From Reiner Steib.
+	regexes.
 	(gnus-button-handle-describe-function)
-	(gnus-button-handle-describe-variable): Doc fix.  From Reiner Steib.
+	(gnus-button-handle-describe-variable): Doc fix.
 	(gnus-button-handle-describe-key, gnus-button-handle-apropos)
-	(gnus-button-handle-apropos-command): Doc fix.  From Reiner Steib.
-
-2002-09-25  Mark A. Hershberger  <mah@everybody.org>
-	Trivial patch.
+	(gnus-button-handle-apropos-command): Doc fix.
+
+2002-09-25  Mark A. Hershberger  <mah@everybody.org>  (tiny change)
 
 	* nnrss.el (nnrss-save-server-data): Save nnrss-group-alist in
 	the file.
@@ -8113,22 +8107,19 @@
 	(mml2015-pgg-encrypt): New functions.
 	(defvar, autoload): Prevent byte-compile warnings.
 
-2002-09-24  Katsumi Yamaoka  <yamaoka@jpl.org>
-	From TSUCHIYA Masatoshi <tsuchiya@namazu.org>.
+2002-09-24  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>.
 
 	* gnus-art.el (article-strip-banner): Check for the existence of
 	from header.
 
-2002-09-23  Kai Gro,b_(Bjohann  <grossjoh@ls6.informatik.uni-dortmund.de>
+2002-09-23  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gnus-art.el (gnus-button-guessed-mid-regexp): Improved regexp.
 	(gnus-button-alist): Improved regexp for
 	gnus-button-handle-mid-or-mail (false positives), fixed
 	gnus-button-handle-man entries.
-	From Reiner Steib.
-
-2002-09-23  Paul Jarc  <prj@po.cwru.edu>
-	From Josh Huber.
+
+2002-09-23  Josh Huber  <huber@alum.wpi.edu>
 
 	* nnmaildir.el (nnmaildir--update-nov): fix wrong-type error when
 	nnmail-extra-headers is non-nil.
@@ -8157,8 +8148,7 @@
 
 	* gnus-sum.el (gnus-summary-next-group): Switch to the summary buffer.
 
-2002-09-20  Kai Gro,b_(Bjohann  <grossjoh@ls6.informatik.uni-dortmund.de>
-	From Reiner Steib.
+2002-09-20  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gnus-art.el (gnus-button-handle-custom,
 	gnus-button-handle-mid-or-mail,
@@ -8184,10 +8174,10 @@
 
 	* message.el (message-completion-alist): Add Reply-To, From, etc.
 
-2002-09-18  Simon Josefsson  <jas@extundo.com>
+2002-09-18  Nevin Kapur  <nevin@jhu.edu>
 
 	* nnimap.el (nnimap-request-expire-articles): Make flag setting
-	conditional.  From Nevin Kapur <nevin@jhu.edu>.
+	conditional.
 
 2002-09-17  Simon Josefsson  <jas@extundo.com>
 
@@ -8197,8 +8187,7 @@
 	when articles are found.  Suggested by Nevin Kapur
 	<nevin@jhu.edu>.
 
-2002-09-17  Kai Gro,A_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Reiner Steib <reiner.steib@gmx.de>.
+2002-09-17  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* message.el (message-strip-subject-trailing-was)
 	(message-change-subject, message-add-archive-header)
@@ -8251,8 +8240,7 @@
 
 	* gnus-sum.el (gnus-summary-next-group): Semi-exit only when needed.
 
-2002-09-12  Katsumi Yamaoka  <yamaoka@jpl.org>
-	From John Paul Wallington <jpw@shootybangbang.com>.
+2002-09-12  John Paul Wallington  <jpw@shootybangbang.com>.
 
 	* gnus.el (gnus-visual, gnus-meta): Fix typo.
 
@@ -8266,8 +8254,7 @@
 	(nnimap-split-rule): Doc fix.
 	(nnimap-request-expire-articles): Cleanup code.
 
-2002-09-11  Katsumi Yamaoka  <yamaoka@jpl.org>
-	From TSUCHIYA Masatoshi <tsuchiya@namazu.org>.
+2002-09-11  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>.
 
 	* gnus-art.el (gnus-article-address-banner-alist): New option.
 	(article-strip-banner): Refer the above option to split banners of
@@ -8347,10 +8334,10 @@
 	* gnus-util.el (gnus-frame-or-window-display-name): Exclude
 	invalid display names.
 
-2002-08-30  Simon Josefsson  <jas@extundo.com>
+2002-08-30  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gnus-group.el (gnus-group-fetch-control): Fix typo in last
-	commit.  From Reiner Steib <4uce.02.r.steib@gmx.net>.
+	commit.
 
 2002-08-26  Jesper Harder  <harder@ifa.au.dk>
 
@@ -8361,10 +8348,9 @@
 	(gnus-group-fetch-control): New function.
 	Add them to the keymap and menu. Require mm-url.
 
-2002-08-30  Katsumi Yamaoka  <yamaoka@jpl.org>
+2002-08-30  Alex Schroeder  <alex@emacswiki.org>.
 
 	* gnus-mlspl.el (gnus-group-split-fancy): Doc fix.
-	From Alex Schroeder <alex@emacswiki.org>.
 
 2002-08-29  Jesper Harder  <harder@ifa.au.dk>
 
@@ -8412,10 +8398,10 @@
 	* lpath.el: Fbind `frame-parameter', `make-frame-on-display',
 	`device-connection' and `dfw-device'.
 
-2002-08-22  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-08-22  Jochen Hein  <jochen@jochen.org>  (tiny change)
 
 	* gnus-art.el (gnus-emphasis-alist): Strikethru had a lot of false
-	positives, make it stricter.  From Jochen Hein (trivial change).
+	positives, make it stricter.
 
 2002-08-21  Katsumi Yamaoka  <yamaoka@jpl.org>
 
@@ -8432,8 +8418,7 @@
 
 	* lpath.el: Fbind w32-focus-frame and x-focus-frame.
 
-2002-08-20  Katsumi Yamaoka  <yamaoka@jpl.org>
-	From $B>.4X(B $B5HB'(B (KOSEKI Yoshinori) <kose@meadowy.org>.
+2002-08-20  $B>.4X(B $B5HB'(B (KOSEKI Yoshinori)  <kose@meadowy.org>.
 
 	* message.el (message-set-auto-save-file-name): Add support for
 	the Cygwin Emacs; the system-type is `cygwin'.
@@ -8543,7 +8528,7 @@
 
 	* gnus.el (gnus-version-number): Bumped version number.
 
-2002-08-04 01:48:57 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
+2002-08-04 01:48:57  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.07 is released.
 
@@ -8555,18 +8540,17 @@
 	(gnus-article-sort-by-random): New function.
 	(gnus-thread-sort-by-random): New function.
 
-2002-08-02  Simon Josefsson  <jas@extundo.com>
+2002-08-02  Scott A Crosby  <scrosby@cs.rice.edu>
 
 	* gnus-logic.el (gnus-advanced-integer): Swap arguments in
-	funcall.  From Scott A Crosby <scrosby@cs.rice.edu>.
+	funcall.
 
 2002-07-31  Danny Siu  <dsiu@adobe.com>
 
 	* nnimap.el (nnimap-split-articles): do not call nnmail-fetch-field
 	when splitting malformed messages without message-id
 
-2002-07-28  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Niklas Morberg <niklas.morberg@axis.com>.
+2002-07-28  Niklas Morberg  <niklas.morberg@axis.com>.
 
 	* nnweb.el (nnweb-type, nnweb-type-definition)
 	(nnweb-gmane-create-mapping, nnweb-gmane-wash-article)
@@ -8610,21 +8594,18 @@
 	nnmail-expiry-target to 'delete, so that absolute deletion
 	happens when absolute deletion is requested.
 
-2002-07-21  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Nevin Kapur <nevin@jhu.edu>.
+2002-07-21  Nevin Kapur  <nevin@jhu.edu>.
 
 	* nnmail.el (nnmail-fancy-expiry-target): Treat nonexisting
 	headers as empty headers.
 
-2002-07-21  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Jochen Hein <jochen@jochen.org>.
+2002-07-21  Jochen Hein  <jochen@jochen.org>.
 
 	* gnus-art.el (gnus-emphasis-alist): Add strikethrough and
 	correct typo.
 	(gnus-emphasis-strikethru): New face.
 
-2002-07-20  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Jason Merrill <jason@redhat.com>.
+2002-07-20  Jason Merrill  <jason@redhat.com>.
 
 	* nnfolder.el (nnfolder-retrieve-headers): Avoid searching the
 	entire file for each of a sequence of missing articles.
@@ -8635,8 +8616,7 @@
 	* gnus-sum.el (gnus-summary-insert-new-articles): Count down to
 	avoid nreverse.
 
-2002-07-14  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Ted Zlatanov <teodor.zlatanov@divine.com>.
+2002-07-14  Ted Zlatanov  <teodor.zlatanov@divine.com>
 
 	* gnus-sum.el (gnus-auto-expirable-marks): Remove `spam'.
 	(gnus-summary-mode-line-format-alist): Add %h for number of
@@ -8651,25 +8631,24 @@
 	(gnus-mark-article-as-read, gnus-mark-article-as-unread)
 	(gnus-mark-article-as-unread, gnus-summary-catchup): Grok spam.
 
-2002-07-10  Simon Josefsson  <jas@extundo.com>
+2002-07-10  KANEMATSU Daiji  <kdaiji@bea.com>
 
 	* nnimap.el (nnimap-split-to-groups): Allow group string to be a
-	function.  From KANEMATSU Daiji <kdaiji@bea.com>.
+	function.
 
 2002-07-09  Nevin Kapur  <nevin@jhu.edu>
 
 	* gnus-sum.el (gnus-summary-delete-article): Respect group
 	parameters while expiring.
 
-2002-07-08  Simon Josefsson  <jas@extundo.com>
-
-	* gnus-art.el (article-make-date-line): Fix string.  From Henrik
-	Enberg.
-
-2002-07-08  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-07-08  Henrik Enberg  <henrik@enberg.org>
+
+	* gnus-art.el (article-make-date-line): Fix string.
+
+2002-07-08  Niklas Morberg  <niklas.morberg@axis.com>
 
 	* gnus-art.el (article-unsplit-urls): Only display MIME when this
-	function is called interactively.  From Niklas Morberg.
+	function is called interactively.
 
 2002-07-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -8691,10 +8670,10 @@
 
 	* nnmail.el (nnmail-split-methods): fix custom type.
 
-2002-07-02  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-07-02  Niklas Morberg  <niklas.morberg@axis.com>
 
 	* gnus-art.el (article-unsplit-urls): Keep URL buttonized after
-	unsplitting.  From Niklas Morberg <niklas.morberg@axis.com>.
+	unsplitting.
 
 2002-07-01  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
 
@@ -8706,13 +8685,12 @@
 	* nntp.el (nntp-via-rlogin-command-switches): New variable.
 	(nntp-open-via-rlogin-and-telnet): Re-revert; use the var above.
 
-2002-06-28  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-06-28  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* message.el (message-font-lock-keywords): Don't fontify
 	headers in the message body, only in the header.
 	(message-font-lock-make-header-matcher): New function, used by
 	message-font-lock-keywords.
-	From Katsumi Yamaoka <yamaoka@jpl.org>.
 
 2002-06-28  Katsumi Yamaoka  <yamaoka@jpl.org>
 
@@ -8765,24 +8743,22 @@
 	(last, coerce, subseq): Remove compiler macros for those built-in
 	or unused functions.
 
-2002-06-17  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-06-17  Simon Josefsson  <jas@extundo.com>
 
 	* gnus-start.el (gnus-clear-system, gnus-read-newsrc-file): Make
 	sure to write byte-compiled versions of gnus-*-format-alist to
-	.newsrc.eld.  From Simon Josefsson.
-
-2002-06-16  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+	.newsrc.eld.
+
+2002-06-16  Bj,Ax(Brn Mork  <bmork@dod.no>
 
 	* gnus-agent.el (gnus-agent-read-servers)
 	(gnus-agent-write-servers): Put server name (string like
 	"nnchoke:frumple") in the file instead of a server specification
 	(Lisp expression like (nnchoke "frumple" ...parameters...)).
-	From Bj,Ax(Brn Mork <bmork@dod.no>.
-
-2002-06-16  Simon Josefsson  <jas@extundo.com>
-
-	* gnus-cache.el (gnus-cache-remove-article): n is &optional.  From
-	Reiner Steib <4uce.02.r.steib@gmx.net>.
+
+2002-06-16  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* gnus-cache.el (gnus-cache-remove-article): n is &optional.
 
 2002-06-15  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -8818,8 +8794,10 @@
 	* gnus-int.el (gnus-request-move-article): Agent expire article if
 	successfuly moved.
 
+2002-06-11  Niklas Morberg  <niklas.morberg@axis.com>
+
 	* nnweb.el (nnweb-google-create-mapping): Honors the value of
-	nnweb-max-hits.  From Niklas Morberg <niklas.morberg@axis.com>.
+	nnweb-max-hits.
 
 2002-06-10  Simon Josefsson  <jas@extundo.com>
 
@@ -8868,11 +8846,10 @@
 	* nnmail.el (nnmail-mail-splitting-decodes): New variable.
 	(nnmail-article-group): Use it.
 
-2002-05-30  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-05-30  Jesper Harder  <harder@ifa.au.dk>
 
 	* gnus-msg.el (gnus-inews-yank-articles): Merge split header lines
-	so that code reading them won't be surprised.  From Jesper Harder
-	<harder@ifa.au.dk>.
+	so that code reading them won't be surprised.
 
 2002-05-29  Simon Josefsson  <jas@extundo.com>
 
@@ -8889,11 +8866,10 @@
 
 	* gnus-group.el (gnus-group-line-format): Doc fix.
 
-2002-05-28  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-05-28  Jesper Harder  <harder@ifa.au.dk>
 
 	* gnus-msg.el (gnus-inews-yank-articles): Unfold headers of
-	original article before yanking.  From Jesper Harder
-	<harder@ifa.au.dk>.
+	original article before yanking.
 
 2002-05-26  Simon Josefsson  <jas@extundo.com>
 
@@ -8919,22 +8895,23 @@
 	(gnus-summary-prepare-threads): Avoid simplifying every Subject
 	twice by saving the simplified subject string in simp-subject.
 
-2002-05-23  Simon Josefsson  <jas@extundo.com>
-
-	* gnus-msg.el (gnus-confirm-mail-reply-to-news): Typo.  Trivial
-	change from Benjamin Rutt <rutt+news@cis.ohio-state.edu>.
-
-	* nnweb.el (nnweb-type): Remove dejanewsold.  Trivial change from
-	Niklas Morberg <niklas.morberg@axis.com>.
+2002-05-23  Benjamin Rutt  <rutt+news@cis.ohio-state.edu>  (tiny change)
+
+	* gnus-msg.el (gnus-confirm-mail-reply-to-news): Typo.
+
+2002-05-23  Niklas Morberg  <niklas.morberg@axis.com>  (tiny change)
+
+	* nnweb.el (nnweb-type): Remove dejanewsold.
 
 2002-05-22  Simon Josefsson  <jas@extundo.com>
 
 	* sieve.el (sieve-change-region): Define it before it is used.
 
+2002-05-22  Benjamin Rutt  <rutt+news@cis.ohio-state.edu>
+
 	* gnus-msg.el (gnus-confirm-mail-reply-to-news)
 	(gnus-summary-reply): Ask for confirmation when replying to news.
-	Defaults to not ask.  From Benjamin Rutt
-	<rutt+news@cis.ohio-state.edu>.
+	Defaults to not ask.
 
 	* nnimap.el (nnimap-nov-is-evil): Improve doc.
 
@@ -8989,10 +8966,13 @@
 	* nnmail.el (nnmail-cache-insert): Change group to required,
 	removed code which tried to figure out the group.
 
-2002-05-13  Josh Huber  <huber@alum.wpi.edu>
+2002-05-13  Hans de Graaff  <hans@degraaff.org>
 
 	* mml.el (mml-generate-mime-1): Fix mml generation for signed only
-	messages. From Hans de Graaff <hans@degraaff.org>.
+	messages.
+
+2002-05-13  Josh Huber  <huber@alum.wpi.edu>
+
 	* nnml.el (nnml-request-accept-article): Pass in the group name to
 	nnmail-cache-insert, since it's available.
 
@@ -9000,8 +8980,7 @@
 
 	* nndoc.el (nndoc-mime-digest-type-p): Set proper file-end.
 
-2002-05-08  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Florian Weimer <fw@deneb.enyo.de>.
+2002-05-08  Florian Weimer  <fw@deneb.enyo.de>
 
 	* gnus.el (subscribed): New group parameter.
 	(gnus-find-subscribed-addresses): Use it.
@@ -9021,16 +9000,15 @@
 	parenthesis for "<" and ">".  Suggested by Andreas Schwab
 	<schwab@suse.de>.
 
-2002-05-07  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-05-07  Josh Huber  <huber@alum.wpi.edu>
 
 	* nnmail.el (nnmail-cache-insert): Prefer group-art over group
-	when intuiting the group the message is written to.  From Josh
-	Huber <huber@alum.wpi.edu>.
-
-2002-05-06  Simon Josefsson  <jas@extundo.com>
+	when intuiting the group the message is written to.
+
+2002-05-06  Matt Armstrong  <matt@lickey.com>
 
 	* gnus-topic.el (gnus-group-topic-parameters): Work when group
-	buffer doesn't show group.  From Matt Armstrong <matt@lickey.com>.
+	buffer doesn't show group.
 
 2002-05-06  Josh Huber  <huber@alum.wpi.edu>
 
@@ -9077,7 +9055,7 @@
 	server.
 	(nnimap-mailbox-info): defvar instead of defvoo.
 
-2002-05-01 20:09:21 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
+2002-05-01 20:09:21  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.06 is released.
 
@@ -9187,8 +9165,7 @@
 
 	* gnus-art.el (article-unsplit-urls): Allow trailing SPC.
 
-2002-04-24  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Dan Christensen <jdc+news@uwo.ca>.
+2002-04-24  Dan Christensen  <jdc+news@uwo.ca>
 
 	* nndoc.el (nndoc-type-alist, nndoc-lanl-gov-announce-type-p)
 	(nndoc-transform-lanl-gov-announce, nndoc-generate-lanl-gov-head):
@@ -9210,11 +9187,10 @@
 	(gnus-netrc-get, gnus-netrc-machine, gnus-parse-netrc): Aliased to
 	new code in netrc.el.
 
-2002-04-23  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-04-23  Matthieu Moy  <Matthieu.Moy@imag.fr>
 
 	* gnus-msg.el (gnus-summary-resend-message-edit): Remove
-	message-ignored-resent-headers, too.  From Matthieu Moy
-	<Matthieu.Moy@imag.fr>.
+	message-ignored-resent-headers, too.
 
 2002-04-22  Bj,Av(Brn Torkelsson  <torkel@acc.umu.se>
 
@@ -9279,8 +9255,7 @@
 	* message.el (message-gen-unsubscribed-mft): accept a prefix
 	argument so CC can be included with C-u C-c C-f C-a
 
-2002-04-17  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Ted Zlatanov <teodor.zlatanov@divine.com>.
+2002-04-17  Ted Zlatanov  <teodor.zlatanov@divine.com>
 
 	* spam.el (spam-whitelist, spam-blacklist, spam-enter-whitelist):
 	Improve docstring.
@@ -9317,11 +9292,10 @@
 	* nnml.el (nnml-save-nov, nnml-generate-nov-file):
 	* pop3.el (pop3-md5): Don't hardcode point-min == 1.
 
-2002-04-12  Katsumi Yamaoka  <yamaoka@jpl.org>
+2002-04-12  Daiki Ueno  <ueno@unixuser.org>
 
 	* gnus-srvr.el (gnus-server-set-info): Clear
 	`gnus-server-method-cache' when `gnus-server-alist' is changed.
-	From Daiki Ueno <ueno@unixuser.org>.
 
 2002-04-11  Simon Josefsson  <jas@extundo.com>
 
@@ -9475,20 +9449,18 @@
 
 	* message.el (message-mode): Fix doc.
 
-2002-03-25  Simon Josefsson  <jas@extundo.com>
-
-	* message.el (message-subject-re-regexp): Skip Re[42]: junk.  From
-	Matthieu Moy <Matthieu.Moy@imag.fr>.
+2002-03-25  Matthieu Moy  <Matthieu.Moy@imag.fr>
+
+	* message.el (message-subject-re-regexp): Skip Re[42]: junk.
 
 2002-03-24  Jesper Harder  <harder@ifa.au.dk>
 
 	* mml-sec.el (mml-unsecure-message): Add docstring.
 
-2002-03-23  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2002-03-23  Andre Srinivasan  <andre@slamdunknetworks.com>  (tiny change)
 
 	* nnmail.el (nnmail-large-newsgroup): Fix doc, allow non-numeric
 	value.
-	Trivial change from andre@slamdunknetworks.com
 
 2002-03-22  Josh Huber  <huber@alum.wpi.edu>
 
@@ -9516,8 +9488,9 @@
 	* message.el (message-font-lock-keywords): Support multi-line MML
 	tags.
 
+2002-03-21  L,Bu(Brentey K,Ba(Broly  <lorentey@elte.hu>
+
 	* gnus-sum.el (gnus-print-buffer): Remove gnus-decoration.
-	Trivial change from lorentey@elte.hu (L,Bu(Brentey K,Aa(Broly)
 
 2002-03-20  Katsumi Yamaoka  <yamaoka@jpl.org>
 
@@ -9541,30 +9514,28 @@
 	(gnus-sum-thread-tree-leaf-with-other)
 	(gnus-sum-thread-tree-single-leaf): Make customizable.
 
-2002-03-16  Simon Josefsson  <jas@extundo.com>
+2002-03-16  Francis Litterio  <franl@world.std.com>
 
 	* gnus-util.el (gnus-extract-address-components): Don't break on
-	names such as James "Kibo" Parry.  From Francis Litterio
-	<franl@world.std.com>.
-
-2002-03-13  Simon Josefsson  <jas@extundo.com>
-
-	* pop3.el (pop3-open-server): Revert multibyte change.  From
-	Pavel@Janik.cz (Pavel Jan,Am(Bk).
-
-	* message.el (message-send-mail-with-qmail): Make it work.  From
-	Pavel@Janik.cz (Pavel Jan,Am(Bk).
+	names such as James "Kibo" Parry.
+
+2002-03-13  Pavel Jan,Am(Bk  <Pavel@Janik.cz>
+
+	* pop3.el (pop3-open-server): Revert multibyte change.
+
+	* message.el (message-send-mail-with-qmail): Make it work.
 
 2002-03-13  Josh Huber  <huber@alum.wpi.edu>
 
 	* message.el (message-make-mft): Set case-fold-search while
 	generating the MFT.  Also, a little cleanup in the MFT code.
 
-2002-03-12  Simon Josefsson  <jas@extundo.com>
-
-	* message.el (message-qmail-inject-args): May be function.
-	(message-send-mail-with-qmail): Call function if m-q-i-a is
-	function.  From fn@hungry.org (Faried Nawaz).
+2002-03-12  Faried Nawaz  <fn@hungry.org>  (tiny change)
+
+	* message.el (message-qmail-inject-args): May be function.  Adjust
+	doc string and custom type.
+	(message-send-mail-with-qmail): Call function if m-q-i-a is a
+	function.
 
 2002-03-12  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -9586,26 +9557,26 @@
 	* nnslashdot.el (nnslashdot-request-article): Remove javascript
 	too.
 
-2002-03-09  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2002-03-09  Andre Srinivasan  <andre@slamdunknetworks.com>  (tiny change)
 
 	* gnus-sum.el (gnus-summary-save-parts-default-mime): Remove
 	duplication.
 	(gnus-summary-save-parts-type-history): Ditto.
 	(gnus-summary-save-parts-last-directory): Ditto.
-	Trivial change from andre@slamdunknetworks.com
 
 2002-03-09  Paul Jarc  <prj@po.cwru.edu>
 
 	* gnus-start.el (gnus-auto-subscribed-groups): Include nnmaildir.
 
+2002-03-06  Matthieu Moy  <Matthieu.Moy@imag.fr>
+
+	* gnus-msg.el (gnus-summary-resend-message-edit): New function.
+
 2002-03-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* nnslashdot.el (nnslashdot-request-article): Use "<!-- no ad 6
 	-->" as the end of the first article.
 
-	* gnus-msg.el (gnus-summary-resend-message-edit): New function.
-	From Matthieu Moy <Matthieu.Moy@imag.fr>
-
 	* message.el (message-add-action): Use add-to-list.
 	(message-delete-action): New function.
 
@@ -9667,17 +9638,15 @@
 	completing-read.
 	(mm-view-pkcs7-decrypt): CRLF->LF.
 
-2002-03-04  Paul Jarc  <prj@po.cwru.edu>
+2002-03-04  Teodor Zlatanov  <teodor.zlatanov@divine.com>
 
 	* message.el (message-hierarchical-addresses): New variable.
 	(message-get-reply-headers): Use it.
-	From Ted Zlatanov <teodor.zlatanov@divine.com>
-
-2002-03-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+2002-03-03  Geoff Greene  <ggreene@wpi.edu>  (tiny change)
 
 	* message.el (message-mode): If buffer-file-name, don't set auto
 	save file name.
-	Trivial change from Geoff Greene <ggreene@wpi.edu>
 
 2002-03-02  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -9724,11 +9693,12 @@
 	* gnus-sum.el (gnus-articles-to-read): Use large-newsgroup-initial.
 	(gnus-summary-insert-old-articles): Ditto.
 
-2002-02-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2002-02-26  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
 
 	* gnus-sum.el (gnus-articles-to-read): `gnus-large-newsgroup' is
 	used as the default answer of the question, "How many articles?".
-	From TSUCHIYA Masatoshi <tsuchiya@namazu.org>
+
+2002-02-26  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* nnagent.el (nnagent-retrieve-headers): Remove articles with
 	small numbers.
@@ -9737,14 +9707,15 @@
 
 	* deuglify.el: Fix comments.
 
+2002-02-23  Andre Srinivasan  <andre@slamdunknetworks.com>  (tiny change)
+
+	* mml.el (mml-generate-mime-1): Add cdr.
+
 2002-02-23  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* html2text.el (html2text-clean-anchor): If there is no HREF,
 	insert nothing.
 
-	* mml.el (mml-generate-mime-1): Add cdr.
-	From: andre@slamdunknetworks.com
-
 	* mm-view.el (mm-text-html-renderer-alist): Add html2text.
 	(mm-text-html-washer-alist): Ditto.
 
@@ -9760,11 +9731,15 @@
 
 	* deuglify.el: Change copy right. Add autoload. Add coding-system.
 
-	* deuglify.el: New file. The original file name is
-	gnus-outlook-deuglify.el from Raymond Scholz <rscholz@zonix.de>.
+2002-02-22  Raymond Scholz  <rscholz@zonix.de>
+
+	* deuglify.el: New file.  The original file name is
+	gnus-outlook-deuglify.el.
+
+2002-02-22  Andre Srinivasan  <andre@slamdunknetworks.com>  (tiny change)
 
 	* mm-decode.el (mm-display-external): Use
-	mm-file-name-rewrite-functions.  From <andre@slamdunknetworks.com>
+	mm-file-name-rewrite-functions.
 
 2002-02-22  Paul Jarc  <prj@po.cwru.edu>
 
@@ -9800,17 +9775,19 @@
 
 	* gnus-art.el (gnus-article-edit-done): Widen the buffer.
 
+	* message.el (message-send-mail): Be talkative.
+
+2002-02-20  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
 	* gnus-group.el (gnus-group-name-decode): Don't test
 	multibyte-string, because it breaks XEmacs.
-	From: TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp>
-
-	* message.el (message-send-mail): Be talkative.
+
+2002-02-20  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* mm-decode.el (mm-inlined-types): Add application/x-emacs-lisp.
 	(mm-automatic-display): Ditto.
 
 	* mailcap.el (mailcap-mime-data): Ditto.
-	From: Reiner Steib <4uce.02.r.steib@gmx.net>
 
 2002-02-20  Katsumi Yamaoka  <yamaoka@jpl.org>
 
@@ -9852,10 +9829,10 @@
 
 	* nnultimate.el (nnultimate-retrieve-headers): Clean up.
 
-2002-02-18  Paul Jarc  <prj@po.cwru.edu>
+2002-02-18  Mark Thomas  <mthomas@cmu.edu>
 
 	* gnus-util.el (gnus-parent-id): Ignore trailing whitespace in the
-	References header field.  From Mark Thomas <mthomas@cmu.edu>.
+	References header field.
 
 2002-02-18  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -9969,8 +9946,9 @@
 
 	* message-utils.el: Adopt the file.
 
+2002-02-15  Holger Schauer  <Holger.Schauer@gmx.de>
+
 	* message-utils.el: New file.
-	From Holger Schauer <Holger.Schauer@gmx.de>
 
 2002-02-14  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -10078,9 +10056,6 @@
 	gnus-decoration property.
 	* gnus-msg.el (gnus-copy-article-buffer): Remove gnus-decoration.
 
-	* message.el (message-mode): Set local-abbrev-table.
-	From Matt Armstrong <matt@lickey.com>.
-
 	* gnus-art.el (gnus-article-treat-unfold-headers): Don't remove
 	too many spaces.
 
@@ -10088,8 +10063,13 @@
 	(rfc2047-decode-region): Don't unfold. Let
 	gnus-article-treat-unfold-headers do it.
 
+2002-02-07  Matt Armstrong  <matt@lickey.com>.
+
+	* message.el (message-mode): Set local-abbrev-table.
+
+2002-02-07  Jesper Harder  <harder@ifa.au.dk>
+
 	* gnus-sum.el (gnus-dependencies-add-header): Fix typo.
-	From: Jesper Harder <harder@ifa.au.dk>
 
 2002-02-06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
@@ -10116,16 +10096,18 @@
 
 	* nnweb.el (nnweb-google-parse-1): Use a correct format of date.
 
-	* gnus-agent.el (gnus-agent-summary-make-menu-bar): Fix typo.
-	From Stefan Reich,Av(Br <xsteve@riic.at>.
-
 	* nnagent.el (nnagent-request-expire-articles): Don't delete
 	files.
 
-2002-02-05  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2002-02-06  Stefan Reich,Av(Br  <xsteve@riic.at>
+
+	* gnus-agent.el (gnus-agent-summary-make-menu-bar): Fix typo.
+
+2002-02-05  Sriram Karra  <karra@cs.utah.edu>
 
 	* message.el (message-gen-unsubscribed-mft): New function.
-	From Sriram Karra <karra@cs.utah.edu>.
+
+2002-02-05  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* gnus.el (gnus-article-unpropagated-mark-lists): Backslash the
 	open parenthesis.
@@ -10167,18 +10149,18 @@
 	* gnus-art.el (gnus-treatment-function-alist): Move hide-citation,
 	highlight-citation after emphasize.
 
-2002-02-04  Simon Josefsson  <jas@extundo.com>
-
-	* nnfolder.el (nnfolder-open-marks):
-
-	* nnml.el (nnml-open-marks): Message when done.  From David
-	Edmondson <dme@sun.com>.
+2002-02-04  David Edmondson  <dme@sun.com>
+
+	* nnfolder.el (nnfolder-open-marks): Message when done.
+
+	* nnml.el (nnml-open-marks): Ditto.
+
+2002-02-03  Steinar Bang  <sb@dod.no>
+
+	* imap.el (imap-anonymous-auth): Fix typo.
 
 2002-02-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
-	* imap.el (imap-anonymous-auth): Fix typo.
-	From: Steinar Bang <sb@dod.no>
-
 	* gnus-cache.el (gnus-cache-braid-nov): Use set-buffer instead of
 	save-excursion.
 	(gnus-cache-braid-heads): Ditto.
@@ -10231,14 +10213,15 @@
 
 	* gnus.el (gnus-agent): Make it customizable.
 
-	* gnus-dired.el: New file.
-	From Benjamin Rutt <brutt@bloomington.in.us>
-
 	* gnus-cache.el (gnus-cache-articles-in-group): Remove from active
 	if no article.
 	(gnus-cache-possibly-remove-article): Ditto.
 	(gnus-cache-possibly-enter-article): Use gnus-add-to-sorted-list.
 
+2002-02-02  Benjamin Rutt  <brutt@bloomington.in.us>
+
+	* gnus-dired.el: New file.
+
 2002-02-01  Simon Josefsson  <jas@extundo.com>
 
 	* gnus-int.el (gnus-request-accept-article): Use gnus-get-function.
@@ -10739,7 +10722,7 @@
 
 	* gnus.el (gnus-version-number): Bump version number.
 
-2002-01-20 05:33:30 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
+2002-01-20 05:33:30  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.05 is released.
 
@@ -10973,8 +10956,9 @@
 	* message.el (message-newline-and-reformat): Use `newline' instead
 	of inserting \n, so that the newline is marked as hard.
 
+2002-01-13  Jesper Harder  <harder@ifa.au.dk>
+
 	* gnus-spec.el (gnus-pad-form): Don't evaluate EL multiple times.
-	From Jesper Harder <harder@ifa.au.dk>.
 
 2002-01-12  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -11198,11 +11182,13 @@
 	* gnus-group.el (gnus-group-read-ephemeral-group): Restore the old
 	behavior of quit-config.
 
+2002-01-08  Bj,Ax(Brn Mork  <bmork@dod.no>  (tiny change)
+
 	* message.el (message-make-from): Don't quote fullname.
-	From: Bj,Ax(Brn Mork <bmork@dod.no>
+
+2002-01-08  Andre Srinivasan  <andre@slamdunknetworks.com>  (tiny change)
 
 	* gnus-group.el (gnus-group-suspend): Don't kill message buffers.
-	From: <andre@slamdunknetworks.com>
 
 2002-01-07  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -11485,10 +11471,10 @@
 
 	* gnus-agent.el (gnus-agent-fetch-session): Run hook.
 
-2002-01-03  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2002-01-03  Dave Love  <fx@gnu.org>
 
 	* gnus-start.el (gnus-read-init-file): Don't force coding system
-	for ~/.gnus.  From Dave Love <fx@gnu.org>.
+	for ~/.gnus.
 
 2002-01-03  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -11754,7 +11740,7 @@
 	(message-fix-before-sending): Highlight invisible text and place
 	point there.
 
-2002-01-01 02:32:53 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
+2002-01-01 02:32:53  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.04 is released.
 
@@ -12093,11 +12079,10 @@
 	(gnus-update-marks): Use `gnus-range-add' on a uncompressed list
 	instead, it seems to result in shorter ranges.
 
-2001-12-26 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-12-26 11:00:00  Jesper Harder  <harder@ifa.au.dk>
 
 	* mm-util.el (mm-iso-8859-x-to-15-region): Use
 	insert-before-markers.
-	From Jesper Harder <harder@ifa.au.dk>
 
 2001-12-26  Paul Jarc  <prj@po.cwru.edu>
 
@@ -12126,12 +12111,11 @@
 	(nnmaildir-version): Indicate that nnmaildir is now a standard
 	part of Gnus, not separately released.
 
-2001-12-21 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-12-21 08:00:00  Pavel Jan,Am(Bk  <Pavel@Janik.cz>
 
 	* gnus-art.el, gnus-picon.el, gnus-sieve.el, gnus-sum.el:
 	* gnus-xmas.el, imap.el, mailcap.el, mm-util.el, nnfolder.el:
 	* nnheader.el, nnmail.el: Nil/NIL vs. nil.
-	From  Pavel Jan,Am(Bk  <Pavel@Janik.cz>
 
 2001-12-20 15:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -12144,10 +12128,9 @@
 	(nnimap-close-group): Don't quote KEYLIST items.  Suggested by
 	Brian P Templeton <bpt@tunes.org>.
 
-2001-12-19 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-12-19 17:00:00  Paul Jarc  <prj@po.cwru.edu>
 
 	* nnmaildir.el: New file.
-	From Paul Jarc <prj@po.cwru.edu>.
 
 2001-12-19 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -12171,8 +12154,7 @@
 
 	* gnus-win.el (gnus-get-buffer-window): Use gnus-delete-if.
 
-2001-12-18 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	   From Harald Meland <Harald.Meland@usit.uio.no>
+2001-12-18 11:00:00  Harald Meland  <Harald.Meland@usit.uio.no>
 
 	* gnus-win.el (gnus-get-buffer-window): New function.
 	(gnus-all-windows-visible-p): Use it.
@@ -12247,11 +12229,10 @@
 	subscribe-level
 	* gnus-topic.el (gnus-subscribe-topics): use it.
 
-2001-12-13 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-12-13 22:00:00  Sean Neakums  <sneakums@zork.net>  (tiny change)
 
 	* gnus-msg.el (gnus-summary-mail-forward): Forward all marked
-	messages. (A small patch with indentation)
-	From Sean Neakums <sneakums@zork.net>.
+	messages.
 
 	* gnus-uu.el (gnus-uu-grab-articles): Set gnus-current-article to
 	nil after shooting down the gnus-original-article-buffer.
@@ -12326,12 +12307,11 @@
 
 	* mml.el (mime-to-mml): Remove Content-Disposition too.
 
-2001-12-09 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-12-09 08:00:00  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
 
 	* gnus-sum.el (gnus-summary-buffer-name): Decode group name.
 	* gnus-group.el (gnus-group-name-decode): Decode unibyte
 	strings only.
-	From TSUCHIYA Masatoshi <tsuchiya@namazu.org>
 
 2001-12-08  Nevin Kapur  <nevin@jhu.edu>
 
@@ -12432,15 +12412,14 @@
 	the beginning of lines.
 	(gnus-complex-form-to-spec): Ditto.
 
-2001-12-01 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-12-01 08:00:00  Paul Jarc  <prj@po.cwru.edu>
 
 	* message.el (message-make-mft): Fix the m-s-a-file regexp.
-	From Paul Jarc <prj@po.cwru.edu>.
-
-2001-11-30 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+2001-11-30 21:00:00  Paul Jarc  <prj@po.cwru.edu>
 
 	* message.el: New variable message-subscribed-address-file;
-	use it in message-make-mft.  From Paul Jarc <prj@po.cwru.edu>.
+	use it in message-make-mft.
 
 2001-11-30 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -12573,11 +12552,11 @@
 
 	* message.el (sha1): eval-and-compile.
 
-2001-11-20  Simon Josefsson  <jas@extundo.com>
+2001-11-20  Paul Jarc  <prj@po.cwru.edu>
 
 	* message.el (message-allow-no-recipients): New variable.
 	(message-send): Use it, customize the prompting when posting to
-	Gcc/Fcc alone.  From prj@po.cwru.edu (Paul Jarc).
+	Gcc/Fcc alone.
 
 2001-11-20 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -12697,14 +12676,17 @@
 
 	* mml2015.el: Mention RFC 3156.
 
-	* mml1991.el: New file.  From Sascha L,A|(Bdecke <sascha@meta-x.de>.
+2001-11-12  Sascha L,A|(Bdecke  <sascha@meta-x.de>
+
+	* mml1991.el: New file.
 
 2001-11-12 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* gnus-start.el (gnus-auto-subscribed-groups): Use ^nnml.
 
+2001-11-12  Michael Cook  <Michael.Cook@cisco.com>
+
 	* gnus-sum.el (gnus-summary-move-article): Use number-to-string.
-	  From <Michael.Cook@cisco.com>
 
 2001-11-11  Simon Josefsson  <jas@extundo.com>
 
@@ -12713,10 +12695,9 @@
 	canlock, no need to require two different hash algs).  Suggested
 	by Ferenc Wagner <wferi@bolyai1.elte.hu>.
 
-2001-11-09  Simon Josefsson  <jas@extundo.com>
-
-	* gnus.el (gnus-local-domain): Fix doc.  From Pavel Jan,Am(Bk
-	<Pavel@Janik.cz>.
+2001-11-09  Pavel Jan,Am(Bk  <Pavel@Janik.cz>
+
+	* gnus.el (gnus-local-domain): Fix doc.
 
 2001-11-09  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
 
@@ -12958,7 +12939,7 @@
 	mm-with-unibyte-current-buffer-mule4): Use them.
 	(mm-find-mime-charset-region): Treat iso-2022-jp.
 
-	From  Dave Love  <fx@gnu.org>:
+2001-10-30  Dave Love  <fx@gnu.org>
 
 	* mm-util.el (mm-mime-mule-charset-alist): Make it correct by
 	construction.
@@ -13031,10 +13012,10 @@
 
 	* gnus-msg.el (gnus-setup-message): Call post-command-hook.
 
-2001-10-29  Simon Josefsson  <jas@extundo.com>
+2001-10-29  Jesper Harder  <harder@myrealbox.com>
 
 	* mml.el (mml-preview): Bind message-this-is-news if it is
-	news. From Jesper Harder <harder@myrealbox.com>.
+	news.
 
 2001-10-28  Simon Josefsson  <jas@extundo.com>
 
@@ -13050,8 +13031,9 @@
 	* message.el (message-indent-citation): Don't add trailing
 	whitespace when citing text.
 
-	* gnus.el (gnus-group-faq-directory): Fix.  From Jesper Harder
-	<harder@ifa.au.dk>.
+2001-10-27  Jesper Harder  <harder@myrealbox.com>
+
+	* gnus.el (gnus-group-faq-directory): Fix.
 
 2001-10-26 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -13128,21 +13110,22 @@
 	* message.el (message-do-auto-fill): Avoid calling
 	'rfc822-goto-eoh'.
 
-2001-10-20  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Paul Jarc <prj@po.cwru.edu>.
+2001-10-20  Paul Jarc  <prj@po.cwru.edu>
 
 	* message.el (message-get-reply-headers): Restructure the logic
-	and add comments.  From Paul Jarc <prj@po.cwru.edu>.
+	and add comments.
 
 2001-10-20  Simon Josefsson  <jas@extundo.com>
 
 	* message.el (message-cancel-news): Support cancel-locks.
 	Suggested by Per Abrahamsson.
 
+	* nnfolder.el (nnfolder-marks-changed-p): Ditto.
+
+2001-10-20  David Z Maze  <dmaze@MIT.EDU>
+
 	* nnml.el (nnml-marks-changed-p): Use `equal' when comparing
-	conses.  From David Z Maze <dmaze@MIT.EDU>.
-
-	* nnfolder.el (nnfolder-marks-changed-p): Ditto.
+	conses.
 
 2001-10-19  Per Abrahamsen  <abraham@dina.kvl.dk>
 
@@ -13173,8 +13156,7 @@
 	* gnus-sum.el (gnus-group-make-articles-read): Call g-r-set-mark
 	when undoing.
 
-2001-10-18  Simon Josefsson  <jas@extundo.com>
-	From Frank Schmitt <usereplyto@Frank-Schmitt.net>
+2001-10-18  Frank Schmitt  <usereplyto@Frank-Schmitt.net>
 
 	* gnus-sum.el (gnus-summary-limit-to-display-predicate): Fix typo.
 	(gnus-summary-make-menu-bar): Ditto.
@@ -13184,11 +13166,10 @@
 	* nnimap.el (nnimap-expiry-target): Make sure it is back to the
 	server. Suggested by ShengHuo ZHU <zsh@cs.rochester.edu>.
 
-2001-10-17 17:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-10-17 17:00:00  Frank Schmitt  <usenet@Frank-Schmitt.net>
 
 	* gnus-sum.el (gnus-summary-line-format-alist): user-date entry.
 	* gnus-util.el (gnus-user-date): New function.
-	From Frank Schmitt <usenet@Frank-Schmitt.net>.
 
 2001-10-17  Per Abrahamsen  <abraham@dina.kvl.dk>
 
@@ -13221,8 +13202,7 @@
 	* gnus-msg.el (gnus-post-method): Changed two instances of
 	`active' to `current' and one `null' to `not'.
 
-2001-10-16  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Katsumi Yamaoka <yamaoka@jpl.org>.
+2001-10-16  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* message.el (message-setup-fill-variables): Use
 	`normal-auto-fill-function' instead of `auto-fill-function'.
@@ -13278,10 +13258,9 @@
 	* gnus-art.el (article-emphasize): Set `g-a-wash-types' after
 	doing stuff that clears it.
 
-2001-10-12  Simon Josefsson  <jas@extundo.com>
+2001-10-12  Eric Marsden  <emarsden@laas.fr>
 
 	* gnus-cache.el (gnus-summary-limit-include-cached): Rewrite.
-	From Eric Marsden <emarsden@laas.fr>.
 
 2001-10-12 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -13483,20 +13462,17 @@
 	(gnus-topic-catchup-articles): New function. Suggested by Robin
 	S. Socha <robin-dated-1001857693.185e29@socha.net>.
 
-2001-09-27 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Gerd M,Av(Bllmann <gerd@gnu.org>.
+2001-09-27 11:00:00  Gerd M,Av(Bllmann  <gerd@gnu.org>.
 
 	* gnus-ems.el (gnus-article-display-xface): Insert xface after
 	previous ones.
 
-2001-09-27 07:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Daiki Ueno  <ueno@unixuser.org>
+2001-09-27 07:00:00  Daiki Ueno  <ueno@unixuser.org>
 
 	* gnus-sum.el (gnus-summary-show-article): The arglist of
 	detect-coding-region is incompatible.
 
-2001-09-26 18:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Katsuhiro Hermit Endo <hermit@koka-in.org>
+2001-09-26 18:00:00  Katsuhiro Hermit Endo  <hermit@koka-in.org>
 
 	* gnus-group.el (gnus-group-delete-group): Typo.
 
@@ -13579,10 +13555,9 @@
 	* gnus-srvr.el (gnus-server-insert-server-line): Don't let an
 	error querying a backend abort the whole process.
 
-2001-09-17 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-09-17 08:00:00  Gerd M,Av(Bllmann  <gerd@gnu.org>
 
 	* gnus-srvr.el (gnus-server-mode): Fix bogus fontification.
-	From Gerd M,Av(Bllmann <gerd@gnu.org>.
 
 2001-09-17  Didier Verna  <didier@xemacs.org>
 
@@ -13654,7 +13629,7 @@
 	* gnus-diary.el (message-mode-map): bind the above to `C-c D c'.
 	* gnus-diary.el (gnus-article-edit-mode-map): ditto.
 
-2001-09-10 TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
+2001-09-10  TSUCHIYA Masatoshi  <tsuchiya@namazu.org>
 
 	* gnus-sum.el (gnus-select-newsgroup): Make
 	`gnus-current-select-method' buffer-local.
@@ -13662,8 +13637,7 @@
 	* gnus-art.el (gnus-request-article-this-buffer): Refer
 	`gnus-current-select-method' in the current summary buffer.
 
-2001-09-10  Simon Josefsson  <jas@extundo.com>
-	From Daniel Pittman <daniel@rimspace.net>
+2001-09-10  Daniel Pittman  <daniel@rimspace.net>
 
 	* gnus-spec.el (gnus-correct-pad-form): Fix.
 
@@ -13714,8 +13688,7 @@
 	* gnus-agent.el (gnus-agent-fetch-group): If online, actually
 	fetch group.
 
-2001-09-08  Simon Josefsson  <jas@extundo.com>
-	From Daniel Pittman <daniel@rimspace.net>
+2001-09-08  Daniel Pittman  <daniel@rimspace.net>
 
 	* gnus-spec.el (gnus-correct-pad-form): New function.
 	(gnus-parse-simple-format): Use it.
@@ -13727,7 +13700,7 @@
 	Putnam <reader@newsguy.com>.
 	(gnus-group-sort-selected-groups): Touch dribble file.
 
-2001-09-07 Raja R Harinath  <harinath@cs.umn.edu>
+2001-09-07  Raja R Harinath  <harinath@cs.umn.edu>
 
 	* nnml.el (nnml-filenames-are-evil): New variable.
 	(nnml-article-to-file-alist): Rename to ...
@@ -13749,10 +13722,9 @@
 	* gnus-sum.el (gnus-summary-toggle-smiley): New function. Toggles
 	display of graphical smilies.
 
-2001-09-07 02:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-09-07 02:00:00  Bill White  <billw@wolfram.com>
 
 	* gnus-start.el (gnus-setup-news): A typo.
-	From Bill White <billw@wolfram.com>.
 
 2001-09-06  Simon Josefsson  <jas@extundo.com>
 
@@ -13863,8 +13835,7 @@
 	* nnfolder.el (nnfolder-save-marks): Don't create directory named
 	after group in ~/.
 
-2001-08-25  Simon Josefsson  <jas@extundo.com>
-	From Andreas Jaeger  <aj@suse.de>
+2001-08-25  Andreas Jaeger  <aj@suse.de>
 
 	* nnfolder.el (nnfolder-open-marks): Fix typo.
 	* nnml.el (nnml-open-marks): Likewise.
@@ -13918,11 +13889,12 @@
 
 	* mml.el (mml-generate-mime-1): Force as multibyte string.
 
-2001-08-24 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-08-24 12:00:00  Martin Kretzschmar  <Martin.Kretzschmar@inf.tu-dresden.de>
 
 	* gnus-sum.el (gnus-summary-insert-line)
 	(gnus-summary-prepare-threads): gnus-tmp-lines should be a string.
-	From Martin Kretzschmar <Martin.Kretzschmar@inf.tu-dresden.de>
+
+2001-08-24 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* gnus-spec.el (gnus-correct-substring): Take optional END.
 
@@ -13944,8 +13916,7 @@
 	* gnus-util.el (gnus-create-info-command): Return an interactive
 	function.
 
-2001-08-23 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Katsumi Yamaoka <yamaoka@jpl.org>
+2001-08-23 19:00:00  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* gnus-spec.el (gnus-parse-complex-format): Use equal.
 
@@ -14099,8 +14070,7 @@
 
 	* gnus.el (gnus-server-visual): Add defgroup.
 
-2001-08-19  Simon Josefsson  <jas@extundo.com>
-	From Joe Casadonte <jcasadonte@northbound-train.com>
+2001-08-19  Joe Casadonte  <jcasadonte@northbound-train.com>
 
 	* gnus-srvr.el (gnus-server-opened-face, gnus-server-closed-face,
 	gnus-server-denied-face): New.
@@ -14260,8 +14230,7 @@
 	* gnus-delay.el (gnus-delay-article): Allow "01:23" time spec,
 	which specifies a time today or tomorrow.
 
-2001-08-15  Simon Josefsson  <jas@extundo.com>
-	From Pavel@Janik.cz (Pavel Jan,Am(Bk)
+2001-08-15  Pavel Jan,Am(Bk  <Pavel@Janik.cz>
 
 	* gnus-agent.el (gnus-agent-make-mode-line-string)
 	(gnus-agent-toggle-plugged): Use new API.
@@ -14307,7 +14276,6 @@
 	* gnus-spec.el (gnus-format-specs): %n is 23 chars.
 
 2001-08-11 09:40:00  Karl Kleinpaste  <karl@charcoal.com>
-	Committed by Kai Gro,b_(Bjohann.
 
 	* gnus-score.el (gnus-score-string): Fix `match' regexp
 	for `extra' header case.
@@ -14388,23 +14356,23 @@
 	* imap.el (imap-gssapi-auth-p, imap-kerberos4-auth-p): Also check
 	whether `imtest' is installed.
 
-2001-08-04  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	Trivial patch from Nuutti Kotivuori  <nuutti.kotivuori@smarttrust.com>
+2001-08-04  Nuutti Kotivuori  <nuutti.kotivuori@smarttrust.com>
 
 	* gnus-sum.el (gnus-summary-show-article): Call
 	gnus-summary-update-secondary-secondary-mark.
 	* gnus-sum.el (gnus-summary-edit-article-done): Ditto.
 	* gnus-sum.el (gnus-summary-reparent-thread): Ditto.
 
+2001-08-07 16:00:00  Gerd M,Av(Bllmann  <gerd@gnu.org>
+
+	* mm-uu.el (mm-uu-dissect): Autoload.
+
 2001-08-07 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* gnus-sum.el (gnus-summary-make-menu-bar): Misc -> Gnus.
 
 	* gnus-group.el (gnus-group-make-menu-bar): Ditto.
 
-	* mm-uu.el (mm-uu-dissect): Autoload. From Gerd M,Av(Bllmann
-	<gerd@gnu.org>.
-
 	* gnus-art.el (gnus-output-to-file): Bind file-name-coding-system.
 
 	* gnus-util.el (gnus-output-to-rmail): Ditto.
@@ -14526,8 +14494,7 @@
 	(mm-pkcs7-enveloped-magic): Ditto.
 	(mm-view-pkcs7-get-type): Don't regexp quote.
 
-2001-08-01 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Andreas Fuchs <asf@void.at>
+2001-08-01 14:00:00  Andreas Fuchs  <asf@void.at>
 
 	* mml2015.el (mml2015-trust-boundaries-alist): Typo.
 
@@ -14622,13 +14589,11 @@
 	(smime-dns-server): Fix customize group.
 	(smime-call-openssl-region): Use `smime-extra-arguments'.
 
-2001-07-29  Simon Josefsson  <jas@extundo.com>
-	From Vladimir Volovich <vvv@vsu.ru>
+2001-07-29  Vladimir Volovich  <vvv@vsu.ru>
 
 	* smime.el (smime-call-openssl-region): Ignore stderr.
 
-2001-07-29  Simon Josefsson  <jas@extundo.com>
-	From Christoph Conrad <christoph.conrad@gmx.de>
+2001-07-29  Christoph Conrad  <christoph.conrad@gmx.de>
 
 	* gnus-agent.el (gnus-agent-save-group-info): Don't destroy active
 	file.
@@ -14749,8 +14714,7 @@
 
 	* nnimap.el (nnimap-version): Bump version number.
 
-2001-07-26 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Steven E. Harris <seh@speakeasy.org>
+2001-07-26 10:00:00  Steven E. Harris  <seh@speakeasy.org>
 
 	* nnheader.el (nnheader-translate-file-chars): cygwin32 is running
 	in M$Windows too.
@@ -14772,8 +14736,7 @@
 	* gnus-sum.el (gnus-summary-prepare-threads): Shouldn't do tree
 	display (%B) for threads if threading is off.
 
-2001-07-25 14:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Henrik Enberg <henrik@enberg.org>
+2001-07-25 14:00:00  Henrik Enberg  <henrik@enberg.org>
 
 	* gnus-msg.el: Customization patch.
 
@@ -14843,8 +14806,7 @@
 	* gnus-delay.el (gnus-delay-default-hour): New variable.
 	(gnus-delay-article): Allow specific date in YYYY-MM-DD format.
 
-2001-07-23 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Karl Kleinpaste <karl@charcoal.com>
+2001-07-23 22:00:00  Karl Kleinpaste  <karl@charcoal.com>
 
 	* gnus-sum.el (gnus-summary-line-format-alist): Add %B.
 	(gnus-summary-prepare-threads): Ditto.
@@ -15001,11 +14963,11 @@
 	* nnrss.el (nnrss-read-group-data): Nuke emacs-lisp-mode-hook.
 	(nnrss-read-server-data): Ditto.
 
-2001-07-13 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-07-13 12:00:00  Pavel Jan,Am(Bk  <Pavel@Janik.cz>
 
 	* gnus-setup.el (gnus-use-installed-gnus): Typo.
 	* Cleanup files.
-	From Pavel@Janik.cz (Pavel Jan,Am(Bk).
+
 
 2001-07-13 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -15128,8 +15090,7 @@
 	* nntp.el (nntp-send-command, nntp-send-command-nodelete):
 	(nntp-send-command-and-decode): Use gnus-point-at-bol.
 
-2001-07-09 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From  Paul Jarc <prj@po.cwru.edu>
+2001-07-09 13:00:00  Paul Jarc  <prj@po.cwru.edu>
 
 	* message.el (message-use-mail-followup-to): New variable.
 	(message-get-reply-headers): Use it.
@@ -15217,8 +15178,7 @@
 	* gnus-start.el (gnus-check-first-time-used): Use `if' instead of
 	`when'.
 
-2001-07-03  Simon Josefsson  <jas@extundo.com>
-	From Nuutti Kotivuori <nuutti.kotivuori@smarttrust.com>
+2001-07-03  Nuutti Kotivuori  <nuutti.kotivuori@smarttrust.com>
 
 	* flow-fill.el (fill-flowed): Use (1+ (point-at-eol)) instead.
 
@@ -15266,8 +15226,7 @@
 	(rfc2047-encode-message-header): Fold lines even if
 	no QP encoding is done.
 
-2001-06-23  Simon Josefsson  <jas@extundo.com>
-	From Samuel Tardieu <sam@inf.enst.fr>
+2001-06-23  Samuel Tardieu  <sam@inf.enst.fr>
 
 	* smime.el (smime-keys): Support additional certificates.
 	(smime-make-certfiles): New function.
@@ -15301,8 +15260,7 @@
 
 	* message.el (message-goto-body): Return nil if not found. (revert!)
 
-2001-06-21 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Fremlin <chief@bandits.org>
+2001-06-21 10:00:00  John Fremlin  <chief@bandits.org>  (tiny change)
 
 	* message.el (message-goto-body): Some messages have no header.
 
@@ -15384,7 +15342,7 @@
 	* nnweb.el (nnweb-google-parse-1): Fix Google content regexp.
 	(nnweb-google-wash-article): Ditto.
 
-2001-06-14 Ferenc Wagner  <wferi@bolyai1.elte.hu>
+2001-06-14  Ferenc Wagner  <wferi@bolyai1.elte.hu>
 
 	* nnweb.el (nnweb-google-parse-1): Fix Google url regexp.
 
@@ -15411,17 +15369,20 @@
 
 	* nnrss.el (nnrss-group-alist): Use |fr| instead of [fr].
 
-2001-06-12 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-06-12 11:00:00  Marc Lefranc  <Marc.Lefranc@univ-lille1.fr>
 
 	* gnus-art.el (gnus-plain-save-name): Use file-relative-name.
-	From Marc Lefranc <Marc.Lefranc@univ-lille1.fr>.
+
+2001-06-12 11:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* nnrss.el (nnrss-node-text): Node might be nil.
 
-2001-06-11 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+2001-06-11 10:00:00  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* gnus-uu.el (gnus-uu-save-article): Use mml tag instead of
-	part. From Katsumi Yamaoka <yamaoka@jpl.org>.
+	part.
+
+2001-06-11 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* nnrss.el (nnrss-group-alist): More items.
 
@@ -15435,14 +15396,11 @@
 	* gnus-mlspl.el (gnus-group-split-fancy): Fix generation of split
 	restrict clauses.
 
-2001-06-07 16:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-
-	From Benjamin Rutt <brutt+news@bloomington.in.us>
+2001-06-07 16:00:00  Benjamin Rutt  <brutt+news@bloomington.in.us>
 
 	* message.el (message-wide-reply-confirm-recipients): New variable.
 
-2001-06-06  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	Trivial patch from Mark Thomas  <mthomas@edrc.cmu.edu>
+2001-06-06  Mark Thomas  <mthomas@edrc.cmu.edu>  (tiny change)
 
 	* nnmail.el (nnmail-fix-eudora-headers): Change the In-Reply-To
 	fix so it works with XEmacs.
@@ -15456,10 +15414,10 @@
 
 	* nnrss.el: Fix a few bugs.
 
-2001-06-05  Simon Josefsson  <jas@extundo.com>
+2001-06-05  Alex Schroeder  <alex@gnu.org>
 
 	* mm-decode.el (mm-handle-set-external-undisplayer): Don't
-	generate compiler warnings.  From Alex Schroeder <alex@gnu.org>.
+	generate compiler warnings.
 
 2001-06-04  Hrvoje Niksic  <hniksic@arsdigita.com>
 
@@ -15498,20 +15456,17 @@
 	it is not possible to insert a character after a glyph which is at
 	the end of a buffer.  Patch by Lloyd Zusman <ljz@asfast.com>.
 
-2001-05-28  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-
-	From Jaap-Henk Hoepman (jhh@xs4all.nl).
+2001-05-28  Jaap-Henk Hoepman  <jhh@xs4all.nl>
 
 	* mm-decode.el (mm-keep-viewer-alive-types): New variable.
 	(mm-keep-viewer-alive-p, mm-handle-set-external-undisplayer,
 	mm-destroy-postponed-undisplay-list): New functions.
 	(mm-display-external): Use them.
 
-2001-05-27  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+2001-05-27  Raja R. Harinath  <harinath@cs.umn.edu>
 
 	* gnus-salt.el (gnus-tree-highlight-node): Bind `default-high' and
 	`default-low' when evaluating `gnus-summary-highlight'.
-	From Raja R Harinath <harinath@cs.umn.edu>.
 
 2001-05-27  Simon Josefsson  <simon@josefsson.org>
 
@@ -15522,8 +15477,7 @@
 	as details.
 	(mml2015-mailcrypt-clear-verify): Ditto.
 
-2001-05-24  Kai Gro,b_(Bjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
-	From Nevin Kapur <nevin@jhu.edu>.
+2001-05-24  Nevin Kapur  <nevin@jhu.edu>
 
 	* gnus-sum.el (gnus-summary-default-high-score,
 	gnus-summary-default-low-score): New variables.
@@ -15534,8 +15488,7 @@
 	* message.el (message-mail): pass the 'send-actions argument to
 	`message-setup'.
 
-2001-05-16  Simon Josefsson  <simon@josefsson.org>
-	From Raymond Scholz <ray-2001@zonix.de>
+2001-05-16  Raymond Scholz  <ray-2001@zonix.de>
 
 	* gnus-art.el (gnus-mime-view-part-as-charset):
 	(gnus-mime-internalize-part): Doc fixes.
@@ -15599,7 +15552,7 @@
 	correctly.
 	(nnrss-check-group): Use time.
 
-2001-05-01 19:21:19 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
+2001-05-01 19:21:19  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.03 is released.
 
@@ -15671,12 +15624,11 @@
 	(smime-decrypt-region): Ditto.
 
 2001-04-12  Jason Merrill  <jason_merrill@redhat.com>
-	Committed by Simon Josefsson  <simon@josefsson.org>
 
 	* imap.el (imap-shell-open): Erase the buffer *after* copying it into
 	the log.
 
-2001-04-14 01:14:42 Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
+2001-04-14 01:14:42  Lars Magne Ingebrigtsen  <lars@ingebrigtsen.no>
 
 	* gnus.el: Oort Gnus v0.02 is released.
 
@@ -15704,13 +15656,11 @@
 
 	* nnmail.el (nnmail-split-fancy-with-parent): Add docstring.
 
-2001-04-12 19:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Jason Merrill <jason_merrill@redhat.com>
+2001-04-12 19:00:00  Jason Merrill  <jason_merrill@redhat.com>
 
 	* gnus-sum.el (gnus-summary-insert-new-articles): Reverse the articles.
 
 2001-04-10 08:01:15  Katsumi Yamaoka  <yamaoka@jpl.org>
-	Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* gnus-msg.el (gnus-post-news): Fill the Newsgroups header by the
 	newsgroup names when the original article is a news message.
@@ -15721,7 +15671,6 @@
 	supported. Suggest by Jim Meyering <jim@meyering.net>.
 
 2001-04-02  Nevin Kapur  <nevin@jhu.edu>
-	Committed by Kai Gro,b_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>.
 
 	* nnmail.el (nnmail-split-it): Added check for .* at the end of
 	regexp in nnmail-split-fancy.
@@ -15789,13 +15738,11 @@
 	* qp.el (quoted-printable-decode-region): Just message
 	malformation; don't quit.
 
-2001-03-31 21:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Gerd Moellmann <gerd@gnu.org>.
+2001-03-31 21:00:00  Gerd Moellmann  <gerd@gnu.org>
 
 	* gnus.el (gnus-interactive): A typo.
 
 2001-03-26  Juanma Barranquero  <lektu@uol.com.br>
-	Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* gnus-util.el (gnus-delete-alist): Declare it as an alias of
 	`assq-delete-all', if that function exists; otherwise use the old
@@ -15913,8 +15860,7 @@
 
 	* mml2015.el (mml2015-gpg-extract-from): No error.
 
-2001-03-18 23:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Bj,Ax(Brn Mork <bmork@dod.no>.
+2001-03-18 23:00:00  Bj,Ax(Brn Mork  <bmork@dod.no>
 
 	* mml2015.el (mml2015-gpg-extract-from): New function.
 	(mml2015-gpg-verify): Use it.
@@ -15956,8 +15902,7 @@
 	* mailcap.el (mailcap-mime-data): Add application/sieve.
 	(mailcap-mime-extensions): Add .siv, .xls.
 
-2001-03-14 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Christoph Conrad <christoph.conrad@gmx.de>
+2001-03-14 20:00:00  Christoph Conrad  <christoph.conrad@gmx.de>
 
 	* gnus-score.el (gnus-summary-lower-thread): Typo.
 
@@ -16002,7 +15947,6 @@
 	* nnrss.el: New file.
 
 2001-03-08 02:41:36  Katsumi Yamaoka  <yamaoka@jpl.org>
-	Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* rfc2047.el (rfc2047-unfold-region): Fix arg of
 	`skip-chars-forward'.
@@ -16026,9 +15970,10 @@
 	directory part.
 	(gnus-score-search-global-directories): Use file-directory-p.
 
+2001-03-06 13:00:00  Adrian Aichner  <adrian@xemacs.org>
+
 	* gnus-score.el (gnus-score-score-files-1): Use
 	gnus-kill-files-directory.
-	From Adrian Aichner <adrian@xemacs.org>.
 
 2001-03-05 08:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
@@ -16053,8 +15998,7 @@
 
 	* gnus-sum.el (gnus-summary-limit-include-expunged): Fix.
 
-2001-03-01 22:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Katsumi Yamaoka <yamaoka@jpl.org>.
+2001-03-01 22:00:00  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* dgnushack.el (coerce, merge, subseq): defmacro.
 
@@ -16065,7 +16009,6 @@
 	uncompiled versions.
 
 2001-02-26 11:27:27  Paul Jarc  <prj@po.cwru.edu>
-	Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* gnus-util.el (gnus-split-references): Handle malformed References:.
 
@@ -16073,8 +16016,7 @@
 
 	* gnus-art.el (gnus-article-mime-part-status): 1 part.
 
-2001-02-25 10:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From NAGY Andras <nagya@inf.elte.hu>.
+2001-02-25 10:00:00  NAGY Andras  <nagya@inf.elte.hu>
 
 	* gnus.el (gnus-parameters): Typo.
 
@@ -16182,13 +16124,11 @@
 	(gnus-article-sort-functions): Doc fix.  Refer to
 	gnus-thread-sort-functions.
 
-2001-02-18 20:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
-	From Paul Jarc <prj@po.cwru.edu>.
+2001-02-18 20:00:00  Paul Jarc  <prj@po.cwru.edu>
 
 	* message.el (message-get-reply-headers): More fixes.
 
 2001-02-17  Paul Jarc  <prj@po.cwru.edu>
-	Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* message.el (message-get-reply-headers): Fix bug with
 	Mail-Followup-To/to-address interaction.
@@ -16233,7 +16173,6 @@
 	(nnml-request-regenerate): Use it. Change to deffoo.
 
 2001-02-14  Katsumi Yamaoka  <yamaoka@jpl.org>
-	Committed by ShengHuo ZHU  <zsh@cs.rochester.edu>
 
 	* gnus.el (gnus-define-group-parameter): Fix.
 
@@ -18186,7 +18125,7 @@
 
 	* mml.el (mml-generate-mime-1): Ignore ascii.
 
-2000-11-16 Justin Sheehy  <justin@iago.org>
+2000-11-16  Justin Sheehy  <justin@iago.org>
 
 	* gnus-sum.el (gnus-summary-make-menu-bar): Fix menu items.
 
--- a/lisp/gnus/gmm-utils.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/gnus/gmm-utils.el	Sun Oct 15 02:54:13 2006 +0000
@@ -401,6 +401,21 @@
 		 (string-match "^\\(.+\\)-mode$" mode)
 		 (match-string 1 mode))))))
 
+(defun gmm-write-region (start end filename &optional append visit
+			       lockname mustbenew)
+  "Compatibility function for `write-region'.
+
+In XEmacs, the seventh argument of `write-region' specifies the
+coding-system."
+  (if (and mustbenew
+	   (or (featurep 'xemacs)
+	       (= emacs-major-version 20)))
+      (if (file-exists-p filename)
+	  (signal 'file-already-exists
+		  (list "File exists" filename))
+	(write-region start end filename append visit lockname))
+    (write-region start end filename append visit lockname mustbenew)))
+
 (provide 'gmm-utils)
 
 ;; arch-tag: e0b60920-2ce6-40c1-bfc0-cadbbe26b602
--- a/lisp/gnus/gnus-demon.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/gnus/gnus-demon.el	Sun Oct 15 02:54:13 2006 +0000
@@ -218,7 +218,7 @@
 		   (< idle gnus-demon-idle-time)) ; Idle timed out.
 		  (t (< 0 gnus-demon-idle-time)))) ; Or just need to be idle.
 	       ;; So we call the handler.
-	       (with-local-quit
+	       (gnus-with-local-quit
 		 (ignore-errors (funcall (car handler)))
 		 ;; And reset the timer.
 		 (setcar (nthcdr 1 handler)
@@ -232,7 +232,7 @@
 	       (gnus-demon-is-idle-p))
 	  ;; We want to call this handler each and every time that
 	  ;; Emacs is idle.
-	  (with-local-quit
+	  (gnus-with-local-quit
 	    (ignore-errors (funcall (car handler)))))
 	 (t
 	  ;; We want to call this handler only if Emacs has been idle
@@ -240,7 +240,7 @@
 	  (and (not (memq (car handler) gnus-demon-idle-has-been-called))
 	       (< idle gnus-demon-idle-time)
 	       (gnus-demon-is-idle-p)
-	       (with-local-quit
+	       (gnus-with-local-quit
 		 (ignore-errors (funcall (car handler)))
 		 ;; Make sure the handler won't be called once more in
 		 ;; this idle-cycle.
--- a/lisp/gnus/gnus-registry.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/gnus/gnus-registry.el	Sun Oct 15 02:54:13 2006 +0000
@@ -60,6 +60,7 @@
 (require 'gnus)
 (require 'gnus-int)
 (require 'gnus-sum)
+(require 'gnus-util)
 (require 'nnmail)
 
 (defvar gnus-registry-dirty t
@@ -243,7 +244,8 @@
 	(gnus-registry-clean-empty-function))
       ;; now trim the registry appropriately
       (setq gnus-registry-alist (gnus-registry-trim
-				 (hashtable-to-alist gnus-registry-hashtb)))
+				 (gnus-hashtable-to-alist
+				  gnus-registry-hashtb)))
       ;; really save
       (gnus-registry-cache-save)
       (setq gnus-registry-entry-caching caching)
@@ -262,7 +264,7 @@
 
 (defun gnus-registry-read ()
   (gnus-registry-cache-read)
-  (setq gnus-registry-hashtb (alist-to-hashtable gnus-registry-alist))
+  (setq gnus-registry-hashtb (gnus-alist-to-hashtable gnus-registry-alist))
   (setq gnus-registry-dirty nil))
 
 (defun gnus-registry-trim (alist)
@@ -290,26 +292,6 @@
                       (cdr (gethash (car a) timehash))
                       (cdr (gethash (car b) timehash))))))))))
 
-(defun alist-to-hashtable (alist)
-  "Build a hashtable from the values in ALIST."
-  (let ((ht (make-hash-table
-	     :size 4096
-	     :test 'equal)))
-    (mapc
-     (lambda (kv-pair)
-       (puthash (car kv-pair) (cdr kv-pair) ht))
-     alist)
-     ht))
-
-(defun hashtable-to-alist (hash)
-  "Build an alist from the values in HASH."
-  (let ((list nil))
-    (maphash
-     (lambda (key value)
-       (setq list (cons (cons key value) list)))
-     hash)
-    list))
-
 (defun gnus-registry-action (action data-header from &optional to method)
   (let* ((id (mail-header-id data-header))
 	 (subject (gnus-registry-simplify-subject
@@ -660,7 +642,7 @@
   "Clear the Gnus registry."
   (interactive)
   (setq gnus-registry-alist nil)
-  (setq gnus-registry-hashtb (alist-to-hashtable gnus-registry-alist))
+  (setq gnus-registry-hashtb (gnus-alist-to-hashtable gnus-registry-alist))
   (setq gnus-registry-dirty t))
 
 ;;;###autoload
--- a/lisp/gnus/gnus-sum.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/gnus/gnus-sum.el	Sun Oct 15 02:54:13 2006 +0000
@@ -2438,7 +2438,7 @@
 	 ["Unread" gnus-summary-limit-to-unread t]
 	 ["Unseen" gnus-summary-limit-to-unseen t]
 	 ["Non-dormant" gnus-summary-limit-exclude-dormant t]
-	 ["Next articles" gnus-summary-limit-to-articles t]
+	 ["Next or process marked articles" gnus-summary-limit-to-articles t]
 	 ["Pop limit" gnus-summary-pop-limit t]
 	 ["Show dormant" gnus-summary-limit-include-dormant t]
 	 ["Hide childless dormant"
--- a/lisp/gnus/gnus-util.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/gnus/gnus-util.el	Sun Oct 15 02:54:13 2006 +0000
@@ -746,6 +746,28 @@
       (unless dir
 	(delete-directory directory)))))
 
+;; The following two functions are used in gnus-registry.
+;; They were contributed by Andreas Fuchs <asf@void.at>.
+(defun gnus-alist-to-hashtable (alist)
+  "Build a hashtable from the values in ALIST."
+  (let ((ht (make-hash-table
+	     :size 4096
+	     :test 'equal)))
+    (mapc
+     (lambda (kv-pair)
+       (puthash (car kv-pair) (cdr kv-pair) ht))
+     alist)
+     ht))
+
+(defun gnus-hashtable-to-alist (hash)
+  "Build an alist from the values in HASH."
+  (let ((list nil))
+    (maphash
+     (lambda (key value)
+       (setq list (cons (cons key value) list)))
+     hash)
+    list))
+
 (defun gnus-strip-whitespace (string)
   "Return STRING stripped of all whitespace."
   (while (string-match "[\r\n\t ]+" string)
@@ -1616,6 +1638,25 @@
   (defalias 'gnus-set-process-query-on-exit-flag
     'process-kill-without-query))
 
+(if (fboundp 'with-local-quit)
+    (defalias 'gnus-with-local-quit 'with-local-quit)
+  (defmacro gnus-with-local-quit (&rest body)
+    "Execute BODY, allowing quits to terminate BODY but not escape further.
+When a quit terminates BODY, `gnus-with-local-quit' returns nil but
+requests another quit.  That quit will be processed as soon as quitting
+is allowed once again.  (Immediately, if `inhibit-quit' is nil.)"
+    ;;(declare (debug t) (indent 0))
+    `(condition-case nil
+	 (let ((inhibit-quit nil))
+	   ,@body)
+       (quit (setq quit-flag t)
+	     ;; This call is to give a chance to handle quit-flag
+	     ;; in case inhibit-quit is nil.
+	     ;; Without this, it will not be handled until the next function
+	     ;; call, and that might allow it to exit thru a condition-case
+	     ;; that intends to handle the quit signal next time.
+	     (eval '(ignore nil))))))
+
 (provide 'gnus-util)
 
 ;;; arch-tag: f94991af-d32b-4c97-8c26-ca12a934de49
--- a/lisp/gnus/mm-util.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/gnus/mm-util.el	Sun Oct 15 02:54:13 2006 +0000
@@ -1057,17 +1057,11 @@
 			     (setq file (concat file suffix)))
 			 (if dir-flag
 			     (make-directory file)
-			   (if (or (featurep 'xemacs)
-				   (= emacs-major-version 20))
-			       ;; NOTE: This is unsafe if Emacs 20
-			       ;; users and XEmacs users don't use
-			       ;; a secure temp directory.
-			       (if (file-exists-p file)
-				   (signal 'file-already-exists
-					   (list "File exists" file))
-				 (write-region "" nil file nil 'silent))
-			     (write-region "" nil file nil 'silent
-					   nil 'excl)))
+			   ;; NOTE: This is unsafe if Emacs 20
+			   ;; users and XEmacs users don't use
+			   ;; a secure temp directory.
+			   (gmm-write-region "" nil file nil 'silent
+					     nil 'excl))
 			 nil)
 		     (file-already-exists t)
 		     ;; The Emacs 20 and XEmacs versions of
--- a/lisp/gnus/mm-uu.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/gnus/mm-uu.el	Sun Oct 15 02:54:13 2006 +0000
@@ -373,7 +373,7 @@
 	   mm-security-handle 'gnus-details
 	   (format "Clear verification not supported by `%s'.\n" mml2015-use))))
       (goto-char (point-min))
-      (if (search-forward "\n\n" nil t)
+      (if (re-search-forward "\n[\t ]*\n" nil t)
 	  (delete-region (point-min) (point)))
       (if (re-search-forward mm-uu-pgp-beginning-signature nil t)
 	  (delete-region (match-beginning 0) (point-max)))
--- a/lisp/gnus/nnmaildir.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/gnus/nnmaildir.el	Sun Oct 15 02:54:13 2006 +0000
@@ -428,7 +428,8 @@
 	(prin1 (vector storage-version num msgid nov) (current-buffer))
 	(setq file (concat novfile ":"))
 	(nnmaildir--unlink file)
-	(write-region (point-min) (point-max) file nil 'no-message nil 'excl))
+	(gmm-write-region (point-min) (point-max) file nil 'no-message nil
+			  'excl))
       (rename-file file novfile 'replace)
       (setf (nnmaildir--art-msgid article) msgid)
       nov)))
@@ -1246,8 +1247,8 @@
 	(throw 'return nil))
       (save-excursion
 	(set-buffer buffer)
-	(write-region (point-min) (point-max) tmpfile nil 'no-message nil
-		      'excl))
+	(gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil
+			  'excl))
       (unix-sync) ;; no fsync :(
       (rename-file tmpfile (concat (nnmaildir--cur dir) file suffix) 'replace)
       t)))
@@ -1341,8 +1342,8 @@
       (condition-case nil
 	  (add-name-to-file nnmaildir--file tmpfile)
 	(error
-	 (write-region (point-min) (point-max) tmpfile nil 'no-message nil
-		       'excl)
+	 (gmm-write-region (point-min) (point-max) tmpfile nil 'no-message nil
+			   'excl)
 	 (unix-sync))) ;; no fsync :(
       (nnheader-cancel-timer 24h)
       (condition-case err
--- a/lisp/gnus/pop3.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/gnus/pop3.el	Sun Oct 15 02:54:13 2006 +0000
@@ -75,22 +75,22 @@
 
 (defcustom pop3-authentication-scheme 'pass
   "*POP3 authentication scheme.
-Defaults to 'pass, for the standard USER/PASS authentication.  Other valid
-values are 'apop."
+Defaults to `pass', for the standard USER/PASS authentication.  The other
+valid value is 'apop'."
+  :type '(choice (const :tag "Normal user/password" pass)
+		 (const :tag "APOP" apop))
   :version "22.1" ;; Oort Gnus
-  :type '(choice (const :tag "USER/PASS" pass)
-		 (const :tag "APOP" apop))
   :group 'pop3)
 
 (defcustom pop3-leave-mail-on-server nil
   "*Non-nil if the mail is to be left on the POP server after fetching.
 
-If the `pop3-leave-mail-on-server' is non-`nil' the mail is to be
-left on the POP server after fetching.  Note that POP servers
-maintain no state information between sessions, so what the
-client believes is there and what is actually there may not match
-up.  If they do not, then you may get duplicate mails or the
-whole thing can fall apart and leave you with a corrupt mailbox."
+If `pop3-leave-mail-on-server' is non-nil the mail is to be left
+on the POP server after fetching.  Note that POP servers maintain
+no state information between sessions, so what the client
+believes is there and what is actually there may not match up.
+If they do not, then you may get duplicate mails or the whole
+thing can fall apart and leave you with a corrupt mailbox."
   ;; We can't use the UILD support from XEmacs mail-lib or cvs.m17n.org:
   ;; http://thread.gmane.org/v9lld8fml4.fsf@marauder.physik.uni-ulm.de
   ;; http://thread.gmane.org/b9yy8hzy9ej.fsf@jpl.org
@@ -170,11 +170,14 @@
           (unless pop3-leave-mail-on-server
             (pop3-dele process n))
 	  (setq n (+ 1 n))
-	  (if pop3-debug (sit-for 1) (sit-for 0.1))
-	  )
+	  (if pop3-debug (sit-for 1) (sit-for 0.1))) ; why?
+      (when (and pop3-leave-mail-on-server
+		 (> n 1))
+	(message "pop3.el doesn't support UIDL.  Setting `pop3-leave-mail-on-server'
+to %s might not give the result you'd expect." pop3-leave-mail-on-server)
+	(sit-for 1))
       (pop3-quit process))
-    (kill-buffer crashbuf)
-    )
+    (kill-buffer crashbuf))
   t)
 
 (defun pop3-get-message-count ()
@@ -316,6 +319,8 @@
 	    ;; Date: 08 Jul 1996 23:22:24 -0400
 	    ;; should be
 	    ;; Tue Jul 9 09:04:21 1996
+
+	    ;; Fixme: This should use timezone on the date field contents.
 	    (setq date
 		  (cond ((not date)
 			 "Tue Jan 1 00:00:0 1900")
--- a/lisp/help-at-pt.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/help-at-pt.el	Sun Oct 15 02:54:13 2006 +0000
@@ -246,7 +246,7 @@
 (defun scan-buf-move-to-region (prop &optional arg hook)
   "Go to the start of the next region with non-nil PROP property.
 Then run HOOK, which should be a quoted symbol that is a normal
-hook.variable, or an expression evaluating to such a symbol.
+hook variable, or an expression evaluating to such a symbol.
 Adjacent areas with different non-nil PROP properties are
 considered different regions.
 
--- a/lisp/help.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/help.el	Sun Oct 15 02:54:13 2006 +0000
@@ -764,7 +764,7 @@
 For this to work correctly for a minor mode, the mode's indicator
 variable \(listed in `minor-mode-alist') must also be a function
 whose documentation describes the minor mode."
-  (interactive)
+  (interactive "@")
   (unless buffer (setq buffer (current-buffer)))
   (help-setup-xref (list #'describe-mode buffer)
 		   (interactive-p))
--- a/lisp/ido.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/ido.el	Sun Oct 15 02:54:13 2006 +0000
@@ -3084,12 +3084,14 @@
   (let ((oa (ido-file-extension-order a n))
 	(ob (ido-file-extension-order b n)))
     (cond
-     ((= oa ob)
-      lessp)
      ((and oa ob)
-      (if lessp
-	  (> oa ob)
-	(< oa ob)))
+      (cond
+       ((= oa ob)
+	lessp)
+       (lessp
+	(> oa ob))
+       (t
+	(< oa ob))))
      (oa
       (not lessp))
      (ob
@@ -3136,7 +3138,12 @@
   (let ((filenames
 	 (split-string
 	  (shell-command-to-string
-	   (concat "find " dir " -name \"" (if prefix "" "*") file "*\" -type " (if finddir "d" "f") " -print"))))
+	   (concat "find "
+		   (shell-quote-argument dir)
+		   " -name "
+		   (shell-quote-argument
+		    (concat (if prefix "" "*") file "*"))
+		   " -type " (if finddir "d" "f") " -print"))))
 	filename d f
 	res)
     (while filenames
--- a/lisp/info-look.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/info-look.el	Sun Oct 15 02:54:13 2006 +0000
@@ -843,12 +843,13 @@
 (info-lookup-maybe-add-help
  :mode 'maxima-mode
  :ignore-case t
- :regexp "[a-zA-Z_%]+"
+ :regexp "[a-zA-Z0-9_%]+"
  :doc-spec '( ("(maxima)Function and Variable Index" nil
 	       "^ -+ [^:]+:[ ]+\\(\\[[^=]*=[ ]+\\)?" nil)))
 
 (info-lookup-maybe-add-help
  :mode 'inferior-maxima-mode
+ :regexp "[a-zA-Z0-9_%]+"
  :other-modes '(maxima-mode))
 
 ;; coreutils and bash builtins overlap in places, eg. printf, so there's a
--- a/lisp/international/mule-cmds.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/international/mule-cmds.el	Sun Oct 15 02:54:13 2006 +0000
@@ -219,19 +219,21 @@
 			   ((eq eol-type 'dos) 1)
 			   ((eq eol-type 'mac) 2)
 			   (t eol-type))))
-  (let ((orig-eol-type (coding-system-eol-type coding-system)))
-    (if (vectorp orig-eol-type)
-	(if (not eol-type)
-	    coding-system
-	  (aref orig-eol-type eol-type))
-      (let ((base (coding-system-base coding-system)))
-	(if (not eol-type)
-	    base
-	  (if (= eol-type orig-eol-type)
-	      coding-system
-	    (setq orig-eol-type (coding-system-eol-type base))
-	    (if (vectorp orig-eol-type)
-		(aref orig-eol-type eol-type))))))))
+  ;; We call `coding-system-base' before `coding-system-eol-type',
+  ;; because the coding-system may not be initialized until then.
+  (let* ((base (coding-system-base coding-system))
+	 (orig-eol-type (coding-system-eol-type coding-system)))
+    (cond ((vectorp orig-eol-type)
+	   (if (not eol-type)
+	       coding-system
+	     (aref orig-eol-type eol-type)))
+	  ((not eol-type)
+	   base)
+	  ((= eol-type orig-eol-type)
+	   coding-system)
+	  ((progn (setq orig-eol-type (coding-system-eol-type base))
+		  (vectorp orig-eol-type))
+	   (aref orig-eol-type eol-type)))))
 
 (defun coding-system-change-text-conversion (coding-system coding)
   "Return a coding system which differs from CODING-SYSTEM in text conversion.
--- a/lisp/isearch.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/isearch.el	Sun Oct 15 02:54:13 2006 +0000
@@ -1289,23 +1289,18 @@
 (defun isearch-mouse-2 (click)
   "Handle mouse-2 in Isearch mode.
 For a click in the echo area, invoke `isearch-yank-x-selection'.
-Otherwise invoke whatever mouse-2 is bound to outside of Isearch."
+Otherwise invoke whatever the calling mouse-2 command sequence
+is bound to outside of Isearch."
   (interactive "e")
   (let* ((w (posn-window (event-start click)))
 	 (overriding-terminal-local-map nil)
-	 (key (vector (event-basic-type click)))
-	 ;; FIXME: `key-binding' should accept an event as argument
-	 ;; and do all the overlay/text-properties lookup etc...
-	 (binding (with-current-buffer
-		      (if (window-live-p w) (window-buffer w) (current-buffer))
-		    (key-binding key))))
+	 (binding (key-binding (this-command-keys-vector) t)))
     (if (and (window-minibuffer-p w)
 	     (not (minibuffer-window-active-p w))) ; in echo area
 	(isearch-yank-x-selection)
       (when (functionp binding)
 	(call-interactively binding)))))
 
-
 (defun isearch-yank-internal (jumpform)
   "Pull the text from point to the point reached by JUMPFORM.
 JUMPFORM is a lambda expression that takes no arguments and returns a
--- a/lisp/longlines.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/longlines.el	Sun Oct 15 02:54:13 2006 +0000
@@ -410,7 +410,7 @@
 
 (defun longlines-window-change-function ()
   "Re-wrap the buffer if the window width has changed.
-This is called by `window-size-change-functions'."
+This is called by `window-configuration-change-hook'."
   (when (/= fill-column (- (window-width) window-min-width))
     (setq fill-column (- (window-width) window-min-width))
     (let ((mod (buffer-modified-p)))
--- a/lisp/mail/rmail.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/mail/rmail.el	Sun Oct 15 02:54:13 2006 +0000
@@ -623,7 +623,7 @@
 
 ;;;###autoload
 (defvar rmail-mime-charset-pattern
-  (concat "^content-type:[ ]*text/plain;"
+  (concat "^content-type:[ \t]*text/plain;"
 	  "\\(?:[ \t\n]*\\(?:format\\|delsp\\)=\"?[-a-z0-9]+\"?;\\)*"
 	  "[ \t\n]*charset=\"?\\([^ \t\n\";]+\\)\"?")
   "Regexp to match MIME-charset specification in a header of message.
@@ -2875,6 +2875,12 @@
 			  (coding-system-change-eol-conversion
 			   coding
 			   (coding-system-eol-type old-coding)))
+		    ;; If old-coding is `undecided', encode-coding-region
+		    ;; will not encode the text at all.  Find a proper
+		    ;; non-trivial encoding to use.
+		    (if (memq (coding-system-base old-coding) '(nil undecided))
+			(setq old-coding
+			      (car (find-coding-systems-region msgbeg msgend))))
 		    (setq x-coding-header (point-marker))
 		    (narrow-to-region msgbeg msgend)
 		    (encode-coding-region (point) msgend old-coding)
--- a/lisp/mouse-sel.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/mouse-sel.el	Sun Oct 15 02:54:13 2006 +0000
@@ -737,7 +737,8 @@
     (mouse-set-point event))
   (when mouse-sel-get-selection-function
     (push-mark (point) 'nomsg)
-    (insert (or (funcall mouse-sel-get-selection-function selection) ""))))
+  (insert-for-yank
+   (or (funcall mouse-sel-get-selection-function selection) ""))))
 
 ;;=== Handle loss of selections ===========================================
 
--- a/lisp/newcomment.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/newcomment.el	Sun Oct 15 02:54:13 2006 +0000
@@ -238,7 +238,7 @@
 (defcustom comment-empty-lines nil
   "If nil, `comment-region' does not comment out empty lines.
 If t, it always comments out empty lines.
-if `eol' it only comments out empty lines if comments are
+If `eol' it only comments out empty lines if comments are
 terminated by the end of line (i.e. `comment-end' is empty)."
   :type '(choice (const :tag "Never" nil)
 	  (const :tag "Always" t)
@@ -1124,12 +1124,44 @@
   :group 'comment)
 
 (defun comment-valid-prefix-p (prefix compos)
-  (or
-   ;; Accept any prefix if the current comment is not EOL-terminated.
-   (save-excursion (goto-char compos) (comment-forward) (not (bolp)))
-   ;; Accept any prefix that starts with a comment-start marker.
-   (string-match (concat "\\`[ \t]*\\(?:" comment-start-skip "\\)")
-		 prefix)))
+    "Check that the adaptive-fill-prefix is consistent with the context.
+PREFIX is the prefix (presumably guessed by `adaptive-fill-mode').
+COMPOS is the position of the beginning of the comment we're in, or nil
+if we're not inside a comment."
+  ;; This consistency checking is mostly needed to workaround the limitation
+  ;; of auto-fill-mode whose paragraph-determination doesn't pay attention
+  ;; to comment boundaries.
+  (if (null compos)
+      ;; We're not inside a comment: the prefix shouldn't match
+      ;; a comment-starter.
+      (not (and comment-start comment-start-skip
+                (string-match comment-start-skip prefix)))
+    (or
+     ;; Accept any prefix if the current comment is not EOL-terminated.
+     (save-excursion (goto-char compos) (comment-forward) (not (bolp)))
+     ;; Accept any prefix that starts with the same comment-start marker
+     ;; as the current one.
+     (when (string-match (concat "\\`[ \t]*\\(?:" comment-start-skip "\\)")
+                         prefix)
+       (let ((prefix-com (comment-string-strip (match-string 0 prefix) nil t)))
+         (string-match "\\`[ \t]*" prefix-com)
+         (let* ((prefix-space (match-string 0 prefix-com))
+                (prefix-indent (string-width prefix-space))
+                (prefix-comstart (substring prefix-com (match-end 0))))
+           (save-excursion
+             (goto-char compos)
+             ;; The comstart marker is the same.
+             (and (looking-at (regexp-quote prefix-comstart))
+                  ;; The indentation as well.
+                  (or (= prefix-indent
+                         (- (current-column) (current-left-margin)))
+                      ;; Check the indentation in two different ways, just
+                      ;; to try and avoid most of the potential funny cases.
+                      (equal prefix-space
+                             (buffer-substring (point)
+                                               (progn (move-to-left-margin)
+                                                      (point)))))))))))))
+                    
 
 ;;;###autoload
 (defun comment-indent-new-line (&optional soft)
@@ -1182,8 +1214,7 @@
 	 ;; If there's an adaptive prefix, use it unless we're inside
 	 ;; a comment and the prefix is not a comment starter.
 	 ((and fill-prefix
-	       (or (not compos)
-		   (comment-valid-prefix-p fill-prefix compos)))
+               (comment-valid-prefix-p fill-prefix compos))
 	  (indent-to-left-margin)
 	  (insert-and-inherit fill-prefix))
 	 ;; If we're not inside a comment, just try to indent.
--- a/lisp/progmodes/cperl-mode.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/progmodes/cperl-mode.el	Sun Oct 15 02:54:13 2006 +0000
@@ -5,7 +5,7 @@
 ;;     Free Software Foundation, Inc.
 
 ;; Author: Ilya Zakharevich and Bob Olson
-;; Maintainer: Ilya Zakharevich <cperl@ilyaz.org>
+;; Maintainer: Ilya Zakharevich <ilyaz@cpan.org>
 ;; Keywords: languages, Perl
 
 ;; This file is part of GNU Emacs.
@@ -25,7 +25,7 @@
 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 ;; Boston, MA 02110-1301, USA.
 
-;;; Corrections made by Ilya Zakharevich cperl@ilyaz.org
+;;; Corrections made by Ilya Zakharevich ilyaz@cpan.org
 
 ;;; Commentary:
 
@@ -67,67 +67,89 @@
 ;; likewise with m, tr, y, q, qX instead of s
 
 ;;; Code:
-
+
 (defvar vc-rcs-header)
 (defvar vc-sccs-header)
 
-;; Some macros are needed for `defcustom'
 (eval-when-compile
-  (condition-case nil
-      (require 'man)
-    (error nil))
-  (defconst cperl-xemacs-p (string-match "XEmacs\\|Lucid" emacs-version))
-  (defvar cperl-can-font-lock
-    (or cperl-xemacs-p
-	(and (boundp 'emacs-major-version)
-	     	(or window-system
-		    (> emacs-major-version 20)))))
-  (if cperl-can-font-lock
-      (require 'font-lock))
-  (defvar msb-menu-cond)
-  (defvar gud-perldb-history)
-  (defvar font-lock-background-mode)	; not in Emacs
-  (defvar font-lock-display-type)	; ditto
-  (defmacro cperl-is-face (arg)		; Takes quoted arg
-    (cond ((fboundp 'find-face)
-	   `(find-face ,arg))
-	  (;;(and (fboundp 'face-list)
-	   ;;	(face-list))
-	   (fboundp 'face-list)
-	   `(member ,arg (and (fboundp 'face-list)
-			      (face-list))))
-	  (t
-	   `(boundp ,arg))))
-  (defmacro cperl-make-face (arg descr) ; Takes unquoted arg
-    (cond ((fboundp 'make-face)
-	   `(make-face (quote ,arg)))
-	  (t
-	   `(defvar ,arg (quote ,arg) ,descr))))
-  (defmacro cperl-force-face (arg descr) ; Takes unquoted arg
-    `(progn
-       (or (cperl-is-face (quote ,arg))
-	   (cperl-make-face ,arg ,descr))
-       (or (boundp (quote ,arg))	; We use unquoted variants too
-	   (defvar ,arg (quote ,arg) ,descr))))
-  (if cperl-xemacs-p
-      (defmacro cperl-etags-snarf-tag (file line)
-	`(progn
-	   (beginning-of-line 2)
-	   (list ,file ,line)))
-    (defmacro cperl-etags-snarf-tag (file line)
-      `(etags-snarf-tag)))
-  (if cperl-xemacs-p
-      (defmacro cperl-etags-goto-tag-location (elt)
-	;;(progn
-	;; (switch-to-buffer (get-file-buffer (elt (, elt) 0)))
-	;; (set-buffer (get-file-buffer (elt (, elt) 0)))
-	;; Probably will not work due to some save-excursion???
-	;; Or save-file-position?
-	;; (message "Did I get to line %s?" (elt (, elt) 1))
-	`(goto-line (string-to-number (elt ,elt 1))))
-    ;;)
-    (defmacro cperl-etags-goto-tag-location (elt)
-      `(etags-goto-tag-location ,elt))))
+      (condition-case nil
+	  (require 'custom)
+	(error nil))
+      (condition-case nil
+	  (require 'man)
+	(error nil))
+      (defconst cperl-xemacs-p (string-match "XEmacs\\|Lucid" emacs-version))
+      (defvar cperl-can-font-lock
+	(or cperl-xemacs-p
+	    (and (boundp 'emacs-major-version)
+		 (or window-system
+		     (> emacs-major-version 20)))))
+      (if cperl-can-font-lock
+	  (require 'font-lock))
+      (defvar msb-menu-cond)
+      (defvar gud-perldb-history)
+      (defvar font-lock-background-mode) ; not in Emacs
+      (defvar font-lock-display-type)	; ditto
+      (defvar paren-backwards-message)	; Not in newer XEmacs?
+      (or (fboundp 'defgroup)
+	  (defmacro defgroup (name val doc &rest arr)
+	    nil))
+      (or (fboundp 'custom-declare-variable)
+	  (defmacro defcustom (name val doc &rest arr)
+	    (` (defvar (, name) (, val) (, doc)))))
+      (or (and (fboundp 'custom-declare-variable)
+	       (string< "19.31" emacs-version))	;  Checked with 19.30: defface does not work
+	  (defmacro defface (&rest arr)
+	    nil))
+      ;; Avoid warning (tmp definitions)
+      (or (fboundp 'x-color-defined-p)
+	  (defmacro x-color-defined-p (col)
+	    (cond ((fboundp 'color-defined-p) (` (color-defined-p (, col))))
+		  ;; XEmacs >= 19.12
+		  ((fboundp 'valid-color-name-p) (` (valid-color-name-p (, col))))
+		  ;; XEmacs 19.11
+		  ((fboundp 'x-valid-color-name-p) (` (x-valid-color-name-p (, col))))
+		  (t '(error "Cannot implement color-defined-p")))))
+      (defmacro cperl-is-face (arg)	; Takes quoted arg
+	(cond ((fboundp 'find-face)
+	       (` (find-face (, arg))))
+	      (;;(and (fboundp 'face-list)
+	       ;;	(face-list))
+	       (fboundp 'face-list)
+	       (` (member (, arg) (and (fboundp 'face-list)
+				       (face-list)))))
+	      (t
+	       (` (boundp (, arg))))))
+      (defmacro cperl-make-face (arg descr) ; Takes unquoted arg
+	(cond ((fboundp 'make-face)
+	       (` (make-face (quote (, arg)))))
+	      (t
+	       (` (defvar (, arg) (quote (, arg)) (, descr))))))
+      (defmacro cperl-force-face (arg descr) ; Takes unquoted arg
+	(` (progn
+	     (or (cperl-is-face (quote (, arg)))
+		 (cperl-make-face (, arg) (, descr)))
+	     (or (boundp (quote (, arg))) ; We use unquoted variants too
+		 (defvar (, arg) (quote (, arg)) (, descr))))))
+      (if cperl-xemacs-p
+	  (defmacro cperl-etags-snarf-tag (file line)
+	    (` (progn
+		 (beginning-of-line 2)
+		 (list (, file) (, line)))))
+	(defmacro cperl-etags-snarf-tag (file line)
+	  (` (etags-snarf-tag))))
+      (if cperl-xemacs-p
+	  (defmacro cperl-etags-goto-tag-location (elt)
+	    (`;;(progn
+	     ;; (switch-to-buffer (get-file-buffer (elt (, elt) 0)))
+	     ;; (set-buffer (get-file-buffer (elt (, elt) 0)))
+	     ;; Probably will not work due to some save-excursion???
+	     ;; Or save-file-position?
+	     ;; (message "Did I get to line %s?" (elt (, elt) 1))
+	     (goto-line (string-to-int (elt (, elt) 1)))))
+	;;)
+	(defmacro cperl-etags-goto-tag-location (elt)
+	  (` (etags-goto-tag-location (, elt))))))
 
 (defconst cperl-xemacs-p (string-match "XEmacs\\|Lucid" emacs-version))
 
@@ -251,6 +273,12 @@
   :type 'integer
   :group 'cperl-indentation-details)
 
+(defcustom cperl-indent-wrt-brace t
+  "*Non-nil means indent statements in if/etc block relative brace, not if/etc.
+Versions 5.2 ... 5.20 behaved as if this were `nil'."
+  :type 'boolean
+  :group 'cperl-indentation-details)
+
 (defcustom cperl-auto-newline nil
   "*Non-nil means automatically newline before and after braces,
 and after colons and semicolons, inserted in CPerl code.  The following
@@ -347,20 +375,26 @@
   :type 'integer
   :group 'cperl-indentation-details)
 
-(defvar cperl-vc-header-alist nil)
-(make-obsolete-variable
- 'cperl-vc-header-alist
- "use cperl-vc-rcs-header or cperl-vc-sccs-header instead.")
+(defcustom cperl-indent-comment-at-column-0 nil
+  "*Non-nil means that comment started at column 0 should be indentable."
+  :type 'boolean
+  :group 'cperl-indentation-details)
 
 (defcustom cperl-vc-sccs-header '("($sccs) = ('%W\%' =~ /(\\d+(\\.\\d+)+)/) ;")
   "*Special version of `vc-sccs-header' that is used in CPerl mode buffers."
   :type '(repeat string)
   :group 'cperl)
 
-(defcustom cperl-vc-rcs-header '("($rcs) = (' $Id\$ ' =~ /(\\d+(\\.\\d+)+)/) ;")
+(defcustom cperl-vc-rcs-header '("($rcs) = (' $Id\$ ' =~ /(\\d+(\\.\\d+)+)/);")
   "*Special version of `vc-rcs-header' that is used in CPerl mode buffers."
   :type '(repeat string)
-  :group 'cperl)
+     :group 'cperl)
+
+;; This became obsolete...
+(defvar cperl-vc-header-alist nil)
+(make-obsolete-variable
+ 'cperl-vc-header-alist
+ "use cperl-vc-rcs-header or cperl-vc-sccs-header instead.")
 
 (defcustom cperl-clobber-mode-lists
   (not
@@ -408,8 +442,15 @@
   :type 'face
   :group 'cperl-faces)
 
-(defcustom cperl-invalid-face 'underline
-  "*Face for highlighting trailing whitespace."
+;;; Some double-evaluation happened with font-locks...  Needed with 21.2...
+(defvar cperl-singly-quote-face cperl-xemacs-p)
+
+(defcustom cperl-invalid-face		; Does not customize with '' on XEmacs
+  (if cperl-singly-quote-face
+      'underline ''underline) ; On older Emacsen was evaluated by `font-lock'
+  (if cperl-singly-quote-face
+      "*This face is used for highlighting trailing whitespace."
+    "*Face for highlighting trailing whitespace.")
   :type 'face
   :version "21.1"
   :group 'cperl-faces)
@@ -441,7 +482,14 @@
 
 (defcustom cperl-regexp-scan t
   "*Not-nil means make marking of regular expression more thorough.
-Effective only with `cperl-pod-here-scan'.  Not implemented yet."
+Effective only with `cperl-pod-here-scan'."
+  :type 'boolean
+  :group 'cperl-speed)
+
+(defcustom cperl-hook-after-change t
+  "*Not-nil means install hook to know which regions of buffer are changed.
+May significantly speed up delayed fontification.  Changes take effect
+after reload."
   :type 'boolean
   :group 'cperl-speed)
 
@@ -564,17 +612,25 @@
   :type 'boolean
   :group 'cperl-speed)
 
+(defcustom cperl-syntaxify-for-menu
+  t
+  "*Non-nil means that CPerl syntaxifies up to the point before showing menu.
+This way enabling/disabling of menu items is more correct."
+  :type 'boolean
+  :group 'cperl-speed)
+
 (defcustom cperl-ps-print-face-properties
   '((font-lock-keyword-face		nil nil		bold shadow)
     (font-lock-variable-name-face	nil nil		bold)
     (font-lock-function-name-face	nil nil		bold italic box)
     (font-lock-constant-face		nil "LightGray"	bold)
-    (cperl-array			nil "LightGray"	bold underline)
-    (cperl-hash				nil "LightGray"	bold italic underline)
+    (cperl-array-face			nil "LightGray"	bold underline)
+    (cperl-hash-face				nil "LightGray"	bold italic underline)
     (font-lock-comment-face		nil "LightGray"	italic)
     (font-lock-string-face		nil nil		italic underline)
-    (cperl-nonoverridable		nil nil		italic underline)
+    (cperl-nonoverridable-face		nil nil		italic underline)
     (font-lock-type-face		nil nil		underline)
+    (font-lock-warning-face		nil "LightGray"	bold italic box)
     (underline				nil "LightGray"	strikeout))
   "List given as an argument to `ps-extend-face-list' in `cperl-ps-print'."
   :type '(repeat (cons symbol
@@ -588,7 +644,7 @@
 (defvar cperl-dark-foreground
   (cperl-choose-color "orchid1" "orange"))
 
-(defface cperl-nonoverridable
+(defface cperl-nonoverridable-face
   `((((class grayscale) (background light))
      (:background "Gray90" :slant italic :underline t))
     (((class grayscale) (background dark))
@@ -600,10 +656,8 @@
     (t (:weight bold :underline t)))
   "Font Lock mode face used non-overridable keywords and modifiers of regexps."
   :group 'cperl-faces)
-;; backward-compatibility alias
-(put 'cperl-nonoverridable-face 'face-alias 'cperl-nonoverridable)
-
-(defface cperl-array
+
+(defface cperl-array-face
   `((((class grayscale) (background light))
      (:background "Gray90" :weight bold))
     (((class grayscale) (background dark))
@@ -615,10 +669,8 @@
     (t (:weight bold)))
   "Font Lock mode face used to highlight array names."
   :group 'cperl-faces)
-;; backward-compatibility alias
-(put 'cperl-array-face 'face-alias 'cperl-array)
-
-(defface cperl-hash
+
+(defface cperl-hash-face
   `((((class grayscale) (background light))
      (:background "Gray90" :weight bold :slant italic))
     (((class grayscale) (background dark))
@@ -630,8 +682,6 @@
     (t (:weight bold :slant italic)))
   "Font Lock mode face used to highlight hash names."
   :group 'cperl-faces)
-;; backward-compatibility alias
-(put 'cperl-hash-face 'face-alias 'cperl-hash)
 
 
 
@@ -639,9 +689,7 @@
 
 (defvar cperl-tips 'please-ignore-this-line
   "Get maybe newer version of this package from
-  ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs
-and/or
-  ftp://ftp.math.ohio-state.edu/pub/users/ilya/perl
+  http://ilyaz.org/software/emacs
 Subdirectory `cperl-mode' may contain yet newer development releases and/or
 patches to related files.
 
@@ -666,9 +714,9 @@
   (defalias 'perl-mode 'cperl-mode)
 
 Get perl5-info from
-  $CPAN/doc/manual/info/perl-info.tar.gz
-older version was on
-  http://www.metronet.com:70/9/perlinfo/perl5/manual/perl5-info.tar.gz
+  $CPAN/doc/manual/info/perl5-old/perl5-info.tar.gz
+Also, one can generate a newer documentation running `pod2texi' converter
+  $CPAN/doc/manual/info/perl5/pod2texi-0.1.tar.gz
 
 If you use imenu-go, run imenu on perl5-info buffer (you can do it
 from Perl menu).  If many files are related, generate TAGS files from
@@ -700,11 +748,18 @@
   "Description of problems in CPerl mode.
 Some faces will not be shown on some versions of Emacs unless you
 install choose-color.el, available from
-   ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs/
+  http://ilyaz.org/software/emacs
 
 `fill-paragraph' on a comment may leave the point behind the
-paragraph.  Parsing of lines with several <<EOF is not implemented
-yet.
+paragraph.  It also triggers a bug in some versions of Emacs (CPerl tries
+to detect it and bulk out).
+
+See documentation of a variable `cperl-problems-old-emaxen' for the
+problems which disappear if you upgrade Emacs to a reasonably new
+version (20.3 for Emacs, and those of 2004 for XEmacs).")
+
+(defvar cperl-problems-old-emaxen 'please-ignore-this-line
+  "Description of problems in CPerl mode specific for older Emacs versions.
 
 Emacs had a _very_ restricted syntax parsing engine until version
 20.1.  Most problems below are corrected starting from this version of
@@ -812,6 +867,13 @@
 	o) Highlights trailing whitespace;
 	p) Is able to manipulate Perl Regular Expressions to ease
 	   conversion to a more readable form.
+        q) Can ispell POD sections and HERE-DOCs.
+	r) Understands comments and character classes inside regular
+	   expressions; can find matching () and [] in a regular expression.
+	s) Allows indentation of //x-style regular expressions;
+	t) Highlights different symbols in regular expressions according
+	   to their function; much less problems with backslashitis;
+	u) Allows to find regular expressions which contain interpolated parts.
 
 5) The indentation engine was very smart, but most of tricks may be
 not needed anymore with the support for `syntax-table' property.  Has
@@ -829,7 +891,10 @@
 line-breaks/spacing between elements of the construct.
 
 10) Uses a linear-time algorith for indentation of regions (on Emaxen with
-capable syntax engines).")
+capable syntax engines).
+
+11) Syntax-highlight, indentation, sexp-recognition inside regular expressions.
+")
 
 (defvar cperl-speed 'please-ignore-this-line
   "This is an incomplete compendium of what is available in other parts
@@ -878,19 +943,19 @@
 (defvar cperl-tips-faces 'please-ignore-this-line
   "CPerl mode uses following faces for highlighting:
 
-  `cperl-array'			Array names
-  `cperl-hash'			Hash names
+  `cperl-array-face'			Array names
+  `cperl-hash-face'			Hash names
   `font-lock-comment-face'	Comments, PODs and whatever is considered
 				syntaxically to be not code
   `font-lock-constant-face'	HERE-doc delimiters, labels, delimiters of
 				2-arg operators s/y/tr/ or of RExen,
-  `font-lock-function-name-face' Special-cased m// and s//foo/, _ as
-				a target of a file tests, file tests,
+  `font-lock-warning-face'	Special-cased m// and s//foo/,
+  `font-lock-function-name-face' _ as a target of a file tests, file tests,
 				subroutine names at the moment of definition
 				(except those conflicting with Perl operators),
 				package names (when recognized), format names
   `font-lock-keyword-face'	Control flow switch constructs, declarators
-  `cperl-nonoverridable'	Non-overridable keywords, modifiers of RExen
+  `cperl-nonoverridable-face'	Non-overridable keywords, modifiers of RExen
   `font-lock-string-face'	Strings, qw() constructs, RExen, POD sections,
 				literal parts and the terminator of formats
 				and whatever is syntaxically considered
@@ -908,7 +973,25 @@
 Help with best setup of these faces for printout requested (for each of
 the faces: please specify bold, italic, underline, shadow and box.)
 
-\(Not finished.)")
+In regular expressions (except character classes):
+  `font-lock-string-face'	\"Normal\" stuff and non-0-length constructs
+  `font-lock-constant-face':	Delimiters
+  `font-lock-warning-face'	Special-cased m// and s//foo/,
+				Mismatched closing delimiters, parens
+				we couldn't match, misplaced quantifiers,
+				unrecognized escape sequences
+  `cperl-nonoverridable-face'	Modifiers, as gism in m/REx/gism
+  `font-lock-type-face'		POSIX classes inside charclasses,
+				escape sequences with arguments (\x \23 \p \N)
+				and others match-a-char escape sequences
+  `font-lock-keyword-face'	Capturing parens, and |
+  `font-lock-function-name-face' Special symbols: $ ^ . [ ] [^ ] (?{ }) (??{ })
+  `font-lock-builtin-face'	\"Remaining\" 0-length constructs, executable
+				parts of a REx, not-capturing parens
+  `font-lock-variable-name-face' Interpolated constructs, embedded code
+  `font-lock-comment-face'	Embedded comments
+
+")
 
 
 
@@ -985,6 +1068,25 @@
    (cperl-hairy (or hairy t))
    (t (symbol-value symbol))))
 
+
+(defun cperl-make-indent (column &optional minimum keep)
+  "Makes indent of the current line the requested amount.
+Unless KEEP, removes the old indentation.  Works around a bug in ancient
+versions of Emacs."
+  (let ((prop (get-text-property (point) 'syntax-type)))
+    (or keep
+	(delete-horizontal-space))
+    (indent-to column minimum)
+    ;; In old versions (e.g., 19.33) `indent-to' would not inherit properties
+    (and prop
+	 (> (current-column) 0)
+	 (save-excursion
+	   (beginning-of-line)
+	   (or (get-text-property (point) 'syntax-type)
+	       (and (looking-at "\\=[ \t]")
+		      (put-text-property (point) (match-end 0)
+					 'syntax-type prop)))))))
+
 ;;; Probably it is too late to set these guys already, but it can help later:
 
 ;;;(and cperl-clobber-mode-lists
@@ -1035,7 +1137,16 @@
   (cperl-define-key "\C-c\C-w" 'cperl-toggle-construct-fix)
   (cperl-define-key "\C-c\C-f" 'auto-fill-mode)
   (cperl-define-key "\C-c\C-e" 'cperl-toggle-electric)
+  (cperl-define-key "\C-c\C-b" 'cperl-find-bad-style)
+  (cperl-define-key "\C-c\C-p" 'cperl-pod-spell)
+  (cperl-define-key "\C-c\C-d" 'cperl-here-doc-spell)
+  (cperl-define-key "\C-c\C-n" 'cperl-narrow-to-here-doc)
+  (cperl-define-key "\C-c\C-v" 'cperl-next-interpolated-REx)
+  (cperl-define-key "\C-c\C-x" 'cperl-next-interpolated-REx-0)
+  (cperl-define-key "\C-c\C-y" 'cperl-next-interpolated-REx-1)
   (cperl-define-key "\C-c\C-ha" 'cperl-toggle-autohelp)
+  (cperl-define-key "\C-c\C-hp" 'cperl-perldoc)
+  (cperl-define-key "\C-c\C-hP" 'cperl-perldoc-at-point)
   (cperl-define-key "\e\C-q" 'cperl-indent-exp) ; Usually not bound
   (cperl-define-key [?\C-\M-\|] 'cperl-lineup
 		    [(control meta |)])
@@ -1074,9 +1185,13 @@
 	   (<= emacs-minor-version 11) (<= emacs-major-version 19))
       (progn
 	;; substitute-key-definition is usefulness-deenhanced...
-	(cperl-define-key "\M-q" 'cperl-fill-paragraph)
+	;;;;;(cperl-define-key "\M-q" 'cperl-fill-paragraph)
 	(cperl-define-key "\e;" 'cperl-indent-for-comment)
 	(cperl-define-key "\e\C-\\" 'cperl-indent-region))
+    (or (boundp 'fill-paragraph-function)
+	(substitute-key-definition
+	 'fill-paragraph 'cperl-fill-paragraph
+	 cperl-mode-map global-map))
     (substitute-key-definition
      'indent-sexp 'cperl-indent-exp
      cperl-mode-map global-map)
@@ -1094,52 +1209,101 @@
     (progn
       (require 'easymenu)
       (easy-menu-define
-	cperl-menu cperl-mode-map "Menu for CPerl mode"
-	'("Perl"
-	  ["Beginning of function" beginning-of-defun t]
-	  ["End of function" end-of-defun t]
-	  ["Mark function" mark-defun t]
-	  ["Indent expression" cperl-indent-exp t]
+       cperl-menu cperl-mode-map "Menu for CPerl mode"
+       '("Perl"
+	 ["Beginning of function" beginning-of-defun t]
+	 ["End of function" end-of-defun t]
+	 ["Mark function" mark-defun t]
+	 ["Indent expression" cperl-indent-exp t]
 	  ["Fill paragraph/comment" fill-paragraph t]
+	 "----"
+	 ["Line up a construction" cperl-lineup (cperl-use-region-p)]
+	 ["Invert if/unless/while etc" cperl-invert-if-unless t]
+	 ("Regexp"
+	  ["Beautify" cperl-beautify-regexp
+	   cperl-use-syntax-table-text-property]
+	  ["Beautify one level deep" (cperl-beautify-regexp 1)
+	   cperl-use-syntax-table-text-property]
+	  ["Beautify a group" cperl-beautify-level
+	   cperl-use-syntax-table-text-property]
+	  ["Beautify a group one level deep" (cperl-beautify-level 1)
+	   cperl-use-syntax-table-text-property]
+	  ["Contract a group" cperl-contract-level
+	   cperl-use-syntax-table-text-property]
+	  ["Contract groups" cperl-contract-levels
+	   cperl-use-syntax-table-text-property]
 	  "----"
-	  ["Line up a construction" cperl-lineup (cperl-use-region-p)]
-	  ["Invert if/unless/while etc" cperl-invert-if-unless t]
-	  ("Regexp"
-	   ["Beautify" cperl-beautify-regexp
-	    cperl-use-syntax-table-text-property]
-	   ["Beautify one level deep" (cperl-beautify-regexp 1)
-	    cperl-use-syntax-table-text-property]
-	   ["Beautify a group" cperl-beautify-level
-	    cperl-use-syntax-table-text-property]
-	   ["Beautify a group one level deep" (cperl-beautify-level 1)
-	    cperl-use-syntax-table-text-property]
-	   ["Contract a group" cperl-contract-level
-	    cperl-use-syntax-table-text-property]
-	   ["Contract groups" cperl-contract-levels
-	    cperl-use-syntax-table-text-property])
-	  ["Refresh \"hard\" constructions" cperl-find-pods-heres t]
+	  ["Find next interpolated" cperl-next-interpolated-REx 
+	   (next-single-property-change (point-min) 'REx-interpolated)]
+	  ["Find next interpolated (no //o)"
+	   cperl-next-interpolated-REx-0
+	   (or (text-property-any (point-min) (point-max) 'REx-interpolated t)
+	       (text-property-any (point-min) (point-max) 'REx-interpolated 1))]
+	  ["Find next interpolated (neither //o nor whole-REx)"
+	   cperl-next-interpolated-REx-1
+	   (text-property-any (point-min) (point-max) 'REx-interpolated t)])
+	 ["Insert spaces if needed to fix style" cperl-find-bad-style t]
+	 ["Refresh \"hard\" constructions" cperl-find-pods-heres t]
+	 "----"
+	 ["Indent region" cperl-indent-region (cperl-use-region-p)]
+	 ["Comment region" cperl-comment-region (cperl-use-region-p)]
+	 ["Uncomment region" cperl-uncomment-region (cperl-use-region-p)]
+	 "----"
+	 ["Run" mode-compile (fboundp 'mode-compile)]
+	 ["Kill" mode-compile-kill (and (fboundp 'mode-compile-kill)
+					(get-buffer "*compilation*"))]
+	 ["Next error" next-error (get-buffer "*compilation*")]
+	 ["Check syntax" cperl-check-syntax (fboundp 'mode-compile)]
+	 "----"
+	 ["Debugger" cperl-db t]
+	 "----"
+	 ("Tools"
+	  ["Imenu" imenu (fboundp 'imenu)]
+	  ["Imenu on Perl Info" cperl-imenu-on-info (featurep 'imenu)]
 	  "----"
-	  ["Indent region" cperl-indent-region (cperl-use-region-p)]
-	  ["Comment region" cperl-comment-region (cperl-use-region-p)]
-	  ["Uncomment region" cperl-uncomment-region (cperl-use-region-p)]
-	  "----"
-	  ["Run" mode-compile (fboundp 'mode-compile)]
-	  ["Kill" mode-compile-kill (and (fboundp 'mode-compile-kill)
-					 (get-buffer "*compilation*"))]
-	  ["Next error" next-error (get-buffer "*compilation*")]
-	  ["Check syntax" cperl-check-syntax (fboundp 'mode-compile)]
+	  ["Ispell PODs" cperl-pod-spell
+	   ;; Better not to update syntaxification here:
+	   ;; debugging syntaxificatio can be broken by this???
+	   (or
+	    (get-text-property (point-min) 'in-pod)
+	    (< (progn
+		 (and cperl-syntaxify-for-menu
+		      (cperl-update-syntaxification (point-max) (point-max)))
+		 (next-single-property-change (point-min) 'in-pod nil (point-max)))
+	       (point-max)))]
+	  ["Ispell HERE-DOCs" cperl-here-doc-spell
+	   (< (progn
+		(and cperl-syntaxify-for-menu
+		     (cperl-update-syntaxification (point-max) (point-max)))
+		(next-single-property-change (point-min) 'here-doc-group nil (point-max)))
+	      (point-max))]
+	  ["Narrow to this HERE-DOC" cperl-narrow-to-here-doc
+	   (eq 'here-doc  (progn
+		(and cperl-syntaxify-for-menu
+		     (cperl-update-syntaxification (point) (point)))
+		(get-text-property (point) 'syntax-type)))]
+	  ["Select this HERE-DOC or POD section"
+	   cperl-select-this-pod-or-here-doc
+	   (memq (progn
+		   (and cperl-syntaxify-for-menu
+			(cperl-update-syntaxification (point) (point)))
+		   (get-text-property (point) 'syntax-type))
+		 '(here-doc pod))]
 	  "----"
-	  ["Debugger" cperl-db t]
+	  ["CPerl pretty print (exprmntl)" cperl-ps-print
+	   (fboundp 'ps-extend-face-list)]
 	  "----"
-	  ("Tools"
-	   ["Imenu" imenu (fboundp 'imenu)]
-	   ["Insert spaces if needed" cperl-find-bad-style t]
-	   ["Class Hierarchy from TAGS" cperl-tags-hier-init t]
-	   ;;["Update classes" (cperl-tags-hier-init t) tags-table-list]
-	   ["CPerl pretty print (exprmntl)" cperl-ps-print
-	    (fboundp 'ps-extend-face-list)]
-	   ["Imenu on info" cperl-imenu-on-info (featurep 'imenu)]
-	   ("Tags"
+	  ["Syntaxify region" cperl-find-pods-heres-region
+	   (cperl-use-region-p)]
+	  ["Profile syntaxification" cperl-time-fontification t]
+	  ["Debug errors in delayed fontification" cperl-emulate-lazy-lock t]
+	  ["Debug unwind for syntactic scan" cperl-toggle-set-debug-unwind t]
+	  ["Debug backtrace on syntactic scan (BEWARE!!!)"
+	   (cperl-toggle-set-debug-unwind nil t) t]
+	  "----"
+	  ["Class Hierarchy from TAGS" cperl-tags-hier-init t]
+	  ;;["Update classes" (cperl-tags-hier-init t) tags-table-list]
+	  ("Tags"
 ;;;	     ["Create tags for current file" cperl-etags t]
 ;;;	     ["Add tags for current file" (cperl-etags t) t]
 ;;;	     ["Create tags for Perl files in directory" (cperl-etags nil t) t]
@@ -1186,10 +1350,10 @@
 	  ["PerlStyle" (cperl-set-style "PerlStyle") t]
 	  ["GNU" (cperl-set-style "GNU") t]
 	  ["C++" (cperl-set-style "C++") t]
-	  ["FSF" (cperl-set-style "FSF") t]
+	  ["K&R" (cperl-set-style "K&R") t]
 	  ["BSD" (cperl-set-style "BSD") t]
 	  ["Whitesmith" (cperl-set-style "Whitesmith") t]
-	  ["Current" (cperl-set-style "Current") t]
+	  ["Memorize Current" (cperl-set-style "Current") t]
 	  ["Memorized" (cperl-set-style-back) cperl-old-style])
 	 ("Micro-docs"
 	  ["Tips" (describe-variable 'cperl-tips) t]
@@ -1208,12 +1372,73 @@
 The expansion is entirely correct because it uses the C preprocessor."
   t)
 
+;;; These two must be unwound, otherwise take exponential time
+(defconst cperl-maybe-white-and-comment-rex "[ \t\n]*\\(#[^\n]*\n[ \t\n]*\\)*"
+"Regular expression to match optional whitespace with interpspersed comments.
+Should contain exactly one group.")
+
+;;; This one is tricky to unwind; still very inefficient...
+(defconst cperl-white-and-comment-rex "\\([ \t\n]\\|#[^\n]*\n\\)+"
+"Regular expression to match whitespace with interpspersed comments.
+Should contain exactly one group.")
+
+
+;;; Is incorporated in `cperl-imenu--function-name-regexp-perl'
+;;; `cperl-outline-regexp', `defun-prompt-regexp'.
+;;; Details of groups in this may be used in several functions; see comments
+;;; near mentioned above variable(s)...
+;;; sub($$):lvalue{}  sub:lvalue{} Both allowed...
+(defsubst cperl-after-sub-regexp (named attr) ; 9 groups without attr...
+  "Match the text after `sub' in a subroutine declaration.
+If NAMED is nil, allows anonymous subroutines.  Matches up to the first \":\"
+of attributes (if present), or end of the name or prototype (whatever is
+the last)."
+  (concat				; Assume n groups before this...
+   "\\("				; n+1=name-group
+     cperl-white-and-comment-rex	; n+2=pre-name
+     "\\(::[a-zA-Z_0-9:']+\\|[a-zA-Z_'][a-zA-Z_0-9:']*\\)" ; n+3=name
+   "\\)"				; END n+1=name-group
+   (if named "" "?")
+   "\\("				; n+4=proto-group
+     cperl-maybe-white-and-comment-rex	; n+5=pre-proto
+     "\\(([^()]*)\\)"			; n+6=prototype
+   "\\)?"				; END n+4=proto-group
+   "\\("				; n+7=attr-group
+     cperl-maybe-white-and-comment-rex	; n+8=pre-attr
+     "\\("				; n+9=start-attr
+        ":"
+	(if attr (concat
+		  "\\("
+		     cperl-maybe-white-and-comment-rex ; whitespace-comments
+		     "\\(\\sw\\|_\\)+"	; attr-name
+		     ;; attr-arg (1 level of internal parens allowed!)
+		     "\\((\\(\\\\.\\|[^\\\\()]\\|([^\\\\()]*)\\)*)\\)?"
+		     "\\("		; optional : (XXX allows trailing???)
+		        cperl-maybe-white-and-comment-rex ; whitespace-comments
+		     ":\\)?"
+		  "\\)+")
+	  "[^:]")
+     "\\)"
+   "\\)?"				; END n+6=proto-group
+   ))
+
+;;; Details of groups in this are used in `cperl-imenu--create-perl-index'
+;;;  and `cperl-outline-level'.
+;;;; Was: 2=sub|package; now 2=package-group, 5=package-name 8=sub-name (+3)
 (defvar cperl-imenu--function-name-regexp-perl
   (concat
-   "^\\("
-       "[ \t]*\\(sub\\|package\\)[ \t\n]+\\([a-zA-Z_0-9:']+\\)[ \t]*\\(([^()]*)[ \t]*\\)?"
-     "\\|"
-       "=head\\([12]\\)[ \t]+\\([^\n]+\\)$"
+   "^\\("				; 1 = all
+       "\\([ \t]*package"		; 2 = package-group
+          "\\("				; 3 = package-name-group
+	    cperl-white-and-comment-rex ; 4 = pre-package-name
+	       "\\([a-zA-Z_0-9:']+\\)\\)?\\)" ; 5 = package-name
+       "\\|"
+          "[ \t]*sub"
+	  (cperl-after-sub-regexp 'named nil) ; 8=name 11=proto 14=attr-start
+	  cperl-maybe-white-and-comment-rex	; 15=pre-block
+   "\\|"
+     "=head\\([1-4]\\)[ \t]+"		; 16=level
+     "\\([^\n]+\\)$"			; 17=text
    "\\)"))
 
 (defvar cperl-outline-regexp
@@ -1225,6 +1450,12 @@
 (defvar cperl-string-syntax-table nil
   "Syntax table in use in CPerl mode string-like chunks.")
 
+(defsubst cperl-1- (p)
+  (max (point-min) (1- p)))
+
+(defsubst cperl-1+ (p)
+  (min (point-max) (1+ p)))
+
 (if cperl-mode-syntax-table
     ()
   (setq cperl-mode-syntax-table (make-syntax-table))
@@ -1249,6 +1480,8 @@
   (modify-syntax-entry ?| "." cperl-mode-syntax-table)
   (setq cperl-string-syntax-table (copy-syntax-table cperl-mode-syntax-table))
   (modify-syntax-entry ?$ "." cperl-string-syntax-table)
+  (modify-syntax-entry ?\{ "." cperl-string-syntax-table)
+  (modify-syntax-entry ?\} "." cperl-string-syntax-table)
   (modify-syntax-entry ?# "." cperl-string-syntax-table)) ; (?# comment )
 
 
@@ -1257,6 +1490,10 @@
 ;; Fix for msb.el
 (defvar cperl-msb-fixed nil)
 (defvar cperl-use-major-mode 'cperl-mode)
+(defvar cperl-font-lock-multiline-start nil)
+(defvar cperl-font-lock-multiline nil)
+(defvar cperl-compilation-error-regexp-alist nil)
+(defvar cperl-font-locking nil)
 
 ;;;###autoload
 (defun cperl-mode ()
@@ -1402,16 +1639,24 @@
  `cperl-min-label-indent'
     Minimal indentation for line that is a label.
 
-Settings for K&R and BSD indentation styles are
-  `cperl-indent-level'                5    8
-  `cperl-continued-statement-offset'  5    8
-  `cperl-brace-offset'               -5   -8
-  `cperl-label-offset'               -5   -8
+Settings for classic indent-styles: K&R BSD=C++ GNU PerlStyle=Whitesmith
+  `cperl-indent-level'                5   4       2   4
+  `cperl-brace-offset'                0   0       0   0
+  `cperl-continued-brace-offset'     -5  -4       0   0
+  `cperl-label-offset'               -5  -4      -2  -4
+  `cperl-continued-statement-offset'  5   4       2   4
 
 CPerl knows several indentation styles, and may bulk set the
 corresponding variables.  Use \\[cperl-set-style] to do this.  Use
 \\[cperl-set-style-back] to restore the memorized preexisting values
-\(both available from menu).
+\(both available from menu).  See examples in `cperl-style-examples'.
+
+Part of the indentation style is how different parts of if/elsif/else
+statements are broken into lines; in CPerl, this is reflected on how
+templates for these constructs are created (controlled by
+`cperl-extra-newline-before-brace'), and how reflow-logic should treat \"continuation\" blocks of else/elsif/continue, controlled by the same variable,
+and by `cperl-extra-newline-before-brace-multiline',
+`cperl-merge-trailing-else', `cperl-indent-region-fix-constructs'.
 
 If `cperl-indent-level' is 0, the statement after opening brace in
 column 0 is indented on
@@ -1465,8 +1710,12 @@
 		("head2" "head2" cperl-electric-pod 0)))
 	(setq abbrevs-changed prev-a-c)))
   (setq local-abbrev-table cperl-mode-abbrev-table)
-  (abbrev-mode (if (cperl-val 'cperl-electric-keywords) 1 0))
+  (if (cperl-val 'cperl-electric-keywords)
+      (abbrev-mode 1))
   (set-syntax-table cperl-mode-syntax-table)
+  ;; Until Emacs is multi-threaded, we do not actually need it local:
+  (make-local-variable 'cperl-font-lock-multiline-start)
+  (make-local-variable 'cperl-font-locking)
   (make-local-variable 'outline-regexp)
   ;; (setq outline-regexp imenu-example--function-name-regexp-perl)
   (setq outline-regexp cperl-outline-regexp)
@@ -1478,7 +1727,10 @@
   (setq paragraph-separate paragraph-start)
   (make-local-variable 'paragraph-ignore-fill-prefix)
   (setq paragraph-ignore-fill-prefix t)
-  (set (make-local-variable 'fill-paragraph-function) 'cperl-fill-paragraph)
+  (if cperl-xemacs-p
+    (progn
+      (make-local-variable 'paren-backwards-message)
+      (set 'paren-backwards-message t)))
   (make-local-variable 'indent-line-function)
   (setq indent-line-function 'cperl-indent-line)
   (make-local-variable 'require-final-newline)
@@ -1492,9 +1744,22 @@
   (make-local-variable 'comment-start-skip)
   (setq comment-start-skip "#+ *")
   (make-local-variable 'defun-prompt-regexp)
-  (setq defun-prompt-regexp "^[ \t]*sub[ \t\n]+\\([^ \t\n{(;]+\\)\\([ \t\n]*([^()]*)[ \t\n]*\\)?[ \t\n]*")
+;;;       "[ \t]*sub"
+;;;	  (cperl-after-sub-regexp 'named nil) ; 8=name 11=proto 14=attr-start
+;;;	  cperl-maybe-white-and-comment-rex	; 15=pre-block
+  (setq defun-prompt-regexp
+	(concat "^[ \t]*\\(sub"
+		(cperl-after-sub-regexp 'named 'attr-groups)
+		"\\|"			; per toke.c
+		"\\(BEGIN\\|CHECK\\|INIT\\|END\\|AUTOLOAD\\|DESTROY\\)"
+		"\\)"
+		cperl-maybe-white-and-comment-rex))
   (make-local-variable 'comment-indent-function)
   (setq comment-indent-function 'cperl-comment-indent)
+  (and (boundp 'fill-paragraph-function)
+      (progn
+	(make-local-variable 'fill-paragraph-function)
+	(set 'fill-paragraph-function 'cperl-fill-paragraph)))
   (make-local-variable 'parse-sexp-ignore-comments)
   (setq parse-sexp-ignore-comments t)
   (make-local-variable 'indent-region-function)
@@ -1509,21 +1774,40 @@
   (set 'vc-rcs-header cperl-vc-rcs-header)
   (make-local-variable 'vc-sccs-header)
   (set 'vc-sccs-header cperl-vc-sccs-header)
+  ;; This one is obsolete...
+  (make-local-variable 'vc-header-alist)
+  (set 'vc-header-alist (or cperl-vc-header-alist ; Avoid warning
+			    (` ((SCCS (, (car cperl-vc-sccs-header)))
+				     (RCS (, (car cperl-vc-rcs-header)))))))
+  (cond ((boundp 'compilation-error-regexp-alist-alist);; xemacs 20.x
+	 (make-local-variable 'compilation-error-regexp-alist-alist)
+	 (set 'compilation-error-regexp-alist-alist
+	      (cons (cons 'cperl cperl-compilation-error-regexp-alist)
+		    (symbol-value 'compilation-error-regexp-alist-alist)))
+         (if (fboundp 'compilation-build-compilation-error-regexp-alist)
+             (let ((f 'compilation-build-compilation-error-regexp-alist))
+               (funcall f))
+           (push 'cperl compilation-error-regexp-alist)))
+	((boundp 'compilation-error-regexp-alist);; xmeacs 19.x
+	 (make-local-variable 'compilation-error-regexp-alist)
+	 (set 'compilation-error-regexp-alist
+	       (cons cperl-compilation-error-regexp-alist
+		     (symbol-value 'compilation-error-regexp-alist)))))
   (make-local-variable 'font-lock-defaults)
   (setq	font-lock-defaults
 	(cond
 	 ((string< emacs-version "19.30")
-	  '(cperl-font-lock-keywords-2))
+	  '(cperl-font-lock-keywords-2 nil nil ((?_ . "w"))))
 	 ((string< emacs-version "19.33") ; Which one to use?
 	  '((cperl-font-lock-keywords
 	     cperl-font-lock-keywords-1
-	     cperl-font-lock-keywords-2)))
+	     cperl-font-lock-keywords-2) nil nil ((?_ . "w"))))
 	 (t
 	  '((cperl-load-font-lock-keywords
 	     cperl-load-font-lock-keywords-1
-	     cperl-load-font-lock-keywords-2)
-            nil nil ((?_ . "w"))))))
+	     cperl-load-font-lock-keywords-2) nil nil ((?_ . "w"))))))
   (make-local-variable 'cperl-syntax-state)
+  (setq cperl-syntax-state nil)		; reset syntaxification cache
   (if cperl-use-syntax-table-text-property
       (progn
 	(make-local-variable 'parse-sexp-lookup-properties)
@@ -1533,10 +1817,12 @@
 	(or (boundp 'font-lock-unfontify-region-function)
 	    (set 'font-lock-unfontify-region-function
 		 'font-lock-default-unfontify-region))
-	(make-local-variable 'font-lock-unfontify-region-function)
-	(set 'font-lock-unfontify-region-function ; not present with old Emacs
-	      'cperl-font-lock-unfontify-region-function)
+	(unless cperl-xemacs-p		; Our: just a plug for wrong font-lock
+	  (make-local-variable 'font-lock-unfontify-region-function)
+	  (set 'font-lock-unfontify-region-function ; not present with old Emacs
+	       'cperl-font-lock-unfontify-region-function))
 	(make-local-variable 'cperl-syntax-done-to)
+	(setq cperl-syntax-done-to nil)	; reset syntaxification cache
 	(make-local-variable 'font-lock-syntactic-keywords)
 	(setq font-lock-syntactic-keywords
 	      (if cperl-syntaxify-by-font-lock
@@ -1546,10 +1832,20 @@
                 ;;  to make font-lock think that font-lock-syntactic-keywords
                 ;;  are defined.
 		'(t)))))
+  (if (boundp 'font-lock-multiline)	; Newer font-lock; use its facilities
+      (progn
+	(setq cperl-font-lock-multiline t) ; Not localized...
+	(set 'font-lock-multiline t)) ; not present with old Emacs; auto-local
+    (make-local-variable 'font-lock-fontify-region-function)
+    (set 'font-lock-fontify-region-function ; not present with old Emacs
+	 'cperl-font-lock-fontify-region-function))
+  (make-local-variable 'font-lock-fontify-region-function)
+  (set 'font-lock-fontify-region-function ; not present with old Emacs
+       'cperl-font-lock-fontify-region-function)
   (make-local-variable 'cperl-old-style)
   (if (boundp 'normal-auto-fill-function) ; 19.33 and later
       (set (make-local-variable 'normal-auto-fill-function)
-	   'cperl-do-auto-fill)	      ; RMS has it as #'cperl-do-auto-fill ???
+	   'cperl-do-auto-fill)
     (or (fboundp 'cperl-old-auto-fill-mode)
 	(progn
 	  (fset 'cperl-old-auto-fill-mode (symbol-function 'auto-fill-mode))
@@ -1562,12 +1858,18 @@
       (if (cperl-val 'cperl-font-lock)
 	  (progn (or cperl-faces-init (cperl-init-faces))
 		 (font-lock-mode 1))))
+  (set (make-local-variable 'facemenu-add-face-function)
+       'cperl-facemenu-add-face-function) ; XXXX What this guy is for???
   (and (boundp 'msb-menu-cond)
        (not cperl-msb-fixed)
        (cperl-msb-fix))
   (if (featurep 'easymenu)
       (easy-menu-add cperl-menu))	; A NOP in Emacs.
   (run-mode-hooks 'cperl-mode-hook)
+  (if cperl-hook-after-change
+      (progn
+	(make-local-hook 'after-change-functions)
+	(add-hook 'after-change-functions 'cperl-after-change-function nil t)))
   ;; After hooks since fontification will break this
   (if cperl-pod-here-scan
       (or cperl-syntaxify-by-font-lock
@@ -1616,31 +1918,37 @@
 (defvar cperl-st-ket '(5 . ?\<))
 
 
-(defun cperl-comment-indent ()
+(defun cperl-comment-indent ()		; called at point at supposed comment
   (let ((p (point)) (c (current-column)) was phony)
-    (if (looking-at "^#") 0		; Existing comment at bol stays there.
+    (if (and (not cperl-indent-comment-at-column-0)
+	     (looking-at "^#"))
+	0	; Existing comment at bol stays there.
       ;; Wrong comment found
       (save-excursion
 	(setq was (cperl-to-comment-or-eol)
 	      phony (eq (get-text-property (point) 'syntax-table)
 			cperl-st-cfence))
 	(if phony
-	    (progn
+	    (progn			; Too naive???
 	      (re-search-forward "#\\|$") ; Hmm, what about embedded #?
 	      (if (eq (preceding-char) ?\#)
 		  (forward-char -1))
 	      (setq was nil)))
-	(if (= (point) p)
+	(if (= (point) p)		; Our caller found a correct place
 	    (progn
 	      (skip-chars-backward " \t")
-	      (max (1+ (current-column)) ; Else indent at comment column
-		   comment-column))
+	      (setq was (current-column))
+	      (if (eq was 0)
+		  comment-column
+		(max (1+ was) ; Else indent at comment column
+		     comment-column)))
+	  ;; No, the caller found a random place; we need to edit ourselves
 	  (if was nil
 	    (insert comment-start)
 	    (backward-char (length comment-start)))
 	  (setq cperl-wrong-comment t)
-	  (indent-to comment-column 1)	; Indent minimum 1
-	  c)))))			; except leave at least one space.
+	  (cperl-make-indent comment-column 1) ; Indent min 1
+	  c)))))
 
 ;;;(defun cperl-comment-indent-fallback ()
 ;;;  "Is called if the standard comment-search procedure fails.
@@ -1666,7 +1974,7 @@
   (interactive)
   (let (cperl-wrong-comment)
     (indent-for-comment)
-    (if cperl-wrong-comment
+    (if cperl-wrong-comment		; set by `cperl-comment-indent'
 	(progn (cperl-to-comment-or-eol)
 	       (forward-char (length comment-start))))))
 
@@ -1966,15 +2274,10 @@
 	    (or
 	     (get-text-property (point) 'in-pod)
 	     (cperl-after-expr-p nil "{;:")
-	     (and (re-search-backward
-		   ;; "\\(\\`\n?\\|\n\n\\)=\\sw+"
-		   "\\(\\`\n?\\|^\n\\)=\\sw+"
-		   (point-min) t)
-		  (not (or
-			(looking-at "=cut")
-			(and cperl-use-syntax-table-text-property
-			     (not (eq (get-text-property (point) 'syntax-type)
-				      'pod)))))))))
+	     (and (re-search-backward "\\(\\`\n?\\|^\n\\)=\\sw+" (point-min) t)
+		  (not (looking-at "\n*=cut"))
+		  (or (not cperl-use-syntax-table-text-property)
+		      (eq (get-text-property (point) 'syntax-type) 'pod))))))
 	 (progn
 	   (save-excursion
 	     (setq notlast (re-search-forward "^\n=" nil t)))
@@ -2252,7 +2555,7 @@
 
 (put 'cperl-electric-backspace 'delete-selection 'supersede)
 
-(defun cperl-inside-parens-p ()
+(defun cperl-inside-parens-p ()		;; NOT USED????
   (condition-case ()
       (save-excursion
 	(save-restriction
@@ -2332,8 +2635,9 @@
 	    (zerop shift-amt))
 	(if (> (- (point-max) pos) (point))
 	    (goto-char (- (point-max) pos)))
-      (delete-region beg (point))
-      (indent-to indent)
+      ;;;(delete-region beg (point))
+      ;;;(indent-to indent)
+      (cperl-make-indent indent)
       ;; If initial point was within line's indentation,
       ;; position after the indentation.  Else stay at same point in text.
       (if (> (- (point-max) pos) (point))
@@ -2380,29 +2684,314 @@
       (or state (setq state (parse-partial-sexp start start-point -1 nil start-state)))
       (list start state depth prestart))))
 
-(defun cperl-block-p ()		   ; Do not C-M-q !  One string contains ";" !
-  ;; Positions is before ?\{.  Checks whether it starts a block.
-  ;; No save-excursion!
-  (cperl-backward-to-noncomment (point-min))
-  (or (memq (preceding-char) (append ";){}$@&%\C-@" nil)) ; Or label!  \C-@ at bobp
-					; Label may be mixed up with `$blah :'
-      (save-excursion (cperl-after-label))
-      (and (memq (char-syntax (preceding-char)) '(?w ?_))
-	   (progn
-	     (backward-sexp)
-	     ;; Need take into account `bless', `return', `tr',...
-	     (or (and (looking-at "[a-zA-Z0-9_:]+[ \t\n\f]*[{#]") ; Method call syntax
-		      (not (looking-at "\\(bless\\|return\\|q[wqrx]?\\|tr\\|[smy]\\)\\>")))
-		 (progn
-		   (skip-chars-backward " \t\n\f")
-		   (and (memq (char-syntax (preceding-char)) '(?w ?_))
-			(progn
-			  (backward-sexp)
-			  (looking-at
-			   "sub[ \t]+[a-zA-Z0-9_:]+[ \t\n\f]*\\(([^()]*)[ \t\n\f]*\\)?[#{]")))))))))
-
 (defvar cperl-look-for-prop '((pod in-pod) (here-doc-delim here-doc-group)))
 
+(defun cperl-beginning-of-property (p prop &optional lim)
+  "Given that P has a property PROP, find where the property starts.
+Will not look before LIM."
+  ;;; XXXX What to do at point-max???
+  (or (previous-single-property-change (cperl-1+ p) prop lim)
+      (point-min))
+;;;  (cond ((eq p (point-min))
+;;;	 p)
+;;;	((and lim (<= p lim))
+;;;	 p)
+;;;	((not (get-text-property (1- p) prop))
+;;;	 p)
+;;;	(t (or (previous-single-property-change p look-prop lim)
+;;;	       (point-min))))
+  )
+
+(defun cperl-sniff-for-indent (&optional parse-data) ; was parse-start
+  ;; Old workhorse for calculation of indentation; the major problem
+  ;; is that it mixes the sniffer logic to understand what the current line
+  ;; MEANS with the logic to actually calculate where to indent it.
+  ;; The latter part should be eventually moved to `cperl-calculate-indent';
+  ;; actually, this is mostly done now...
+  (cperl-update-syntaxification (point) (point))
+  (let ((res (get-text-property (point) 'syntax-type)))
+    (save-excursion
+      (cond
+       ((and (memq res '(pod here-doc here-doc-delim format))
+	     (not (get-text-property (point) 'indentable)))
+	(vector res))
+       ;; before start of POD - whitespace found since do not have 'pod!
+       ((looking-at "[ \t]*\n=")
+	(error "Spaces before POD section!"))
+       ((and (not cperl-indent-left-aligned-comments)
+	     (looking-at "^#"))
+	[comment-special:at-beginning-of-line])
+       ((get-text-property (point) 'in-pod)
+	[in-pod])
+       (t
+	(beginning-of-line)
+	(let* ((indent-point (point))
+	       (char-after-pos (save-excursion
+				 (skip-chars-forward " \t")
+				 (point)))
+	       (char-after (char-after char-after-pos))
+	       (pre-indent-point (point))
+	       p prop look-prop is-block delim)
+	  (save-excursion		; Know we are not in POD, find appropriate pos before
+	    (cperl-backward-to-noncomment nil)
+	    (setq p (max (point-min) (1- (point)))
+		  prop (get-text-property p 'syntax-type)
+		  look-prop (or (nth 1 (assoc prop cperl-look-for-prop))
+				'syntax-type))
+	    (if (memq prop '(pod here-doc format here-doc-delim))
+		(progn
+		  (goto-char (cperl-beginning-of-property p look-prop))
+		  (beginning-of-line)
+		  (setq pre-indent-point (point)))))
+	  (goto-char pre-indent-point)	; Orig line skipping preceeding pod/etc
+	  (let* ((case-fold-search nil)
+		 (s-s (cperl-get-state (car parse-data) (nth 1 parse-data)))
+		 (start (or (nth 2 parse-data) ; last complete sexp terminated
+			    (nth 0 s-s))) ; Good place to start parsing
+		 (state (nth 1 s-s))
+		 (containing-sexp (car (cdr state)))
+		 old-indent)
+	    (if (and
+		 ;;containing-sexp		;; We are buggy at toplevel :-(
+		 parse-data)
+		(progn
+		  (setcar parse-data pre-indent-point)
+		  (setcar (cdr parse-data) state)
+		  (or (nth 2 parse-data)
+		      (setcar (cddr parse-data) start))
+		  ;; Before this point: end of statement
+		  (setq old-indent (nth 3 parse-data))))
+	    (cond ((get-text-property (point) 'indentable)
+		   ;; indent to "after" the surrounding open
+		   ;; (same offset as `cperl-beautify-regexp-piece'),
+		   ;; skip blanks if we do not close the expression.
+		   (setq delim		; We do not close the expression
+			 (get-text-property
+			  (cperl-1+ char-after-pos) 'indentable)
+			 p (1+ (cperl-beginning-of-property
+				(point) 'indentable))
+			 is-block	; misused for: preceeding line in REx
+			 (save-excursion ; Find preceeding line
+			   (cperl-backward-to-noncomment p)
+			   (beginning-of-line)
+			   (if (<= (point) p)
+			       (progn	; get indent from the first line
+				 (goto-char p)
+				 (skip-chars-forward " \t")
+				 (if (memq (char-after (point))
+					   (append "#\n" nil))
+				     nil ; Can't use intentation of this line...
+				   (point)))
+			     (skip-chars-forward " \t")
+			     (point)))
+			 prop (parse-partial-sexp p char-after-pos))
+		   (cond ((not delim)	; End the REx, ignore is-block
+			  (vector 'indentable 'terminator p is-block))
+			 (is-block	; Indent w.r.t. preceeding line
+			  (vector 'indentable 'cont-line char-after-pos
+				  is-block char-after p))
+			 (t		; No preceeding line...
+			  (vector 'indentable 'first-line p))))
+		  ((get-text-property char-after-pos 'REx-part2)
+		   (vector 'REx-part2 (point)))
+		  ((nth 3 state)
+		   [comment])
+		  ((nth 4 state)
+		   [string])
+		  ;; XXXX Do we need to special-case this?
+		  ((null containing-sexp)
+		   ;; Line is at top level.  May be data or function definition,
+		   ;; or may be function argument declaration.
+		   ;; Indent like the previous top level line
+		   ;; unless that ends in a closeparen without semicolon,
+		   ;; in which case this line is the first argument decl.
+		   (skip-chars-forward " \t")
+		   (cperl-backward-to-noncomment (or old-indent (point-min)))
+		   (setq state
+			 (or (bobp)
+			     (eq (point) old-indent) ; old-indent was at comment
+			     (eq (preceding-char) ?\;)
+			     ;;  Had ?\) too
+			     (and (eq (preceding-char) ?\})
+				  (cperl-after-block-and-statement-beg
+				   (point-min))) ; Was start - too close
+			     (memq char-after (append ")]}" nil))
+			     (and (eq (preceding-char) ?\:) ; label
+				  (progn
+				    (forward-sexp -1)
+				    (skip-chars-backward " \t")
+				    (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:")))
+			     (get-text-property (point) 'first-format-line)))
+		   
+		   ;; Look at previous line that's at column 0
+		   ;; to determine whether we are in top-level decls
+		   ;; or function's arg decls.  Set basic-indent accordingly.
+		   ;; Now add a little if this is a continuation line.
+		   (and state
+			parse-data
+			(not (eq char-after ?\C-j))
+			(setcdr (cddr parse-data)
+				(list pre-indent-point)))
+		   (vector 'toplevel start char-after state (nth 2 s-s)))
+		  ((not
+		    (or (setq is-block
+			      (and (setq delim (= (char-after containing-sexp) ?{))
+				   (save-excursion ; Is it a hash?
+				     (goto-char containing-sexp)
+				     (cperl-block-p))))
+			cperl-indent-parens-as-block))
+		   ;; group is an expression, not a block:
+		   ;; indent to just after the surrounding open parens,
+		   ;; skip blanks if we do not close the expression.
+		   (goto-char (1+ containing-sexp))
+		   (or (memq char-after
+			     (append (if delim "}" ")]}") nil))
+		       (looking-at "[ \t]*\\(#\\|$\\)")
+		       (skip-chars-forward " \t"))
+		   (setq old-indent (point)) ; delim=is-brace
+		   (vector 'in-parens char-after (point) delim containing-sexp))
+		  (t
+		   ;; Statement level.  Is it a continuation or a new statement?
+		   ;; Find previous non-comment character.
+		   (goto-char pre-indent-point) ; Skip one level of POD/etc
+		   (cperl-backward-to-noncomment containing-sexp)
+		   ;; Back up over label lines, since they don't
+		   ;; affect whether our line is a continuation.
+		   ;; (Had \, too)
+		   (while;;(or (eq (preceding-char) ?\,)
+		       (and (eq (preceding-char) ?:)
+			    (or;;(eq (char-after (- (point) 2)) ?\') ; ????
+			     (memq (char-syntax (char-after (- (point) 2)))
+				   '(?w ?_))))
+		     ;;)
+		     ;; This is always FALSE?
+		     (if (eq (preceding-char) ?\,)
+			 ;; Will go to beginning of line, essentially.
+			 ;; Will ignore embedded sexpr XXXX.
+			 (cperl-backward-to-start-of-continued-exp containing-sexp))
+		     (beginning-of-line)
+		     (cperl-backward-to-noncomment containing-sexp))
+		   ;; Now we get non-label preceeding the indent point
+		   (if (not (or (eq (1- (point)) containing-sexp)
+				(memq (preceding-char)
+				      (append (if is-block " ;{" " ,;{") '(nil)))
+				(and (eq (preceding-char) ?\})
+				     (cperl-after-block-and-statement-beg
+				      containing-sexp))
+				(get-text-property (point) 'first-format-line)))
+		       ;; This line is continuation of preceding line's statement;
+		       ;; indent  `cperl-continued-statement-offset'  more than the
+		       ;; previous line of the statement.
+		       ;;
+		       ;; There might be a label on this line, just
+		       ;; consider it bad style and ignore it.
+		       (progn
+			 (cperl-backward-to-start-of-continued-exp containing-sexp)
+			 (vector 'continuation (point) char-after is-block delim))
+		     ;; This line starts a new statement.
+		     ;; Position following last unclosed open brace
+		     (goto-char containing-sexp)
+		     ;; Is line first statement after an open-brace?
+		     (or
+		      ;; If no, find that first statement and indent like
+		      ;; it.  If the first statement begins with label, do
+		      ;; not believe when the indentation of the label is too
+		      ;; small.
+		      (save-excursion
+			(forward-char 1)
+			(let ((colon-line-end 0))
+			  (while
+			      (progn (skip-chars-forward " \t\n")
+				     (looking-at "#\\|[a-zA-Z0-9_$]*:[^:]\\|=[a-zA-Z]"))
+			    ;; Skip over comments and labels following openbrace.
+			    (cond ((= (following-char) ?\#)
+				   (forward-line 1))
+				  ((= (following-char) ?\=)
+				   (goto-char
+				    (or (next-single-property-change (point) 'in-pod)
+					(point-max)))) ; do not loop if no syntaxification
+				  ;; label:
+				  (t
+				   (save-excursion (end-of-line)
+						   (setq colon-line-end (point)))
+				   (search-forward ":"))))
+			  ;; We are at beginning of code (NOT label or comment)
+			  ;; First, the following code counts
+			  ;; if it is before the line we want to indent.
+			  (and (< (point) indent-point)
+			       (vector 'have-prev-sibling (point) colon-line-end
+				       containing-sexp))))
+		      (progn
+			;; If no previous statement,
+			;; indent it relative to line brace is on.
+
+			;; For open-braces not the first thing in a line,
+			;; add in cperl-brace-imaginary-offset.
+
+			;; If first thing on a line:  ?????
+			;; Move back over whitespace before the openbrace.
+			(setq		; brace first thing on a line
+			 old-indent (progn (skip-chars-backward " \t") (bolp)))
+			;; Should we indent w.r.t. earlier than start?
+			;; Move to start of control group, possibly on a different line
+			(or cperl-indent-wrt-brace
+			    (cperl-backward-to-noncomment (point-min)))
+			;; If the openbrace is preceded by a parenthesized exp,
+			;; move to the beginning of that;
+			(if (eq (preceding-char) ?\))
+			    (progn
+			      (forward-sexp -1)
+			      (cperl-backward-to-noncomment (point-min))))
+			;; In the case it starts a subroutine, indent with
+			;; respect to `sub', not with respect to the
+			;; first thing on the line, say in the case of
+			;; anonymous sub in a hash.
+			(if (and;; Is it a sub in group starting on this line?
+			     (cond ((get-text-property (point) 'attrib-group)
+				    (goto-char (cperl-beginning-of-property
+						(point) 'attrib-group)))
+				   ((eq (preceding-char) ?b)
+				    (forward-sexp -1)
+				    (looking-at "sub\\>")))
+			     (setq p (nth 1 ; start of innermost containing list
+					  (parse-partial-sexp
+					   (save-excursion (beginning-of-line)
+							   (point))
+					   (point)))))
+			    (progn
+			      (goto-char (1+ p)) ; enclosing block on the same line
+			      (skip-chars-forward " \t")
+			      (vector 'code-start-in-block containing-sexp char-after
+				      (and delim (not is-block)) ; is a HASH
+				      old-indent ; brace first thing on a line
+				      t (point) ; have something before...
+				      )
+			      ;;(current-column)
+			      )
+			  ;; Get initial indentation of the line we are on.
+			  ;; If line starts with label, calculate label indentation
+			  (vector 'code-start-in-block containing-sexp char-after
+				  (and delim (not is-block)) ; is a HASH
+				  old-indent ; brace first thing on a line
+				  nil (point) ; nothing interesting before
+				  ))))))))))))))
+
+(defvar cperl-indent-rules-alist
+  '((pod nil)				; via `syntax-type' property
+    (here-doc nil)			; via `syntax-type' property
+    (here-doc-delim nil)		; via `syntax-type' property
+    (format nil)			; via `syntax-type' property
+    (in-pod nil)			; via `in-pod' property
+    (comment-special:at-beginning-of-line nil)
+    (string t)
+    (comment nil))
+  "Alist of indentation rules for CPerl mode.
+The values mean:
+  nil: do not indent;
+  number: add this amount of indentation.
+
+Not finished.")
+
 (defun cperl-calculate-indent (&optional parse-data) ; was parse-start
   "Return appropriate indentation for current line as Perl code.
 In usual case returns an integer: the column to indent to.
@@ -2410,471 +2999,338 @@
 
 Will not correct the indentation for labels, but will correct it for braces
 and closing parentheses and brackets."
-  (cperl-update-syntaxification (point) (point))
+  ;; This code is still a broken architecture: in some cases we need to
+  ;; compensate for some modifications which `cperl-indent-line' will add later
   (save-excursion
-    (if (or
-	 (and (memq (get-text-property (point) 'syntax-type)
-		    '(pod here-doc here-doc-delim format))
-	      (not (get-text-property (point) 'indentable)))
-	 ;; before start of POD - whitespace found since do not have 'pod!
-	 (and (looking-at "[ \t]*\n=")
-	      (error "Spaces before POD section!"))
-	 (and (not cperl-indent-left-aligned-comments)
-	      (looking-at "^#")))
-	nil
-      (beginning-of-line)
-      (let ((indent-point (point))
-	    (char-after (save-excursion
-			  (skip-chars-forward " \t")
-			  (following-char)))
-	    (in-pod (get-text-property (point) 'in-pod))
-	    (pre-indent-point (point))
-	    p prop look-prop is-block delim)
+    (let ((i (cperl-sniff-for-indent parse-data)) what p)
+      (cond
+       ;;((or (null i) (eq i t) (numberp i))
+       ;;  i)
+       ((vectorp i)
+	(setq what (assoc (elt i 0) cperl-indent-rules-alist))
 	(cond
-	 (in-pod
-	  ;; In the verbatim part, probably code example.  What to do???
-	  )
+	 (what (cadr what))		; Load from table
+	 ;;
+	 ;; Indenters for regular expressions with //x and qw()
+	 ;;
+	 ((eq 'REx-part2 (elt i 0)) ;; [self start] start of /REP in s//REP/x
+	  (goto-char (elt i 1))
+	  (condition-case nil	; Use indentation of the 1st part
+	      (forward-sexp -1))
+	  (current-column))
+	 ((eq 'indentable (elt i 0))	; Indenter for REGEXP qw() etc
+	  (cond		       ;;; [indentable terminator start-pos is-block]
+	   ((eq 'terminator (elt i 1)) ; Lone terminator of "indentable string"
+	    (goto-char (elt i 2))	; After opening parens
+	    (1- (current-column)))
+	   ((eq 'first-line (elt i 1)); [indentable first-line start-pos]
+	    (goto-char (elt i 2))
+	    (+ (or cperl-regexp-indent-step cperl-indent-level)
+	       -1
+	       (current-column)))
+	   ((eq 'cont-line (elt i 1)); [indentable cont-line pos prev-pos first-char start-pos]
+	    ;; Indent as the level after closing parens
+	    (goto-char (elt i 2))	; indent line
+	    (skip-chars-forward " \t)") ; Skip closing parens
+	    (setq p (point))
+	    (goto-char (elt i 3))	; previous line
+	    (skip-chars-forward " \t)") ; Skip closing parens
+	    ;; Number of parens in between:
+	    (setq p (nth 0 (parse-partial-sexp (point) p))
+		  what (elt i 4))	; First char on current line
+	    (goto-char (elt i 3))	; previous line
+	    (+ (* p (or cperl-regexp-indent-step cperl-indent-level))
+	       (cond ((eq what ?\) )
+		      (- cperl-close-paren-offset)) ; compensate
+		     ((eq what ?\| )
+		      (- (or cperl-regexp-indent-step cperl-indent-level)))
+		     (t 0))
+	       (if (eq (following-char) ?\| )
+		   (or cperl-regexp-indent-step cperl-indent-level)
+		 0)
+	       (current-column)))
+	   (t
+	    (error "Unrecognized value of indent: %s" i))))
+	 ;;
+	 ;; Indenter for stuff at toplevel
+	 ;;
+	 ((eq 'toplevel (elt i 0)) ;; [toplevel start char-after state immed-after-block]
+	  (+ (save-excursion		; To beg-of-defun, or end of last sexp
+	       (goto-char (elt i 1))	; start = Good place to start parsing
+	       (- (current-indentation) ; 
+		  (if (elt i 4) cperl-indent-level 0)))	; immed-after-block
+	     (if (eq (elt i 2) ?{) cperl-continued-brace-offset 0) ; char-after
+	     ;; Look at previous line that's at column 0
+	     ;; to determine whether we are in top-level decls
+	     ;; or function's arg decls.  Set basic-indent accordingly.
+	     ;; Now add a little if this is a continuation line.
+	     (if (elt i 3)		; state (XXX What is the semantic???)
+		 0
+	       cperl-continued-statement-offset)))
+	 ;;
+	 ;; Indenter for stuff in "parentheses" (or brackets, braces-as-hash)
+	 ;;
+	 ((eq 'in-parens (elt i 0))
+	  ;; in-parens char-after old-indent-point is-brace containing-sexp
+
+	  ;; group is an expression, not a block:
+	  ;; indent to just after the surrounding open parens,
+	  ;; skip blanks if we do not close the expression.
+	  (+ (progn
+	       (goto-char (elt i 2))		; old-indent-point
+	       (current-column))
+	     (if (and (elt i 3)		; is-brace
+		      (eq (elt i 1) ?\})) ; char-after
+		 ;; Correct indentation of trailing ?\}
+		 (+ cperl-indent-level cperl-close-paren-offset)
+	       0)))
+	 ;;
+	 ;; Indenter for continuation lines
+	 ;;
+	 ((eq 'continuation (elt i 0))
+	  ;; [continuation statement-start char-after is-block is-brace]
+	  (goto-char (elt i 1))		; statement-start
+	  (+ (if (memq (elt i 2) (append "}])" nil)) ; char-after
+		 0			; Closing parenth
+	       cperl-continued-statement-offset)
+	     (if (or (elt i 3)		; is-block
+		     (not (elt i 4))		; is-brace
+		     (not (eq (elt i 2) ?\}))) ; char-after
+		 0
+	       ;; Now it is a hash reference
+	       (+ cperl-indent-level cperl-close-paren-offset))
+	     ;; Labels do not take :: ...
+	     (if (looking-at "\\(\\w\\|_\\)+[ \t]*:")
+		 (if (> (current-indentation) cperl-min-label-indent)
+		     (- (current-indentation) cperl-label-offset)
+		   ;; Do not move `parse-data', this should
+		   ;; be quick anyway (this comment comes
+		   ;; from different location):
+		   (cperl-calculate-indent))
+	       (current-column))
+	     (if (eq (elt i 2) ?\{)	; char-after
+		 cperl-continued-brace-offset 0)))
+	 ;;
+	 ;; Indenter for lines in a block which are not leading lines
+	 ;;
+	 ((eq 'have-prev-sibling (elt i 0))
+	  ;; [have-prev-sibling sibling-beg colon-line-end block-start]
+	  (goto-char (elt i 1))
+	  (if (> (elt i 2) (point)) ; colon-line-end; After-label, same line
+	      (if (> (current-indentation)
+		     cperl-min-label-indent)
+		  (- (current-indentation) cperl-label-offset)
+		;; Do not believe: `max' was involved in calculation of indent
+		(+ cperl-indent-level
+		   (save-excursion
+		     (goto-char (elt i 3)) ; block-start
+		     (current-indentation))))
+	    (current-column)))
+	 ;;
+	 ;; Indenter for the first line in a block
+	 ;;
+	 ((eq 'code-start-in-block (elt i 0))
+	  ;;[code-start-in-block before-brace char-after
+	  ;; is-a-HASH-ref brace-is-first-thing-on-a-line
+	  ;; group-starts-before-start-of-sub start-of-control-group]
+	  (goto-char (elt i 1))
+	  ;; For open brace in column zero, don't let statement
+	  ;; start there too.  If cperl-indent-level=0,
+	  ;; use cperl-brace-offset + cperl-continued-statement-offset instead.
+	  (+ (if (and (bolp) (zerop cperl-indent-level))
+		 (+ cperl-brace-offset cperl-continued-statement-offset)
+	       cperl-indent-level)
+	     (if (and (elt i 3)	; is-a-HASH-ref
+		      (eq (elt i 2) ?\})) ; char-after: End of a hash reference
+		 (+ cperl-indent-level cperl-close-paren-offset)
+	       0)
+	     ;; Unless openbrace is the first nonwhite thing on the line,
+	     ;; add the cperl-brace-imaginary-offset.
+	     (if (elt i 4) 0		; brace-is-first-thing-on-a-line
+	       cperl-brace-imaginary-offset)
+	     (progn
+	       (goto-char (elt i 6))	; start-of-control-group
+	       (if (elt i 5)		; group-starts-before-start-of-sub
+		   (current-column)
+		 ;; Get initial indentation of the line we are on.
+		 ;; If line starts with label, calculate label indentation
+		 (if (save-excursion
+		       (beginning-of-line)
+		       (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_0-9]*:[^:]"))
+		     (if (> (current-indentation) cperl-min-label-indent)
+			 (- (current-indentation) cperl-label-offset)
+		       ;; Do not move `parse-data', this should
+		       ;; be quick anyway:
+		       (cperl-calculate-indent))
+		   (current-indentation))))))
 	 (t
-	  (save-excursion
-	    ;; Not in POD
-	    (cperl-backward-to-noncomment nil)
-	    (setq p (max (point-min) (1- (point)))
-		  prop (get-text-property p 'syntax-type)
-		  look-prop (or (nth 1 (assoc prop cperl-look-for-prop))
-				'syntax-type))
-	    (if (memq prop '(pod here-doc format here-doc-delim))
-		(progn
-		  (goto-char (or (previous-single-property-change p look-prop)
-				 (point-min)))
-		  (beginning-of-line)
-		  (setq pre-indent-point (point)))))))
-	(goto-char pre-indent-point)
-	(let* ((case-fold-search nil)
-	       (s-s (cperl-get-state (car parse-data) (nth 1 parse-data)))
-	       (start (or (nth 2 parse-data)
-			  (nth 0 s-s)))
-	       (state (nth 1 s-s))
-	       (containing-sexp (car (cdr state)))
-	       old-indent)
-	  (if (and
-	       ;;containing-sexp		;; We are buggy at toplevel :-(
-	       parse-data)
-	      (progn
-		(setcar parse-data pre-indent-point)
-		(setcar (cdr parse-data) state)
-		(or (nth 2 parse-data)
-		    (setcar (cddr parse-data) start))
-		;; Before this point: end of statement
-		(setq old-indent (nth 3 parse-data))))
-	  (cond ((get-text-property (point) 'indentable)
-		 ;; indent to just after the surrounding open,
-		 ;; skip blanks if we do not close the expression.
-		 (goto-char (1+ (previous-single-property-change (point) 'indentable)))
-		 (or (memq char-after (append ")]}" nil))
-		     (looking-at "[ \t]*\\(#\\|$\\)")
-		     (skip-chars-forward " \t"))
-		 (current-column))
-		((or (nth 3 state) (nth 4 state))
-		 ;; return nil or t if should not change this line
-		 (nth 4 state))
-		;; XXXX Do we need to special-case this?
-		((null containing-sexp)
-		 ;; Line is at top level.  May be data or function definition,
-		 ;; or may be function argument declaration.
-		 ;; Indent like the previous top level line
-		 ;; unless that ends in a closeparen without semicolon,
-		 ;; in which case this line is the first argument decl.
-		 (skip-chars-forward " \t")
-		 (+ (save-excursion
-		      (goto-char start)
-		      (- (current-indentation)
-			 (if (nth 2 s-s) cperl-indent-level 0)))
-		    (if (= char-after ?{) cperl-continued-brace-offset 0)
-		    (progn
-		      (cperl-backward-to-noncomment (or old-indent (point-min)))
-		      ;; Look at previous line that's at column 0
-		      ;; to determine whether we are in top-level decls
-		      ;; or function's arg decls.  Set basic-indent accordingly.
-		      ;; Now add a little if this is a continuation line.
-		      (if (or (bobp)
-			      (eq (point) old-indent) ; old-indent was at comment
-			      (eq (preceding-char) ?\;)
-			      ;;  Had ?\) too
-			      (and (eq (preceding-char) ?\})
-				   (cperl-after-block-and-statement-beg
-				    (point-min))) ; Was start - too close
-			      (memq char-after (append ")]}" nil))
-			      (and (eq (preceding-char) ?\:) ; label
+	  (error "Unrecognized value of indent: %s" i))))
+       (t
+	(error "Got strange value of indent: %s" i))))))
+
+(defvar cperl-indent-alist
+  '((string nil)
+    (comment nil)
+    (toplevel 0)
+    (toplevel-after-parenth 2)
+    (toplevel-continued 2)
+    (expression 1))
+  "Alist of indentation rules for CPerl mode.
+The values mean:
+  nil: do not indent;
+  number: add this amount of indentation.
+
+Not finished, not used.")
+
+(defun cperl-where-am-i (&optional parse-start start-state)
+  ;; Unfinished
+  "Return a list of lists ((TYPE POS)...) of good points before the point.
+POS may be nil if it is hard to find, say, when TYPE is `string' or `comment'.
+
+Not finished, not used."
+  (save-excursion
+    (let* ((start-point (point)) unused
+	   (s-s (cperl-get-state))
+	   (start (nth 0 s-s))
+	   (state (nth 1 s-s))
+	   (prestart (nth 3 s-s))
+	   (containing-sexp (car (cdr state)))
+	   (case-fold-search nil)
+	   (res (list (list 'parse-start start) (list 'parse-prestart prestart))))
+      (cond ((nth 3 state)		; In string
+	     (setq res (cons (list 'string nil (nth 3 state)) res))) ; What started string
+	    ((nth 4 state)		; In comment
+	     (setq res (cons '(comment) res)))
+	    ((null containing-sexp)
+	     ;; Line is at top level.
+	     ;; Indent like the previous top level line
+	     ;; unless that ends in a closeparen without semicolon,
+	     ;; in which case this line is the first argument decl.
+	     (cperl-backward-to-noncomment (or parse-start (point-min)))
+	     ;;(skip-chars-backward " \t\f\n")
+	     (cond
+	      ((or (bobp)
+		   (memq (preceding-char) (append ";}" nil)))
+	       (setq res (cons (list 'toplevel start) res)))
+	      ((eq (preceding-char) ?\) )
+	       (setq res (cons (list 'toplevel-after-parenth start) res)))
+	      (t
+	       (setq res (cons (list 'toplevel-continued start) res)))))
+	    ((/= (char-after containing-sexp) ?{)
+	     ;; line is expression, not statement:
+	     ;; indent to just after the surrounding open.
+	     ;; skip blanks if we do not close the expression.
+	     (setq res (cons (list 'expression-blanks
 				   (progn
-				     (forward-sexp -1)
-				     (skip-chars-backward " \t")
-				     (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_0-9]*[ \t]*:")))
-			      (get-text-property (point) 'first-format-line))
-			  (progn
-			    (if (and parse-data
-				     (not (eq char-after ?\C-j)))
-				(setcdr (cddr parse-data)
-					(list pre-indent-point)))
-			    0)
-			cperl-continued-statement-offset))))
-		((not
-		  (or (setq is-block
-			    (and (setq delim (= (char-after containing-sexp) ?{))
-				 (save-excursion ; Is it a hash?
-				   (goto-char containing-sexp)
-				   (cperl-block-p))))
-		      cperl-indent-parens-as-block))
-		 ;; group is an expression, not a block:
-		 ;; indent to just after the surrounding open parens,
-		 ;; skip blanks if we do not close the expression.
-		 (goto-char (1+ containing-sexp))
-		 (or (memq char-after
-			   (append (if delim "}" ")]}") nil))
-		     (looking-at "[ \t]*\\(#\\|$\\)")
-		     (skip-chars-forward " \t"))
-		 (+ (current-column)
-		    (if (and delim
-			     (eq char-after ?\}))
-			;; Correct indentation of trailing ?\}
-			(+ cperl-indent-level cperl-close-paren-offset)
-		      0)))
-;;;	      ((and (/= (char-after containing-sexp) ?{)
-;;;		    (not cperl-indent-parens-as-block))
-;;;	       ;; line is expression, not statement:
-;;;	       ;; indent to just after the surrounding open,
-;;;	       ;; skip blanks if we do not close the expression.
-;;;	       (goto-char (1+ containing-sexp))
-;;;	       (or (memq char-after (append ")]}" nil))
-;;;		   (looking-at "[ \t]*\\(#\\|$\\)")
-;;;		   (skip-chars-forward " \t"))
-;;;	       (current-column))
-;;;	      ((progn
-;;;		 ;; Containing-expr starts with \{.  Check whether it is a hash.
-;;;		 (goto-char containing-sexp)
-;;;		 (and (not (cperl-block-p))
-;;;		      (not cperl-indent-parens-as-block)))
-;;;	       (goto-char (1+ containing-sexp))
-;;;	       (or (eq char-after ?\})
-;;;		   (looking-at "[ \t]*\\(#\\|$\\)")
-;;;		   (skip-chars-forward " \t"))
-;;;	       (+ (current-column)	; Correct indentation of trailing ?\}
-;;;		  (if (eq char-after ?\}) (+ cperl-indent-level
-;;;					     cperl-close-paren-offset)
-;;;		    0)))
-		(t
-		 ;; Statement level.  Is it a continuation or a new statement?
-		 ;; Find previous non-comment character.
-		 (goto-char pre-indent-point)
-		 (cperl-backward-to-noncomment containing-sexp)
-		 ;; Back up over label lines, since they don't
-		 ;; affect whether our line is a continuation.
-		 ;; (Had \, too)
-		 (while	;;(or (eq (preceding-char) ?\,)
-		     (and (eq (preceding-char) ?:)
-			  (or ;;(eq (char-after (- (point) 2)) ?\') ; ????
-			   (memq (char-syntax (char-after (- (point) 2)))
-				 '(?w ?_))))
-		   ;;)
-		   (if (eq (preceding-char) ?\,)
-		       ;; Will go to beginning of line, essentially.
-		       ;; Will ignore embedded sexpr XXXX.
-		       (cperl-backward-to-start-of-continued-exp containing-sexp))
-		   (beginning-of-line)
-		   (cperl-backward-to-noncomment containing-sexp))
-		 ;; Now we get the answer.
-		 (if (not (or (eq (1- (point)) containing-sexp)
-			      (memq (preceding-char)
-				    (append (if is-block " ;{" " ,;{") '(nil)))
-			      (and (eq (preceding-char) ?\})
-				   (cperl-after-block-and-statement-beg
-				    containing-sexp))
-			      (get-text-property (point) 'first-format-line)))
-		     ;; This line is continuation of preceding line's statement;
-		     ;; indent  `cperl-continued-statement-offset'  more than the
-		     ;; previous line of the statement.
-		     ;;
-		     ;; There might be a label on this line, just
-		     ;; consider it bad style and ignore it.
-		     (progn
-		       (cperl-backward-to-start-of-continued-exp containing-sexp)
-		       (+ (if (memq char-after (append "}])" nil))
-			      0		; Closing parenth
-			    cperl-continued-statement-offset)
-			  (if (or is-block
-				  (not delim)
-				  (not (eq char-after ?\})))
-			      0
-			    ;; Now it is a hash reference
-			    (+ cperl-indent-level cperl-close-paren-offset))
-			  (if (looking-at "\\w+[ \t]*:")
-			      (if (> (current-indentation) cperl-min-label-indent)
-				  (- (current-indentation) cperl-label-offset)
-				;; Do not move `parse-data', this should
-				;; be quick anyway (this comment comes
-				;; from different location):
-				(cperl-calculate-indent))
-			    (current-column))
-			  (if (eq char-after ?\{)
-			      cperl-continued-brace-offset 0)))
-		   ;; This line starts a new statement.
-		   ;; Position following last unclosed open.
-		   (goto-char containing-sexp)
-		   ;; Is line first statement after an open-brace?
-		   (or
-		    ;; If no, find that first statement and indent like
-		    ;; it.  If the first statement begins with label, do
-		    ;; not believe when the indentation of the label is too
-		    ;; small.
-		    (save-excursion
-		      (forward-char 1)
-		      (setq old-indent (current-indentation))
-		      (let ((colon-line-end 0))
-			(while
-			    (progn (skip-chars-forward " \t\n")
-				   (looking-at "#\\|[a-zA-Z0-9_$]*:[^:]\\|=[a-zA-Z]"))
-			  ;; Skip over comments and labels following openbrace.
-			  (cond ((= (following-char) ?\#)
-				 (forward-line 1))
-				((= (following-char) ?\=)
-				 (goto-char
-				  (or (next-single-property-change (point) 'in-pod)
-				      (point-max)))) ; do not loop if no syntaxification
-				;; label:
-				(t
-				 (save-excursion (end-of-line)
-						 (setq colon-line-end (point)))
-				 (search-forward ":"))))
-			;; The first following code counts
-			;; if it is before the line we want to indent.
-			(and (< (point) indent-point)
-			     (if (> colon-line-end (point)) ; After label
-				 (if (> (current-indentation)
-					cperl-min-label-indent)
-				     (- (current-indentation) cperl-label-offset)
-				   ;; Do not believe: `max' is involved
-				   (+ old-indent cperl-indent-level))
-			       (current-column)))))
-		    ;; If no previous statement,
-		    ;; indent it relative to line brace is on.
-		    ;; For open brace in column zero, don't let statement
-		    ;; start there too.  If cperl-indent-level is zero,
-		    ;; use cperl-brace-offset + cperl-continued-statement-offset instead.
-		    ;; For open-braces not the first thing in a line,
-		    ;; add in cperl-brace-imaginary-offset.
-
-		    ;; If first thing on a line:  ?????
-		    (+ (if (and (bolp) (zerop cperl-indent-level))
-			   (+ cperl-brace-offset cperl-continued-statement-offset)
-			 cperl-indent-level)
-		       (if (or is-block
-			       (not delim)
-			       (not (eq char-after ?\})))
-			   0
-			 ;; Now it is a hash reference
-			 (+ cperl-indent-level cperl-close-paren-offset))
-		       ;; Move back over whitespace before the openbrace.
-		       ;; If openbrace is not first nonwhite thing on the line,
-		       ;; add the cperl-brace-imaginary-offset.
-		       (progn (skip-chars-backward " \t")
-			      (if (bolp) 0 cperl-brace-imaginary-offset))
-		       ;; If the openbrace is preceded by a parenthesized exp,
-		       ;; move to the beginning of that;
-		       ;; possibly a different line
-		       (progn
-			 (if (eq (preceding-char) ?\))
-			     (forward-sexp -1))
-			 ;; In the case it starts a subroutine, indent with
-			 ;; respect to `sub', not with respect to the
-			 ;; first thing on the line, say in the case of
-			 ;; anonymous sub in a hash.
-			 ;;
-			 (skip-chars-backward " \t")
-			 (if (and (eq (preceding-char) ?b)
-				  (progn
-				    (forward-sexp -1)
-				    (looking-at "sub\\>"))
-				  (setq old-indent
-					(nth 1
-					     (parse-partial-sexp
-					      (save-excursion (beginning-of-line) (point))
-					      (point)))))
-			     (progn (goto-char (1+ old-indent))
-				    (skip-chars-forward " \t")
-				    (current-column))
-			   ;; Get initial indentation of the line we are on.
-			   ;; If line starts with label, calculate label indentation
-			   (if (save-excursion
-				 (beginning-of-line)
-				 (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_0-9]*:[^:]"))
-			       (if (> (current-indentation) cperl-min-label-indent)
-				   (- (current-indentation) cperl-label-offset)
-				 ;; Do not move `parse-data', this should
-				 ;; be quick anyway:
-				 (cperl-calculate-indent))
-			     (current-indentation))))))))))))))
-
-;; (defvar cperl-indent-alist
-;;   '((string nil)
-;;     (comment nil)
-;;     (toplevel 0)
-;;     (toplevel-after-parenth 2)
-;;     (toplevel-continued 2)
-;;     (expression 1))
-;;   "Alist of indentation rules for CPerl mode.
-;; The values mean:
-;;   nil: do not indent;
-;;   number: add this amount of indentation.
-
-;; Not finished, not used.")
-
-;; (defun cperl-where-am-i (&optional parse-start start-state)
-;;   ;; Unfinished
-;;   "Return a list of lists ((TYPE POS)...) of good points before the point.
-;; ;; POS may be nil if it is hard to find, say, when TYPE is `string' or `comment'.
-
-;; ;; Not finished, not used."
-;;   (save-excursion
-;;     (let* ((start-point (point))
-;; 	   (s-s (cperl-get-state))
-;; 	   (start (nth 0 s-s))
-;; 	   (state (nth 1 s-s))
-;; 	   (prestart (nth 3 s-s))
-;; 	   (containing-sexp (car (cdr state)))
-;; 	   (case-fold-search nil)
-;; 	   (res (list (list 'parse-start start) (list 'parse-prestart prestart))))
-;;       (cond ((nth 3 state)		; In string
-;; 	     (setq res (cons (list 'string nil (nth 3 state)) res))) ; What started string
-;; 	    ((nth 4 state)		; In comment
-;; 	     (setq res (cons '(comment) res)))
-;; 	    ((null containing-sexp)
-;; 	     ;; Line is at top level.
-;; 	     ;; Indent like the previous top level line
-;; 	     ;; unless that ends in a closeparen without semicolon,
-;; 	     ;; in which case this line is the first argument decl.
-;; 	     (cperl-backward-to-noncomment (or parse-start (point-min)))
-;; 	     ;;(skip-chars-backward " \t\f\n")
-;; 	     (cond
-;; 	      ((or (bobp)
-;; 		   (memq (preceding-char) (append ";}" nil)))
-;; 	       (setq res (cons (list 'toplevel start) res)))
-;; 	      ((eq (preceding-char) ?\) )
-;; 	       (setq res (cons (list 'toplevel-after-parenth start) res)))
-;; 	      (t
-;; 	       (setq res (cons (list 'toplevel-continued start) res)))))
-;; 	    ((/= (char-after containing-sexp) ?{)
-;; 	     ;; line is expression, not statement:
-;; 	     ;; indent to just after the surrounding open.
-;; 	     ;; skip blanks if we do not close the expression.
-;; 	     (setq res (cons (list 'expression-blanks
-;; 				   (progn
-;; 				     (goto-char (1+ containing-sexp))
-;; 				     (or (looking-at "[ \t]*\\(#\\|$\\)")
-;; 					 (skip-chars-forward " \t"))
-;; 				     (point)))
-;; 			     (cons (list 'expression containing-sexp) res))))
-;; 	    ((progn
-;; 	       ;; Containing-expr starts with \{.  Check whether it is a hash.
-;; 	       (goto-char containing-sexp)
-;; 	       (not (cperl-block-p)))
-;; 	     (setq res (cons (list 'expression-blanks
-;; 				   (progn
-;; 				     (goto-char (1+ containing-sexp))
-;; 				     (or (looking-at "[ \t]*\\(#\\|$\\)")
-;; 					 (skip-chars-forward " \t"))
-;; 				     (point)))
-;; 			     (cons (list 'expression containing-sexp) res))))
-;; 	    (t
-;; 	     ;; Statement level.
-;; 	     (setq res (cons (list 'in-block containing-sexp) res))
-;; 	     ;; Is it a continuation or a new statement?
-;; 	     ;; Find previous non-comment character.
-;; 	     (cperl-backward-to-noncomment containing-sexp)
-;; 	     ;; Back up over label lines, since they don't
-;; 	     ;; affect whether our line is a continuation.
-;; 	     ;; Back up comma-delimited lines too ?????
-;; 	     (while (or (eq (preceding-char) ?\,)
-;; 			(save-excursion (cperl-after-label)))
-;; 	       (if (eq (preceding-char) ?\,)
-;; 		   ;; Will go to beginning of line, essentially
-;; 		   ;; Will ignore embedded sexpr XXXX.
-;; 		   (cperl-backward-to-start-of-continued-exp containing-sexp))
-;; 	       (beginning-of-line)
-;; 	       (cperl-backward-to-noncomment containing-sexp))
-;; 	     ;; Now we get the answer.
-;; 	     (if (not (memq (preceding-char) (append ";}{" '(nil)))) ; Was ?\,
-;; 		 ;; This line is continuation of preceding line's statement.
-;; 		 (list (list 'statement-continued containing-sexp))
-;; 	       ;; This line starts a new statement.
-;; 	       ;; Position following last unclosed open.
-;; 	       (goto-char containing-sexp)
-;; 	       ;; Is line first statement after an open-brace?
-;; 	       (or
-;; 		;; If no, find that first statement and indent like
-;; 		;; it.  If the first statement begins with label, do
-;; 		;; not believe when the indentation of the label is too
-;; 		;; small.
-;; 		(save-excursion
-;; 		  (forward-char 1)
-;; 		  (let ((colon-line-end 0))
-;; 		    (while (progn (skip-chars-forward " \t\n" start-point)
-;; 				  (and (< (point) start-point)
-;; 				       (looking-at
-;; 					"#\\|[a-zA-Z_][a-zA-Z0-9_]*:[^:]")))
-;; 		      ;; Skip over comments and labels following openbrace.
-;; 		      (cond ((= (following-char) ?\#)
-;; 			     ;;(forward-line 1)
-;; 			     (end-of-line))
-;; 			    ;; label:
-;; 			    (t
-;; 			     (save-excursion (end-of-line)
-;; 					     (setq colon-line-end (point)))
-;; 			     (search-forward ":"))))
-;; 		    ;; Now at the point, after label, or at start
-;; 		    ;; of first statement in the block.
-;; 		    (and (< (point) start-point)
-;; 			 (if (> colon-line-end (point))
-;; 			     ;; Before statement after label
-;; 			     (if (> (current-indentation)
-;; 				    cperl-min-label-indent)
-;; 				 (list (list 'label-in-block (point)))
-;; 			       ;; Do not believe: `max' is involved
-;; 			       (list
-;; 				(list 'label-in-block-min-indent (point))))
-;; 			   ;; Before statement
-;; 			   (list 'statement-in-block (point))))))
-;; 		;; If no previous statement,
-;; 		;; indent it relative to line brace is on.
-;; 		;; For open brace in column zero, don't let statement
-;; 		;; start there too.  If cperl-indent-level is zero,
-;; 		;; use cperl-brace-offset + cperl-continued-statement-offset instead.
-;; 		;; For open-braces not the first thing in a line,
-;; 		;; add in cperl-brace-imaginary-offset.
-
-;; 		;; If first thing on a line:  ?????
-;; 		(+ (if (and (bolp) (zerop cperl-indent-level))
-;; 		       (+ cperl-brace-offset cperl-continued-statement-offset)
-;; 		     cperl-indent-level)
-;; 		   ;; Move back over whitespace before the openbrace.
-;; 		   ;; If openbrace is not first nonwhite thing on the line,
-;; 		   ;; add the cperl-brace-imaginary-offset.
-;; 		   (progn (skip-chars-backward " \t")
-;; 			  (if (bolp) 0 cperl-brace-imaginary-offset))
-;; 		   ;; If the openbrace is preceded by a parenthesized exp,
-;; 		   ;; move to the beginning of that;
-;; 		   ;; possibly a different line
-;; 		   (progn
-;; 		     (if (eq (preceding-char) ?\))
-;; 			 (forward-sexp -1))
-;; 		     ;; Get initial indentation of the line we are on.
-;; 		     ;; If line starts with label, calculate label indentation
-;; 		     (if (save-excursion
-;; 			   (beginning-of-line)
-;; 			   (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_0-9]*:[^:]"))
-;; 			 (if (> (current-indentation) cperl-min-label-indent)
-;; 			     (- (current-indentation) cperl-label-offset)
-;; 			   (cperl-calculate-indent))
-;; 		       (current-indentation))))))))
-;;       res)))
+				     (goto-char (1+ containing-sexp))
+				     (or (looking-at "[ \t]*\\(#\\|$\\)")
+					 (skip-chars-forward " \t"))
+				     (point)))
+			     (cons (list 'expression containing-sexp) res))))
+	    ((progn
+	       ;; Containing-expr starts with \{.  Check whether it is a hash.
+	       (goto-char containing-sexp)
+	       (not (cperl-block-p)))
+	     (setq res (cons (list 'expression-blanks
+				   (progn
+				     (goto-char (1+ containing-sexp))
+				     (or (looking-at "[ \t]*\\(#\\|$\\)")
+					 (skip-chars-forward " \t"))
+				     (point)))
+			     (cons (list 'expression containing-sexp) res))))
+	    (t
+	     ;; Statement level.
+	     (setq res (cons (list 'in-block containing-sexp) res))
+	     ;; Is it a continuation or a new statement?
+	     ;; Find previous non-comment character.
+	     (cperl-backward-to-noncomment containing-sexp)
+	     ;; Back up over label lines, since they don't
+	     ;; affect whether our line is a continuation.
+	     ;; Back up comma-delimited lines too ?????
+	     (while (or (eq (preceding-char) ?\,)
+			(save-excursion (cperl-after-label)))
+	       (if (eq (preceding-char) ?\,)
+		   ;; Will go to beginning of line, essentially
+		   ;; Will ignore embedded sexpr XXXX.
+		   (cperl-backward-to-start-of-continued-exp containing-sexp))
+	       (beginning-of-line)
+	       (cperl-backward-to-noncomment containing-sexp))
+	     ;; Now we get the answer.
+	     (if (not (memq (preceding-char) (append ";}{" '(nil)))) ; Was ?\,
+		 ;; This line is continuation of preceding line's statement.
+		 (list (list 'statement-continued containing-sexp))
+	       ;; This line starts a new statement.
+	       ;; Position following last unclosed open.
+	       (goto-char containing-sexp)
+	       ;; Is line first statement after an open-brace?
+	       (or
+		;; If no, find that first statement and indent like
+		;; it.  If the first statement begins with label, do
+		;; not believe when the indentation of the label is too
+		;; small.
+		(save-excursion
+		  (forward-char 1)
+		  (let ((colon-line-end 0))
+		    (while (progn (skip-chars-forward " \t\n" start-point)
+				  (and (< (point) start-point)
+				       (looking-at
+					"#\\|[a-zA-Z_][a-zA-Z0-9_]*:[^:]")))
+		      ;; Skip over comments and labels following openbrace.
+		      (cond ((= (following-char) ?\#)
+			     ;;(forward-line 1)
+			     (end-of-line))
+			    ;; label:
+			    (t
+			     (save-excursion (end-of-line)
+					     (setq colon-line-end (point)))
+			     (search-forward ":"))))
+		    ;; Now at the point, after label, or at start
+		    ;; of first statement in the block.
+		    (and (< (point) start-point)
+			 (if (> colon-line-end (point))
+			     ;; Before statement after label
+			     (if (> (current-indentation)
+				    cperl-min-label-indent)
+				 (list (list 'label-in-block (point)))
+			       ;; Do not believe: `max' is involved
+			       (list
+				(list 'label-in-block-min-indent (point))))
+			   ;; Before statement
+			   (list 'statement-in-block (point))))))
+		;; If no previous statement,
+		;; indent it relative to line brace is on.
+		;; For open brace in column zero, don't let statement
+		;; start there too.  If cperl-indent-level is zero,
+		;; use cperl-brace-offset + cperl-continued-statement-offset instead.
+		;; For open-braces not the first thing in a line,
+		;; add in cperl-brace-imaginary-offset.
+
+		;; If first thing on a line:  ?????
+		(setq unused		; This is not finished...
+		(+ (if (and (bolp) (zerop cperl-indent-level))
+		       (+ cperl-brace-offset cperl-continued-statement-offset)
+		     cperl-indent-level)
+		   ;; Move back over whitespace before the openbrace.
+		   ;; If openbrace is not first nonwhite thing on the line,
+		   ;; add the cperl-brace-imaginary-offset.
+		   (progn (skip-chars-backward " \t")
+			  (if (bolp) 0 cperl-brace-imaginary-offset))
+		   ;; If the openbrace is preceded by a parenthesized exp,
+		   ;; move to the beginning of that;
+		   ;; possibly a different line
+		   (progn
+		     (if (eq (preceding-char) ?\))
+			 (forward-sexp -1))
+		     ;; Get initial indentation of the line we are on.
+		     ;; If line starts with label, calculate label indentation
+		     (if (save-excursion
+			   (beginning-of-line)
+			   (looking-at "[ \t]*[a-zA-Z_][a-zA-Z_0-9]*:[^:]"))
+			 (if (> (current-indentation) cperl-min-label-indent)
+			     (- (current-indentation) cperl-label-offset)
+			   (cperl-calculate-indent))
+		       (current-indentation)))))))))
+      res)))
 
 (defun cperl-calculate-indent-within-comment ()
   "Return the indentation amount for line, assuming that
@@ -2894,14 +3350,22 @@
 
 (defun cperl-to-comment-or-eol ()
   "Go to position before comment on the current line, or to end of line.
-Returns true if comment is found."
-  (let (state stop-in cpoint (lim (progn (end-of-line) (point))))
+Returns true if comment is found.  In POD will not move the point."
+  ;; If the line is inside other syntax groups (qq-style strings, HERE-docs)
+  ;; then looks for literal # or end-of-line.
+  (let (state stop-in cpoint (lim (progn (end-of-line) (point))) pr e)
+    (or cperl-font-locking
+	(cperl-update-syntaxification lim lim))
     (beginning-of-line)
-    (if (or
-	 (eq (get-text-property (point) 'syntax-type) 'pod)
-	 (re-search-forward "\\=[ \t]*\\(#\\|$\\)" lim t))
+    (if (setq pr (get-text-property (point) 'syntax-type))
+	(setq e (next-single-property-change (point) 'syntax-type nil (point-max))))
+    (if (or (eq pr 'pod)
+	    (if (or (not e) (> e lim))	; deep inside a group
+		(re-search-forward "\\=[ \t]*\\(#\\|$\\)" lim t)))
 	(if (eq (preceding-char) ?\#) (progn (backward-char 1) t))
-      ;; Else
+      ;; Else - need to do it the hard way
+      (and (and e (<= e lim))
+	   (goto-char e))
       (while (not stop-in)
 	(setq state (parse-partial-sexp (point) lim nil nil nil t))
 					; stop at comment
@@ -2933,17 +3397,11 @@
 	  (setq stop-in t)))		; Finish
       (nth 4 state))))
 
-(defsubst cperl-1- (p)
-  (max (point-min) (1- p)))
-
-(defsubst cperl-1+ (p)
-  (min (point-max) (1+ p)))
-
 (defsubst cperl-modify-syntax-type (at how)
   (if (< at (point-max))
       (progn
 	(put-text-property at (1+ at) 'syntax-table how)
-	(put-text-property at (1+ at) 'rear-nonsticky t))))
+	(put-text-property at (1+ at) 'rear-nonsticky '(syntax-table)))))
 
 (defun cperl-protect-defun-start (s e)
   ;; C code looks for "^\\s(" to skip comment backward in "hard" situations
@@ -2978,35 +3436,53 @@
 			 ( ?\{ . ?\} )
 			 ( ?\< . ?\> )))
 
-(defun cperl-forward-re (lim end is-2arg set-st st-l err-l argument
+(defun cperl-cached-syntax-table (st)
+  "Get a syntax table cached in ST, or create and cache into ST a syntax table.
+All the entries of the syntax table are \".\", except for a backslash, which
+is quoting."
+  (if (car-safe st)
+      (car st)
+    (setcar st (make-syntax-table))
+    (setq st (car st))
+    (let ((i 0))
+      (while (< i 256)
+	(modify-syntax-entry i "." st)
+	(setq i (1+ i))))
+    (modify-syntax-entry ?\\ "\\" st)
+    st))
+
+(defun cperl-forward-re (lim end is-2arg st-l err-l argument
 			     &optional ostart oend)
-  ;; Works *before* syntax recognition is done
-  ;; May modify syntax-type text property if the situation is too hard
-  (let (b starter ender st i i2 go-forward reset-st)
+"Find the end of a regular expression or a stringish construct (q[] etc).
+The point should be before the starting delimiter.
+
+Goes to LIM if none is found.  If IS-2ARG is non-nil, assumes that it
+is s/// or tr/// like expression.  If END is nil, generates an error
+message if needed.  If SET-ST is non-nil, will use (or generate) a
+cached syntax table in ST-L.  If ERR-L is non-nil, will store the
+error message in its CAR (unless it already contains some error
+message).  ARGUMENT should be the name of the construct (used in error
+messages).  OSTART, OEND may be set in recursive calls when processing
+the second argument of 2ARG construct.
+
+Works *before* syntax recognition is done.  In IS-2ARG situation may
+modify syntax-type text property if the situation is too hard."
+  (let (b starter ender st i i2 go-forward reset-st set-st)
     (skip-chars-forward " \t")
     ;; ender means matching-char matcher.
     (setq b (point)
 	  starter (if (eobp) 0 (char-after b))
 	  ender (cdr (assoc starter cperl-starters)))
     ;; What if starter == ?\\  ????
-    (if set-st
-	(if (car st-l)
-	    (setq st (car st-l))
-	  (setcar st-l (make-syntax-table))
-	  (setq i 0 st (car st-l))
-	  (while (< i 256)
-	    (modify-syntax-entry i "." st)
-	    (setq i (1+ i)))
-	  (modify-syntax-entry ?\\ "\\" st)))
+    (setq st (cperl-cached-syntax-table st-l))
     (setq set-st t)
     ;; Whether we have an intermediate point
     (setq i nil)
     ;; Prepare the syntax table:
-    (and set-st
-	 (if (not ender)		; m/blah/, s/x//, s/x/y/
-	     (modify-syntax-entry starter "$" st)
-	   (modify-syntax-entry starter (concat "(" (list ender)) st)
-	   (modify-syntax-entry ender  (concat ")" (list starter)) st)))
+    (if (not ender)		; m/blah/, s/x//, s/x/y/
+	(modify-syntax-entry starter "$" st)
+      (modify-syntax-entry starter (concat "(" (list ender)) st)
+      (modify-syntax-entry ender  (concat ")" (list starter)) st))
     (condition-case bb
 	(progn
 	  ;; We use `$' syntax class to find matching stuff, but $$
@@ -3053,7 +3529,7 @@
 		(modify-syntax-entry starter (if (eq starter ?\\) "\\" ".") st)
 		(if ender (modify-syntax-entry ender "." st))
 		(setq set-st nil)
-		(setq ender (cperl-forward-re lim end nil t st-l err-l
+		(setq ender (cperl-forward-re lim end nil st-l err-l
 					      argument starter ender)
 		 ender (nth 2 ender)))))
       (error (goto-char lim)
@@ -3078,6 +3554,33 @@
     ;; go-forward: has 2 args, and the second part is empty
     (list i i2 ender starter go-forward)))
 
+(defun cperl-forward-group-in-re (&optional st-l)
+  "Find the end of a group in a REx.
+Return the error message (if any).  Does not work if delimiter is `)'.
+Works before syntax recognition is done."
+  ;; Works *before* syntax recognition is done
+  (or st-l (setq st-l (list nil)))	; Avoid overwriting '()
+  (let (st b reset-st)
+    (condition-case b
+	(progn
+	  (setq st (cperl-cached-syntax-table st-l))
+	  (modify-syntax-entry ?\( "()" st)
+	  (modify-syntax-entry ?\) ")(" st)
+	  (setq reset-st (syntax-table))
+	  (set-syntax-table st)
+	  (forward-sexp 1))
+      (error (message
+	      "cperl-forward-group-in-re: error %s" b)))
+    ;; now restore the initial state
+    (if st
+	(progn
+	  (modify-syntax-entry ?\( "." st)
+	  (modify-syntax-entry ?\) "." st)))
+    (if reset-st
+	(set-syntax-table reset-st))
+    b))
+
+
 (defvar font-lock-string-face)
 ;;(defvar font-lock-reference-face)
 (defvar font-lock-constant-face)
@@ -3103,13 +3606,24 @@
 ;;	d) 'Q'uoted string:
 ;;		part between markers inclusive is marked `syntax-type' ==> `string'
 ;;		part between `q' and the first marker is marked `syntax-type' ==> `prestring'
+;;		second part of s///e is marked `syntax-type' ==> `multiline'
+;;	e) Attributes of subroutines: `attrib-group' ==> t
+;;		(or 0 if declaration); up to `{' or ';': `syntax-type' => `sub-decl'.
+;;      f) Multiline my/our declaration lists etc: `syntax-type' => `multiline'
+
+;;; In addition, some parts of RExes may be marked as `REx-interpolated'
+;;; (value: 0 in //o, 1 if "interpolated variable" is whole-REx, t otherwise).
 
 (defun cperl-unwind-to-safe (before &optional end)
   ;; if BEFORE, go to the previous start-of-line on each step of unwinding
   (let ((pos (point)) opos)
-    (setq opos pos)
-    (while (and pos (get-text-property pos 'syntax-type))
-      (setq pos (previous-single-property-change pos 'syntax-type))
+    (while (and pos (progn
+		      (beginning-of-line)
+		      (get-text-property (setq pos (point)) 'syntax-type)))
+      (setq opos pos
+	    pos (cperl-beginning-of-property pos 'syntax-type))
+      (if (eq pos (point-min))
+	  (setq pos nil))
       (if pos
 	  (if before
 	      (progn
@@ -3126,32 +3640,117 @@
     (setq pos (point))
     (if end
 	;; Do the same for end, going small steps
-	(progn
+	(save-excursion
 	  (while (and end (get-text-property end 'syntax-type))
 	    (setq pos end
-		  end (next-single-property-change end 'syntax-type)))
+		  end (next-single-property-change end 'syntax-type nil (point-max)))
+	    (if end (progn (goto-char end)
+			   (or (bolp) (forward-line 1))
+			   (setq end (point)))))
 	  (or end pos)))))
 
+;;; These are needed for byte-compile (at least with v19)
 (defvar cperl-nonoverridable-face)
+(defvar font-lock-variable-name-face)
 (defvar font-lock-function-name-face)
+(defvar font-lock-keyword-face)
+(defvar font-lock-builtin-face)
+(defvar font-lock-type-face)
 (defvar font-lock-comment-face)
-
-(defun cperl-find-pods-heres (&optional min max non-inter end ignore-max)
+(defvar font-lock-warning-face)
+
+(defun cperl-find-sub-attrs (&optional st-l b-fname e-fname pos)
+  "Syntaxically mark (and fontify) attributes of a subroutine.
+Should be called with the point before leading colon of an attribute."
+  ;; Works *before* syntax recognition is done
+  (or st-l (setq st-l (list nil)))	; Avoid overwriting '()
+  (let (st b p reset-st after-first (start (point)) start1 end1)
+    (condition-case b
+	(while (looking-at
+		(concat
+		 "\\("			; 1=optional? colon
+		   ":" cperl-maybe-white-and-comment-rex ; 2=whitespace/comment?
+		 "\\)"
+		 (if after-first "?" "")
+		 ;; No space between name and paren allowed...
+		 "\\(\\sw+\\)"		; 3=name
+		 "\\((\\)?"))		; 4=optional paren
+	  (and (match-beginning 1)
+	       (cperl-postpone-fontification
+		(match-beginning 0) (cperl-1+ (match-beginning 0))
+		'face font-lock-constant-face))
+	  (setq start1 (match-beginning 3) end1 (match-end 3))
+	  (cperl-postpone-fontification start1 end1
+					'face font-lock-constant-face)
+	  (goto-char end1)		; end or before `('
+	  (if (match-end 4)		; Have attribute arguments...
+	      (progn
+		(if st nil
+		  (setq st (cperl-cached-syntax-table st-l))
+		  (modify-syntax-entry ?\( "()" st)
+		  (modify-syntax-entry ?\) ")(" st))
+		(setq reset-st (syntax-table) p (point))
+		(set-syntax-table st)
+		(forward-sexp 1)
+		(set-syntax-table reset-st)
+		(setq reset-st nil)
+		(cperl-commentify p (point) t))) ; mark as string
+	  (forward-comment (buffer-size))
+	  (setq after-first t))
+      (error (message
+	      "L%d: attribute `%s': %s"
+	      (count-lines (point-min) (point))
+	      (and start1 end1 (buffer-substring start1 end1)) b)
+	     (setq start nil)))
+    (and start
+	 (progn
+	   (put-text-property start (point)
+			      'attrib-group (if (looking-at "{") t 0))
+	   (and pos
+		(< 1 (count-lines (+ 3 pos) (point))) ; end of `sub'
+		;; Apparently, we do not need `multiline': faces added now
+		(put-text-property (+ 3 pos) (cperl-1+ (point))
+				   'syntax-type 'sub-decl))
+	   (and b-fname			; Fontify here: the following condition
+		(cperl-postpone-fontification ; is too hard to determine by
+		 b-fname e-fname 'face ; a REx, so do it here
+		(if (looking-at "{")
+		    font-lock-function-name-face
+		  font-lock-variable-name-face)))))
+    ;; now restore the initial state
+    (if st
+	(progn
+	  (modify-syntax-entry ?\( "." st)
+	  (modify-syntax-entry ?\) "." st)))
+    (if reset-st
+	(set-syntax-table reset-st))))
+
+(defsubst cperl-look-at-leading-count (is-x-REx e)
+  (if (re-search-forward (concat "\\=" (if is-x-REx "[ \t\n]*" "") "[{?+*]")
+			 (1- e) t)	; return nil on failure, no moving
+      (if (eq ?\{ (preceding-char)) nil
+	(cperl-postpone-fontification
+	 (1- (point)) (point)
+	 'face font-lock-warning-face))))
+
+;;; Debugging this may require (setq max-specpdl-size 2000)...
+(defun cperl-find-pods-heres (&optional min max non-inter end ignore-max end-of-here-doc)
   "Scans the buffer for hard-to-parse Perl constructions.
 If `cperl-pod-here-fontify' is not-nil after evaluation, will fontify
 the sections using `cperl-pod-head-face', `cperl-pod-face',
 `cperl-here-face'."
   (interactive)
-  (or min (setq min (point-min)
+ (or min (setq min (point-min)
 		cperl-syntax-state nil
 		cperl-syntax-done-to min))
   (or max (setq max (point-max)))
   (let* ((cperl-pod-here-fontify (eval cperl-pod-here-fontify)) go tmpend
 	 face head-face here-face b e bb tag qtag b1 e1 argument i c tail tb
-	 is-REx is-x-REx REx-comment-start REx-comment-end was-comment i2
+	 is-REx is-x-REx REx-subgr-start REx-subgr-end was-subgr i2 hairy-RE
 	 (case-fold-search nil) (inhibit-read-only t) (buffer-undo-list t)
-	 (modified (buffer-modified-p))
+	 (modified (buffer-modified-p)) overshoot is-o-REx
 	 (after-change-functions nil)
+	 (cperl-font-locking t)
 	 (use-syntax-state (and cperl-syntax-state
 				(>= min (car cperl-syntax-state))))
 	 (state-point (if use-syntax-state
@@ -3162,33 +3761,62 @@
 	 ;; (st-l '(nil)) (err-l '(nil)) ; Would overwrite - propagates from a function call to a function call!
 	 (st-l (list nil)) (err-l (list nil))
 	 ;; Somehow font-lock may be not loaded yet...
+	 ;; (e.g., when building TAGS via command-line call)
 	 (font-lock-string-face (if (boundp 'font-lock-string-face)
 				    font-lock-string-face
 				  'font-lock-string-face))
-	 (font-lock-constant-face (if (boundp 'font-lock-constant-face)
+	 (my-cperl-delimiters-face (if (boundp 'font-lock-constant-face)
 				      font-lock-constant-face
 				    'font-lock-constant-face))
-	 (font-lock-function-name-face
+	 (my-cperl-REx-spec-char-face	; [] ^.$ and wrapper-of ({})
 	  (if (boundp 'font-lock-function-name-face)
 	      font-lock-function-name-face
 	    'font-lock-function-name-face))
+	 (font-lock-variable-name-face	; interpolated vars and ({})-code
+	  (if (boundp 'font-lock-variable-name-face)
+	      font-lock-variable-name-face
+	    'font-lock-variable-name-face))
+	 (font-lock-function-name-face	; used in `cperl-find-sub-attrs'
+	  (if (boundp 'font-lock-function-name-face)
+	      font-lock-function-name-face
+	    'font-lock-function-name-face))
+	 (font-lock-constant-face	; used in `cperl-find-sub-attrs'
+	  (if (boundp 'font-lock-constant-face)
+	      font-lock-constant-face
+	    'font-lock-constant-face))
+	 (my-cperl-REx-0length-face ; 0-length, (?:)etc, non-literal \
+	  (if (boundp 'font-lock-builtin-face)
+	      font-lock-builtin-face
+	    'font-lock-builtin-face))
 	 (font-lock-comment-face
 	  (if (boundp 'font-lock-comment-face)
 	      font-lock-comment-face
 	    'font-lock-comment-face))
-	 (cperl-nonoverridable-face
+	 (font-lock-warning-face
+	  (if (boundp 'font-lock-warning-face)
+	      font-lock-warning-face
+	    'font-lock-warning-face))
+	 (my-cperl-REx-ctl-face		; (|)
+	  (if (boundp 'font-lock-keyword-face)
+	      font-lock-keyword-face
+	    'font-lock-keyword-face))
+	 (my-cperl-REx-modifiers-face	; //gims
 	  (if (boundp 'cperl-nonoverridable-face)
 	      cperl-nonoverridable-face
-	    'cperl-nonoverridable))
+	    'cperl-nonoverridable-face))
+	 (my-cperl-REx-length1-face	; length=1 escaped chars, POSIX classes
+	  (if (boundp 'font-lock-type-face)
+	      font-lock-type-face
+	    'font-lock-type-face))
 	 (stop-point (if ignore-max
 			 (point-max)
 		       max))
 	 (search
 	  (concat
-	   "\\(\\`\n?\\|^\n\\)="
+	   "\\(\\`\n?\\|^\n\\)="	; POD
 	   "\\|"
 	   ;; One extra () before this:
-	   "<<"
+	   "<<"				; HERE-DOC
 	   "\\("			; 1 + 1
 	   ;; First variant "BLAH" or just ``.
 	   "[ \t]*"			; Yes, whitespace is allowed!
@@ -3204,36 +3832,44 @@
 	   "\\)"
 	   "\\|"
 	   ;; 1+6 extra () before this:
-	   "^[ \t]*\\(format\\)[ \t]*\\([a-zA-Z0-9_]+\\)?[ \t]*=[ \t]*$"
+	   "^[ \t]*\\(format\\)[ \t]*\\([a-zA-Z0-9_]+\\)?[ \t]*=[ \t]*$" ;FRMAT
 	   (if cperl-use-syntax-table-text-property
 	       (concat
 		"\\|"
 		;; 1+6+2=9 extra () before this:
-		"\\<\\(q[wxqr]?\\|[msy]\\|tr\\)\\>"
+		"\\<\\(q[wxqr]?\\|[msy]\\|tr\\)\\>" ; QUOTED CONSTRUCT
 		"\\|"
 		;; 1+6+2+1=10 extra () before this:
 		"\\([?/<]\\)"	; /blah/ or ?blah? or <file*glob>
 		"\\|"
-		;; 1+6+2+1+1=11 extra () before this:
-		"\\<sub\\>[ \t]*\\([a-zA-Z_:'0-9]+[ \t]*\\)?\\(([^()]*)\\)"
-		"\\|"
-		;; 1+6+2+1+1+2=13 extra () before this:
-		"\\$\\(['{]\\)"
+		;; 1+6+2+1+1=11 extra () before this
+		"\\<sub\\>"		;  sub with proto/attr
+		"\\("
+		   cperl-white-and-comment-rex
+		   "\\(::[a-zA-Z_:'0-9]*\\|[a-zA-Z_'][a-zA-Z_:'0-9]*\\)\\)?" ; name
+		"\\("
+		   cperl-maybe-white-and-comment-rex
+		   "\\(([^()]*)\\|:[^:]\\)\\)" ; prototype or attribute start
 		"\\|"
-		;; 1+6+2+1+1+2+1=14 extra () before this:
-		"\\(\\<sub[ \t\n\f]+\\|[&*$@%]\\)[a-zA-Z0-9_]*'"
-		;; 1+6+2+1+1+2+1+1=15 extra () before this:
+		;; 1+6+2+1+1+6=17 extra () before this:
+		"\\$\\(['{]\\)"		; $' or ${foo}
 		"\\|"
-		"__\\(END\\|DATA\\)__"
-		;; 1+6+2+1+1+2+1+1+1=16 extra () before this:
+		;; 1+6+2+1+1+6+1=18 extra () before this (old pack'var syntax;
+		;; we do not support intervening comments...):
+		"\\(\\<sub[ \t\n\f]+\\|[&*$@%]\\)[a-zA-Z0-9_]*'"
+		;; 1+6+2+1+1+6+1+1=19 extra () before this:
 		"\\|"
-		"\\\\\\(['`\"($]\\)")
+		"__\\(END\\|DATA\\)__"	; __END__ or __DATA__
+		;; 1+6+2+1+1+6+1+1+1=20 extra () before this:
+		"\\|"
+		"\\\\\\(['`\"($]\\)")	; BACKWACKED something-hairy
 	     ""))))
     (unwind-protect
 	(progn
 	  (save-excursion
 	    (or non-inter
 		(message "Scanning for \"hard\" Perl constructions..."))
+	    ;;(message "find: %s --> %s" min max)
 	    (and cperl-pod-here-fontify
 		 ;; We had evals here, do not know why...
 		 (setq face cperl-pod-face
@@ -3241,16 +3877,22 @@
 		       here-face cperl-here-face))
 	    (remove-text-properties min max
 				    '(syntax-type t in-pod t syntax-table t
+						  attrib-group t
+						  REx-interpolated t
 						  cperl-postpone t
 						  syntax-subtype t
 						  rear-nonsticky t
+						  front-sticky t
 						  here-doc-group t
 						  first-format-line t
+						  REx-part2 t
 						  indentable t))
 	    ;; Need to remove face as well...
 	    (goto-char min)
 	    (and (eq system-type 'emx)
-		 (looking-at "extproc[ \t]") ; Analogue of #!
+		 (eq (point) 1)
+		 (let ((case-fold-search t))
+		   (looking-at "extproc[ \t]")) ; Analogue of #!
 		 (cperl-commentify min
 				   (save-excursion (end-of-line) (point))
 				   nil))
@@ -3258,11 +3900,38 @@
 		    (< (point) max)
 		    (re-search-forward search max t))
 	      (setq tmpend nil)		; Valid for most cases
+	      (setq b (match-beginning 0)
+		    state (save-excursion (parse-partial-sexp
+					   state-point b nil nil state))
+		    state-point b)
 	      (cond
+	       ;; 1+6+2+1+1+6=17 extra () before this:
+	       ;;    "\\$\\(['{]\\)"
+	       ((match-beginning 18) ; $' or ${foo}
+		(if (eq (preceding-char) ?\') ; $'
+		    (progn
+		      (setq b (1- (point))
+			    state (parse-partial-sexp
+				   state-point (1- b) nil nil state)
+			    state-point (1- b))
+		      (if (nth 3 state)	; in string
+			  (cperl-modify-syntax-type (1- b) cperl-st-punct))
+		      (goto-char (1+ b)))
+		  ;; else: ${
+		  (setq bb (match-beginning 0))
+		  (cperl-modify-syntax-type bb cperl-st-punct)))
+	       ;; No processing in strings/comments beyond this point:
+	       ((or (nth 3 state) (nth 4 state))
+		t)			; Do nothing in comment/string
 	       ((match-beginning 1)	; POD section
 		;;  "\\(\\`\n?\\|^\n\\)="
-		(if (looking-at "cut\\>")
-		    (if ignore-max
+		(setq b (match-beginning 0)
+		      state (parse-partial-sexp
+			     state-point b nil nil state)
+		      state-point b)
+		(if (or (nth 3 state) (nth 4 state)
+			(looking-at "cut\\>"))
+		    (if (or (nth 3 state) (nth 4 state) ignore-max)
 			nil		; Doing a chunk only
 		      (message "=cut is not preceded by a POD section")
 		      (or (car err-l) (setcar err-l (point))))
@@ -3288,11 +3957,15 @@
 		       (progn
 			 (remove-text-properties
 			  max e '(syntax-type t in-pod t syntax-table t
+					      attrib-group t
+					      REx-interpolated t
 					      cperl-postpone t
 					      syntax-subtype t
 					      here-doc-group t
 					      rear-nonsticky t
+					      front-sticky t
 					      first-format-line t
+					      REx-part2 t
 					      indentable t))
 			 (setq tmpend tb)))
 		  (put-text-property b e 'in-pod t)
@@ -3335,7 +4008,8 @@
 		  (or (eq e (point-max))
 		      (forward-char -1)))) ; Prepare for immediate POD start.
 	       ;; Here document
-	       ;; We do only one here-per-line
+	       ;; We can do many here-per-line;
+	       ;; but multiline quote on the same line as <<HERE confuses us...
                ;; ;; One extra () before this:
 	       ;;"<<"
 	       ;;  "\\("			; 1 + 1
@@ -3352,21 +4026,42 @@
 	       ;;    "\\(\\)"		; To preserve count of pars :-( 6 + 1
 	       ;;  "\\)"
 	       ((match-beginning 2)	; 1 + 1
-		;; Abort in comment:
-		(setq b (point))
-		(setq state (parse-partial-sexp state-point b nil nil state)
-		      state-point b
+		(setq b (point)
 		      tb (match-beginning 0)
-		      i (or (nth 3 state) (nth 4 state)))
-		(if i
-		    (setq c t)
-		  (setq c (and
-			   (match-beginning 5)
-			   (not (match-beginning 6)) ; Empty
-			   (looking-at
-			    "[ \t]*[=0-9$@%&(]"))))
+		      c (and		; not HERE-DOC
+			 (match-beginning 5)
+			 (save-match-data
+			   (or (looking-at "[ \t]*(") ; << function_call()
+			       (save-excursion ; 1 << func_name, or $foo << 10
+				 (condition-case nil
+				     (progn
+				       (goto-char tb)
+	       ;;; XXX What to do: foo <<bar ???
+	       ;;; XXX Need to support print {a} <<B ???
+				       (forward-sexp -1)
+				       (save-match-data	
+					; $foo << b; $f .= <<B;
+					; ($f+1) << b; a($f) . <<B;
+					; foo 1, <<B; $x{a} <<b;
+					 (cond
+					  ((looking-at "[0-9$({]")
+					   (forward-sexp 1)
+					   (and
+					    (looking-at "[ \t]*<<")
+					    (condition-case nil
+						;; print $foo <<EOF
+						(progn
+						  (forward-sexp -2)
+						  (not
+						   (looking-at "\\(printf?\\|system\\|exec\\|sort\\)\\>")))
+						(error t)))))))
+				   (error nil))) ; func(<<EOF)
+			       (and (not (match-beginning 6)) ; Empty
+				    (looking-at
+				     "[ \t]*[=0-9$@%&(]"))))))
 		(if c			; Not here-doc
 		    nil			; Skip it.
+		  (setq c (match-end 2)) ; 1 + 1
 		  (if (match-beginning 5) ;4 + 1
 		      (setq b1 (match-beginning 5) ; 4 + 1
 			    e1 (match-end 5)) ; 4 + 1
@@ -3376,15 +4071,20 @@
 			qtag (regexp-quote tag))
 		  (cond (cperl-pod-here-fontify
 			 ;; Highlight the starting delimiter
-			 (cperl-postpone-fontification b1 e1 'face font-lock-constant-face)
+			 (cperl-postpone-fontification 
+			  b1 e1 'face my-cperl-delimiters-face)
 			 (cperl-put-do-not-fontify b1 e1 t)))
 		  (forward-line)
+		  (setq i (point))
+		  (if end-of-here-doc
+		      (goto-char end-of-here-doc))
 		  (setq b (point))
 		  ;; We do not search to max, since we may be called from
 		  ;; some hook of fontification, and max is random
 		  (or (and (re-search-forward (concat "^" qtag "$")
 					      stop-point 'toend)
-			   (eq (following-char) ?\n))
+			   ;;;(eq (following-char) ?\n) ; XXXX WHY???
+			   )
 		    (progn		; Pretend we matched at the end
 		      (goto-char (point-max))
 		      (re-search-forward "\\'")
@@ -3393,8 +4093,9 @@
 		  (if cperl-pod-here-fontify
 		      (progn
 			;; Highlight the ending delimiter
-			(cperl-postpone-fontification (match-beginning 0) (match-end 0)
-						      'face font-lock-constant-face)
+			(cperl-postpone-fontification
+			 (match-beginning 0) (match-end 0)
+			 'face my-cperl-delimiters-face)
 			(cperl-put-do-not-fontify b (match-end 0) t)
 			;; Highlight the HERE-DOC
 			(cperl-postpone-fontification b (match-beginning 0)
@@ -3404,10 +4105,21 @@
 				     'syntax-type 'here-doc)
 		  (put-text-property (match-beginning 0) e1
 				     'syntax-type 'here-doc-delim)
-		  (put-text-property b e1
-				     'here-doc-group t)
+		  (put-text-property b e1 'here-doc-group t)
+		  ;; This makes insertion at the start of HERE-DOC update
+		  ;; the whole construct:
+		  (put-text-property b (cperl-1+ b) 'front-sticky '(syntax-type))
 		  (cperl-commentify b e1 nil)
 		  (cperl-put-do-not-fontify b (match-end 0) t)
+		  ;; Cache the syntax info...
+		  (setq cperl-syntax-state (cons state-point state))
+		  ;; ... and process the rest of the line...
+		  (setq overshoot
+			(elt		; non-inter ignore-max
+			 (cperl-find-pods-heres c i t end t e1) 1))
+		  (if (and overshoot (> overshoot (point)))
+		      (goto-char overshoot)
+		    (setq overshoot e1))
 		  (if (> e1 max)
 		      (setq tmpend tb))))
 	       ;; format
@@ -3462,7 +4174,7 @@
 		(if (> (point) max)
 		    (setq tmpend tb))
 		(put-text-property b (point) 'syntax-type 'format))
-	       ;; Regexp:
+	       ;; qq-like String or Regexp:
 	       ((or (match-beginning 10) (match-beginning 11))
 		;; 1+6+2=9 extra () before this:
 		;; "\\<\\(q[wxqr]?\\|[msy]\\|tr\\)\\>"
@@ -3471,10 +4183,10 @@
 		(setq b1 (if (match-beginning 10) 10 11)
 		      argument (buffer-substring
 				(match-beginning b1) (match-end b1))
-		      b (point)
+		      b (point)		; end of qq etc
 		      i b
 		      c (char-after (match-beginning b1))
-		      bb (char-after (1- (match-beginning b1)))	; tmp holder
+		      bb (char-after (1- (match-beginning b1))) ; tmp holder
 		      ;; bb == "Not a stringy"
 		      bb (if (eq b1 10) ; user variables/whatever
 			     (and (memq bb (append "$@%*#_:-&>" nil)) ; $#y)
@@ -3488,7 +4200,7 @@
 					      (- (match-beginning b1) 2))
 					     ?\-))
 					((eq bb ?\&)
-					 (not (eq (char-after	; &&m/blah/
+					 (not (eq (char-after ; &&m/blah/
 						   (- (match-beginning b1) 2))
 						  ?\&)))
 					(t t)))
@@ -3506,41 +4218,40 @@
 			(setq argument ""
 			      b1 nil
 			      bb	; Not a regexp?
-			      (progn
-				(not
-				 ;; What is below: regexp-p?
-				 (and
-				  (or (memq (preceding-char)
-					    (append (if (memq c '(?\? ?\<))
-							;; $a++ ? 1 : 2
-							"~{(=|&*!,;:"
-						      "~{(=|&+-*!,;:") nil))
-				      (and (eq (preceding-char) ?\})
-					   (cperl-after-block-p (point-min)))
-				      (and (eq (char-syntax (preceding-char)) ?w)
-					   (progn
-					     (forward-sexp -1)
+			      (not
+			       ;; What is below: regexp-p?
+			       (and
+				(or (memq (preceding-char)
+					  (append (if (memq c '(?\? ?\<))
+						      ;; $a++ ? 1 : 2
+						      "~{(=|&*!,;:["
+						    "~{(=|&+-*!,;:[") nil))
+				    (and (eq (preceding-char) ?\})
+					 (cperl-after-block-p (point-min)))
+				    (and (eq (char-syntax (preceding-char)) ?w)
+					 (progn
+					   (forward-sexp -1)
 ;; After these keywords `/' starts a RE.  One should add all the
 ;; functions/builtins which expect an argument, but ...
-					     (if (eq (preceding-char) ?-)
-						 ;; -d ?foo? is a RE
-						 (looking-at "[a-zA-Z]\\>")
-					       (and
-						(not (memq (preceding-char)
-							   '(?$ ?@ ?& ?%)))
-						(looking-at
-						 "\\(while\\|if\\|unless\\|until\\|and\\|or\\|not\\|xor\\|split\\|grep\\|map\\|print\\)\\>")))))
-				      (and (eq (preceding-char) ?.)
-					   (eq (char-after (- (point) 2)) ?.))
-				      (bobp))
-				  ;;  m|blah| ? foo : bar;
-				  (not
-				   (and (eq c ?\?)
-					cperl-use-syntax-table-text-property
-					(not (bobp))
-					(progn
-					  (forward-char -1)
-					  (looking-at "\\s|")))))))
+					   (if (eq (preceding-char) ?-)
+					       ;; -d ?foo? is a RE
+					       (looking-at "[a-zA-Z]\\>")
+					     (and
+					      (not (memq (preceding-char)
+							 '(?$ ?@ ?& ?%)))
+					      (looking-at
+					       "\\(while\\|if\\|unless\\|until\\|and\\|or\\|not\\|xor\\|split\\|grep\\|map\\|print\\)\\>")))))
+				    (and (eq (preceding-char) ?.)
+					 (eq (char-after (- (point) 2)) ?.))
+				    (bobp))
+				;;  m|blah| ? foo : bar;
+				(not
+				 (and (eq c ?\?)
+				      cperl-use-syntax-table-text-property
+				      (not (bobp))
+				      (progn
+					(forward-char -1)
+					(looking-at "\\s|"))))))
 			      b (1- b))
 		      ;; s y tr m
 		      ;; Check for $a -> y
@@ -3550,13 +4261,9 @@
 			       (eq (char-after (- go 2)) ?-))
 			  ;; Not a regexp
 			  (setq bb t))))
-		(or bb (setq state (parse-partial-sexp
-				    state-point b nil nil state)
-			     state-point b))
-		(setq bb (or bb (nth 3 state) (nth 4 state)))
-		(goto-char b)
 		(or bb
 		    (progn
+		      (goto-char b)
 		      (if (looking-at "[ \t\n\f]+\\(#[^\n]*\n[ \t\n\f]*\\)+")
 			  (goto-char (match-end 0))
 			(skip-chars-forward " \t\n\f"))
@@ -3593,6 +4300,8 @@
 				    (skip-chars-backward " \t\n\f")
 				    (memq (preceding-char)
 					  (append "$@%&*" nil))))
+			     (setq bb t))
+			    ((eobp)
 			     (setq bb t)))))
 		(if bb
 		    (goto-char i)
@@ -3605,15 +4314,16 @@
 		  ;; qtag means two-arg matcher, may be reset to
 		  ;;   2 or 3 later if some special quoting is needed.
 		  ;; e1 means matching-char matcher.
-		  (setq b (point)
+		  (setq b (point)	; before the first delimiter
 			;; has 2 args
 			i2 (string-match "^\\([sy]\\|tr\\)$" argument)
 			;; We do not search to max, since we may be called from
 			;; some hook of fontification, and max is random
 			i (cperl-forward-re stop-point end
 					    i2
-					    t st-l err-l argument)
-			;; Note that if `go', then it is considered as 1-arg
+					    st-l err-l argument)
+			;; If `go', then it is considered as 1-arg, `b1' is nil
+			;; as in s/foo//x; the point is before final "slash"
 			b1 (nth 1 i)	; start of the second part
 			tag (nth 2 i)	; ender-char, true if second part
 					; is with matching chars []
@@ -3625,13 +4335,18 @@
 				 (1- e1))
 			e (if i i e1)	; end of the first part
 			qtag nil	; need to preserve backslashitis
-			is-x-REx nil)	; REx has //x modifier
+			is-x-REx nil is-o-REx nil); REx has //x //o modifiers
+		  ;; If s{} (), then b/b1 are at "{", "(", e1/i after ")", "}"
 		  ;; Commenting \\ is dangerous, what about ( ?
 		  (and i tail
 		       (eq (char-after i) ?\\)
 		       (setq qtag t))
-		  (if (looking-at "\\sw*x") ; qr//x
-		      (setq is-x-REx t))
+		  (and (if go (looking-at ".\\sw*x")
+			 (looking-at "\\sw*x")) ; qr//x
+		       (setq is-x-REx t))
+		  (and (if go (looking-at ".\\sw*o")
+			 (looking-at "\\sw*o")) ; //o
+		       (setq is-o-REx t))
 		  (if (null i)
 		      ;; Considered as 1arg form
 		      (progn
@@ -3648,9 +4363,11 @@
 		    (cperl-commentify b i t)
 		    (if (looking-at "\\sw*e") ; s///e
 			(progn
+			  ;; Cache the syntax info...
+			  (setq cperl-syntax-state (cons state-point state))
 			  (and
 			   ;; silent:
-			   (cperl-find-pods-heres b1 (1- (point)) t end)
+			   (car (cperl-find-pods-heres b1 (1- (point)) t end))
 			   ;; Error
 			   (goto-char (1+ max)))
 			  (if (and tag (eq (preceding-char) ?\>))
@@ -3658,6 +4375,7 @@
 				(cperl-modify-syntax-type (1- (point)) cperl-st-ket)
 				(cperl-modify-syntax-type i cperl-st-bra)))
 			  (put-text-property b i 'syntax-type 'string)
+			  (put-text-property i (point) 'syntax-type 'multiline)
 			  (if is-x-REx
 			      (put-text-property b i 'indentable t)))
 		      (cperl-commentify b1 (point) t)
@@ -3673,7 +4391,7 @@
 			(forward-word 1) ; skip modifiers s///s
 			(if tail (cperl-commentify tail (point) t))
 			(cperl-postpone-fontification
-			 e1 (point) 'face 'cperl-nonoverridable)))
+			 e1 (point) 'face my-cperl-REx-modifiers-face)))
 		  ;; Check whether it is m// which means "previous match"
 		  ;; and highlight differently
 		  (setq is-REx
@@ -3691,7 +4409,7 @@
 				   (not (looking-at "split\\>")))
 			       (error t))))
 		      (cperl-postpone-fontification
-		       b e 'face font-lock-function-name-face)
+		       b e 'face font-lock-warning-face)
 		    (if (or i2		; Has 2 args
 			    (and cperl-fontify-m-as-s
 				 (or
@@ -3700,135 +4418,417 @@
 				       (not (eq ?\< (char-after b)))))))
 			(progn
 			  (cperl-postpone-fontification
-			   b (cperl-1+ b) 'face font-lock-constant-face)
+			   b (cperl-1+ b) 'face my-cperl-delimiters-face)
 			  (cperl-postpone-fontification
-			   (1- e) e 'face font-lock-constant-face)))
+			   (1- e) e 'face my-cperl-delimiters-face)))
 		    (if (and is-REx cperl-regexp-scan)
-			;; Process RExen better
+			;; Process RExen: embedded comments, charclasses and ]
+;;;/\3333\xFg\x{FFF}a\ppp\PPP\qqq\C\99f(?{  foo  })(??{  foo  })/;
+;;;/a\.b[^a[:ff:]b]x$ab->$[|$,$ab->[cd]->[ef]|$ab[xy].|^${a,b}{c,d}/;
+;;;/(?<=foo)(?<!bar)(x)(?:$ab|\$\/)$|\\\b\x888\776\[\:$/xxx;
+;;;m?(\?\?{b,a})? + m/(??{aa})(?(?=xx)aa|bb)(?#aac)/;
+;;;m$(^ab[c]\$)$ + m+(^ab[c]\$\+)+ + m](^ab[c\]$|.+)] + m)(^ab[c]$|.+\));
+;;;m^a[\^b]c^ + m.a[^b]\.c.;
 			(save-excursion
 			  (goto-char (1+ b))
+			  ;; First 
+			  (cperl-look-at-leading-count is-x-REx e)
+			  (setq hairy-RE
+				(concat
+				 (if is-x-REx
+				     (if (eq (char-after b) ?\#)
+					 "\\((\\?\\\\#\\)\\|\\(\\\\#\\)"
+				       "\\((\\?#\\)\\|\\(#\\)")
+				   ;; keep the same count: add a fake group
+				   (if (eq (char-after b) ?\#)
+				       "\\((\\?\\\\#\\)\\(\\)"
+				     "\\((\\?#\\)\\(\\)"))
+				 "\\|"
+				    "\\(\\[\\)" ; 3=[
+				 "\\|"
+				    "\\(]\\)" ; 4=]
+				 "\\|"
+				 ;; XXXX Will not be able to use it in s)))
+				 (if (eq (char-after b) ?\) )
+				     "\\())))\\)" ; Will never match
+				   (if (eq (char-after b) ?? )
+				       ;;"\\((\\\\\\?\\(\\\\\\?\\)?{\\)"
+				       "\\((\\\\\\?\\\\\\?{\\|()\\\\\\?{\\)"
+				     "\\((\\?\\??{\\)")) ; 5= (??{ (?{
+				 "\\|"	; 6= 0-length, 7: name, 8,9:code, 10:group
+				    "\\(" ;; XXXX 1-char variables, exc. |()\s
+				       "[$@]"
+				       "\\("
+				          "[_a-zA-Z:][_a-zA-Z0-9:]*"
+				       "\\|"
+				          "{[^{}]*}" ; only one-level allowed
+				       "\\|"
+				          "[^{(|) \t\r\n\f]"
+				       "\\)"
+				       "\\(" ;;8,9:code part of array/hash elt
+				          "\\(" "->" "\\)?"
+				          "\\[[^][]*\\]"
+					  "\\|"
+				          "{[^{}]*}"
+				       "\\)*"
+				    ;; XXXX: what if u is delim?
+				    "\\|"
+				       "[)^|$.*?+]"
+				    "\\|"
+				       "{[0-9]+}"
+				    "\\|"
+				       "{[0-9]+,[0-9]*}"
+				    "\\|"
+				       "\\\\[luLUEQbBAzZG]"
+				    "\\|"
+				       "(" ; Group opener
+				       "\\(" ; 10 group opener follower
+				          "\\?\\((\\?\\)" ; 11: in (?(?=C)A|B)
+				       "\\|"
+				          "\\?[:=!>?{]"	; "?" something
+				       "\\|"
+				          "\\?[-imsx]+[:)]" ; (?i) (?-s:.)
+				       "\\|"
+				          "\\?([0-9]+)"	; (?(1)foo|bar)
+				       "\\|"
+					  "\\?<[=!]"
+				       ;;;"\\|"
+				       ;;;   "\\?"
+				       "\\)?"
+				    "\\)"
+				 "\\|"
+				    "\\\\\\(.\\)" ; 12=\SYMBOL
+				 ))
 			  (while
-			      (and (< (point) e)
-				   (re-search-forward
-				    (if is-x-REx
-					(if (eq (char-after b) ?\#)
-					    "\\((\\?\\\\#\\)\\|\\(\\\\#\\)"
-					  "\\((\\?#\\)\\|\\(#\\)")
-				      (if (eq (char-after b) ?\#)
-					  "\\((\\?\\\\#\\)"
-					"\\((\\?#\\)"))
-				    (1- e) 'to-end))
+			      (and (< (point) (1- e))
+				   (re-search-forward hairy-RE (1- e) 'to-end))
 			    (goto-char (match-beginning 0))
-			    (setq REx-comment-start (point)
-				  was-comment t)
-			    (if (save-excursion
-				  (and
-				   ;; XXX not working if outside delimiter is #
-				   (eq (preceding-char) ?\\)
-				   (= (% (skip-chars-backward "$\\\\") 2) -1)))
-				;; Not a comment, avoid loop:
-				(progn (setq was-comment nil)
-				       (forward-char 1))
-			      (if (match-beginning 2)
+			    (setq REx-subgr-start (point)
+				  was-subgr (following-char))
+			    (cond
+			     ((match-beginning 6) ; 0-length builtins, groups
+			      (goto-char (match-end 0))
+			      (if (match-beginning 11)
+				  (goto-char (match-beginning 11)))
+			      (if (>= (point) e)
+				  (goto-char (1- e)))
+			      (cperl-postpone-fontification
+			       (match-beginning 0) (point)
+			       'face
+			       (cond
+				((eq was-subgr ?\) )
+				 (condition-case nil
+				     (save-excursion
+				       (forward-sexp -1)
+				       (if (> (point) b)
+					   (if (if (eq (char-after b) ?? )
+						   (looking-at "(\\\\\\?")
+						 (eq (char-after (1+ (point))) ?\?))
+					       my-cperl-REx-0length-face
+					     my-cperl-REx-ctl-face)
+					 font-lock-warning-face))
+				   (error font-lock-warning-face)))
+				((eq was-subgr ?\| )
+				 my-cperl-REx-ctl-face)
+				((eq was-subgr ?\$ )
+				 (if (> (point) (1+ REx-subgr-start))
+				     (progn
+				       (put-text-property
+					(match-beginning 0) (point)
+					'REx-interpolated
+					(if is-o-REx 0
+					    (if (and (eq (match-beginning 0)
+							 (1+ b))
+						     (eq (point)
+							 (1- e))) 1 t)))
+				       font-lock-variable-name-face)
+				   my-cperl-REx-spec-char-face))
+				((memq was-subgr (append "^." nil) )
+				 my-cperl-REx-spec-char-face)
+				((eq was-subgr ?\( )
+				 (if (not (match-beginning 10))
+				     my-cperl-REx-ctl-face
+				   my-cperl-REx-0length-face))
+				(t my-cperl-REx-0length-face)))
+			      (if (and (memq was-subgr (append "(|" nil))
+				       (not (string-match "(\\?[-imsx]+)"
+							  (match-string 0))))
+				  (cperl-look-at-leading-count is-x-REx e))
+			      (setq was-subgr nil)) ; We do stuff here
+			     ((match-beginning 12) ; \SYMBOL
+			      (forward-char 2)
+			      (if (>= (point) e)
+				  (goto-char (1- e))
+				;; How many chars to not highlight:
+				;; 0-len special-alnums in other branch =>
+				;; Generic:  \non-alnum (1), \alnum (1+face)
+				;; Is-delim: \non-alnum (1/spec-2) alnum-1 (=what hai)
+				(setq REx-subgr-start (point)
+				      qtag (preceding-char))
+				(cperl-postpone-fontification
+				 (- (point) 2) (- (point) 1) 'face
+				 (if (memq qtag
+					   (append "ghijkmoqvFHIJKMORTVY" nil))
+				     font-lock-warning-face
+				   my-cperl-REx-0length-face))
+				(if (and (eq (char-after b) qtag)
+					 (memq qtag (append ".])^$|*?+" nil)))
+				    (progn
+				      (if (and cperl-use-syntax-table-text-property
+					       (eq qtag ?\) ))
+					  (put-text-property
+					   REx-subgr-start (1- (point))
+					   'syntax-table cperl-st-punct))
+				      (cperl-postpone-fontification
+				       (1- (point)) (point) 'face
+					; \] can't appear below
+				       (if (memq qtag (append ".]^$" nil))
+					   'my-cperl-REx-spec-char-face
+					 (if (memq qtag (append "*?+" nil))
+					     'my-cperl-REx-0length-face
+					   'my-cperl-REx-ctl-face))))) ; )|
+				;; Test for arguments:
+				(cond
+				 ;; This is not pretty: the 5.8.7 logic:
+				 ;; \0numx  -> octal (up to total 3 dig)
+				 ;; \DIGIT  -> backref unless \0
+				 ;; \DIGITs -> backref if legal
+				 ;;	     otherwise up to 3 -> octal
+				 ;; Do not try to distinguish, we guess
+				 ((or (and (memq qtag (append "01234567" nil))
+					   (re-search-forward
+					    "\\=[01234567]?[01234567]?"
+					    (1- e) 'to-end))
+				      (and (memq qtag (append "89" nil))
+					   (re-search-forward 
+					    "\\=[0123456789]*" (1- e) 'to-end))
+				      (and (eq qtag ?x)
+					   (re-search-forward
+					    "\\=[0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}"
+					    (1- e) 'to-end))
+				      (and (memq qtag (append "pPN" nil))
+					   (re-search-forward "\\={[^{}]+}\\|."
+					    (1- e) 'to-end))
+				      (eq (char-syntax qtag) ?w))
+				  (cperl-postpone-fontification
+				   (1- REx-subgr-start) (point)
+				   'face my-cperl-REx-length1-face))))
+			      (setq was-subgr nil)) ; We do stuff here
+			     ((match-beginning 3) ; [charclass]
+			      (forward-char 1)
+			      (if (eq (char-after b) ?^ )
+				  (and (eq (following-char) ?\\ )
+				       (eq (char-after (cperl-1+ (point)))
+					   ?^ )
+				       (forward-char 2))
+				(and (eq (following-char) ?^ )
+				     (forward-char 1)))
+			      (setq argument b ; continue?
+				    tag nil ; list of POSIX classes
+				    qtag (point))
+			      (if (eq (char-after b) ?\] )
+				  (and (eq (following-char) ?\\ )
+				       (eq (char-after (cperl-1+ (point)))
+					   ?\] )
+				       (setq qtag (1+ qtag))
+				       (forward-char 2))
+				(and (eq (following-char) ?\] )
+				     (forward-char 1)))
+			      ;; Apparently, I can't put \] into a charclass
+			      ;; in m]]: m][\\\]\]] produces [\\]]
+;;; POSIX?  [:word:] [:^word:] only inside []
+;;;				       "\\=\\(\\\\.\\|[^][\\\\]\\|\\[:\\^?\sw+:]\\|\\[[^:]\\)*]")
+			      (while 
+				  (and argument
+				       (re-search-forward
+					(if (eq (char-after b) ?\] )
+					    "\\=\\(\\\\[^]]\\|[^]\\\\]\\)*\\\\]"
+					  "\\=\\(\\\\.\\|[^]\\\\]\\)*]")
+					(1- e) 'toend))
+				;; Is this ] an end of POSIX class?
+				(if (save-excursion
+				      (and
+				       (search-backward "[" argument t)
+				       (< REx-subgr-start (point))
+				       (not
+					(and ; Should work with delim = \
+					 (eq (preceding-char) ?\\ )
+					 (= (% (skip-chars-backward
+						"\\\\") 2) 0)))
+				       (looking-at
+					(cond
+					 ((eq (char-after b) ?\] )
+					  "\\\\*\\[:\\^?\\sw+:\\\\\\]")
+					 ((eq (char-after b) ?\: )
+					  "\\\\*\\[\\\\:\\^?\\sw+\\\\:]")
+					 ((eq (char-after b) ?^ )
+					  "\\\\*\\[:\\(\\\\\\^\\)?\\sw+:\]")
+					 ((eq (char-syntax (char-after b))
+					      ?w)
+					  (concat
+					   "\\\\*\\[:\\(\\\\\\^\\)?\\(\\\\"
+					   (char-to-string (char-after b))
+					   "\\|\\sw\\)+:\]"))
+					 (t "\\\\*\\[:\\^?\\sw*:]")))
+				       (setq argument (point))))
+				    (setq tag (cons (cons argument (point))
+						    tag)
+					  argument (point)) ; continue
+				  (setq argument nil)))
+			      (and argument
+				   (message "Couldn't find end of charclass in a REx, pos=%s"
+					    REx-subgr-start))
+			      (if (and cperl-use-syntax-table-text-property
+				       (> (- (point) 2) REx-subgr-start))
+				  (put-text-property
+				   (1+ REx-subgr-start) (1- (point))
+				   'syntax-table cperl-st-punct))
+			      (cperl-postpone-fontification
+			       REx-subgr-start qtag
+			       'face my-cperl-REx-spec-char-face)
+			      (cperl-postpone-fontification
+			       (1- (point)) (point) 'face
+			       my-cperl-REx-spec-char-face)
+			      (if (eq (char-after b) ?\] )
+				  (cperl-postpone-fontification
+				   (- (point) 2) (1- (point))
+				   'face my-cperl-REx-0length-face))
+			      (while tag
+				(cperl-postpone-fontification
+				 (car (car tag)) (cdr (car tag))
+				 'face my-cperl-REx-length1-face)
+				(setq tag (cdr tag)))
+			      (setq was-subgr nil)) ; did facing already
+			     ;; Now rare stuff:
+			     ((and (match-beginning 2) ; #-comment
+				   (/= (match-beginning 2) (match-end 2)))
+			      (beginning-of-line 2)
+			      (if (> (point) e)
+				  (goto-char (1- e))))
+			     ((match-beginning 4) ; character "]"
+			      (setq was-subgr nil) ; We do stuff here
+			      (goto-char (match-end 0))
+			      (if cperl-use-syntax-table-text-property
+				  (put-text-property
+				   (1- (point)) (point)
+				   'syntax-table cperl-st-punct))
+			      (cperl-postpone-fontification
+			       (1- (point)) (point)
+			       'face font-lock-warning-face))
+			     ((match-beginning 5) ; before (?{}) (??{})
+			      (setq tag (match-end 0))
+			      (if (or (setq qtag
+					    (cperl-forward-group-in-re st-l))
+				      (and (>= (point) e)
+					   (setq qtag "no matching `)' found"))
+				      (and (not (eq (char-after (- (point) 2))
+						    ?\} ))
+					   (setq qtag "Can't find })")))
 				  (progn
-				    (beginning-of-line 2)
-				    (if (> (point) e)
-					(goto-char (1- e))))
-				;; Works also if the outside delimiters are ().
-				(or (search-forward ")" (1- e) 'toend)
-				    (message
-				     "Couldn't find end of (?#...)-comment in a REx, pos=%s"
-				     REx-comment-start))))
+				    (goto-char (1- e))
+				    (message qtag))
+				(cperl-postpone-fontification
+				 (1- tag) (1- (point))
+				 'face font-lock-variable-name-face)
+				(cperl-postpone-fontification
+				 REx-subgr-start (1- tag)
+				 'face my-cperl-REx-spec-char-face)
+				(cperl-postpone-fontification
+				 (1- (point)) (point)
+				 'face my-cperl-REx-spec-char-face)
+				(if cperl-use-syntax-table-text-property
+				    (progn
+				      (put-text-property
+				       (- (point) 2) (1- (point))
+				       'syntax-table cperl-st-cfence)
+				      (put-text-property
+				       (+ REx-subgr-start 2)
+				       (+ REx-subgr-start 3)
+				       'syntax-table cperl-st-cfence))))
+			      (setq was-subgr nil))
+			     (t		; (?#)-comment
+			      ;; Inside "(" and "\" arn't special in any way
+			      ;; Works also if the outside delimiters are ().
+			      (or;;(if (eq (char-after b) ?\) )
+			       ;;(re-search-forward
+			       ;; "[^\\\\]\\(\\\\\\\\\\)*\\\\)"
+			       ;; (1- e) 'toend)
+			       (search-forward ")" (1- e) 'toend)
+			       ;;)
+			       (message
+				"Couldn't find end of (?#...)-comment in a REx, pos=%s"
+				REx-subgr-start))))
 			    (if (>= (point) e)
 				(goto-char (1- e)))
-			    (if was-comment
-				(progn
-				  (setq REx-comment-end (point))
-				  (cperl-commentify
-				   REx-comment-start REx-comment-end nil)
-				  (cperl-postpone-fontification
-				   REx-comment-start REx-comment-end
-				   'face font-lock-comment-face))))))
+			    (cond
+			     (was-subgr
+			      (setq REx-subgr-end (point))
+			      (cperl-commentify
+			       REx-subgr-start REx-subgr-end nil)
+			      (cperl-postpone-fontification
+			       REx-subgr-start REx-subgr-end
+			       'face font-lock-comment-face))))))
 		    (if (and is-REx is-x-REx)
 			(put-text-property (1+ b) (1- e)
 					   'syntax-subtype 'x-REx)))
 		  (if i2
 		      (progn
 			(cperl-postpone-fontification
-			 (1- e1) e1 'face font-lock-constant-face)
+			 (1- e1) e1 'face my-cperl-delimiters-face)
 			(if (assoc (char-after b) cperl-starters)
-			    (cperl-postpone-fontification
-			     b1 (1+ b1) 'face font-lock-constant-face))))
+			    (progn
+			      (cperl-postpone-fontification
+			       b1 (1+ b1) 'face my-cperl-delimiters-face)
+			      (put-text-property b1 (1+ b1)
+					   'REx-part2 t)))))
 		  (if (> (point) max)
 		      (setq tmpend tb))))
-	       ((match-beginning 13)	; sub with prototypes
-		(setq b (match-beginning 0))
+	       ((match-beginning 17)	; sub with prototype or attribute
+		;; 1+6+2+1+1=11 extra () before this (sub with proto/attr):
+		;;"\\<sub\\>\\("			;12
+		;;   cperl-white-and-comment-rex	;13
+		;;   "\\([a-zA-Z_:'0-9]+\\)\\)?" ; name	;14
+		;;"\\(" cperl-maybe-white-and-comment-rex	;15,16
+		;;   "\\(([^()]*)\\|:[^:]\\)\\)" ; 17:proto or attribute start
+		(setq b1 (match-beginning 14) e1 (match-end 14))
 		(if (memq (char-after (1- b))
 			  '(?\$ ?\@ ?\% ?\& ?\*))
 		    nil
-		  (setq state (parse-partial-sexp
-			       state-point b nil nil state)
-			state-point b)
-		  (if (or (nth 3 state) (nth 4 state))
-		      nil
-		    ;; Mark as string
-		    (cperl-commentify (match-beginning 13) (match-end 13) t))
-		  (goto-char (match-end 0))))
-	       ;; 1+6+2+1+1+2=13 extra () before this:
-	       ;;    "\\$\\(['{]\\)"
-	       ((and (match-beginning 14)
-		     (eq (preceding-char) ?\')) ; $'
-		(setq b (1- (point))
-		      state (parse-partial-sexp
-			     state-point (1- b) nil nil state)
-		      state-point (1- b))
-		(if (nth 3 state)	; in string
-		    (cperl-modify-syntax-type (1- b) cperl-st-punct))
-		(goto-char (1+ b)))
-	       ;; 1+6+2+1+1+2=13 extra () before this:
-	       ;;    "\\$\\(['{]\\)"
-	       ((match-beginning 14)	; ${
-		(setq bb (match-beginning 0))
-		(cperl-modify-syntax-type bb cperl-st-punct))
-	       ;; 1+6+2+1+1+2+1=14 extra () before this:
+		  (goto-char b)
+		  (if (eq (char-after (match-beginning 17)) ?\( )
+		      (progn
+			(cperl-commentify ; Prototypes; mark as string
+			 (match-beginning 17) (match-end 17) t)
+			(goto-char (match-end 0))
+			;; Now look for attributes after prototype:
+			(forward-comment (buffer-size))
+			(and (looking-at ":[^:]")
+			     (cperl-find-sub-attrs st-l b1 e1 b)))
+		    ;; treat attributes without prototype
+		    (goto-char (match-beginning 17))
+		    (cperl-find-sub-attrs st-l b1 e1 b))))
+	       ;; 1+6+2+1+1+6+1=18 extra () before this:
 	       ;;    "\\(\\<sub[ \t\n\f]+\\|[&*$@%]\\)[a-zA-Z0-9_]*'")
-	       ((match-beginning 15)	; old $abc'efg syntax
-		(setq bb (match-end 0)
-		      b (match-beginning 0)
-		      state (parse-partial-sexp
-			     state-point b nil nil state)
-		      state-point b)
-		(if (nth 3 state)	; in string
-		    nil
-		  (put-text-property (1- bb) bb 'syntax-table cperl-st-word))
+	       ((match-beginning 19)	; old $abc'efg syntax
+		(setq bb (match-end 0))
+		;;;(if (nth 3 state) nil	; in string
+		(put-text-property (1- bb) bb 'syntax-table cperl-st-word)
 		(goto-char bb))
-	       ;; 1+6+2+1+1+2+1+1=15 extra () before this:
+	       ;; 1+6+2+1+1+6+1+1=19 extra () before this:
 	       ;; "__\\(END\\|DATA\\)__"
-	       ((match-beginning 16)	; __END__, __DATA__
-		(setq bb (match-end 0)
-		      b (match-beginning 0)
-		      state (parse-partial-sexp
-			     state-point b nil nil state)
-		      state-point b)
-		(if (or (nth 3 state) (nth 4 state))
-		    nil
-		  ;; (put-text-property b (1+ bb) 'syntax-type 'pod) ; Cheat
-		  (cperl-commentify b bb nil)
-		  (setq end t))
-		(goto-char bb))
-	       ((match-beginning 17)	; "\\\\\\(['`\"($]\\)"
-		;; Trailing backslash ==> non-quoting outside string/comment
-		(setq bb (match-end 0)
-		      b (match-beginning 0))
+	       ((match-beginning 20)	; __END__, __DATA__
+		(setq bb (match-end 0))
+		;; (put-text-property b (1+ bb) 'syntax-type 'pod) ; Cheat
+		(cperl-commentify b bb nil)
+		(setq end t))
+	       ;; "\\\\\\(['`\"($]\\)"
+	       ((match-beginning 21)
+		;; Trailing backslash; make non-quoting outside string/comment
+		(setq bb (match-end 0))
 		(goto-char b)
 		(skip-chars-backward "\\\\")
 		;;;(setq i2 (= (% (skip-chars-backward "\\\\") 2) -1))
-		(setq state (parse-partial-sexp
-			     state-point b nil nil state)
-		      state-point b)
-		(if (or (nth 3 state) (nth 4 state) )
-		    nil
-		  (cperl-modify-syntax-type b cperl-st-punct))
+		(cperl-modify-syntax-type b cperl-st-punct)
 		(goto-char bb))
 	       (t (error "Error in regexp of the sniffer")))
 	      (if (> (point) stop-point)
@@ -3839,7 +4839,10 @@
 		      (or (car err-l) (setcar err-l b)))
 		    (goto-char stop-point))))
 	    (setq cperl-syntax-state (cons state-point state)
-		  cperl-syntax-done-to (or tmpend (max (point) max))))
+		  ;; Do not mark syntax as done past tmpend???
+		  cperl-syntax-done-to (or tmpend (max (point) max)))
+	    ;;(message "state-at=%s, done-to=%s" state-point cperl-syntax-done-to)
+	    )
 	  (if (car err-l) (goto-char (car err-l))
 	    (or non-inter
 		(message "Scanning for \"hard\" Perl constructions... done"))))
@@ -3851,48 +4854,91 @@
       ;; cperl-mode-syntax-table.
       ;; (set-syntax-table cperl-mode-syntax-table)
       )
-    (car err-l)))
+    (list (car err-l) overshoot)))
+
+(defun cperl-find-pods-heres-region (min max)
+  (interactive "r")
+  (cperl-find-pods-heres min max))
 
 (defun cperl-backward-to-noncomment (lim)
   ;; Stops at lim or after non-whitespace that is not in comment
+  ;; XXXX Wrongly understands end-of-multiline strings with # as comment
   (let (stop p pr)
-    (while (and (not stop) (> (point) (or lim 1)))
+    (while (and (not stop) (> (point) (or lim (point-min))))
       (skip-chars-backward " \t\n\f" lim)
       (setq p (point))
       (beginning-of-line)
       (if (memq (setq pr (get-text-property (point) 'syntax-type))
 		'(pod here-doc here-doc-delim))
 	  (cperl-unwind-to-safe nil)
-      (or (looking-at "^[ \t]*\\(#\\|$\\)")
-	  (progn (cperl-to-comment-or-eol) (bolp))
-	  (progn
-	    (skip-chars-backward " \t")
-	    (if (< p (point)) (goto-char p))
-	    (setq stop t)))))))
-
+	(or (and (looking-at "^[ \t]*\\(#\\|$\\)")
+		 (not (memq pr '(string prestring))))
+	    (progn (cperl-to-comment-or-eol) (bolp))
+	    (progn
+	      (skip-chars-backward " \t")
+	      (if (< p (point)) (goto-char p))
+	      (setq stop t)))))))
+
+;; Used only in `cperl-calculate-indent'...
+(defun cperl-block-p ()		   ; Do not C-M-q !  One string contains ";" !
+  ;; Positions is before ?\{.  Checks whether it starts a block.
+  ;; No save-excursion!  This is more a distinguisher of a block/hash ref...
+  (cperl-backward-to-noncomment (point-min))
+  (or (memq (preceding-char) (append ";){}$@&%\C-@" nil)) ; Or label!  \C-@ at bobp
+					; Label may be mixed up with `$blah :'
+      (save-excursion (cperl-after-label))
+      (get-text-property (cperl-1- (point)) 'attrib-group)
+      (and (memq (char-syntax (preceding-char)) '(?w ?_))
+	   (progn
+	     (backward-sexp)
+	     ;; sub {BLK}, print {BLK} $data, but NOT `bless', `return', `tr'
+	     (or (and (looking-at "[a-zA-Z0-9_:]+[ \t\n\f]*[{#]") ; Method call syntax
+		      (not (looking-at "\\(bless\\|return\\|q[wqrx]?\\|tr\\|[smy]\\)\\>")))
+		 ;; sub bless::foo {}
+		 (progn
+		   (cperl-backward-to-noncomment (point-min))
+		   (and (eq (preceding-char) ?b)
+			(progn
+			  (forward-sexp -1)
+			  (looking-at "sub[ \t\n\f#]")))))))))
+
+;;; What is the difference of (cperl-after-block-p lim t) and (cperl-block-p)?
+;;; No save-excursion; condition-case ...  In (cperl-block-p) the block
+;;; may be a part of an in-statement construct, such as
+;;;   ${something()}, print {FH} $data.
+;;; Moreover, one takes positive approach (looks for else,grep etc)
+;;; another negative (looks for bless,tr etc)
 (defun cperl-after-block-p (lim &optional pre-block)
-  "Return true if the preceeding } ends a block or a following { starts one.
-Would not look before LIM.  If PRE-BLOCK is nil checks preceeding }.
-otherwise following {."
-  ;; We suppose that the preceding char is }.
+  "Return true if the preceeding } (if PRE-BLOCK, following {) delimits a block.
+Would not look before LIM.  Assumes that LIM is a good place to begin a
+statement.  The kind of block we treat here is one after which a new
+statement would start; thus the block in ${func()} does not count."
   (save-excursion
     (condition-case nil
 	(progn
 	  (or pre-block (forward-sexp -1))
 	  (cperl-backward-to-noncomment lim)
 	  (or (eq (point) lim)
-	      (eq (preceding-char) ?\) ) ; if () {}    sub f () {}
-	      (if (eq (char-syntax (preceding-char)) ?w) ; else {}
+	      ;; if () {}   // sub f () {}   // sub f :a(') {}
+	      (eq (preceding-char) ?\) )
+	      ;; label: {}
+	      (save-excursion (cperl-after-label))
+	      ;; sub :attr {}
+	      (get-text-property (cperl-1- (point)) 'attrib-group)
+	      (if (memq (char-syntax (preceding-char)) '(?w ?_)) ; else {}
 		  (save-excursion
 		    (forward-sexp -1)
-		    (or (looking-at "\\(else\\|continue\\|grep\\|map\\|BEGIN\\|END\\|CHECK\\|INIT\\)\\>")
+		    ;; else {}     but not    else::func {}
+		    (or (and (looking-at "\\(else\\|continue\\|grep\\|map\\|BEGIN\\|END\\|CHECK\\|INIT\\)\\>")
+			     (not (looking-at "\\(\\sw\\|_\\)+::")))
 			;; sub f {}
 			(progn
 			  (cperl-backward-to-noncomment lim)
-			  (and (eq (char-syntax (preceding-char)) ?w)
+			  (and (eq (preceding-char) ?b)
 			       (progn
 				 (forward-sexp -1)
-				 (looking-at "sub\\>"))))))
+				 (looking-at "sub[ \t\n\f#]"))))))
+		;; What preceeds is not word...  XXXX Last statement in sub???
 		(cperl-after-expr-p lim))))
       (error nil))))
 
@@ -3914,14 +4960,12 @@
 	(if (get-text-property (point) 'here-doc-group)
 	    (progn
 	      (goto-char
-	       (or (previous-single-property-change (point) 'here-doc-group)
-		   (point)))
+	       (cperl-beginning-of-property (point) 'here-doc-group))
 	      (beginning-of-line 0)))
 	(if (get-text-property (point) 'in-pod)
 	    (progn
 	      (goto-char
-	       (or (previous-single-property-change (point) 'in-pod)
-		   (point)))
+	       (cperl-beginning-of-property (point) 'in-pod))
 	      (beginning-of-line 0)))
 	(if (looking-at "^[ \t]*\\(#\\|$\\)") nil ; Only comment, skip
 	  ;; Else: last iteration, or a label
@@ -3933,7 +4977,7 @@
 		   (progn
 		     (forward-char -1)
 		     (skip-chars-backward " \t\n\f" lim)
-		     (eq (char-syntax (preceding-char)) ?w)))
+		     (memq (char-syntax (preceding-char)) '(?w ?_))))
 	      (forward-sexp -1)		; Possibly label.  Skip it
 	    (goto-char p)
 	    (setq stop t))))
@@ -3949,6 +4993,44 @@
 		       (eq (get-text-property (point) 'syntax-type)
 			   'format)))))))))
 
+(defun cperl-backward-to-start-of-expr (&optional lim)
+  (condition-case nil
+      (progn
+	(while (and (or (not lim)
+			(> (point) lim))
+		    (not (cperl-after-expr-p lim)))
+	  (forward-sexp -1)
+	  ;; May be after $, @, $# etc of a variable
+	  (skip-chars-backward "$@%#")))
+    (error nil)))
+
+(defun cperl-at-end-of-expr (&optional lim)
+  ;; Since the SEXP approach below is very fragile, do some overengineering
+  (or (looking-at (concat cperl-maybe-white-and-comment-rex "[;}]"))
+      (condition-case nil
+	  (save-excursion
+	    ;; If nothing interesting after, does as (forward-sexp -1);
+	    ;; otherwise fails, or ends at a start of following sexp.
+	    ;; XXXX PROBLEMS: if what follows (after ";") @FOO, or ${bar}
+	    ;; may be stuck after @ or $; just put some stupid workaround now:
+	    (let ((p (point)))
+	      (forward-sexp 1)
+	      (forward-sexp -1)
+	      (while (memq (preceding-char) (append "%&@$*" nil))
+		(forward-char -1))
+	      (or (< (point) p)
+		  (cperl-after-expr-p lim))))
+	(error t))))
+
+(defun cperl-forward-to-end-of-expr (&optional lim)
+  (let ((p (point))))
+  (condition-case nil
+      (progn
+	(while (and (< (point) (or lim (point-max)))
+		    (not (cperl-at-end-of-expr)))
+	  (forward-sexp 1)))
+    (error nil)))
+
 (defun cperl-backward-to-start-of-continued-exp (lim)
   (if (memq (preceding-char) (append ")]}\"'`" nil))
       (forward-sexp -1))
@@ -3989,18 +5071,51 @@
 	(beginning-of-line)
 	(while (null done)
 	  (setq top (point))
-	  (while (= (nth 0 (parse-partial-sexp (point) tmp-end
-					       -1)) -1)
+	  ;; Plan A: if line has an unfinished paren-group, go to end-of-group
+	  (while (= -1 (nth 0 (parse-partial-sexp (point) tmp-end -1)))
 	    (setq top (point)))		; Get the outermost parenths in line
 	  (goto-char top)
 	  (while (< (point) tmp-end)
 	    (parse-partial-sexp (point) tmp-end nil t) ; To start-sexp or eol
 	    (or (eolp) (forward-sexp 1)))
-	  (if (> (point) tmp-end)
-	      (save-excursion
-		(end-of-line)
-		(setq tmp-end (point)))
-	    (setq done t)))
+	  (if (> (point) tmp-end)	; Yes, there an unfinished block
+	      nil
+	    (if (eq ?\) (preceding-char))
+		(progn ;; Plan B: find by REGEXP block followup this line
+		  (setq top (point))
+		  (condition-case nil
+		      (progn
+			(forward-sexp -2)
+			(if (eq (following-char) ?$ ) ; for my $var (list)
+			    (progn
+			      (forward-sexp -1)
+			      (if (looking-at "\\(my\\|local\\|our\\)\\>")
+				  (forward-sexp -1))))
+			(if (looking-at
+			     (concat "\\(\\elsif\\|if\\|unless\\|while\\|until"
+				     "\\|for\\(each\\)?\\>\\(\\("
+				     cperl-maybe-white-and-comment-rex
+				     "\\(my\\|local\\|our\\)\\)?"
+				     cperl-maybe-white-and-comment-rex
+				     "\\$[_a-zA-Z0-9]+\\)?\\)\\>"))
+			    (progn
+			      (goto-char top)
+			      (forward-sexp 1)
+			      (setq top (point)))))
+		    (error (setq done t)))
+		  (goto-char top))
+	      (if (looking-at		; Try Plan C: continuation block
+		   (concat cperl-maybe-white-and-comment-rex
+			   "\\<\\(else\\|elsif\|continue\\)\\>"))
+		  (progn
+		    (goto-char (match-end 0))
+		    (save-excursion
+		      (end-of-line)
+		      (setq tmp-end (point))))
+		(setq done t))))
+	  (save-excursion
+	    (end-of-line)
+	    (setq tmp-end (point))))
 	(goto-char tmp-end)
 	(setq tmp-end (point-marker)))
       (if cperl-indent-region-fix-constructs
@@ -4029,16 +5144,26 @@
 	;; Looking at:
 	;; }
 	;; else
-	(if (and cperl-merge-trailing-else
-		 (looking-at
-		  "[ \t]*}[ \t]*\n[ \t\n]*\\(els\\(e\\|if\\)\\|continue\\)\\>"))
-	    (progn
-	      (search-forward "}")
-	      (setq p (point))
-	      (skip-chars-forward " \t\n")
-	      (delete-region p (point))
+	(if cperl-merge-trailing-else
+	    (if (looking-at
+		 "[ \t]*}[ \t]*\n[ \t\n]*\\(els\\(e\\|if\\)\\|continue\\)\\>")
+		(progn
+		  (search-forward "}")
+		  (setq p (point))
+		  (skip-chars-forward " \t\n")
+		  (delete-region p (point))
 	      (insert (make-string cperl-indent-region-fix-constructs ?\s))
-	      (beginning-of-line)))
+		  (beginning-of-line)))
+	  (if (looking-at "[ \t]*}[ \t]*\\(els\\(e\\|if\\)\\|continue\\)\\>")
+	      (save-excursion
+		  (search-forward "}")
+		  (delete-horizontal-space)
+		  (insert "\n")
+		  (setq ret (point))
+		  (if (cperl-indent-line parse-data)
+		      (progn
+			(cperl-fix-line-spacing end parse-data)
+			(setq ret (point)))))))
 	;; Looking at:
 	;; }     else
 	(if (looking-at "[ \t]*}\\(\t*\\|[ \t][ \t]+\\)\\<\\(els\\(e\\|if\\)\\|continue\\)\\>")
@@ -4075,19 +5200,19 @@
 	      (insert
 	       (make-string cperl-indent-region-fix-constructs ?\s))
 	      (beginning-of-line)))
-	;; Looking at:
-	;; } foreach my $var ()    {
+	;; Looking at (with or without "}" at start, ending after "({"):
+	;; } foreach my $var ()         OR   {
 	(if (looking-at
 	     "[ \t]*\\(}[ \t]*\\)?\\<\\(\\els\\(e\\|if\\)\\|continue\\|if\\|unless\\|while\\|for\\(each\\)?\\(\\([ \t]+\\(my\\|local\\|our\\)\\)?[ \t]*\\$[_a-zA-Z0-9]+\\)?\\|until\\)\\>\\([ \t]*(\\|[ \t\n]*{\\)\\|[ \t]*{")
 	    (progn
-	      (setq ml (match-beginning 8))
+	      (setq ml (match-beginning 8)) ; "(" or "{" after control word
 	      (re-search-forward "[({]")
 	      (forward-char -1)
 	      (setq p (point))
 	      (if (eq (following-char) ?\( )
 		  (progn
 		    (forward-sexp 1)
-		    (setq pp (point)))
+		    (setq pp (point)))	; past parenth-group
 		;; after `else' or nothing
 		(if ml			; after `else'
 		    (skip-chars-backward " \t\n")
@@ -4097,13 +5222,13 @@
 	      ;; Multiline expr should be special
 	      (setq ml (and pp (save-excursion (goto-char p)
 					       (search-forward "\n" pp t))))
-	      (if (and (or (not pp) (< pp end))
+	      (if (and (or (not pp) (< pp end))	; Do not go too far...
 		       (looking-at "[ \t\n]*{"))
 		  (progn
 		    (cond
 		     ((bolp)		; Were before `{', no if/else/etc
 		      nil)
-		     ((looking-at "\\(\t*\\| [ \t]+\\){")
+		     ((looking-at "\\(\t*\\| [ \t]+\\){") ; Not exactly 1 SPACE
 		      (delete-horizontal-space)
 		      (if (if ml
 			      cperl-extra-newline-before-brace-multiline
@@ -4126,7 +5251,17 @@
 		      (skip-chars-forward " \t\n")
 		      (delete-region pp (point))
 		      (insert
-		       (make-string cperl-indent-region-fix-constructs ?\s))))
+		       (make-string cperl-indent-region-fix-constructs ?\ )))
+		     ((and (looking-at "[\t ]*{")
+			   (if ml cperl-extra-newline-before-brace-multiline
+			     cperl-extra-newline-before-brace))
+		      (delete-horizontal-space)
+		      (insert "\n")
+		      (setq ret (point))
+		      (if (cperl-indent-line parse-data)
+			  (progn
+			    (cperl-fix-line-spacing end parse-data)
+			    (setq ret (point))))))
 		    ;; Now we are before `{'
 		    (if (looking-at "[ \t\n]*{[ \t]*[^ \t\n#]")
 			(progn
@@ -4278,7 +5413,7 @@
   ;; (interactive "P") ; Only works when called from fill-paragraph.  -stef
   (let (;; Non-nil if the current line contains a comment.
 	has-comment
-
+	fill-paragraph-function		; do not recurse
 	;; If has-comment, the appropriate fill-prefix for the comment.
 	comment-fill-prefix
 	;; Line that contains code and comment (or nil)
@@ -4310,7 +5445,7 @@
 	      dc (- c (current-column)) len (- start (point))
 	      start (point-marker))
 	(delete-char len)
-	(insert (make-string dc ?-)))))
+	(insert (make-string dc ?-)))))	; Placeholder (to avoid splitting???)
     (if (not has-comment)
 	(fill-paragraph justify)       ; Do the usual thing outside of comment
       ;; Narrow to include only the comment, and then fill the region.
@@ -4332,11 +5467,16 @@
 	   (point)))
 	;; Remove existing hashes
 	(save-excursion
-	  (goto-char (point-min))
-	  (while (progn (forward-line 1) (< (point) (point-max)))
-	    (skip-chars-forward " \t")
-	    (and (looking-at "#+")
-		 (delete-char (- (match-end 0) (match-beginning 0))))))
+	(goto-char (point-min))
+	(while (progn (forward-line 1) (< (point) (point-max)))
+	  (skip-chars-forward " \t")
+	  (if (looking-at "#+")
+	      (progn
+		(if (and (eq (point) (match-beginning 0))
+			 (not (eq (point) (match-end 0)))) nil
+		    (error
+ "Bug in Emacs: `looking-at' in `narrow-to-region': match-data is garbage"))
+		(delete-char (- (match-end 0) (match-beginning 0)))))))
 
 	;; Lines with only hashes on them can be paragraph boundaries.
 	(let ((paragraph-start (concat paragraph-start "\\|^[ \t#]*$"))
@@ -4352,7 +5492,8 @@
 	      (setq comment-column c)
 	      (indent-for-comment)
 	      ;; Repeat once more, flagging as iteration
-	      (cperl-fill-paragraph justify t)))))))
+	      (cperl-fill-paragraph justify t))))))
+  t)
 
 (defun cperl-do-auto-fill ()
   ;; Break out if the line is short enough
@@ -4403,8 +5544,8 @@
   (let ((index-alist '()) (index-pack-alist '()) (index-pod-alist '())
 	(index-unsorted-alist '()) (i-s-f (default-value 'imenu-sort-function))
 	(index-meth-alist '()) meth
-	packages ends-ranges p marker
-	(prev-pos 0) char fchar index index1 name (end-range 0) package)
+	packages ends-ranges p marker is-proto
+	(prev-pos 0) is-pack index index1 name (end-range 0) package)
     (goto-char (point-min))
     (cperl-update-syntaxification (point-max) (point-max))
     ;; Search for the function
@@ -4412,72 +5553,81 @@
       (while (re-search-forward
 	      (or regexp cperl-imenu--function-name-regexp-perl)
 	      nil t)
+	;; 2=package-group, 5=package-name 8=sub-name
 	(cond
 	 ((and				; Skip some noise if building tags
-	   (match-beginning 2)		; package or sub
-	   (eq (char-after (match-beginning 2)) ?p) ; package
+	   (match-beginning 5)		; package name
+	   ;;(eq (char-after (match-beginning 2)) ?p) ; package
 	   (not (save-match-data
 		  (looking-at "[ \t\n]*;")))) ; Plain text word 'package'
 	  nil)
 	 ((and
-	   (match-beginning 2)		; package or sub
+	   (or (match-beginning 2)
+	       (match-beginning 8))		; package or sub
 	   ;; Skip if quoted (will not skip multi-line ''-strings :-():
 	   (null (get-text-property (match-beginning 1) 'syntax-table))
 	   (null (get-text-property (match-beginning 1) 'syntax-type))
 	   (null (get-text-property (match-beginning 1) 'in-pod)))
-	  (save-excursion
-	    (goto-char (match-beginning 2))
-	    (setq fchar (following-char)))
+	  (setq is-pack (match-beginning 2))
 	  ;; (if (looking-at "([^()]*)[ \t\n\f]*")
 	  ;;    (goto-char (match-end 0)))	; Messes what follows
-	  (setq char (following-char)	; ?\; for "sub foo () ;"
-		meth nil
+	  (setq meth nil
 		p (point))
 	  (while (and ends-ranges (>= p (car ends-ranges)))
 	    ;; delete obsolete entries
 	    (setq ends-ranges (cdr ends-ranges) packages (cdr packages)))
 	  (setq package (or (car packages) "")
 		end-range (or (car ends-ranges) 0))
-	  (if (eq fchar ?p)
-	      (setq name (buffer-substring (match-beginning 3) (match-end 3))
-		    name (progn
-			   (set-text-properties 0 (length name) nil name)
-			   name)
-		    package (concat name "::")
-		    name (concat "package " name)
-		    end-range
-		    (save-excursion
-		      (parse-partial-sexp (point) (point-max) -1) (point))
-		    ends-ranges (cons end-range ends-ranges)
-		    packages (cons package packages)))
-	  ;;   )
+	  (if is-pack			; doing "package"
+	      (progn
+		(if (match-beginning 5)	; named package
+		    (setq name (buffer-substring (match-beginning 5)
+						 (match-end 5))
+			  name (progn
+				 (set-text-properties 0 (length name) nil name)
+				 name)
+			  package (concat name "::")
+			  name (concat "package " name))
+		  ;; Support nameless packages
+		  (setq name "package;" package ""))
+		(setq end-range
+		      (save-excursion
+			(parse-partial-sexp (point) (point-max) -1) (point))
+		      ends-ranges (cons end-range ends-ranges)
+		      packages (cons package packages)))
+	    (setq is-proto
+		  (or (eq (following-char) ?\;)
+		      (eq 0 (get-text-property (point) 'attrib-group)))))
 	  ;; Skip this function name if it is a prototype declaration.
-	  (if (and (eq fchar ?s) (eq char ?\;)) nil
-	    (setq name (buffer-substring (match-beginning 3) (match-end 3))
-		  marker (make-marker))
-	    (set-text-properties 0 (length name) nil name)
-	    (set-marker marker (match-end 3))
-	    (if (eq fchar ?p)
-		(setq name (concat "package " name))
-	      (cond ((string-match "[:']" name)
-		     (setq meth t))
-		    ((> p end-range) nil)
-		    (t
-		     (setq name (concat package name) meth t))))
+	  (if (and is-proto (not is-pack)) nil
+	    (or is-pack
+		(setq name
+		      (buffer-substring (match-beginning 8) (match-end 8)))
+		(set-text-properties 0 (length name) nil name))
+	    (setq marker (make-marker))
+	    (set-marker marker (match-end (if is-pack 2 8)))
+	    (cond (is-pack nil)
+		  ((string-match "[:']" name)
+		   (setq meth t))
+		  ((> p end-range) nil)
+		  (t
+		   (setq name (concat package name) meth t)))
 	    (setq index (cons name marker))
-	    (if (eq fchar ?p)
+	    (if is-pack
 		(push index index-pack-alist)
 	      (push index index-alist))
 	    (if meth (push index index-meth-alist))
 	    (push index index-unsorted-alist)))
-	 ((match-beginning 5)		; POD section
-	  ;; (beginning-of-line)
-	  (setq index (imenu-example--name-and-position)
-		name (buffer-substring (match-beginning 6) (match-end 6)))
+	 ((match-beginning 16)		; POD section
+	  (setq name (buffer-substring (match-beginning 17) (match-end 17))
+		marker (make-marker))
+	  (set-marker marker (match-beginning 17))
 	  (set-text-properties 0 (length name) nil name)
-	  (if (eq (char-after (match-beginning 5)) ?2)
-	      (setq name (concat "   " name)))
-	  (setcar index name)
+	  (setq name (concat (make-string
+			      (* 3 (- (char-after (match-beginning 16)) ?1))
+			      ?\ )
+			     name)
+		index (cons name marker))
 	  (setq index1 (cons (concat "=" name) (cdr index)))
 	  (push index index-pod-alist)
 	  (push index1 index-unsorted-alist)))))
@@ -4541,29 +5691,20 @@
 (defun cperl-outline-level ()
   (looking-at outline-regexp)
   (cond ((not (match-beginning 1)) 0)	; beginning-of-file
-	((match-beginning 2)
-	 (if (eq (char-after (match-beginning 2)) ?p)
-	     0				; package
-	   1))				; sub
-	((match-beginning 5)
-	 (if (eq (char-after (match-beginning 5)) ?1)
-	     1				; head1
-	   2))				; head2
-	(t 3)))				; should not happen
+;;;; 2=package-group, 5=package-name 8=sub-name 16=head-level
+	((match-beginning 2) 0)		; package
+	((match-beginning 8) 1)		; sub
+	((match-beginning 16)
+	 (- (char-after (match-beginning 16)) ?0)) ; headN ==> N
+	(t 5)))				; should not happen
 
 
 (defvar cperl-compilation-error-regexp-alist
-  ;; This look like a paranoiac regexp: could anybody find a better one? (which WORK).
+  ;; This look like a paranoiac regexp: could anybody find a better one? (which WORKS).
   '(("^[^\n]* \\(file\\|at\\) \\([^ \t\n]+\\) [^\n]*line \\([0-9]+\\)[\\., \n]"
      2 3))
   "Alist that specifies how to match errors in perl output.")
 
-(if (fboundp 'eval-after-load)
-    (eval-after-load
-	"mode-compile"
-      '(setq perl-compilation-error-regexp-alist
-	     cperl-compilation-error-regexp-alist)))
-
 
 (defun cperl-windowed-init ()
   "Initialization under windowed version."
@@ -4604,9 +5745,12 @@
   ;; Allow `cperl-find-pods-heres' to run.
   (or (boundp 'font-lock-constant-face)
       (cperl-force-face font-lock-constant-face
-                        "Face for constant and label names")
-      ;;(setq font-lock-constant-face 'font-lock-constant-face)
-      ))
+                        "Face for constant and label names"))
+  (or (boundp 'font-lock-warning-face)
+      (cperl-force-face font-lock-warning-face
+			"Face for things which should stand out"))
+  ;;(setq font-lock-constant-face 'font-lock-constant-face)
+  )
 
 (defun cperl-init-faces ()
   (condition-case errs
@@ -4629,7 +5773,7 @@
 	       'identity
 	       '("if" "until" "while" "elsif" "else" "unless" "for"
 		 "foreach" "continue" "exit" "die" "last" "goto" "next"
-		 "redo" "return" "local" "exec" "sub" "do" "dump" "use"
+		 "redo" "return" "local" "exec" "sub" "do" "dump" "use" "our"
 		 "require" "package" "eval" "my" "BEGIN" "END" "CHECK" "INIT")
 	       "\\|")			; Flow control
 	      "\\)\\>") 2)		; was "\\)[ \n\t;():,\|&]"
@@ -4713,7 +5857,7 @@
 	      ;; "chop" "defined" "delete" "do" "each" "else" "elsif"
 	      ;; "eval" "exists" "for" "foreach" "format" "goto"
 	      ;; "grep" "if" "keys" "last" "local" "map" "my" "next"
-	      ;; "no" "package" "pop" "pos" "print" "printf" "push"
+	      ;; "no" "our" "package" "pop" "pos" "print" "printf" "push"
 	      ;; "q" "qq" "qw" "qx" "redo" "return" "scalar" "shift"
 	      ;; "sort" "splice" "split" "study" "sub" "tie" "tr"
 	      ;; "undef" "unless" "unshift" "untie" "until" "use"
@@ -4728,15 +5872,38 @@
 	      "u\\(se\\|n\\(shift\\|ti\\(l\\|e\\)\\|def\\|less\\)\\)\\|"
 	      "while\\|y\\|__\\(END\\|DATA\\)__" ;__DATA__ added manually
 	      "\\|[sm]"			; Added manually
-	      "\\)\\>") 2 'cperl-nonoverridable)
+	      "\\)\\>") 2 'cperl-nonoverridable-face)
 	    ;;		(mapconcat 'identity
 	    ;;			   '("#endif" "#else" "#ifdef" "#ifndef" "#if"
 	    ;;			     "#include" "#define" "#undef")
 	    ;;			   "\\|")
 	    '("-[rwxoRWXOezsfdlpSbctugkTBMAC]\\>\\([ \t]+_\\>\\)?" 0
 	      font-lock-function-name-face keep) ; Not very good, triggers at "[a-z]"
-	    '("\\<sub[ \t]+\\([^ \t{;()]+\\)[ \t]*\\(([^()]*)[ \t]*\\)?[#{\n]" 1
-	      font-lock-function-name-face)
+	    ;; This highlights declarations and definitions differenty.
+	    ;; We do not try to highlight in the case of attributes:
+	    ;; it is already done by `cperl-find-pods-heres'
+	    (list (concat "\\<sub"
+			  cperl-white-and-comment-rex ; whitespace/comments
+			  "\\([^ \n\t{;()]+\\)" ; 2=name (assume non-anonymous)
+			  "\\("
+			    cperl-maybe-white-and-comment-rex ;whitespace/comments?
+			    "([^()]*)\\)?" ; prototype
+			  cperl-maybe-white-and-comment-rex ; whitespace/comments?
+			  "[{;]")
+		  2 (if cperl-font-lock-multiline
+			'(if (eq (char-after (cperl-1- (match-end 0))) ?\{ )
+			     'font-lock-function-name-face
+			   'font-lock-variable-name-face)
+		      ;; need to manually set 'multiline' for older font-locks
+		      '(progn
+			 (if (< 1 (count-lines (match-beginning 0)
+					       (match-end 0)))
+			     (put-text-property
+			      (+ 3 (match-beginning 0)) (match-end 0)
+			      'syntax-type 'multiline))
+			 (if (eq (char-after (cperl-1- (match-end 0))) ?\{ )
+			     'font-lock-function-name-face
+			   'font-lock-variable-name-face))))
 	    '("\\<\\(package\\|require\\|use\\|import\\|no\\|bootstrap\\)[ \t]+\\([a-zA-z_][a-zA-z_0-9:]*\\)[ \t;]" ; require A if B;
 	      2 font-lock-function-name-face)
 	    '("^[ \t]*format[ \t]+\\([a-zA-z_][a-zA-z_0-9:]*\\)[ \t]*=[ \t]*$"
@@ -4772,12 +5939,56 @@
 				   (2 '(restart 2 nil) nil t)))
 			nil t)))	; local variables, multiple
 		  (font-lock-anchored
-		   '("^[ \t{}]*\\(my\\|local\\|our\\)[ \t]*\\(([ \t]*\\)?\\([$@%*][a-zA-Z0-9_:]+\\)"
-		     (3 font-lock-variable-name-face)
-		     ("\\=[ \t]*,[ \t]*\\([$@%*][a-zA-Z0-9_:]+\\)"
-		      nil nil
-		      (1 font-lock-variable-name-face))))
-		  (t '("^[ \t{}]*\\(my\\|local\\our\\)[ \t]*\\(([ \t]*\\)?\\([$@%*][a-zA-Z0-9_:]+\\)"
+		   ;; 1=my_etc, 2=white? 3=(+white? 4=white? 5=var
+		   (` ((, (concat "\\<\\(my\\|local\\|our\\)"
+				  cperl-maybe-white-and-comment-rex
+				  "\\(("
+				     cperl-maybe-white-and-comment-rex
+				  "\\)?\\([$@%*]\\([a-zA-Z0-9_:]+\\|[^a-zA-Z0-9_]\\)\\)"))
+		       (5 (, (if cperl-font-lock-multiline
+				 'font-lock-variable-name-face
+			       '(progn  (setq cperl-font-lock-multiline-start
+					      (match-beginning 0))
+					'font-lock-variable-name-face))))
+		       ((, (concat "\\="
+				   cperl-maybe-white-and-comment-rex
+				   ","
+				   cperl-maybe-white-and-comment-rex
+				   "\\([$@%*]\\([a-zA-Z0-9_:]+\\|[^a-zA-Z0-9_]\\)\\)"))
+			;; Bug in font-lock: limit is used not only to limit 
+			;; searches, but to set the "extend window for
+			;; facification" property.  Thus we need to minimize.
+			(, (if cperl-font-lock-multiline
+			     '(if (match-beginning 3)
+				  (save-excursion
+				    (goto-char (match-beginning 3))
+				    (condition-case nil
+					(forward-sexp 1)
+				      (error
+				       (condition-case nil
+					   (forward-char 200)
+					 (error nil)))) ; typeahead
+				    (1- (point))) ; report limit
+				(forward-char -2)) ; disable continued expr
+			     '(if (match-beginning 3)
+				  (point-max) ; No limit for continuation
+				(forward-char -2)))) ; disable continued expr
+			(, (if cperl-font-lock-multiline
+			       nil
+			     '(progn	; Do at end
+				;; "my" may be already fontified (POD),
+				;; so cperl-font-lock-multiline-start is nil
+				(if (or (not cperl-font-lock-multiline-start)
+					(> 2 (count-lines
+					      cperl-font-lock-multiline-start
+					      (point))))
+				    nil
+				  (put-text-property
+				   (1+ cperl-font-lock-multiline-start) (point)
+				   'syntax-type 'multiline))
+				(setq cperl-font-lock-multiline-start nil))))
+			(3 font-lock-variable-name-face)))))
+		  (t '("^[ \t{}]*\\(my\\|local\\|our\\)[ \t]*\\(([ \t]*\\)?\\([$@%*][a-zA-Z0-9_:]+\\)"
 		       3 font-lock-variable-name-face)))
 	    '("\\<for\\(each\\)?\\([ \t]+\\(my\\|local\\|our\\)\\)?[ \t]*\\(\\$[a-zA-Z_][a-zA-Z_0-9]*\\)[ \t]*("
 	      4 font-lock-variable-name-face)
@@ -4787,21 +5998,32 @@
 	  (setq
 	   t-font-lock-keywords-1
 	   (and (fboundp 'turn-on-font-lock) ; Check for newer font-lock
-		(not cperl-xemacs-p)	; not yet as of XEmacs 19.12
+		;; not yet as of XEmacs 19.12, works with 21.1.11
+		(or
+		 (not cperl-xemacs-p)
+		 (string< "21.1.9" emacs-version)
+		 (and (string< "21.1.10" emacs-version)
+		      (string< emacs-version "21.1.2")))
 		'(
 		  ("\\(\\([@%]\\|\$#\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)" 1
 		   (if (eq (char-after (match-beginning 2)) ?%)
-		       'cperl-hash
-		     'cperl-array)
+		       'cperl-hash-face
+		     'cperl-array-face)
 		   t)			; arrays and hashes
 		  ("\\(\\([$@]+\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)[ \t]*\\([[{]\\)"
 		   1
 		   (if (= (- (match-end 2) (match-beginning 2)) 1)
 		       (if (eq (char-after (match-beginning 3)) ?{)
-			   'cperl-hash
-			 'cperl-array) ; arrays and hashes
+			   'cperl-hash-face
+			 'cperl-array-face) ; arrays and hashes
 		     font-lock-variable-name-face) ; Just to put something
 		   t)
+		  ("\\(@\\|\\$#\\)\\(\\$+\\([a-zA-Z_:][a-zA-Z0-9_:]*\\|[^ \t\n]\\)\\)"
+		   (1 cperl-array-face)
+		   (2 font-lock-variable-name-face))
+		  ("\\(%\\)\\(\\$+\\([a-zA-Z_:][a-zA-Z0-9_:]*\\|[^ \t\n]\\)\\)"
+		   (1 cperl-hash-face)
+		   (2 font-lock-variable-name-face))
 		  ;;("\\([smy]\\|tr\\)\\([^a-z_A-Z0-9]\\)\\(\\([^\n\\]*||\\)\\)\\2")
 		       ;;; Too much noise from \s* @s[ and friends
 		  ;;("\\(\\<\\([msy]\\|tr\\)[ \t]*\\([^ \t\na-zA-Z0-9_]\\)\\|\\(/\\)\\)"
@@ -4813,7 +6035,7 @@
 	  (if cperl-highlight-variables-indiscriminately
 	      (setq t-font-lock-keywords-1
 		    (append t-font-lock-keywords-1
-			    (list '("[$*]{?\\(\\sw+\\)" 1
+			    (list '("\\([$*]{?\\sw+\\)" 1
 				    font-lock-variable-name-face)))))
 	  (setq cperl-font-lock-keywords-1
 		(if cperl-syntaxify-by-font-lock
@@ -4866,27 +6088,35 @@
 		      [nil		nil		t		t	t]
 		      nil
 		      [nil		nil		t		t	t])
+		(list 'font-lock-warning-face
+		      ["Pink"		"Red"		"Gray50"	"LightGray"]
+		      ["gray20"		"gray90"
+							"gray80"	"gray20"]
+		      [nil		nil		t		t	t]
+		      nil
+		      [nil		nil		t		t	t]
+		      )
 		(list 'font-lock-constant-face
 		      ["CadetBlue"	"Aquamarine" 	"Gray50"	"LightGray"]
 		      nil
 		      [nil		nil		t		t	t]
 		      nil
 		      [nil		nil		t		t	t])
-		(list 'cperl-nonoverridable
+		(list 'cperl-nonoverridable-face
 		      ["chartreuse3"	("orchid1" "orange")
 		       nil		"Gray80"]
 		      [nil		nil		"gray90"]
 		      [nil		nil		nil		t	t]
 		      [nil		nil		t		t]
 		      [nil		nil		t		t	t])
-		(list 'cperl-array
+		(list 'cperl-array-face
 		      ["blue"		"yellow" 	nil		"Gray80"]
 		      ["lightyellow2"	("navy" "os2blue" "darkgreen")
 		       "gray90"]
 		      t
 		      nil
 		      nil)
-		(list 'cperl-hash
+		(list 'cperl-hash-face
 		      ["red"		"red"	 	nil		"Gray80"]
 		      ["lightyellow2"	("navy" "os2blue" "darkgreen")
 		       "gray90"]
@@ -4909,15 +6139,17 @@
 			    "Face for variable names")
 	  (cperl-force-face font-lock-type-face
 			    "Face for data types")
-	  (cperl-force-face cperl-nonoverridable
+	  (cperl-force-face cperl-nonoverridable-face
 			    "Face for data types from another group")
+	  (cperl-force-face font-lock-warning-face
+			    "Face for things which should stand out")
 	  (cperl-force-face font-lock-comment-face
 			    "Face for comments")
 	  (cperl-force-face font-lock-function-name-face
 			    "Face for function names")
-	  (cperl-force-face cperl-hash
+	  (cperl-force-face cperl-hash-face
 			    "Face for hashes")
-	  (cperl-force-face cperl-array
+	  (cperl-force-face cperl-array-face
 			    "Face for arrays")
 	  ;;(defvar font-lock-constant-face 'font-lock-constant-face)
 	  ;;(defvar font-lock-variable-name-face 'font-lock-variable-name-face)
@@ -4927,7 +6159,7 @@
 	  ;;	"Face to use for data types."))
 	  ;;(or (boundp 'cperl-nonoverridable-face)
 	  ;;    (defconst cperl-nonoverridable-face
-	  ;;	'cperl-nonoverridable
+	  ;;	'cperl-nonoverridable-face
 	  ;;	"Face to use for data types from another group."))
 	  ;;(if (not cperl-xemacs-p) nil
 	  ;;  (or (boundp 'font-lock-comment-face)
@@ -4943,24 +6175,24 @@
 	  ;;	  'font-lock-function-name-face
 	  ;;	  "Face to use for function names.")))
 	  (if (and
-	       (not (cperl-is-face 'cperl-array))
+	       (not (cperl-is-face 'cperl-array-face))
 	       (cperl-is-face 'font-lock-emphasized-face))
-	      (copy-face 'font-lock-emphasized-face 'cperl-array))
+	      (copy-face 'font-lock-emphasized-face 'cperl-array-face))
 	  (if (and
-	       (not (cperl-is-face 'cperl-hash))
+	       (not (cperl-is-face 'cperl-hash-face))
 	       (cperl-is-face 'font-lock-other-emphasized-face))
-	      (copy-face 'font-lock-other-emphasized-face 'cperl-hash))
+	      (copy-face 'font-lock-other-emphasized-face 'cperl-hash-face))
 	  (if (and
-	       (not (cperl-is-face 'cperl-nonoverridable))
+	       (not (cperl-is-face 'cperl-nonoverridable-face))
 	       (cperl-is-face 'font-lock-other-type-face))
-	      (copy-face 'font-lock-other-type-face 'cperl-nonoverridable))
+	      (copy-face 'font-lock-other-type-face 'cperl-nonoverridable-face))
 	  ;;(or (boundp 'cperl-hash-face)
 	  ;;    (defconst cperl-hash-face
-	  ;;	'cperl-hash
+	  ;;	'cperl-hash-face
 	  ;;	"Face to use for hashes."))
 	  ;;(or (boundp 'cperl-array-face)
 	  ;;    (defconst cperl-array-face
-	  ;;	'cperl-array
+	  ;;	'cperl-array-face
 	  ;;	"Face to use for arrays."))
 	  ;; Here we try to guess background
 	  (let ((background
@@ -4999,17 +6231,17 @@
 				       "pink")))
 	       (t
 		(set-face-background 'font-lock-type-face "gray90"))))
-	    (if (cperl-is-face 'cperl-nonoverridable)
+	    (if (cperl-is-face 'cperl-nonoverridable-face)
 		nil
-	      (copy-face 'font-lock-type-face 'cperl-nonoverridable)
+	      (copy-face 'font-lock-type-face 'cperl-nonoverridable-face)
 	      (cond
 	       ((eq background 'light)
-		(set-face-foreground 'cperl-nonoverridable
+		(set-face-foreground 'cperl-nonoverridable-face
 				     (if (x-color-defined-p "chartreuse3")
 					 "chartreuse3"
 				       "chartreuse")))
 	       ((eq background 'dark)
-		(set-face-foreground 'cperl-nonoverridable
+		(set-face-foreground 'cperl-nonoverridable-face
 				     (if (x-color-defined-p "orchid1")
 					 "orchid1"
 				       "orange")))))
@@ -5061,15 +6293,15 @@
     '(setq ps-bold-faces
 	   ;; 			font-lock-variable-name-face
 	   ;;			font-lock-constant-face
-	   (append '(cperl-array cperl-hash)
+	   (append '(cperl-array-face cperl-hash-face)
 		   ps-bold-faces)
 	   ps-italic-faces
 	   ;;			font-lock-constant-face
-	   (append '(cperl-nonoverridable cperl-hash)
+	   (append '(cperl-nonoverridable-face cperl-hash-face)
 		   ps-italic-faces)
 	   ps-underlined-faces
 	   ;;	     font-lock-type-face
-	   (append '(cperl-array cperl-hash underline cperl-nonoverridable)
+	   (append '(cperl-array-face cperl-hash-face underline cperl-nonoverridable-face)
 		   ps-underlined-faces))))
 
 (defvar ps-print-face-extension-alist)
@@ -5102,27 +6334,27 @@
 ;;;   (defvar ps-italic-faces nil)
 ;;;   (setq ps-bold-faces
 ;;; 	(append '(font-lock-emphasized-face
-;;; 		  cperl-array
+;;; 		  cperl-array-face
 ;;; 		  font-lock-keyword-face
 ;;; 		  font-lock-variable-name-face
 ;;; 		  font-lock-constant-face
 ;;; 		  font-lock-reference-face
 ;;; 		  font-lock-other-emphasized-face
-;;; 		  cperl-hash)
+;;; 		  cperl-hash-face)
 ;;; 		ps-bold-faces))
 ;;;   (setq ps-italic-faces
-;;; 	(append '(cperl-nonoverridable
+;;; 	(append '(cperl-nonoverridable-face
 ;;; 		  font-lock-constant-face
 ;;; 		  font-lock-reference-face
 ;;; 		  font-lock-other-emphasized-face
-;;; 		  cperl-hash)
+;;; 		  cperl-hash-face)
 ;;; 		ps-italic-faces))
 ;;;   (setq ps-underlined-faces
 ;;; 	(append '(font-lock-emphasized-face
-;;; 		  cperl-array
+;;; 		  cperl-array-face
 ;;; 		  font-lock-other-emphasized-face
-;;; 		  cperl-hash
-;;; 		  cperl-nonoverridable font-lock-type-face)
+;;; 		  cperl-hash-face
+;;; 		  cperl-nonoverridable-face font-lock-type-face)
 ;;; 		ps-underlined-faces))
 ;;;   (cons 'font-lock-type-face ps-underlined-faces))
 
@@ -5132,79 +6364,211 @@
 (defconst cperl-styles-entries
   '(cperl-indent-level cperl-brace-offset cperl-continued-brace-offset
     cperl-label-offset cperl-extra-newline-before-brace
+    cperl-extra-newline-before-brace-multiline
     cperl-merge-trailing-else
     cperl-continued-statement-offset))
 
+(defconst cperl-style-examples
+"##### Numbers etc are: cperl-indent-level cperl-brace-offset
+##### cperl-continued-brace-offset cperl-label-offset
+##### cperl-continued-statement-offset
+##### cperl-merge-trailing-else cperl-extra-newline-before-brace
+
+########### (Do not forget cperl-extra-newline-before-brace-multiline)
+
+### CPerl	(=GNU - extra-newline-before-brace + merge-trailing-else) 2/0/0/-2/2/t/nil
+if (foo) {
+  bar
+    baz;
+ label:
+  {
+    boon;
+  }
+} else {
+  stop;
+}
+
+### PerlStyle	(=CPerl with 4 as indent)		4/0/0/-4/4/t/nil
+if (foo) {
+    bar
+	baz;
+ label:
+    {
+	boon;
+    }
+} else {
+    stop;
+}
+
+### GNU							2/0/0/-2/2/nil/t
+if (foo)
+  {
+    bar
+      baz;
+  label:
+    {
+      boon;
+    }
+  }
+else
+  {
+    stop;
+  }
+
+### C++		(=PerlStyle with braces aligned with control words) 4/0/-4/-4/4/nil/t
+if (foo)
+{
+    bar
+	baz;
+ label:
+    {
+	boon;
+    }
+}
+else
+{
+    stop;
+}
+
+### BSD		(=C++, but will not change preexisting merge-trailing-else
+###		 and extra-newline-before-brace )		4/0/-4/-4/4
+if (foo)
+{
+    bar
+	baz;
+ label:
+    {
+	boon;
+    }
+}
+else
+{
+    stop;
+}
+
+### K&R		(=C++ with indent 5 - merge-trailing-else, but will not
+###		 change preexisting extra-newline-before-brace)	5/0/-5/-5/5/nil
+if (foo)
+{
+     bar
+	  baz;
+ label:
+     {
+	  boon;
+     }
+}
+else
+{
+     stop;
+}
+
+### Whitesmith	(=PerlStyle, but will not change preexisting
+###		 extra-newline-before-brace and merge-trailing-else) 4/0/0/-4/4
+if (foo)
+    {
+	bar
+	    baz;
+    label:
+	{
+	    boon;
+	}
+    }
+else
+    {
+	stop;
+    }
+"
+"Examples of if/else with different indent styles (with v4.23).")
+
 (defconst cperl-style-alist
-  '(("CPerl"			     ; =GNU without extra-newline-before-brace
+  '(("CPerl" ;; =GNU - extra-newline-before-brace + cperl-merge-trailing-else
      (cperl-indent-level               .  2)
      (cperl-brace-offset               .  0)
      (cperl-continued-brace-offset     .  0)
      (cperl-label-offset               . -2)
+     (cperl-continued-statement-offset .  2)
      (cperl-extra-newline-before-brace .  nil)
-     (cperl-merge-trailing-else	       .  t)
-     (cperl-continued-statement-offset .  2))
+     (cperl-extra-newline-before-brace-multiline .  nil)
+     (cperl-merge-trailing-else	       .  t))
+
     ("PerlStyle"			; CPerl with 4 as indent
      (cperl-indent-level               .  4)
      (cperl-brace-offset               .  0)
      (cperl-continued-brace-offset     .  0)
      (cperl-label-offset               . -4)
+     (cperl-continued-statement-offset .  4)
      (cperl-extra-newline-before-brace .  nil)
-     (cperl-merge-trailing-else	       .  t)
-     (cperl-continued-statement-offset .  4))
+     (cperl-extra-newline-before-brace-multiline .  nil)
+     (cperl-merge-trailing-else	       .  t))
+
     ("GNU"
      (cperl-indent-level               .  2)
      (cperl-brace-offset               .  0)
      (cperl-continued-brace-offset     .  0)
      (cperl-label-offset               . -2)
+     (cperl-continued-statement-offset .  2)
      (cperl-extra-newline-before-brace .  t)
-     (cperl-merge-trailing-else	       .  nil)
-     (cperl-continued-statement-offset .  2))
+     (cperl-extra-newline-before-brace-multiline .  t)
+     (cperl-merge-trailing-else	       .  nil))
+
     ("K&R"
      (cperl-indent-level               .  5)
      (cperl-brace-offset               .  0)
      (cperl-continued-brace-offset     . -5)
      (cperl-label-offset               . -5)
+     (cperl-continued-statement-offset .  5)
      ;;(cperl-extra-newline-before-brace .  nil) ; ???
-     (cperl-merge-trailing-else	       .  nil)
-     (cperl-continued-statement-offset .  5))
+     ;;(cperl-extra-newline-before-brace-multiline .  nil)
+     (cperl-merge-trailing-else	       .  nil))
+
     ("BSD"
      (cperl-indent-level               .  4)
      (cperl-brace-offset               .  0)
      (cperl-continued-brace-offset     . -4)
      (cperl-label-offset               . -4)
+     (cperl-continued-statement-offset .  4)
      ;;(cperl-extra-newline-before-brace .  nil) ; ???
-     (cperl-continued-statement-offset .  4))
+     ;;(cperl-extra-newline-before-brace-multiline .  nil)
+     ;;(cperl-merge-trailing-else	       .  nil) ; ???
+     )
+
     ("C++"
      (cperl-indent-level               .  4)
      (cperl-brace-offset               .  0)
      (cperl-continued-brace-offset     . -4)
      (cperl-label-offset               . -4)
      (cperl-continued-statement-offset .  4)
-     (cperl-merge-trailing-else	       .  nil)
-     (cperl-extra-newline-before-brace .  t))
-    ("Current")
+     (cperl-extra-newline-before-brace .  t)
+     (cperl-extra-newline-before-brace-multiline .  t)
+     (cperl-merge-trailing-else	       .  nil))
+
     ("Whitesmith"
      (cperl-indent-level               .  4)
      (cperl-brace-offset               .  0)
      (cperl-continued-brace-offset     .  0)
      (cperl-label-offset               . -4)
+     (cperl-continued-statement-offset .  4)
      ;;(cperl-extra-newline-before-brace .  nil) ; ???
-     (cperl-continued-statement-offset .  4)))
-  "(Experimental) list of variables to set to get a particular indentation style.
-Should be used via `cperl-set-style' or via Perl menu.")
+     ;;(cperl-extra-newline-before-brace-multiline .  nil)
+     ;;(cperl-merge-trailing-else	       .  nil) ; ???
+     )
+    ("Current"))
+  "List of variables to set to get a particular indentation style.
+Should be used via `cperl-set-style' or via Perl menu.
+
+See examples in `cperl-style-examples'.")
 
 (defun cperl-set-style (style)
   "Set CPerl mode variables to use one of several different indentation styles.
 The arguments are a string representing the desired style.
 The list of styles is in `cperl-style-alist', available styles
-are GNU, K&R, BSD, C++ and Whitesmith.
+are CPerl, PerlStyle, GNU, K&R, BSD, C++ and Whitesmith.
 
 The current value of style is memorized (unless there is a memorized
 data already), may be restored by `cperl-set-style-back'.
 
 Chosing \"Current\" style will not change style, so this may be used for
-side-effect of memorizing only."
+side-effect of memorizing only.  Examples in `cperl-style-examples'."
   (interactive
    (let ((list (mapcar (function (lambda (elt) (list (car elt))))
 		       cperl-style-alist)))
@@ -5375,6 +6739,8 @@
    (match-beginning 1) (match-end 1)))
 
 (defun cperl-imenu-on-info ()
+  "Shows imenu for Perl Info Buffer.
+Opens Perl Info buffer if needed."
   (interactive)
   (let* ((buffer (current-buffer))
 	 imenu-create-index-function
@@ -5414,7 +6780,7 @@
 \(or `cperl-indent-level', if `cperl-lineup-step' is nil).
 Will not move the position at the start to the left."
   (interactive "r")
-  (let (search col tcol seen b e)
+  (let (search col tcol seen b)
     (save-excursion
       (goto-char end)
       (end-of-line)
@@ -5452,22 +6818,25 @@
       (if (/= (% col step) 0) (setq step (* step (1+ (/ col step)))))
       (while
 	  (progn
-	    (setq e (point))
-	    (skip-chars-backward " \t")
-	    (delete-region (point) e)
-	    (indent-to-column col) ;(make-string (- col (current-column)) ?\s))
+	    (cperl-make-indent col)
 	    (beginning-of-line 2)
 	    (and (< (point) end)
 		 (re-search-forward search end t)
 		 (goto-char (match-beginning 0)))))))) ; No body
 
-(defun cperl-etags (&optional add all files)
+(defun cperl-etags (&optional add all files) ;; NOT USED???
   "Run etags with appropriate options for Perl files.
 If optional argument ALL is `recursive', will process Perl files
 in subdirectories too."
   (interactive)
   (let ((cmd "etags")
-	(args '("-l" "none" "-r" "/\\<\\(package\\|sub\\)[ \\t]+\\(\\([a-zA-Z0-9:_]*::\\)?\\([a-zA-Z0-9_]+\\)[ \\t]*\\(([^()]*)[ \t]*\\)?\\([{#]\\|$\\)\\)/\\4/"))
+	(args '("-l" "none" "-r"
+		;;       1=fullname  2=package?             3=name                       4=proto?             5=attrs? (VERY APPROX!)
+		"/\\<sub[ \\t]+\\(\\([a-zA-Z0-9:_]*::\\)?\\([a-zA-Z0-9_]+\\)\\)[ \\t]*\\(([^()]*)[ \t]*\\)?\\([ \t]*:[^#{;]*\\)?\\([{#]\\|$\\)/\\3/"
+		"-r"
+		"/\\<package[ \\t]+\\(\\([a-zA-Z0-9:_]*::\\)?\\([a-zA-Z0-9_]+\\)\\)[ \\t]*\\([#;]\\|$\\)/\\1/"
+		"-r"
+		"/\\<\\(package\\)[ \\t]*;/\\1;/"))
 	res)
     (if add (setq args (cons "-a" args)))
     (or files (setq files (list buffer-file-name)))
@@ -5539,6 +6908,29 @@
   (message "indent-region/indent-sexp will %sbe automatically fix whitespace."
 	   (if cperl-indent-region-fix-constructs "" "not ")))
 
+(defun cperl-toggle-set-debug-unwind (arg &optional backtrace)
+  "Toggle (or, with numeric argument, set) debugging state of syntaxification.
+Nonpositive numeric argument disables debugging messages.  The message
+summarizes which regions it was decided to rescan for syntactic constructs.
+
+The message looks like this:
+
+  Syxify req=123..138 actual=101..146 done-to: 112=>146 statepos: 73=>117
+
+Numbers are character positions in the buffer.  REQ provides the range to
+rescan requested by `font-lock'.  ACTUAL is the range actually resyntaxified;
+for correct operation it should start and end outside any special syntactic
+construct.  DONE-TO and STATEPOS indicate changes to internal caches maintained
+by CPerl."
+  (interactive "P")
+  (or arg
+      (setq arg (if (eq cperl-syntaxify-by-font-lock 
+			(if backtrace 'backtrace 'message)) 0 1)))
+  (setq arg (if (> arg 0) (if backtrace 'backtrace 'message) t))
+  (setq cperl-syntaxify-by-font-lock arg)
+  (message "Debugging messages of syntax unwind %sabled."
+	   (if (eq arg t) "dis" "en")))
+
 ;;;; Tags file creation.
 
 (defvar cperl-tmp-buffer " *cperl-tmp*")
@@ -5679,13 +7071,22 @@
 	ret))))
 
 (defun cperl-add-tags-recurse-noxs ()
-  "Add to TAGS data for Perl and XSUB files in the current directory and kids.
+  "Add to TAGS data for \"pure\" Perl files in the current directory and kids.
 Use as
   emacs -batch -q -no-site-file -l emacs/cperl-mode.el \
-        -f cperl-add-tags-recurse
+        -f cperl-add-tags-recurse-noxs
 "
   (cperl-write-tags nil nil t t nil t))
 
+(defun cperl-add-tags-recurse-noxs-fullpath ()
+  "Add to TAGS data for \"pure\" Perl in the current directory and kids.
+Writes down fullpath, so TAGS is relocatable (but if the build directory
+is relocated, the file TAGS inside it breaks). Use as
+  emacs -batch -q -no-site-file -l emacs/cperl-mode.el \
+        -f cperl-add-tags-recurse-noxs-fullpath
+"
+  (cperl-write-tags nil nil t t nil t ""))
+
 (defun cperl-add-tags-recurse ()
   "Add to TAGS file data for Perl files in the current directory and kids.
 Use as
@@ -5855,9 +7256,9 @@
 	      (cperl-tags-hier-fill))
 	  (or tags-table-list
 	      (call-interactively 'visit-tags-table))
-	(mapcar
-	 (function
-	  (lambda (tagsfile)
+	  (mapcar
+	   (function
+	    (lambda (tagsfile)
 	      (message "Updating list of classes... %s" tagsfile)
 	    (set-buffer (get-file-buffer tagsfile))
 	    (cperl-tags-hier-fill)))
@@ -6019,7 +7420,7 @@
    '("[^-\t <>=+]\\(--\\|\\+\\+\\)"	; var-- var++
      "[a-zA-Z0-9_][|&][a-zA-Z0-9_$]"	; abc|def abc&def are often used.
      "&[(a-zA-Z0-9_$]"			; &subroutine &(var->field)
-     "<\\$?\\sw+\\(\\.\\sw+\\)?>"	; <IN> <stdin.h>
+     "<\\$?\\sw+\\(\\.\\(\\sw\\|_\\)+\\)?>"	; <IN> <stdin.h>
      "-[a-zA-Z][ \t]+[_$\"'`a-zA-Z]"	; -f file, -t STDIN
      "-[0-9]"				; -5
      "\\+\\+"				; ++var
@@ -6051,8 +7452,7 @@
   (interactive)
   (let (found-bad (p (point)))
     (setq last-nonmenu-event 13)	; To disable popup
-    (with-no-warnings  ; It is useful to push the mark here.
-     (beginning-of-buffer))
+    (goto-char (point-min))
     (map-y-or-n-p "Insert space here? "
 		  (lambda (arg) (insert " "))
 		  'cperl-next-bad-style
@@ -6448,7 +7848,7 @@
 eof[([FILEHANDLE])]
 ... eq ...	String equality.
 eval(EXPR) or eval { BLOCK }
-exec(LIST)
+exec([TRUENAME] ARGV0, ARGVs)     or     exec(SHELL_COMMAND_LINE)
 exit(EXPR)
 exp(EXPR)
 fcntl(FILEHANDLE,FUNCTION,SCALAR)
@@ -6584,7 +7984,7 @@
 symlink(OLDFILE,NEWFILE)
 syscall(LIST)
 sysread(FILEHANDLE,SCALAR,LENGTH[,OFFSET])
-system(LIST)
+system([TRUENAME] ARGV0 [,ARGV])     or     system(SHELL_COMMAND_LINE)
 syswrite(FILEHANDLE,SCALAR,LENGTH[,OFFSET])
 tell[(FILEHANDLE)]
 telldir(DIRHANDLE)
@@ -6685,7 +8085,7 @@
   ;; b is before the starting delimiter, e before the ending
   ;; e should be a marker, may be changed, but remains "correct".
   ;; EMBED is nil iff we process the whole REx.
-  ;; The REx is guarantied to have //x
+  ;; The REx is guaranteed to have //x
   ;; LEVEL shows how many levels deep to go
   ;; position at enter and at leave is not defined
   (let (s c tmp (m (make-marker)) (m1 (make-marker)) c1 spaces inline code pos)
@@ -6714,7 +8114,7 @@
 	  (goto-char e)
 	  (delete-horizontal-space)
 	  (insert "\n")
-	  (indent-to-column c)
+	  (cperl-make-indent c)
 	  (set-marker e (point))))
     (goto-char b)
     (end-of-line 2)
@@ -6724,7 +8124,7 @@
 	    inline t)
       (skip-chars-forward " \t")
       (delete-region s (point))
-      (indent-to-column c1)
+      (cperl-make-indent c1)
       (while (and
 	      inline
 	      (looking-at
@@ -6750,6 +8150,16 @@
 			(eq (preceding-char) ?\{)))
 	       (forward-char -1)
 	       (forward-sexp 1))
+	      ((and			; [], already syntaxified
+		(match-beginning 6)
+		cperl-regexp-scan
+		cperl-use-syntax-table-text-property)
+	       (forward-char -1)
+	       (forward-sexp 1)
+	       (or (eq (preceding-char) ?\])
+		   (error "[]-group not terminated"))
+	       (re-search-forward
+		"\\=\\([*+?]\\|{[0-9]+\\(,[0-9]*\\)?}\\)\\??" e t))
 	      ((match-beginning 6)	; []
 	       (setq tmp (point))
 	       (if (looking-at "\\^?\\]")
@@ -6763,12 +8173,8 @@
 		   (setq pos t)))
 	       (or (eq (preceding-char) ?\])
 		   (error "[]-group not terminated"))
-	       (if (eq (following-char) ?\{)
-		   (progn
-		     (forward-sexp 1)
-		     (and (eq (following-char) ??)
-			  (forward-char 1)))
-		 (re-search-forward "\\=\\([*+?]\\??\\)" e t)))
+	       (re-search-forward
+		"\\=\\([*+?]\\|{[0-9]+\\(,[0-9]*\\)?}\\)\\??" e t))
 	      ((match-beginning 7)	; ()
 	       (goto-char (match-beginning 0))
 	       (setq pos (current-column))
@@ -6776,7 +8182,7 @@
 		   (progn
 		     (delete-horizontal-space)
 		     (insert "\n")
-		     (indent-to-column c1)))
+		     (cperl-make-indent c1)))
 	       (setq tmp (point))
 	       (forward-sexp 1)
 	       ;;	       (or (forward-sexp 1)
@@ -6836,7 +8242,7 @@
 		     (insert "\n"))
 		 ;; first at line
 		 (delete-region (point) tmp))
-	       (indent-to-column c)
+	       (cperl-make-indent c)
 	       (forward-char 1)
 	       (skip-chars-forward " \t")
 	       (setq spaces nil)
@@ -6859,10 +8265,7 @@
 	     (/= (current-indentation) c))
 	(progn
 	  (beginning-of-line)
-	  (setq s (point))
-	  (skip-chars-forward " \t")
-	  (delete-region s (point))
-	  (indent-to-column c)))))
+	  (cperl-make-indent c)))))
 
 (defun cperl-make-regexp-x ()
   ;; Returns position of the start
@@ -6931,7 +8334,7 @@
   (interactive)
   ;; (save-excursion		; Can't, breaks `cperl-contract-levels'
   (cperl-regext-to-level-start)
-  (let ((b (point)) (e (make-marker)) s c)
+  (let ((b (point)) (e (make-marker)) c)
     (forward-sexp 1)
     (set-marker e (1- (point)))
     (goto-char b)
@@ -6940,10 +8343,7 @@
        ((match-beginning 1)		; #-comment
 	(or c (setq c (current-indentation)))
 	(beginning-of-line 2)		; Skip
-	(setq s (point))
-	(skip-chars-forward " \t")
-	(delete-region s (point))
-	(indent-to-column c))
+	(cperl-make-indent c))
        (t
 	(delete-char -1)
 	(just-one-space))))))
@@ -6982,96 +8382,197 @@
       (set-marker e (1- (point)))
       (cperl-beautify-regexp-piece b e nil deep))))
 
+(defun cperl-invert-if-unless-modifiers ()
+  "Change `B if A;' into `if (A) {B}' etc if possible.
+\(Unfinished.)"
+  (interactive)				; 
+  (let (A B pre-B post-B pre-if post-if pre-A post-A if-string
+	  (w-rex "\\<\\(if\\|unless\\|while\\|until\\|for\\|foreach\\)\\>"))
+    (and (= (char-syntax (preceding-char)) ?w)
+	 (forward-sexp -1))
+    (setq pre-if (point))
+    (cperl-backward-to-start-of-expr)
+    (setq pre-B (point))
+    (forward-sexp 1)		; otherwise forward-to-end-of-expr is NOP
+    (cperl-forward-to-end-of-expr)
+    (setq post-A (point))
+    (goto-char pre-if)
+    (or (looking-at w-rex)
+	;; Find the position
+	(progn (goto-char post-A)
+	       (while (and
+		       (not (looking-at w-rex))
+		       (> (point) pre-B))
+		 (forward-sexp -1))
+	       (setq pre-if (point))))
+    (or (looking-at w-rex)
+	(error "Can't find `if', `unless', `while', `until', `for' or `foreach'"))
+    ;; 1 B 2 ... 3 B-com ... 4 if 5 ... if-com 6 ... 7 A 8
+    (setq if-string (buffer-substring (match-beginning 0) (match-end 0)))
+    ;; First, simple part: find code boundaries
+    (forward-sexp 1)
+    (setq post-if (point))
+    (forward-sexp -2)
+    (forward-sexp 1)
+    (setq post-B (point))
+    (cperl-backward-to-start-of-expr)
+    (setq pre-B (point))
+    (setq B (buffer-substring pre-B post-B))
+    (goto-char pre-if)
+    (forward-sexp 2)
+    (forward-sexp -1)
+    ;; May be after $, @, $# etc of a variable
+    (skip-chars-backward "$@%#")
+    (setq pre-A (point))
+    (cperl-forward-to-end-of-expr)
+    (setq post-A (point))
+    (setq A (buffer-substring pre-A post-A))
+    ;; Now modify (from end, to not break the stuff)
+    (skip-chars-forward " \t;")
+    (delete-region pre-A (point))	; we move to pre-A
+    (insert "\n" B ";\n}")
+    (and (looking-at "[ \t]*#") (cperl-indent-for-comment))
+    (delete-region pre-if post-if)
+    (delete-region pre-B post-B)
+    (goto-char pre-B)
+    (insert if-string " (" A ") {")
+    (setq post-B (point))
+    (if (looking-at "[ \t]+$")
+	(delete-horizontal-space)
+      (if (looking-at "[ \t]*#")
+	  (cperl-indent-for-comment)
+	(just-one-space)))
+    (forward-line 1)
+    (if (looking-at "[ \t]*$")
+	(progn				; delete line
+	  (delete-horizontal-space)
+	  (delete-region (point) (1+ (point)))))
+    (cperl-indent-line)
+    (goto-char (1- post-B))
+    (forward-sexp 1)
+    (cperl-indent-line)
+    (goto-char pre-B)))
+
 (defun cperl-invert-if-unless ()
-  "Change `if (A) {B}' into `B if A;' etc if possible."
+  "Change `if (A) {B}' into `B if A;' etc (or visa versa) if possible.
+If the cursor is not on the leading keyword of the BLOCK flavor of
+construct, will assume it is the STATEMENT flavor, so will try to find
+the appropriate statement modifier."
   (interactive)
-  (or (looking-at "\\<")
-      (forward-sexp -1))
+  (and (= (char-syntax (preceding-char)) ?w)
+       (forward-sexp -1))
   (if (looking-at "\\<\\(if\\|unless\\|while\\|until\\|for\\|foreach\\)\\>")
-      (let ((pos1 (point))
-	    pos2 pos3 pos4 pos5 s1 s2 state p pos45
-	    (s0 (buffer-substring (match-beginning 0) (match-end 0))))
+      (let ((pre-if (point))
+	    pre-A post-A pre-B post-B A B state p end-B-code is-block B-comment
+	    (if-string (buffer-substring (match-beginning 0) (match-end 0))))
 	(forward-sexp 2)
-	(setq pos3 (point))
+	(setq post-A (point))
 	(forward-sexp -1)
-	(setq pos2 (point))
-	(if (eq (following-char) ?\( )
+	(setq pre-A (point))
+	(setq is-block (and (eq (following-char) ?\( )
+			    (save-excursion
+			      (condition-case nil
+				  (progn
+				    (forward-sexp 2)
+				    (forward-sexp -1)
+				    (eq (following-char) ?\{ ))
+				(error nil)))))
+	(if is-block
 	    (progn
-	      (goto-char pos3)
+	      (goto-char post-A)
 	      (forward-sexp 1)
-	      (setq pos5 (point))
+	      (setq post-B (point))
 	      (forward-sexp -1)
-	      (setq pos4 (point))
-	      ;; XXXX In fact may be `A if (B); {C}' ...
+	      (setq pre-B (point))
 	      (if (and (eq (following-char) ?\{ )
 		       (progn
-			 (cperl-backward-to-noncomment pos3)
+			 (cperl-backward-to-noncomment post-A)
 			 (eq (preceding-char) ?\) )))
 		  (if (condition-case nil
 			  (progn
-			    (goto-char pos5)
+			    (goto-char post-B)
 			    (forward-sexp 1)
 			    (forward-sexp -1)
 			    (looking-at "\\<els\\(e\\|if\\)\\>"))
 			(error nil))
 		      (error
-		       "`%s' (EXPR) {BLOCK} with `else'/`elsif'" s0)
-		    (goto-char (1- pos5))
-		    (cperl-backward-to-noncomment pos4)
+		       "`%s' (EXPR) {BLOCK} with `else'/`elsif'" if-string)
+		    (goto-char (1- post-B))
+		    (cperl-backward-to-noncomment pre-B)
 		    (if (eq (preceding-char) ?\;)
 			(forward-char -1))
-		    (setq pos45 (point))
-		    (goto-char pos4)
-		    (while (re-search-forward "\\<\\(for\\|foreach\\|if\\|unless\\|while\\|until\\)\\>\\|;" pos45 t)
+		    (setq end-B-code (point))
+		    (goto-char pre-B)
+		    (while (re-search-forward "\\<\\(for\\|foreach\\|if\\|unless\\|while\\|until\\)\\>\\|;" end-B-code t)
 		      (setq p (match-beginning 0)
-			    s1 (buffer-substring p (match-end 0))
-			    state (parse-partial-sexp pos4 p))
+			    A (buffer-substring p (match-end 0))
+			    state (parse-partial-sexp pre-B p))
 		      (or (nth 3 state)
 			  (nth 4 state)
 			  (nth 5 state)
-			  (error "`%s' inside `%s' BLOCK" s1 s0))
+			  (error "`%s' inside `%s' BLOCK" A if-string))
 		      (goto-char (match-end 0)))
 		    ;; Finally got it
-		    (goto-char (1+ pos4))
+		    (goto-char (1+ pre-B))
 		    (skip-chars-forward " \t\n")
-		    (setq s2 (buffer-substring (point) pos45))
-		    (goto-char pos45)
+		    (setq B (buffer-substring (point) end-B-code))
+		    (goto-char end-B-code)
 		    (or (looking-at ";?[ \t\n]*}")
 			(progn
 			  (skip-chars-forward "; \t\n")
-			  (setq s2 (concat s2 "\n" (buffer-substring (point) (1- pos5))))))
-		    (and (equal s2 "")
-			 (setq s2 "1"))
-		    (goto-char (1- pos3))
-		    (cperl-backward-to-noncomment pos2)
+			  (setq B-comment
+				(buffer-substring (point) (1- post-B)))))
+		    (and (equal B "")
+			 (setq B "1"))
+		    (goto-char (1- post-A))
+		    (cperl-backward-to-noncomment pre-A)
 		    (or (looking-at "[ \t\n]*)")
-			(goto-char (1- pos3)))
+			(goto-char (1- post-A)))
 		    (setq p (point))
-		    (goto-char (1+ pos2))
+		    (goto-char (1+ pre-A))
 		    (skip-chars-forward " \t\n")
-		    (setq s1 (buffer-substring (point) p))
-		    (delete-region pos4 pos5)
-		    (delete-region pos2 pos3)
-		    (goto-char pos1)
-		    (insert s2 " ")
+		    (setq A (buffer-substring (point) p))
+		    (delete-region pre-B post-B)
+		    (delete-region pre-A post-A)
+		    (goto-char pre-if)
+		    (insert B " ")
+		    (and B-comment (insert B-comment " "))
 		    (just-one-space)
 		    (forward-word 1)
-		    (setq pos1 (point))
-		    (insert " " s1 ";")
+		    (setq pre-A (point))
+		    (insert " " A ";")
 		    (delete-horizontal-space)
+		    (setq post-B (point))
+		    (if (looking-at "#")
+			(indent-for-comment))
+		    (goto-char post-B)
 		    (forward-char -1)
 		    (delete-horizontal-space)
-		    (goto-char pos1)
+		    (goto-char pre-A)
 		    (just-one-space)
-		    (cperl-indent-line))
-		(error "`%s' (EXPR) not with an {BLOCK}" s0)))
-	  (error "`%s' not with an (EXPR)" s0)))
-    (error "Not at `if', `unless', `while', `until', `for' or `foreach'")))
+		    (goto-char pre-if)
+		    (setq pre-A (set-marker (make-marker) pre-A))
+		    (while (<= (point) (marker-position pre-A))
+		      (cperl-indent-line)
+		      (forward-line 1))
+		    (goto-char (marker-position pre-A))
+		    (if B-comment
+			(progn
+			  (forward-line -1)
+			  (indent-for-comment)
+			  (goto-char (marker-position pre-A)))))
+		(error "`%s' (EXPR) not with an {BLOCK}" if-string)))
+	  ;; (error "`%s' not with an (EXPR)" if-string)
+	  (forward-sexp -1)
+	  (cperl-invert-if-unless-modifiers)))
+    ;;(error "Not at `if', `unless', `while', `until', `for' or `foreach'")
+    (cperl-invert-if-unless-modifiers)))
 
 ;;; By Anthony Foiani <afoiani@uswest.com>
 ;;; Getting help on modules in C-h f ?
 ;;; This is a modified version of `man'.
 ;;; Need to teach it how to lookup functions
+;;;###autoload
 (defun cperl-perldoc (word)
   "Run `perldoc' on WORD."
   (interactive
@@ -7103,6 +8604,7 @@
      (t
       (Man-getpage-in-background word)))))
 
+;;;###autoload
 (defun cperl-perldoc-at-point ()
   "Run a `perldoc' on the word around point."
   (interactive)
@@ -7147,7 +8649,7 @@
 (defun cperl-pod2man-build-command ()
   "Builds the entire background manpage and cleaning command."
   (let ((command (concat pod2man-program " %s 2>/dev/null"))
-        (flist Man-filter-list))
+        (flist (and (boundp 'Man-filter-list) Man-filter-list)))
     (while (and flist (car flist))
       (let ((pcom (car (car flist)))
             (pargs (cdr (car flist))))
@@ -7161,6 +8663,205 @@
         (setq flist (cdr flist))))
     command))
 
+
+(defun cperl-next-interpolated-REx-1 ()
+  "Move point to next REx which has interpolated parts without //o.
+Skips RExes consisting of one interpolated variable.
+
+Note that skipped RExen are not performance hits."
+  (interactive "")
+  (cperl-next-interpolated-REx 1))
+
+(defun cperl-next-interpolated-REx-0 ()
+  "Move point to next REx which has interpolated parts without //o."
+  (interactive "")
+  (cperl-next-interpolated-REx 0))
+
+(defun cperl-next-interpolated-REx (&optional skip beg limit)
+  "Move point to next REx which has interpolated parts.
+SKIP is a list of possible types to skip, BEG and LIMIT are the starting
+point and the limit of search (default to point and end of buffer).
+
+SKIP may be a number, then it behaves as list of numbers up to SKIP; this
+semantic may be used as a numeric argument.
+
+Types are 0 for / $rex /o (interpolated once), 1 for /$rex/ (if $rex is
+a result of qr//, this is not a performance hit), t for the rest."
+  (interactive "P")
+  (if (numberp skip) (setq skip (list 0 skip)))
+  (or beg (setq beg (point)))
+  (or limit (setq limit (point-max)))	; needed for n-s-p-c
+  (let (pp)
+    (and (eq (get-text-property beg 'syntax-type) 'string)
+	 (setq beg (next-single-property-change beg 'syntax-type nil limit)))
+    (cperl-map-pods-heres
+     (function (lambda (s e p)
+		 (if (memq (get-text-property s 'REx-interpolated) skip)
+		     t
+		   (setq pp s)
+		   nil)))	; nil stops
+     'REx-interpolated beg limit)
+    (if pp (goto-char pp)
+      (message "No more interpolated REx"))))
+
+;;; Initial version contributed by Trey Belew
+(defun cperl-here-doc-spell (&optional beg end)
+  "Spell-check HERE-documents in the Perl buffer.
+If a region is highlighted, restricts to the region."
+  (interactive "")
+  (cperl-pod-spell t beg end))
+
+(defun cperl-pod-spell (&optional do-heres beg end)
+  "Spell-check POD documentation.
+If invoked with prefix argument, will do HERE-DOCs instead.
+If a region is highlighted, restricts to the region."
+  (interactive "P")
+  (save-excursion
+    (let (beg end)
+      (if (cperl-mark-active)
+	  (setq beg (min (mark) (point))
+		end (max (mark) (point)))
+	(setq beg (point-min)
+	      end (point-max)))
+      (cperl-map-pods-heres (function
+			     (lambda (s e p)
+			       (if do-heres
+				   (setq e (save-excursion
+					     (goto-char e)
+					     (forward-line -1)
+					     (point))))
+			       (ispell-region s e)
+			       t))
+			    (if do-heres 'here-doc-group 'in-pod)
+			    beg end))))
+
+(defun cperl-map-pods-heres (func &optional prop s end)
+  "Executes a function over regions of pods or here-documents.
+PROP is the text-property to search for; default to `in-pod'.  Stop when
+function returns nil."
+  (let (pos posend has-prop (cont t))
+    (or prop (setq prop 'in-pod))
+    (or s (setq s (point-min)))
+    (or end (setq end (point-max)))
+    (cperl-update-syntaxification end end)
+    (save-excursion
+      (goto-char (setq pos s))
+      (while (and cont (< pos end))
+	(setq has-prop (get-text-property pos prop))
+	(setq posend (next-single-property-change pos prop nil end))
+	(and has-prop
+	     (setq cont (funcall func pos posend prop)))
+	(setq pos posend)))))
+
+;;; Based on code by Masatake YAMATO:
+(defun cperl-get-here-doc-region (&optional pos pod)
+  "Return HERE document region around the point.
+Return nil if the point is not in a HERE document region.  If POD is non-nil,
+will return a POD section if point is in a POD section."
+  (or pos (setq pos (point)))
+  (cperl-update-syntaxification pos pos)
+  (if (or (eq 'here-doc  (get-text-property pos 'syntax-type))
+	  (and pod
+	       (eq 'pod (get-text-property pos 'syntax-type))))
+      (let ((b (cperl-beginning-of-property pos 'syntax-type))
+	    (e (next-single-property-change pos 'syntax-type)))
+	(cons b (or e (point-max))))))
+
+(defun cperl-narrow-to-here-doc (&optional pos)
+  "Narrows editing region to the HERE-DOC at POS.
+POS defaults to the point."
+  (interactive "d")
+  (or pos (setq pos (point)))
+  (let ((p (cperl-get-here-doc-region pos)))
+    (or p (error "Not inside a HERE document"))
+    (narrow-to-region (car p) (cdr p))
+    (message
+     "When you are finished with narrow editing, type C-x n w")))
+
+(defun cperl-select-this-pod-or-here-doc (&optional pos)
+  "Select the HERE-DOC (or POD section) at POS.
+POS defaults to the point."
+  (interactive "d")
+  (let ((p (cperl-get-here-doc-region pos t)))
+    (if p
+	(progn
+	  (goto-char (car p))
+	  (push-mark (cdr p) nil t))	; Message, activate in transient-mode
+      (message "I do not think POS is in POD or a HERE-doc..."))))
+
+(defun cperl-facemenu-add-face-function (face end)
+  "A callback to process user-initiated font-change requests.
+Translates `bold', `italic', and `bold-italic' requests to insertion of
+corresponding POD directives, and `underline' to C<> POD directive.
+
+Such requests are usually bound to M-o LETTER."
+  (or (get-text-property (point) 'in-pod)
+      (error "Faces can only be set within POD"))
+  (setq facemenu-end-add-face (if (eq face 'bold-italic) ">>" ">"))
+  (cdr (or (assq face '((bold . "B<")
+			(italic . "I<")
+			(bold-italic . "B<I<")
+			(underline . "C<")))
+	   (error "Face %s not configured for cperl-mode"
+		  face))))
+
+(defun cperl-time-fontification (&optional l step lim)
+  "Times how long it takes to do incremental fontification in a region.
+L is the line to start at, STEP is the number of lines to skip when
+doing next incremental fontification, LIM is the maximal number of
+incremental fontification to perform.  Messages are accumulated in
+*Messages* buffer.
+
+May be used for pinpointing which construct slows down buffer fontification:
+start with default arguments, then refine the slowdown regions."
+  (interactive "nLine to start at: \nnStep to do incremental fontification: ")
+  (or l (setq l 1))
+  (or step (setq step 500))
+  (or lim (setq lim 40))
+  (let* ((timems (function (lambda ()
+			     (let ((tt (current-time)))
+			       (+ (* 1000 (nth 1 tt)) (/ (nth 2 tt) 1000))))))
+	 (tt (funcall timems)) (c 0) delta tot)
+    (goto-line l)
+    (cperl-mode)
+    (setq tot (- (- tt (setq tt (funcall timems)))))
+    (message "cperl-mode at %s: %s" l tot)
+    (while (and (< c lim) (not (eobp)))
+      (forward-line step)
+      (setq l (+ l step))
+      (setq c (1+ c))
+      (cperl-update-syntaxification (point) (point))
+      (setq delta (- (- tt (setq tt (funcall timems)))) tot (+ tot delta))
+      (message "to %s:%6s,%7s" l delta tot))
+    tot))
+
+(defun cperl-emulate-lazy-lock (&optional window-size)
+  "Emulate `lazy-lock' without `condition-case', so `debug-on-error' works.
+Start fontifying the buffer from the start (or end) using the given
+WINDOW-SIZE (units is lines).  Negative WINDOW-SIZE starts at end, and
+goes backwards; default is -50.  This function is not CPerl-specific; it
+may be used to debug problems with delayed incremental fontification."
+  (interactive
+   "nSize of window for incremental fontification, negative goes backwards: ")
+  (or window-size (setq window-size -50))
+  (let ((pos (if (> window-size 0)
+		 (point-min)
+	       (point-max)))
+	p)
+    (goto-char pos)
+    (normal-mode)
+    ;; Why needed???  With older font-locks???
+    (set (make-local-variable 'font-lock-cache-position) (make-marker))
+    (while (if (> window-size 0)
+	       (< pos (point-max))
+	     (> pos (point-min)))
+      (setq p (progn
+		(forward-line window-size)
+		(point)))
+      (font-lock-fontify-region (min p pos) (max p pos))
+      (setq pos p))))
+
+
 (defun cperl-lazy-install ())		; Avoid a warning
 (defun cperl-lazy-unstall ())		; Avoid a warning
 
@@ -7176,7 +8877,7 @@
 	"Switches on Auto-Help on Perl constructs (put in the message area).
 Delay of auto-help controlled by `cperl-lazy-help-time'."
 	(interactive)
-	(make-variable-buffer-local 'cperl-help-shown)
+	(make-local-variable 'cperl-help-shown)
 	(if (and (cperl-val 'cperl-lazy-help-time)
 		 (not cperl-lazy-installed))
 	    (progn
@@ -7209,48 +8910,109 @@
 ;;; Plug for wrong font-lock:
 
 (defun cperl-font-lock-unfontify-region-function (beg end)
-  ;; Simplified now that font-lock-unfontify-region uses save-buffer-state.
-  (let (before-change-functions after-change-functions)
-    (remove-text-properties beg end '(face nil))))
+  (let* ((modified (buffer-modified-p)) (buffer-undo-list t)
+	 (inhibit-read-only t) (inhibit-point-motion-hooks t)
+	 before-change-functions after-change-functions
+	 deactivate-mark buffer-file-name buffer-file-truename)
+    (remove-text-properties beg end '(face nil))
+    (if (and (not modified) (buffer-modified-p))
+      (set-buffer-modified-p nil))))
+
+(defun cperl-font-lock-fontify-region-function (beg end loudly)
+  "Extends the region to safe positions, then calls the default function.
+Newer `font-lock's can do it themselves.
+We unwind only as far as needed for fontification.  Syntaxification may
+do extra unwind via `cperl-unwind-to-safe'."
+  (save-excursion
+    (goto-char beg)
+    (while (and beg
+		(progn
+		  (beginning-of-line)
+		  (eq (get-text-property (setq beg (point)) 'syntax-type)
+		      'multiline)))
+      (if (setq beg (cperl-beginning-of-property beg 'syntax-type))
+	  (goto-char beg)))
+    (setq beg (point))
+    (goto-char end)
+    (while (and end
+		(progn
+		  (or (bolp) (condition-case nil
+				 (forward-line 1)
+			       (error nil)))
+		  (eq (get-text-property (setq end (point)) 'syntax-type)
+		      'multiline)))
+      (setq end (next-single-property-change end 'syntax-type nil (point-max)))
+      (goto-char end))
+    (setq end (point)))
+  (font-lock-default-fontify-region beg end loudly))
 
 (defvar cperl-d-l nil)
 (defun cperl-fontify-syntaxically (end)
   ;; Some vars for debugging only
   ;; (message "Syntaxifying...")
-  (let ((dbg (point)) (iend end)
+  (let ((dbg (point)) (iend end) (idone cperl-syntax-done-to)
 	(istate (car cperl-syntax-state))
-	start)
-    (and cperl-syntaxify-unwind
-	 (setq end (cperl-unwind-to-safe t end)))
-    (setq start (point))
+	start from-start edebug-backtrace-buffer)
+    (if (eq cperl-syntaxify-by-font-lock 'backtrace)
+	(progn
+	  (require 'edebug)
+	  (let ((f 'edebug-backtrace))
+	    (funcall f))))	; Avoid compile-time warning
     (or cperl-syntax-done-to
-	(setq cperl-syntax-done-to (point-min)))
-    (if (or (not (boundp 'font-lock-hot-pass))
-	    (eval 'font-lock-hot-pass)
-	    t)				; Not debugged otherwise
-	;; Need to forget what is after `start'
-	(setq start (min cperl-syntax-done-to start))
-      ;; Fontification without a change
-      (setq start (max cperl-syntax-done-to start)))
+	(setq cperl-syntax-done-to (point-min)
+	      from-start t))
+    (setq start (if (and cperl-hook-after-change
+			 (not from-start))
+		    cperl-syntax-done-to ; Fontify without change; ignore start
+		  ;; Need to forget what is after `start'
+		  (min cperl-syntax-done-to (point))))
+    (goto-char start)
+    (beginning-of-line)
+    (setq start (point))
+    (and cperl-syntaxify-unwind
+	 (setq end (cperl-unwind-to-safe t end)
+	       start (point)))
     (and (> end start)
 	 (setq cperl-syntax-done-to start) ; In case what follows fails
 	 (cperl-find-pods-heres start end t nil t))
-    (if (eq cperl-syntaxify-by-font-lock 'message)
-	(message "Syntaxified %s..%s from %s to %s(%s), state %s-->%s"
-		 dbg iend
-		 start end cperl-syntax-done-to
+    (if (memq cperl-syntaxify-by-font-lock '(backtrace message))
+	(message "Syxify req=%s..%s actual=%s..%s done-to: %s=>%s statepos: %s=>%s"
+		 dbg iend start end idone cperl-syntax-done-to
 		 istate (car cperl-syntax-state))) ; For debugging
     nil))				; Do not iterate
 
 (defun cperl-fontify-update (end)
-  (let ((pos (point)) prop posend)
+  (let ((pos (point-min)) prop posend)
+    (setq end (point-max))
     (while (< pos end)
-      (setq prop (get-text-property pos 'cperl-postpone))
-      (setq posend (next-single-property-change pos 'cperl-postpone nil end))
+      (setq prop (get-text-property pos 'cperl-postpone)
+	    posend (next-single-property-change pos 'cperl-postpone nil end))
       (and prop (put-text-property pos posend (car prop) (cdr prop)))
       (setq pos posend)))
   nil)					; Do not iterate
 
+(defun cperl-fontify-update-bad (end)
+  ;; Since fontification happens with different region than syntaxification,
+  ;; do to the end of buffer, not to END;;; likewise, start earlier if needed
+  (let* ((pos (point)) (prop (get-text-property pos 'cperl-postpone)) posend)
+    (if prop
+	(setq pos (or (cperl-beginning-of-property
+		       (cperl-1+ pos) 'cperl-postpone)
+		      (point-min))))
+    (while (< pos end)
+      (setq posend (next-single-property-change pos 'cperl-postpone))
+      (and prop (put-text-property pos posend (car prop) (cdr prop)))
+      (setq pos posend)
+      (setq prop (get-text-property pos 'cperl-postpone))))
+  nil)					; Do not iterate
+
+;; Called when any modification is made to buffer text.
+(defun cperl-after-change-function (beg end old-len)
+  ;; We should have been informed about changes by `font-lock'.  Since it
+  ;; does not inform as which calls are defered, do it ourselves
+  (if cperl-syntax-done-to
+      (setq cperl-syntax-done-to (min cperl-syntax-done-to beg))))
+
 (defun cperl-update-syntaxification (from to)
   (if (and cperl-use-syntax-table-text-property
 	   cperl-syntaxify-by-font-lock
@@ -7262,7 +9024,7 @@
 	  (cperl-fontify-syntaxically to)))))
 
 (defvar cperl-version
-  (let ((v  "Revision: 5.0"))
+  (let ((v  "Revision: 5.22"))
     (string-match ":\\s *\\([0-9.]+\\)" v)
     (substring v (match-beginning 1) (match-end 1)))
   "Version of IZ-supported CPerl package this file is based on.")
--- a/lisp/progmodes/gdb-ui.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/progmodes/gdb-ui.el	Sun Oct 15 02:54:13 2006 +0000
@@ -902,20 +902,23 @@
 TEXT is the text of the button we clicked on, a + or - item.
 TOKEN is data related to this node.
 INDENT is the current indentation depth."
-  (cond ((string-match "+" text)        ;expand this node
-	 (if (and
-	      (eq (buffer-local-value 'gud-minor-mode gud-comint-buffer) 'gdba)
-	      (string-equal gdb-version "pre-6.4"))
-	     (gdb-var-list-children token)
-	   (gdb-var-list-children-1 token)))
-	((string-match "-" text)	;contract this node
-	 (dolist (var gdb-var-list)
-	   (if (string-match (concat token "\\.") (car var))
-	       (setq gdb-var-list (delq var gdb-var-list))))
-	 (speedbar-change-expand-button-char ?+)
-	 (speedbar-delete-subblock indent))
-	(t (error "Ooops...  not sure what to do")))
-  (speedbar-center-buffer-smartly))
+  (if (and gud-comint-buffer (buffer-name gud-comint-buffer))
+      (progn
+	(cond ((string-match "+" text)	;expand this node
+	       (if (and (eq (buffer-local-value
+			     'gud-minor-mode gud-comint-buffer) 'gdba)
+			(string-equal gdb-version "pre-6.4"))
+		   (gdb-var-list-children token)
+		 (gdb-var-list-children-1 token)))
+	      ((string-match "-" text)	;contract this node
+	       (dolist (var gdb-var-list)
+		 (if (string-match (concat token "\\.") (car var))
+		     (setq gdb-var-list (delq var gdb-var-list))))
+	       (speedbar-change-expand-button-char ?+)
+	       (speedbar-delete-subblock indent))
+	      (t (error "Ooops...  not sure what to do")))
+	(speedbar-center-buffer-smartly))
+    (message-box "GUD session has been killed")))
 
 (defun gdb-get-target-string ()
   (with-current-buffer gud-comint-buffer
@@ -1132,7 +1135,7 @@
       (if gdb-prompting
 	  (progn
 	    (gdb-send-item item)
-	(setq gdb-prompting nil))
+	    (setq gdb-prompting nil))
 	(push item gdb-input-queue))))
 
 (defun gdb-dequeue-input ()
--- a/lisp/progmodes/sh-script.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/progmodes/sh-script.el	Sun Oct 15 02:54:13 2006 +0000
@@ -2460,55 +2460,45 @@
   ;;
   (if (bolp)
       nil
-    (let (c min-point
-	  (start (point)))
-      (save-restriction
-	(narrow-to-region
-	(if (sh-this-is-a-continuation)
-	    (setq min-point (sh-prev-line nil))
-	  (save-excursion
-	    (beginning-of-line)
-	    (setq min-point (point))))
-	(point))
-	(skip-chars-backward " \t;")
-	(unless (looking-at "\\s-*;;")
-	  (skip-chars-backward "^)}];\"'`({[")
-	  (setq c (char-before)))
-	(sh-debug "stopping at %d c is %s  start=%d min-point=%d"
-		  (point) c start min-point)
-	(if (< (point) min-point)
-	    (error "point %d < min-point %d" (point) min-point))
-	(cond
-	 ((looking-at "\\s-*;;")
-	  ;; (message "Found ;; !")
-	  ";;")
-	 ((or (eq c ?\n)
-	      (eq c nil)
-	      (eq c ?\;))
-	 (let (done kwd next
-	       (boundary (point)))
-	   (skip-chars-forward " \t\n\\\\")
-	   (while (and (not done) (not (eobp)))
-	     (if next (setq boundary next))
-	     ;; skip forward over white space newline and \ at eol
-	     (sh-debug "Now at %d   start=%d" (point) start)
-	     (if (>= (point) start)
-		 (progn
-		   (sh-debug "point: %d >= start: %d" (point) start)
-		   nil)
-	       (setq kwd (sh-get-word))
-	       (unless (eobp) (forward-char 1))
-	       (if (member kwd (sh-feature sh-leading-keywords))
-		   (setq next (point))
-		 (setq done t)))
-	     (skip-chars-forward " \t\n\\\\"))
-	   (goto-char boundary)
-	   kwd))
-	 (t
-	  ;; c	-- return a string
-	  (char-to-string c)
-	  ))
-	))))
+    (let ((start (point))
+          (min-point (if (sh-this-is-a-continuation)
+                         (sh-prev-line nil)
+                       (line-beginning-position))))
+      (skip-chars-backward " \t;" min-point)
+      (if (looking-at "\\s-*;;")
+          ;; (message "Found ;; !")
+          ";;"
+        (skip-chars-backward "^)}];\"'`({[" min-point)
+        (let ((c (if (> (point) min-point) (char-before))))
+          (sh-debug "stopping at %d c is %s  start=%d min-point=%d"
+                    (point) c start min-point)
+          (if (not (memq c '(?\n nil ?\;)))
+              ;; c	-- return a string
+              (char-to-string c)
+            ;; Return the leading keyword of the "command" we supposedly
+            ;; skipped over.  Maybe we skipped too far (e.g. past a `do' or
+            ;; `then' that precedes the actual command), so check whether
+            ;; we're looking at such a keyword and if so, move back forward.
+            (let ((boundary (point))
+                  kwd next)
+              (while
+                  (progn
+                    ;; Skip forward over white space newline and \ at eol.
+                    (skip-chars-forward " \t\n\\\\" start)
+                    (if (>= (point) start)
+                        (progn
+                          (sh-debug "point: %d >= start: %d" (point) start)
+                          nil)
+                      (if next (setq boundary next))
+                      (sh-debug "Now at %d   start=%d" (point) start)
+                      (setq kwd (sh-get-word))
+                      (if (member kwd (sh-feature sh-leading-keywords))
+                          (progn
+                            (setq next (point))
+                            t)
+                        nil))))
+              (goto-char boundary)
+              kwd)))))))
 
 
 (defun sh-this-is-a-continuation ()
@@ -2527,7 +2517,7 @@
 	(goto-char where))
     (prog1
 	(buffer-substring (point)
-			  (progn (skip-chars-forward "^ \t\n;&")(point)))
+			  (progn (skip-chars-forward "^ \t\n;&|()")(point)))
       (unless and-move
 	(goto-char start)))))
 
--- a/lisp/shell.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/shell.el	Sun Oct 15 02:54:13 2006 +0000
@@ -272,6 +272,8 @@
   :type '(choice (const :tag "None" nil) file)
   :group 'shell)
 
+;; Note: There are no explicit references to the variable `explicit-csh-args'.
+;; It is used implicitly by M-x shell when the shell is `csh'.
 (defcustom explicit-csh-args
   (if (eq system-type 'hpux)
       ;; -T persuades HP's csh not to think it is smarter
@@ -283,12 +285,15 @@
   :type '(repeat (string :tag "Argument"))
   :group 'shell)
 
+;; Note: There are no explicit references to the variable `explicit-bash-args'.
+;; It is used implicitly by M-x shell when the interactive shell is `bash'.
 (defcustom explicit-bash-args
-  ;; Tell bash not to use readline, except for bash 1.x which doesn't grook --noediting.
-  ;; Bash 1.x has -nolineediting, but process-send-eof cannot terminate bash if we use it.
   (let* ((prog (or (and (boundp 'explicit-shell-file-name) explicit-shell-file-name)
 		   (getenv "ESHELL") shell-file-name))
 	 (name (file-name-nondirectory prog)))
+    ;; Tell bash not to use readline, except for bash 1.x which
+    ;; doesn't grook --noediting.  Bash 1.x has -nolineediting, but
+    ;; process-send-eof cannot terminate bash if we use it.
     (if (and (not purify-flag)
 	     (equal name "bash")
 	     (file-executable-p prog)
--- a/lisp/simple.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/simple.el	Sun Oct 15 02:54:13 2006 +0000
@@ -1675,7 +1675,7 @@
 Normally, Emacs discards the undo info for the current command if
 it exceeds `undo-outer-limit'.  But if you set this option
 non-nil, it asks in the echo area whether to discard the info.
-If you answer no, there a slight risk that Emacs might crash, so
+If you answer no, there is a slight risk that Emacs might crash, so
 only do it if you really want to undo the command.
 
 This option is mainly intended for debugging.  You have to be
--- a/lisp/strokes.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/strokes.el	Sun Oct 15 02:54:13 2006 +0000
@@ -142,6 +142,8 @@
 ;; the user to enter strokes which "remove the pencil from the paper"
 ;; so to speak, so one character can have multiple strokes.
 
+;; NOTE (Oct 7, 2006): The URLs below seem to be invalid!!!
+
 ;; You can read more about strokes at:
 
 ;; http://www.mit.edu/people/cadet/strokes-help.html
@@ -211,7 +213,6 @@
 (defgroup strokes nil
   "Control Emacs through mouse strokes."
   :link '(emacs-commentary-link "strokes")
-  :link '(url-link "http://www.mit.edu/people/cadet/strokes-help.html")
   :group 'mouse)
 
 (defcustom strokes-modeline-string " Strokes"
--- a/lisp/subr.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/subr.el	Sun Oct 15 02:54:13 2006 +0000
@@ -2235,7 +2235,9 @@
  BUFFER may be also nil, meaning that this process is not associated
  with any buffer
 COMMAND is the name of a shell command.
-Remaining arguments are the arguments for the command.
+Remaining arguments are the arguments for the command; they are all
+spliced together with blanks separating between each two of them, before
+passing the command to the shell.
 Wildcards and redirection are handled as usual in the shell.
 
 \(fn NAME BUFFER COMMAND &rest COMMAND-ARGS)"
--- a/lisp/textmodes/org.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/textmodes/org.el	Sun Oct 15 02:54:13 2006 +0000
@@ -2690,7 +2690,7 @@
 (make-variable-buffer-local 'org-keyword-time-regexp)
 
 (defconst org-rm-props '(invisible t face t keymap t intangible t mouse-face t
-                                   mouse-map t)
+                                   rear-nonsticky t mouse-map t)
   "Properties to remove when a string without properties is wanted.")
 
 (defsubst org-match-string-no-properties (num &optional string)
@@ -3140,6 +3140,7 @@
       (progn
 	(add-text-properties (match-beginning 0) (match-end 0)
 			     (list 'mouse-face 'highlight
+				   'rear-nonsticky t
 				   'keymap org-mouse-map
 				   ))
 	t)))
@@ -3150,6 +3151,7 @@
       (progn
 	(add-text-properties (match-beginning 0) (match-end 0)
 			     (list 'mouse-face 'highlight
+				   'rear-nonsticky t
 				   'keymap org-mouse-map
 				   ))
 	t)))
@@ -3188,6 +3190,7 @@
       (progn
 	(add-text-properties (match-beginning 0) (match-end 0)
 			     (list 'mouse-face 'highlight
+				   'rear-nonsticky t
 				   'keymap org-mouse-map))
 	t)))
 
@@ -3206,6 +3209,7 @@
 	  (progn
 	    (add-text-properties (match-beginning 0) (match-end 0)
 				 (list 'mouse-face 'highlight
+				       'rear-nonsticky t
 				       'keymap org-mouse-map
 				       'help-echo "Radio target link"
 				       'org-linked-text t))
@@ -3271,6 +3275,7 @@
       (progn
 	(add-text-properties (match-beginning 0) (match-end 0)
 			     (list 'mouse-face 'highlight
+				   'rear-nonsticky t
 				   'keymap org-mouse-map))
 	t)))
 
@@ -3279,6 +3284,7 @@
       (progn
 	(add-text-properties (match-beginning 1) (match-end 1)
 			     (list 'mouse-face 'highlight
+				   'rear-nonsticky t
 				   'keymap org-mouse-map))
 	t)))
 
@@ -3380,6 +3386,7 @@
 	 deactivate-mark buffer-file-name buffer-file-truename)
     (remove-text-properties beg end
 			    '(mouse-face nil keymap nil org-linked-text nil
+					 rear-nonsticky nil
 					 invisible nil intangible nil))))
 ;;; Visibility cycling
 
--- a/lisp/textmodes/reftex-global.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/textmodes/reftex-global.el	Sun Oct 15 02:54:13 2006 +0000
@@ -38,7 +38,8 @@
   (reftex-access-scan-info current-prefix-arg)
   (let* ((master (reftex-TeX-master-file))
          (files  (reftex-all-document-files))
-         (cmd    (format "etags %s" (mapconcat 'identity files " "))))
+         (cmd    (format "etags %s" (mapconcat 'shell-quote-argument
+					       files " "))))
     (save-excursion
       (set-buffer (reftex-get-file-buffer-force master))
       (message "Running etags to create TAGS file...")
--- a/lisp/textmodes/reftex-vars.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/textmodes/reftex-vars.el	Sun Oct 15 02:54:13 2006 +0000
@@ -232,7 +232,7 @@
   "LaTeX label and citation support."
   :tag "RefTeX"
   :link '(url-link :tag "Home Page" 
-                   "http://zon.astro.uva.nl/~dominik/Tools/")
+                   "http://staff.science.uva.nl/~dominik/Tools/reftex/")
   :link '(emacs-commentary-link :tag "Commentary in reftex.el" "reftex.el")
   :link '(custom-manual "(reftex)Top")
   :prefix "reftex-"
--- a/lisp/textmodes/two-column.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/textmodes/two-column.el	Sun Oct 15 02:54:13 2006 +0000
@@ -340,9 +340,9 @@
 ;;;###autoload
 (defun 2C-two-columns (&optional buffer)
   "Split current window vertically for two-column editing.
-When called the first time, associates a buffer with the current
-buffer in two-column minor mode (see  \\[describe-mode] ).
-Runs `2C-other-buffer-hook' in the new buffer.
+\\<global-map>When called the first time, associates a buffer with the current
+buffer in two-column minor mode (use \\[describe-mode] once in the mode,
+for details.).  It runs `2C-other-buffer-hook' in the new buffer.
 When called again, restores the screen layout with the current buffer
 first and the associated buffer to its right."
   (interactive "P")
--- a/lisp/url/ChangeLog	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/url/ChangeLog	Sun Oct 15 02:54:13 2006 +0000
@@ -1,3 +1,22 @@
+2006-10-12  Magnus Henoch  <mange@freemail.hu>
+
+	* url-http.el (url-http-find-free-connection): Handle
+	url-open-stream returning nil.
+
+2006-10-11  Magnus Henoch  <mange@freemail.hu>
+
+	* url-https.el: Remove (clashes with url-http on 8+3 systems).
+
+	* url-http.el: Move contents of url-https.el here.  Add autoloads.
+
+2006-10-09  Magnus Henoch  <mange@freemail.hu>
+
+	* url-parse.el (url-generic-parse-url): Handle URLs with empty
+	path component and non-empty query component.  Untangle path,
+	query and fragment parsing code.  Add references to RFC 3986 in
+	comments.
+	(url-recreate-url-attributes): Start query string with "?", not	";".
+
 2006-09-20  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* url-dav.el (url-dav-file-attributes): Simplify.
@@ -420,32 +439,19 @@
 
 2004-10-10  Lars Hansen  <larsh@math.ku.dk>
 
-	* url-auth.el: Update header and footer.
-
-	* url-cache.el: Update header and footer.
-
-	* url-cid.el: Update header and footer.
-
-	* url-dired.el: Update header and footer.
-
-	* url-expand.el: Update header and footer.
-
-	* url-ftp.el: Update header and footer.
-
-	* url-gw.el: Update header and footer.
-
-	* url-imap.el: Update header and footer.
-
-	* url-irc.el: Update header and footer.
-
-	* url-misc.el: Update header and footer.
-
-	* url-news.el: Update header and footer.
-
-	* url-ns.el: Update header and footer.
-
-	* url-privacy.el: Update header and footer.
-
+	* url-auth.el:
+	* url-cache.el:
+	* url-cid.el:
+	* url-dired.el:
+	* url-expand.el:
+	* url-ftp.el:
+	* url-gw.el:
+	* url-imap.el:
+	* url-irc.el:
+	* url-misc.el:
+	* url-news.el:
+	* url-ns.el:
+	* url-privacy.el:
 	* url-proxy.el: Update header and footer.
 
 	* url-vars.el: Update header.
@@ -490,42 +496,24 @@
 
 2004-10-10  Lars Hansen  <larsh@math.ku.dk>
 
-	* url-auth.el: Fix copyright notice.
-
-	* url-cache.el: Fix copyright notice.
-
-	* url-cookie.el: Fix copyright notice.
-
-	* url-dired.el: Fix copyright notice.
-
-	* url-file.el: Fix copyright notice.
-
-	* url-ftp.el: Fix copyright notice.
-
-	* url-handlers.el: Fix copyright notice.
-
-	* url-history.el: Fix copyright notice.
-
-	* url-irc.el: Fix copyright notice.
-
-	* url-mailto.el: Fix copyright notice.
-
-	* url-methods.el: Fix copyright notice.
-
-	* url-misc.el: Fix copyright notice.
-
-	* url-news.el: Fix copyright notice.
-
-	* url-nfs.el: Fix copyright notice.
-
-	* url-parse.el: Fix copyright notice.
-
-	* url-privacy.el: Fix copyright notice.
-
-	* url-vars.el: Fix copyright notice.
-
-	* url.el: Fix copyright notice.
-
+	* url-auth.el:
+	* url-cache.el:
+	* url-cookie.el:
+	* url-dired.el:
+	* url-file.el:
+	* url-ftp.el:
+	* url-handlers.el:
+	* url-history.el:
+	* url-irc.el:
+	* url-mailto.el:
+	* url-methods.el:
+	* url-misc.el:
+	* url-news.el:
+	* url-nfs.el:
+	* url-parse.el:
+	* url-privacy.el:
+	* url-vars.el:
+	* url.el:
 	* url-util.el: Fix copyright notice.
 
 2004-10-06  Stefan Monnier  <monnier@iro.umontreal.ca>
--- a/lisp/url/url-http.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/url/url-http.el	Sun Oct 15 02:54:13 2006 +0000
@@ -123,8 +123,10 @@
            ;; like authentication.  But we use another buffer afterwards.
            (unwind-protect
                (let ((proc (url-open-stream host buf host port)))
-                 ;; Drop the temp buffer link before killing the buffer.
-                 (set-process-buffer proc nil)
+		 ;; url-open-stream might return nil.
+		 (when (processp proc)
+		   ;; Drop the temp buffer link before killing the buffer.
+		   (set-process-buffer proc nil))
                  proc)
              (kill-buffer buf)))))))
 
@@ -1245,6 +1247,35 @@
     (if buffer (kill-buffer buffer))
     options))
 
+;; HTTPS.  This used to be in url-https.el, but that file collides
+;; with url-http.el on systems with 8-character file names.
+(require 'tls)
+
+;;;###autoload
+(defconst url-https-default-port 443 "Default HTTPS port.")
+;;;###autoload
+(defconst url-https-asynchronous-p t "HTTPS retrievals are asynchronous.")
+;;;###autoload
+(defalias 'url-https-expand-file-name 'url-http-expand-file-name)
+
+(defmacro url-https-create-secure-wrapper (method args)
+  `(defun ,(intern (format (if method "url-https-%s" "url-https") method)) ,args
+    ,(format "HTTPS wrapper around `%s' call." (or method "url-http"))
+    (let ((url-gateway-method (condition-case ()
+				  (require 'ssl)
+				(error 'tls))))
+      (,(intern (format (if method "url-http-%s" "url-http") method))
+       ,@(remove '&rest (remove '&optional args))))))
+
+;;;###autoload (autoload 'url-https "url-http")
+(url-https-create-secure-wrapper nil (url callback cbargs))
+;;;###autoload (autoload 'url-https-file-exists-p "url-http")
+(url-https-create-secure-wrapper file-exists-p (url))
+;;;###autoload (autoload 'url-https-file-readable-p "url-http")
+(url-https-create-secure-wrapper file-readable-p (url))
+;;;###autoload (autoload 'url-https-file-attributes "url-http")
+(url-https-create-secure-wrapper file-attributes (url &optional id-format))
+
 (provide 'url-http)
 
 ;; arch-tag: ba7c59ae-c0f4-4a31-9617-d85f221732ee
--- a/lisp/url/url-https.el	Thu Oct 05 12:20:23 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-;;; url-https.el --- HTTP over SSL/TLS routines
-
-;; Copyright (C) 1999, 2004, 2005, 2006 Free Software Foundation, Inc.
-
-;; Keywords: comm, data, processes
-
-;; This file is part of GNU Emacs.
-;;
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-;;
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'url-gw)
-(require 'url-util)
-(require 'url-parse)
-(require 'url-cookie)
-(require 'url-http)
-(require 'tls)
-
-(defconst url-https-default-port 443 "Default HTTPS port.")
-(defconst url-https-asynchronous-p t "HTTPS retrievals are asynchronous.")
-(defalias 'url-https-expand-file-name 'url-http-expand-file-name)
-
-(defmacro url-https-create-secure-wrapper (method args)
-  `(defun ,(intern (format (if method "url-https-%s" "url-https") method)) ,args
-    ,(format "HTTPS wrapper around `%s' call." (or method "url-http"))
-    (let ((url-gateway-method (condition-case ()
-				  (require 'ssl)
-				(error 'tls))))
-      (,(intern (format (if method "url-http-%s" "url-http") method))
-       ,@(remove '&rest (remove '&optional args))))))
-
-(url-https-create-secure-wrapper nil (url callback cbargs))
-(url-https-create-secure-wrapper file-exists-p (url))
-(url-https-create-secure-wrapper file-readable-p (url))
-(url-https-create-secure-wrapper file-attributes (url &optional id-format))
-
-(provide 'url-https)
-
-;; arch-tag: c3645ac5-c248-4d12-ad41-7c4b6f7b6d19
-;;; url-https.el ends here
--- a/lisp/url/url-parse.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/url/url-parse.el	Sun Oct 15 02:54:13 2006 +0000
@@ -108,7 +108,7 @@
 (defun url-recreate-url-attributes (urlobj)
   "Recreate the attributes of an URL string from the parsed URLOBJ."
   (when (url-attributes urlobj)
-    (concat ";"
+    (concat "?"
 	    (mapconcat (lambda (x)
                          (if (cdr x)
                              (concat (car x) "=" (cdr x))
@@ -120,11 +120,16 @@
   "Return a vector of the parts of URL.
 Format is:
 \[TYPE USER PASSWORD HOST PORT FILE TARGET ATTRIBUTES FULL\]"
+  ;; See RFC 3986.
   (cond
    ((null url)
     (make-vector 9 nil))
    ((or (not (string-match url-nonrelative-link url))
 	(= ?/ (string-to-char url)))
+    ;; This isn't correct, as a relative URL can be a fragment link
+    ;; (e.g. "#foo") and many other things (see section 4.2).
+    ;; However, let's not fix something that isn't broken, especially
+    ;; when close to a release.
     (let ((retval (make-vector 9 nil)))
       (url-set-filename retval url)
       (url-set-full retval nil)
@@ -148,6 +153,8 @@
 	(insert url)
 	(goto-char (point-min))
 	(setq save-pos (point))
+
+	;; 3.1. Scheme
 	(if (not (looking-at "//"))
 	    (progn
 	      (skip-chars-forward "a-zA-Z+.\\-")
@@ -156,13 +163,13 @@
 	      (skip-chars-forward ":")
 	      (setq save-pos (point))))
 
-	;; We are doing a fully specified URL, with hostname and all
+	;; 3.2. Authority
 	(if (looking-at "//")
 	    (progn
 	      (setq full t)
 	      (forward-char 2)
 	      (setq save-pos (point))
-	      (skip-chars-forward "^/")
+	      (skip-chars-forward "^/\\?#")
 	      (setq host (buffer-substring save-pos (point)))
 	      (if (string-match "^\\([^@]+\\)@" host)
 		  (setq user (match-string 1 host)
@@ -170,6 +177,7 @@
 	      (if (and user (string-match "\\([^:]+\\):\\(.*\\)" user))
 		  (setq pass (match-string 2 user)
 			user (match-string 1 user)))
+	      ;; This gives wrong results for IPv6 literal addresses.
 	      (if (string-match ":\\([0-9+]+\\)" host)
 		  (setq port (string-to-number (match-string 1 host))
 			host (substring host 0 (match-beginning 0))))
@@ -181,29 +189,26 @@
 	(if (not port)
 	    (setq port (url-scheme-get-property prot 'default-port)))
 
-	;; Gross hack to preserve ';' in data URLs
-
+	;; 3.3. Path
 	(setq save-pos (point))
+	(skip-chars-forward "^#?")
+	(setq file (buffer-substring save-pos (point)))
 
-	(if (string= "data" prot)
-	    (goto-char (point-max))
-	  ;; Now check for references
+	;; 3.4. Query
+	(when (looking-at "\\?")
+	  (forward-char 1)
+	  (setq save-pos (point))
 	  (skip-chars-forward "^#")
-	  (if (eobp)
-	      nil
-	    (delete-region
-	     (point)
-	     (progn
-	       (skip-chars-forward "#")
-	       (setq refs (buffer-substring (point) (point-max)))
-	       (point-max))))
-	  (goto-char save-pos)
-	  (skip-chars-forward "^;")
-	  (if (not (eobp))
-	      (setq attr (url-parse-args (buffer-substring (point) (point-max)) t)
-		    attr (nreverse attr))))
+	  ;; RFC 3986 specifies no general way of parsing the query
+	  ;; string, but `url-parse-args' seems universal enough.
+	  (setq attr (url-parse-args (buffer-substring save-pos (point)) t)
+		attr (nreverse attr)))
 
-	(setq file (buffer-substring save-pos (point)))
+	;; 3.5. Fragment
+	(when (looking-at "#")
+	  (forward-char 1)
+	  (setq refs (buffer-substring (point) (point-max))))
+
 	(if (and host (string-match "%[0-9][0-9]" host))
 	    (setq host (url-unhex-string host)))
 	(vector prot user pass host port file refs attr full))))))
--- a/lisp/vc-hooks.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/vc-hooks.el	Sun Oct 15 02:54:13 2006 +0000
@@ -52,11 +52,13 @@
 (defvar vc-header-alist ())
 (make-obsolete-variable 'vc-header-alist 'vc-BACKEND-header)
 
-(defvar vc-ignore-dir-regexp "\\`\\([\\/][\\/]\\|/net/\\|/afs/\\)\\'"
- "Regexp matching directory names that are not under VC's control.
+(defcustom vc-ignore-dir-regexp "\\`\\([\\/][\\/]\\|/net/\\|/afs/\\)\\'"
+  "Regexp matching directory names that are not under VC's control.
 The default regexp prevents fruitless and time-consuming attempts
 to determine the VC status in directories in which filenames are
-interpreted as hostnames.")
+interpreted as hostnames."
+  :type 'regexp
+  :group 'vc)
 
 (defcustom vc-handled-backends '(RCS CVS SVN SCCS Arch MCVS)
   ;; Arch and MCVS come last because they are per-tree rather than per-dir.
@@ -308,6 +310,9 @@
   "Find the root of a checked out project.
 The function walks up the directory tree from FILE looking for WITNESS.
 If WITNESS if not found, return nil, otherwise return the root."
+  ;; Represent /home/luser/foo as ~/foo so that we don't try to look for
+  ;; witnesses in /home or in /.
+  (setq file (abbreviate-file-name file))
   (let ((root nil))
     (while (not (or root
                    (equal file (setq file (file-name-directory file)))
--- a/lisp/wid-edit.el	Thu Oct 05 12:20:23 2006 +0000
+++ b/lisp/wid-edit.el	Sun Oct 15 02:54:13 2006 +0000
@@ -1873,7 +1873,7 @@
   "History of field minibuffer edits.")
 
 (defun widget-field-prompt-internal (widget prompt initial history)
-  "Read string for WIDGET promptinhg with PROMPT.
+  "Read string for WIDGET prompting with PROMPT.
 INITIAL is the initial input and HISTORY is a symbol containing
 the earlier input."
   (read-string prompt initial history))
@@ -2864,7 +2864,7 @@
 
 (defcustom widget-documentation-link-p 'intern-soft
   "Predicate used to test if a string is useful as a link.
-The value should be a function.  The function will be called one
+The value should be a function.  The function will be called with one
 argument, a string, and should return non-nil if there should be a
 link for that string."
   :type 'function
--- a/lispref/ChangeLog	Thu Oct 05 12:20:23 2006 +0000
+++ b/lispref/ChangeLog	Sun Oct 15 02:54:13 2006 +0000
@@ -1,3 +1,21 @@
+2006-10-13  Chong Yidong  <cyd@stupidchicken.com>
+
+	* frames.texi (Frame Titles): %c and %l are ignored in
+	frame-title-format.
+
+2006-10-11  Richard Stallman  <rms@gnu.org>
+
+	* keymaps.texi (Key Sequences): Clarify use of kbd.
+
+2006-10-10  Kim F. Storm  <storm@cua.dk>
+
+	* lists.texi (Sets And Lists): Add memql.
+
+2006-10-03  Richard Stallman  <rms@gnu.org>
+
+	* searching.texi (Char Classes): Document :multibyte: and :unibyte:.
+	Clarify :ascii: and :nonascii:.
+
 2006-09-29  Juri Linkov  <juri@jurta.org>
 
 	* modes.texi (%-Constructs): Reorder coding systems in the
@@ -18,10 +36,6 @@
 	* commands.texi (Command Loop Info): Explain how read-event affects
 	this-command-keys.
 
-2006-09-21  Kim F. Storm  <storm@cua.dk>
-
-	* lists.texi (Sets And Lists): Add memql.
-
 2006-09-20  Richard Stallman  <rms@gnu.org>
 
 	* os.texi (Timers): Clarify about REPEAT when timer is delayed.
--- a/lispref/frames.texi	Thu Oct 05 12:20:23 2006 +0000
+++ b/lispref/frames.texi	Sun Oct 15 02:54:13 2006 +0000
@@ -899,7 +899,8 @@
 @defvar frame-title-format
 This variable specifies how to compute a name for a frame when you have
 not explicitly specified one.  The variable's value is actually a mode
-line construct, just like @code{mode-line-format}.  @xref{Mode Line
+line construct, just like @code{mode-line-format}, except that the
+@samp{%c} and @samp{%l} constructs are ignored.  @xref{Mode Line
 Data}.
 @end defvar
 
--- a/lispref/keymaps.texi	Thu Oct 05 12:20:23 2006 +0000
+++ b/lispref/keymaps.texi	Sun Oct 15 02:54:13 2006 +0000
@@ -94,6 +94,9 @@
 (kbd "<f1> SPC") @result{} [f1 32]
 (kbd "C-M-<down>") @result{} [C-M-down]
 @end example
+
+This macro is not meant for use with arguments that vary---only
+with string constants.
 @end defmac
 
 @node Keymap Basics
@@ -169,6 +172,15 @@
 This specifies one binding, for events of type @var{type}.  Each
 ordinary binding applies to events of a particular @dfn{event type},
 which is always a character or a symbol.  @xref{Classifying Events}.
+In this kind of binding, @var{binding} is a command.
+
+@item (@var{type} @var{item-name} .@: @var{binding})
+This specifies a binding which is also a menu item
+named @var{item-name}.  @xref{Simple Menu Items}.
+
+@item (@var{type} menu-item .@: @var{details})
+This specifies a binding which is also a menu item and allows use of
+other features.  @xref{Extended Menu Items}.
 
 @item (t .@: @var{binding})
 @cindex default key binding
@@ -1947,6 +1959,13 @@
 or @code{nil} if it has none.
 @end defun
 
+The menu's items are the bindings in the keymap.  Each binding
+associates an event type to a definition, but the event types have no
+significance for the menu appearance.  (Usually we use pseudo-events,
+symbols that the keyboard cannot generate, as the event types for menu
+item bindings.)  The menu is generated entirely from the bindings that
+correspond in the keymap to these events.
+
 The order of items in the menu is the same as the order of bindings in
 the keymap.  Since @code{define-key} puts new bindings at the front, you
 should define the menu items starting at the bottom of the menu and
@@ -1967,8 +1986,8 @@
 @node Simple Menu Items
 @subsubsection Simple Menu Items
 
-  The simpler and older way to define a menu keymap binding
-looks like this:
+  The simpler (and original) way to define a menu item is to bind some
+event type (it doesn't matter what event type) to a binding like this:
 
 @example
 (@var{item-string} . @var{real-binding})
@@ -1984,25 +2003,26 @@
 encoded using the @code{utf-8} coding system and then rendered by the
 toolkit as it sees fit.}
 
-You can also supply a second string, called the help string, as follows:
+  You can also supply a second string, called the help string, as follows:
 
 @example
 (@var{item-string} @var{help} . @var{real-binding})
 @end example
 
+@noindent
 @var{help} specifies a ``help-echo'' string to display while the mouse
 is on that item in the same way as @code{help-echo} text properties
 (@pxref{Help display}).
 
-As far as @code{define-key} is concerned, @var{item-string} and
+  As far as @code{define-key} is concerned, @var{item-string} and
 @var{help-string} are part of the event's binding.  However,
 @code{lookup-key} returns just @var{real-binding}, and only
 @var{real-binding} is used for executing the key.
 
-If @var{real-binding} is @code{nil}, then @var{item-string} appears in
+  If @var{real-binding} is @code{nil}, then @var{item-string} appears in
 the menu but cannot be selected.
 
-If @var{real-binding} is a symbol and has a non-@code{nil}
+  If @var{real-binding} is a symbol and has a non-@code{nil}
 @code{menu-enable} property, that property is an expression that
 controls whether the menu item is enabled.  Every time the keymap is
 used to display a menu, Emacs evaluates the expression, and it enables
@@ -2010,12 +2030,12 @@
 menu item is disabled, it is displayed in a ``fuzzy'' fashion, and
 cannot be selected.
 
-The menu bar does not recalculate which items are enabled every time you
+  The menu bar does not recalculate which items are enabled every time you
 look at a menu.  This is because the X toolkit requires the whole tree
 of menus in advance.  To force recalculation of the menu bar, call
 @code{force-mode-line-update} (@pxref{Mode Line Format}).
 
-You've probably noticed that menu items show the equivalent keyboard key
+  You've probably noticed that menu items show the equivalent keyboard key
 sequence (if any) to invoke the same command.  To save time on
 recalculation, menu display caches this information in a sublist in the
 binding, like this:
@@ -2035,9 +2055,9 @@
 @kindex menu-item
 
   An extended-format menu item is a more flexible and also cleaner
-alternative to the simple format.  It consists of a list that starts
-with the symbol @code{menu-item}.  To define a non-selectable string,
-the item looks like this:
+alternative to the simple format.  You define an event type with a
+binding that's a list starting with the symbol @code{menu-item}.
+For a non-selectable string, the binding looks like this:
 
 @example
 (menu-item @var{item-name})
@@ -2048,7 +2068,7 @@
 see @ref{Menu Separators}.
 
   To define a real menu item which can be selected, the extended format
-item looks like this:
+binding looks like this:
 
 @example
 (menu-item @var{item-name} @var{real-binding}
--- a/lispref/lists.texi	Thu Oct 05 12:20:23 2006 +0000
+++ b/lispref/lists.texi	Sun Oct 15 02:54:13 2006 +0000
@@ -1395,6 +1395,27 @@
 destructively.  See @ref{Sets And Lists}.
 @end defun
 
+@defun memql object list
+The function @code{member} tests to see whether @var{object} is a member
+of @var{list}, comparing members with @var{object} using @code{eql},
+so floating point elements are compared by value.
+If @var{object} is a member, @code{memql} returns a list starting with
+its first occurrence in @var{list}.  Otherwise, it returns @code{nil}.
+
+Compare this with @code{memq}:
+
+@example
+@group
+(memql 1.2 '(1.1 1.2 1.3)  ; @r{@code{1.2} and @code{1.2} are @code{eql}.}
+     @result{} (1.2 1.3)
+@end group
+@group
+(memq 1.2 '(1.1 1.2 1.3)  ; @r{@code{1.2} and @code{1.2} are not @code{eq}.}
+     @result{} nil
+@end group
+@end example
+@end defun
+
 The following three functions are like @code{memq}, @code{delq} and
 @code{remq}, but use @code{equal} rather than @code{eq} to compare
 elements.  @xref{Equality Predicates}.
--- a/lispref/searching.texi	Thu Oct 05 12:20:23 2006 +0000
+++ b/lispref/searching.texi	Sun Oct 15 02:54:13 2006 +0000
@@ -515,7 +515,7 @@
 
 @table @samp
 @item [:ascii:]
-This matches any @acronym{ASCII} (unibyte) character.
+This matches any @acronym{ASCII} character (codes 0--127).
 @item [:alnum:]
 This matches any letter or digit.  (At present, for multibyte
 characters, it matches anything that has word syntax.)
@@ -535,8 +535,10 @@
 @item [:lower:]
 This matches any lower-case letter, as determined by
 the current case table (@pxref{Case Tables}).
+@item [:multibyte:]
+This matches any multibyte character (@pxref{Text Representations}).
 @item [:nonascii:]
-This matches any non-@acronym{ASCII} (multibyte) character.
+This matches any non-@acronym{ASCII} character.
 @item [:print:]
 This matches printing characters---everything except @acronym{ASCII} control
 characters and the delete character.
@@ -546,6 +548,8 @@
 @item [:space:]
 This matches any character that has whitespace syntax
 (@pxref{Syntax Class Table}).
+@item [:unibyte:]
+This matches any unibyte character (@pxref{Text Representations}).
 @item [:upper:]
 This matches any upper-case letter, as determined by
 the current case table (@pxref{Case Tables}).
--- a/man/ChangeLog	Thu Oct 05 12:20:23 2006 +0000
+++ b/man/ChangeLog	Sun Oct 15 02:54:13 2006 +0000
@@ -1,3 +1,54 @@
+2006-10-13  Andreas Seltenreich  <uwi7@rz.uni-karlsruhe.de>
+
+	* gnus.texi (Other modes): Fix typo.  Add alternative index entry for
+	gnus-dired-attach.
+	(Selecting a Group): Fix typo.
+
+2006-10-12  Roberto Rodr,Am(Bguez  <lanubeblanca@googlemail.com>
+
+	* widget.texi: Fix typos (tiny change)
+
+2006-10-11  Kim F. Storm  <storm@cua.dk>
+
+	* emacs.texi (Acknowledgments): Use @dotless{i}.
+
+2006-10-08  Nick Roberts  <nickrob@snap.net.nz>
+
+	* building.texi (Breakpoints Buffer): Mention catchpoints.
+
+2006-10-08  Kim F. Storm  <storm@cua.dk>
+
+	* ack.texi (Acknowledgments): Update.
+
+	* emacs.texi (Acknowledgments): Fix bad @/ form.
+
+2006-10-06  Reiner Steib  <Reiner.Steib@gmx.de>
+
+	* gnus.texi (Image Enhancements): Update for Emacs 22.
+
+	* gnus-faq.texi ([1.3]): Update.
+
+2006-10-06  Richard Stallman  <rms@gnu.org>
+
+	* faq.texi (Displaying the current line or column):
+	Delete "As of Emacs 20".
+
+2006-10-06  Romain Francoise  <romain@orebokech.com>
+
+	* faq.texi (VM): VM works with Emacs 22 too.
+
+2006-10-06  Richard Stallman  <rms@gnu.org>
+
+	* ebrowse.texi: Remove Emacs version "21" from title.
+
+2006-10-05  Kim F. Storm  <storm@cua.dk>
+
+	* emacs.texi (Acknowledgments): Add more contributors.
+
+2006-10-03  Richard Stallman  <rms@gnu.org>
+
+	* emacs.texi (Acknowledgments): Update version and edition.
+
 2006-10-02  Reiner Steib  <Reiner.Steib@gmx.de>
 
 	* gnus.texi (Foreign Groups): Say where change of editing commands are
@@ -5,13 +56,13 @@
 
 2006-10-01  Karl Berry  <karl@gnu.org>
 
-	* custom.texi (Customization Groups): page break to keep example buffer
+	* custom.texi (Customization Groups): Page break to keep example buffer
 	on one page.
 
 2006-09-30  Karl Berry  <karl@gnu.org>
 
 	* programs.texi (Basic Indent): @need to improve page break.
-	* text.texi: rewording to improve page breaks, and use @LaTeX{}.
+	* text.texi: Rewording to improve page breaks, and use @LaTeX{}.
 
 2006-09-29  Glenn Morris  <rgm@gnu.org>
 
@@ -19,11 +70,11 @@
 
 2006-09-29  Karl Berry  <karl@gnu.org>
 
-	* windows.texi (Basic Window): remove forced @break, no longer
+	* windows.texi (Basic Window): Remove forced @break, no longer
 	desirable.
 	* frames.texi (Frame Commands),
-	* mark.texi (Marking Objects): reword to avoid bad page break.
-	* display.texi (Auto Scrolling): use @tie{} to avoid bad line break.
+	* mark.texi (Marking Objects): Reword to avoid bad page break.
+	* display.texi (Auto Scrolling): Use @tie{} to avoid bad line break.
 
 2006-09-19  Richard Stallman  <rms@gnu.org>
 
@@ -91,8 +142,8 @@
 
 2006-09-01  Eli Zaretskii  <eliz@gnu.org>
 
-	* rcirc.texi (Internet Relay Chat, Useful IRC commands): Don't use
-	@indicateurl.
+	* rcirc.texi (Internet Relay Chat, Useful IRC commands):
+	Don't use @indicateurl.
 
 	* cc-mode.texi (Subword Movement): Don't use @headitem.
 	(Custom Braces, Clean-ups): Don't use @tie.
@@ -101,8 +152,8 @@
 
 	Sync with Tramp 2.0.54.
 
-	* tramp.texi (Bug Reports): The Tramp mailing list is moderated
-	now.  Suggested by Adrian Phillips <a.phillips@met.no>.
+	* tramp.texi (Bug Reports): The Tramp mailing list is moderated now.
+	Suggested by Adrian Phillips <a.phillips@met.no>.
 
 2006-08-28  Richard Stallman  <rms@gnu.org>
 
--- a/man/ack.texi	Thu Oct 05 12:20:23 2006 +0000
+++ b/man/ack.texi	Sun Oct 15 02:54:13 2006 +0000
@@ -34,6 +34,11 @@
 decompression and recompression for compressed files.
 
 @item
+Ralf Angeli wrote @file{scroll-lock.el}, a minor mode which keeps the
+point vertically fixed by scrolling the window when moving up and down
+in the buffer.
+
+@item
 Joe Arceneaux wrote the original text property implementation, and
 implemented support for X11.
 
@@ -62,6 +67,11 @@
 sound effects for Gnus.
 
 @item
+Alexander L. Belikoff, Sergey Berezin, David Edmondson, Andreas
+Fuchs, Mario Lang, Gergely Nagy, Michael Olson, and Alex Schroeder
+contributed ERC, an advanced Internet Relay Chat client.
+
+@item
 Boaz Ben-Zvi wrote @file{profile.el}, to time Emacs Lisp functions.
 
 @item
@@ -173,6 +183,10 @@
 for compiled Emacs Lisp code.
 
 @item
+Mathias Dahl wrote @file{tumme.el}, a package for viewing image files
+as ``thumbnails.''
+
+@item
 Michael DeCorte wrote @file{emacs.csh}, a C-shell script that starts a
 new Emacs job, or restarts a paused Emacs if one exists.
 
@@ -368,8 +382,9 @@
 Odd Gripenstam wrote @file{dcl-mode.el} for editing DCL command files.
 
 @item
-Kai Gro@ss{}johann wrote the Tramp package, which provides transparent
-remote file editing using rcp, ssh, and other network protocols.
+Kai Gro@ss{}johann and Michael Albinus wrote the Tramp package, which
+provides transparent remote file editing using rcp, ssh, ftp, and other
+network protocols.
 
 @item
 Michael Gschwind wrote @file{iso-cvt.el}, a package to convert between
@@ -398,6 +413,9 @@
 File Access facility from Emacs.
 
 @item
+Jesper Harder wrote @file{yenc.el}, for decoding yenc encoded messages.
+
+@item
 K. Shane Hartman wrote:
 
 @itemize @minus
@@ -447,6 +465,8 @@
 template instantiations.
 
 @item
+Joakim Hove wrote @file{html2text.el}, a html to plain text converter.
+@item
 Denis Howe wrote @file{browse-url.el}, a package for invoking a WWW
 browser to display a URL.
 
@@ -462,7 +482,8 @@
 
 @item
 Ulf Jasper wrote @file{icalendar.el}, a package for converting Emacs
-diary entries to and from the iCalendar format.
+diary entries to and from the iCalendar format, and
+@file{newsticker.el}, an RSS and Atom based Newsticker.
 
 @item
 Kyle Jones wrote @file{life.el}, a package to play Conway's ``life'' game,
@@ -493,6 +514,10 @@
 @end itemize
 
 @item
+Arne J@/orgensen wrote @file{latexenc.el}, a package to
+automatically guess the correct coding system in LaTeX files.
+
+@item
 Tomoji Kagatani implemented @file{smtpmail.el}, used for sending out
 mail with SMTP.
 
@@ -545,7 +570,7 @@
 interactive automatic highlighting of parts of the buffer text.
 
 @item
-Koseki Yoshinori wrote @file{iinline.el}, a minor mode for displaying
+Koseki Yoshinori wrote @file{iimage.el}, a minor mode for displaying
 inline images.
 
 @item
@@ -666,8 +691,16 @@
 @end itemize
 
 @item
-Eric Ludlam wrote the Speedbar package and @file{checkdoc.el}, a package
-for checking doc strings in Emacs Lisp programs.
+Eric Ludlam wrote the Speedbar package and the following packages:
+
+@itemize @minus
+@item
+@file{checkdoc.el}, for checking doc strings in Emacs Lisp programs,
+@item
+@file{dframe.el}, providing dedicatd frame support modes, and
+@item
+@file{ezimage.el}, a generalized way to place images over text.
+@end itemize
 
 @item
 Alan Mackenzie wrote the integrated AWK support in CC Mode.
@@ -841,6 +874,10 @@
 Jurgen Nickelsen wrote @file{ws-mode.el}, providing WordStar emulation.
 
 @item
+Hrvoje Niksic wrote @file{savehist.el}, for saving the minibuffer
+history between Emacs sessions.
+
+@item
 Jeff Norden wrote @file{kermit.el}, a package to help the Kermit
 dialup communications program run comfortably in an Emacs shell buffer.
 
@@ -932,10 +969,18 @@
 Soundex algorithm for comparing English words by their pronunciation.
 
 @item
-David Ponce wrote @file{recentf.el}, a package that puts a menu of
-recently visited files in the Emacs menu bar, and
+David Ponce wrote:
+
+@itemize @minus
+@item
+@file{recentf.el}, a package that puts a menu of recently visited
+files in the Emacs menu bar,
+@item
 @file{ruler-mode.el}, a minor mode for displaying a ruler in the
-header line.
+header line, and
+@item
+@file{tree-widget.el}, a package to display hierarchical data structures.
+@end itemize
 
 @item
 Francesco A.@: Potorti wrote @file{cmacexp.el}, providing a command which
@@ -1001,6 +1046,10 @@
 F.@: Schelter, Dick King, Stephen Gildea, Michael Prange, and Jacob Gore.
 
 @item
+David Reitter wrote @file{mailclient.el} which can send mail via the
+system's designated mail client.
+
+@item
 Alex Rezinsky contributed @file{which-func.el}, a mode that shows the
 name of the current function in the mode line.
 
@@ -1239,6 +1288,10 @@
 decoding UTF-8 data.
 
 @item
+Luc Teirlinck wrote @file{help-at-pt.el}, providing local help through
+the keyboard.
+
+@item
 Jean-Philippe Theberge wrote @file{thumbs.el}, a package for viewing
 image files as ``thumbnails.''
 
@@ -1262,8 +1315,10 @@
 subprocess.
 
 @item
+Eli Tziperman wrote @file{rmail-spam-filter.el}, a spam filter for RMAIL.
+@item
 Daiki Ueno wrote @file{starttls.el}, support for Transport Layer
-Security protocol.
+Security protocol, and the PGG package adding GnuPG and PGP support.
 
 @item
 Masanobu Umeda wrote:
@@ -1422,7 +1477,7 @@
 
 @item
 Masatake Yamato wrote @file{ld-script.el}, an editing mode for GNU
-linker scripts.
+linker scripts, and contributed subword handling in CC mode.
 
 @item
 Jonathan Yavner wrote @file{testcover.el}, a package for keeping track
@@ -1430,6 +1485,8 @@
 package.
 
 @item
+Ryan Yeske wrote @file{rcirc.el} a simple Internet Relay Chat client.
+@item
 Ilya Zakharevich and Bob Olson contributed @file{cperl-mode.el}, a major
 mode for editing Perl code.  Ilya Zakharevich also wrote @file{tmm.el},
 a mode for accessing the Emacs menu bar on a text-mode terminal.
--- a/man/building.texi	Thu Oct 05 12:20:23 2006 +0000
+++ b/man/building.texi	Sun Oct 15 02:54:13 2006 +0000
@@ -964,8 +964,8 @@
 @node Breakpoints Buffer
 @subsubsection Breakpoints Buffer
 
-  The breakpoints buffer shows the existing breakpoints and
-watchpoints (@pxref{Breakpoints,,, gdb, The GNU debugger}).  It has
+  The breakpoints buffer shows the existing breakpoints, watchpoints and
+catchpoints (@pxref{Breakpoints,,, gdb, The GNU debugger}).  It has
 these special commands, which mostly apply to the @dfn{current
 breakpoint}, the breakpoint which point is on.
 
--- a/man/ebrowse.texi	Thu Oct 05 12:20:23 2006 +0000
+++ b/man/ebrowse.texi	Sun Oct 15 02:54:13 2006 +0000
@@ -41,7 +41,7 @@
 @titlepage
 @title Ebrowse User's Manual
 @sp 4
-@subtitle Ebrowse/Emacs 21
+@subtitle Ebrowse/Emacs
 @sp 1
 @subtitle May 2000
 @sp 5
--- a/man/emacs.texi	Thu Oct 05 12:20:23 2006 +0000
+++ b/man/emacs.texi	Sun Oct 15 02:54:13 2006 +0000
@@ -4,8 +4,8 @@
 @settitle GNU Emacs Manual
 
 @c The edition number appears in several places in this file
-@set EDITION   Fourteenth
-@set EMACSVER  22.0.50
+@set EDITION   Sixteenth
+@set EMACSVER  22.1
 
 @copying
 This is the @value{EDITION} edition of the @cite{GNU Emacs Manual},
@@ -1023,70 +1023,83 @@
 @node Acknowledgments, Intro, Distrib, Top
 @unnumberedsec Acknowledgments
 
-Contributors to GNU Emacs include Per Abrahamsen, Tomas Abrahamsson,
-Jay K.@: Adams, Joe Arceneaux, Miles Bader, David Bakhash, Eli
-Barzilay, Steven L.@: Baur, Boaz Ben-Zvi, Ray Blaak, Jim Blandy, Per
-Bothner, Terrence Brannon, Frank Bresz, Peter Breton, Emmanuel Briot,
-Kevin Broadey, Vincent Broman, David M.@: Brown, Georges Brun-Cottan,
-W@l{}odek Bzyl, Bill Carpenter, Per Cederqvist, Hans Chalupsky, Chris
-Chase, Bob Chassell, Andrew Choi, James Clark, Mike Clarkson, Glynn
-Clements, Andrew Csillag, Doug Cutting, Michael DeCorte, Gary Delp,
-Matthieu Devin, Eri Ding, Jan Dj@"{a}rv, Carsten Dominik, Scott
-Draves, Benjamin Drieu, Viktor Dukhovni, John Eaton, Rolf Ebert,
-Stephen Eglen, Torbj@"orn Einarsson, Tsugutomo Enami, Hans Henrik
-Eriksen, Michael Ernst, Ata Etemadi, Frederick Farnbach, Oscar
-Figueiredo, Fred Fish, Karl Fogel, Gary Foster, Noah Friedman,
-Hallvard Furuseth, Keith Gabryelski, Kevin Gallagher, Kevin Gallo,
-Juan Le@'{o}n Lahoz Garc@'{i}a, Howard Gayle, Stephen Gildea, Julien
-Gilles, David Gillespie, Bob Glickstein, Boris Goldowsky, Michelangelo
-Grigni, Odd Gripenstam, Kai Gro@ss{}johann, Michael Gschwind, Henry
-Guillaume, Doug Gwyn, Ken'ichi Handa, Chris Hanson, K. Shane Hartman,
-John Heidemann, Jon K.@: Hellan, Markus Heritsch, Karl Heuer, Manabu
-Higashida, Anders Holst, Kurt Hornik, Tom Houlder, Denis Howe, Lars
-Ingebrigtsen, Andrew Innes, Seiichiro Inoue, Ulf Jasper, Michael
-K. Johnson, Kyle Jones, Terry Jones, Simon Josefsson, Tomoji Kagatani,
-Brewster Kahle, David Kaufman, Henry Kautz, Taichi Kawabata, Howard
-Kaye, Michael Kifer, Richard King, Peter Kleiweg, Larry K.@: Kolodney,
-Pavel Kobiakov, Larry K.@: Kolodney, David M.@: Koppelman, Koseki
-Yoshinori, Robert Krawitz, Sebastian Kremer, Ryszard Kubiak, Geoff
-Kuenning, David K@aa{}gedal, Daniel LaLiberte, Aaron Larson, James
-R.@: Larus, Vinicius Jose Latorre, Frederic Lepied, Peter Liljenberg,
-Lars Lindberg, Chris Lindblad, Anders Lindgren, Thomas Link, Dave
-Love, Eric Ludlam, Alan Mackenzie, Christopher J.@: Madsen,
-Neil M.@: Mager, Ken Manheimer, Bill Mann, Brian Marick, Simon
-Marshall, Bengt Martensson, Charlie Martin, Thomas May, Roland McGrath,
-Will Mengarini, David Megginson, Wayne Mesard, Brad Miller, Richard
+Contributors to GNU Emacs include Jari Aalto, Per Abrahamsen, Tomas
+Abrahamsson, Jay K.@: Adams, Michael Albinus, Nagy Andras, Ralf
+Angeli, Joe Arceneaux, Miles Bader, David Bakhash, Juanma Barranquero,
+Eli Barzilay, Steven L.@: Baur, Jay Belanger, Alexander L.@: Belikoff,
+Boaz Ben-Zvi, Karl Berry, Ray Blaak, Jim Blandy, Johan Bockg@aa{}rd,
+Per Bothner, Terrence Brannon, Frank Bresz, Peter Breton, Emmanuel
+Briot, Kevin Broadey, Vincent Broman, David M.@: Brown, Georges
+Brun-Cottan, Joe Buehler, W@l{}odek Bzyl, Bill Carpenter, Per
+Cederqvist, Hans Chalupsky, Chris Chase, Bob Chassell, Andrew Choi,
+Sacha Chua, James Clark, Mike Clarkson, Glynn Clements, Andrew
+Csillag, Doug Cutting, Mathias Dahl, Satyaki Das, Michael DeCorte,
+Gary Delp, Matthieu Devin, Eri Ding, Jan Dj@"{a}rv, Carsten Dominik,
+Scott Draves, Benjamin Drieu, Viktor Dukhovni, John Eaton, Rolf Ebert,
+Paul Eggert, Stephen Eglen, Torbj@"orn Einarsson, Tsugutomo Enami,
+Hans Henrik Eriksen, Michael Ernst, Ata Etemadi, Frederick Farnbach,
+Oscar Figueiredo, Fred Fish, Karl Fogel, Gary Foster, Romain
+Francoise, Noah Friedman, Andreas Fuchs, Hallvard Furuseth, Keith
+Gabryelski, Peter S.@: Galbraith, Kevin Gallagher, Kevin Gallo, Juan
+Le@'{o}n Lahoz Garc@'{@dotless{i}}a, Howard Gayle, Stephen Gildea, Julien
+Gilles, David Gillespie, Bob Glickstein, Deepak Goel, Boris Goldowsky,
+Michelangelo Grigni, Odd Gripenstam, Kai Gro@ss{}johann, Michael
+Gschwind, Henry Guillaume, Doug Gwyn, Ken'ichi Handa, Lars Hansen,
+Chris Hanson, K. Shane Hartman, John Heidemann, Jon K.@: Hellan,
+Jesper Harder, Markus Heritsch, Karl Heuer, Manabu Higashida, Anders
+Holst, Jeffrey C.@: Honig, Kurt Hornik, Tom Houlder, Joakim Hove,
+Denis Howe, Lars Ingebrigtsen, Andrew Innes, Seiichiro Inoue, Pavel
+Janik, Paul Jarc, Ulf Jasper, Michael K. Johnson, Kyle Jones, Terry
+Jones, Simon Josefsson, Arne J@/orgensen, Tomoji Kagatani, Brewster
+Kahle, Lute Kamstra, David Kastrup, David Kaufman, Henry Kautz, Taichi
+Kawabata, Howard Kaye, Michael Kifer, Richard King, Peter Kleiweg,
+Shuhei Kobayashi, Pavel Kobiakov, Larry K.@: Kolodney, David M.@:
+Koppelman, Koseki Yoshinori, Robert Krawitz, Sebastian Kremer, Ryszard
+Kubiak, Geoff Kuenning, David K@aa{}gedal, Daniel LaLiberte, Mario
+Lang, Aaron Larson, James R.@: Larus, Vinicius Jose Latorre, Werner
+Lemberg, Frederic Lepied, Peter Liljenberg, Lars Lindberg, Chris
+Lindblad, Anders Lindgren, Thomas Link, Juri Linkov, Francis Litterio,
+Emilio C. Lopes, Dave Love, Sascha L@"{u}decke, Eric Ludlam,Alan
+Mackenzie, Christopher J.@: Madsen, Neil M.@: Mager, Ken Manheimer,
+Bill Mann, Brian Marick, Simon Marshall, Bengt Martensson, Charlie
+Martin, Thomas May, Roland McGrath, Will Mengarini, David Megginson,
+Ben A. Mesander, Wayne Mesard, Brad Miller, Lawrence Mitchell, Richard
 Mlynarik, Gerd Moellmann, Stefan Monnier, Morioka Tomohiko, Keith
-Moore, Sen Nagata, Erik Naggum, Thomas Neumann, Thien-Thi Nguyen, Mike
-Newton, Jurgen Nickelsen, Dan Nicolaescu, Jeff Norden, Andrew Norman,
-Alexandre Oliva, Bob Olson, Takaaki Ota, Pieter E.@: J.@: Pareit,
+Moore, Glenn Morris, Diane Murray, Sen Nagata, Erik Naggum, Thomas
+Neumann, Thien-Thi Nguyen, Mike Newton, Jurgen Nickelsen, Dan
+Nicolaescu, Hrvoje Niksic, Jeff Norden, Andrew Norman, Alexandre
+Oliva, Bob Olson, Michael Olson, Takaaki Ota, Pieter E.@: J.@: Pareit,
 David Pearson, Jeff Peck, Damon Anton Permezel, Tom Perrine, William
-M.@: Perry, Per Persson, Jens Petersen, Daniel Pfeiffer, Richard
-L.@: Pieri, Fred Pierresteguy, Christian Plaunt, David Ponce, Francesco
-A. Potorti, Michael D. Prange, Mukesh Prasad, Marko Rahamaa, Ashwin
-Ram, Eric S. Raymond, Paul Reilly, Edward M. Reingold, Alex Rezinsky,
-Rob Riepel, Nick Roberts, Roland B.@: Roberts, John Robinson, Danny
-Roozendaal, William Rosenblatt, Guillermo J.@: Rozas, Ivar Rummelhoff,
-Jason Rumney, Wolfgang Rupprecht, Kevin Ryde, James B. Salem, Masahiko
-Sato, Holger Schauer, William Schelter, Ralph Schleicher, Gregor
+M.@: Perry, Per Persson, Jens Petersen, Daniel Pfeiffer, Richard L.@:
+Pieri, Fred Pierresteguy, Christian Plaunt, David Ponce, Francesco
+A.@: Potorti, Michael D. Prange, Mukesh Prasad, Ken Raeburn, Marko
+Rahamaa, Ashwin Ram, Eric S. Raymond, Paul Reilly, Edward M. Reingold,
+Alex Rezinsky, Rob Riepel, David Reitter, Nick Roberts, Roland B.@:
+Roberts, John Robinson, Danny Roozendaal, William Rosenblatt,
+Guillermo J.@: Rozas, Martin Rudalics, Ivar Rummelhoff, Jason Rumney,
+Wolfgang Rupprecht, Kevin Ryde, James B. Salem, Masahiko Sato, Jorgen
+Schaefer, Holger Schauer, William Schelter, Ralph Schleicher, Gregor
 Schmid, Michael Schmidt, Ronald S. Schnell, Philippe Schnoebelen, Jan
-Schormann, Alex Schroeder, Stephen Schoef, Randal Schwartz, Oliver
-Seidel, Manuel Serrano, Hovav Shacham, Stanislav Shalunov, Mark
-Shapiro, Richard Sharman, Olin Shivers, Espen Skoglund, Rick Sladkey,
-Lynn Slater, Chris Smith, David Smith, Paul D.@: Smith, Andre Spiegel,
-Michael Staats, William Sommerfeld, Michael Staats, Sam Steingold, Ake
-Stenhoff, Peter Stephenson, Ken Stevens, Jonathan Stigelman, Martin
-Stjernholm, Kim F.@: Storm, Steve Strassman, Olaf Sylvester, Naoto
-Takahashi, Jean-Philippe Theberge, Jens T.@: Berger Thielemann,
-Spencer Thomas, Jim Thompson, Tom Tromey, Daiki Ueno, Masanobu Umeda,
-Rajesh Vaidheeswarran, Neil W.@: Van Dyke, Didier Verna, Ulrik Vieth,
-Geoffrey Voelker, Johan Vromans, Inge Wallin, Colin Walters, Barry
-Warsaw, Morten Welinder, Joseph Brian Wells, Rodney Whitby, John
-Wiegley, Ed Wilkinson, Mike Williams, Bill Wohler, Steven A. Wood,
-Dale R.@: Worley, Francis J.@: Wright, Felix S. T. Wu, Tom Wurgler,
-Masatake Yamato, Jonathan Yavner, Ilya Zakharevich, Milan Zamazal,
-Victor Zandy, Eli Zaretskii, Jamie Zawinski, Shenghuo Zhu, Ian
-T.@: Zimmermann, Reto Zimmermann, Neal Ziring, and Detlev Zundel.
+Schormann, Alex Schroeder, Stephen Schoef, Raymond Scholz, Randal
+Schwartz, Oliver Seidel, Manuel Serrano, Hovav Shacham, Stanislav
+Shalunov, Mark Shapiro, Richard Sharman, Olin Shivers, Espen Skoglund,
+Rick Sladkey, Lynn Slater, Chris Smith, David Smith, Paul D.@: Smith,
+Andre Spiegel, Michael Staats, William Sommerfeld, Michael Staats,
+Reiner Steib, Sam Steingold, Ake Stenhoff, Peter Stephenson, Ken
+Stevens, Jonathan Stigelman, Martin Stjernholm, Kim F.@: Storm, Steve
+Strassman, Olaf Sylvester, Naoto Takahashi, Steven Tamm, Jean-Philippe
+Theberge, Jens T.@: Berger Thielemann, Spencer Thomas, Jim Thompson,
+Luc Teirlinck, Tom Tromey, Enami Tsugutomo, Eli Tziperman, Daiki Ueno,
+Masanobu Umeda, Rajesh Vaidheeswarran, Neil W.@: Van Dyke, Didier
+Verna, Ulrik Vieth, Geoffrey Voelker, Johan Vromans, Inge Wallin, John
+Paul Wallington, Colin Walters, Barry Warsaw, Morten Welinder, Joseph
+Brian Wells, Rodney Whitby, John Wiegley, Ed Wilkinson, Mike Williams,
+Bill Wohler, Steven A. Wood, Dale R.@: Worley, Francis J.@: Wright,
+Felix S. T. Wu, Tom Wurgler, Katsumi Yamaoka, Masatake Yamato,
+Jonathan Yavner, Ryan Yeske, Chong Yidong, Ilya Zakharevich, Milan
+Zamazal, Victor Zandy, Eli Zaretskii, Jamie Zawinski, Shenghuo Zhu,
+Ian T.@: Zimmermann, Reto Zimmermann, Neal Ziring, Teodor Zlatanov,
+and Detlev Zundel.
 @end iftex
 
 @node Intro, Glossary, Distrib, Top
--- a/man/faq.texi	Thu Oct 05 12:20:23 2006 +0000
+++ b/man/faq.texi	Sun Oct 15 02:54:13 2006 +0000
@@ -1382,7 +1382,7 @@
 number if the buffer's size in bytes is larger than the value of the
 variable @code{line-number-display-limit}.
 
-As of Emacs 20, you can similarly display the current column with
+You can similarly display the current column with
 @kbd{M-x column-number-mode}, or by putting the form
 
 @lisp
@@ -3848,8 +3848,8 @@
 Or send reports to @email{bug-vm@@wonderworks.com}
 @end table
 
-VM 7 works well with Emacs 21. Older versions of VM suitable for use
-with older versions of Emacs are available from
+VM 7 works well with Emacs 21 and Emacs 22. Older versions of VM
+suitable for use with older versions of Emacs are available from
 @uref{ftp://ftp.wonderworks.com/pub/vm/, the same FTP site}.
 
 
--- a/man/gnus-faq.texi	Thu Oct 05 12:20:23 2006 +0000
+++ b/man/gnus-faq.texi	Sun Oct 15 02:54:13 2006 +0000
@@ -172,13 +172,14 @@
 
 @subsubheading Answer
 
-The latest released version of Gnus isn't included in
-Emacs 21, therefor you should get the Gnus tarball from
-@uref{http://www.gnus.org/dist/gnus.tar.gz}
-or via anonymous FTP from 
+Gnus is released independent from releases of Emacs and XEmacs.
+Therefore, the version bundled with Emacs or the version in XEmacs'
+package system might not be up to date (e.g. Gnus 5.9 bundled with Emacs
+20 is outdated).
+@c
+You can get the latest released version of Gnus from
+@uref{http://www.gnus.org/dist/gnus.tar.gz} or via anonymous FTP from
 @uref{ftp://ftp.gnus.org/pub/gnus/gnus.tar.gz}.
-If you use XEmacs instead of Emacs you can use XEmacs'
-package system instead.
 
 @node [1.4]
 @subsubheading Question 1.4
--- a/man/gnus.texi	Thu Oct 05 12:20:23 2006 +0000
+++ b/man/gnus.texi	Sun Oct 15 02:54:13 2006 +0000
@@ -2139,7 +2139,7 @@
 automatically when entering a group with the @kbd{SPACE} command.
 Which article this is is controlled by the
 @code{gnus-auto-select-subject} variable.  Valid values for this
-variable is:
+variable are:
 
 @table @code
 
@@ -22137,8 +22137,8 @@
 @section Image Enhancements
 
 XEmacs, as well as Emacs 21@footnote{Emacs 21 on MS Windows doesn't
-support images yet.}, is able to display pictures and stuff, so Gnus has
-taken advantage of that.
+support images, Emacs 22 does.} and up, are able to display pictures and
+stuff, so Gnus has taken advantage of that.
 
 @menu
 * X-Face::                      Display a funky, teensy black-and-white image.
@@ -24471,7 +24471,7 @@
 @subsection Dired
 @cindex dired
 
-@code{gnus-dired-minor-mode} provided some useful functions for dired
+@code{gnus-dired-minor-mode} provides some useful functions for dired
 buffers.  It is enabled with
 @lisp
 (add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)
@@ -24480,6 +24480,7 @@
 @table @kbd
 @item C-c C-m C-a
 @findex gnus-dired-attach
+@cindex attachments, selection via dired
 Send dired's marked files as an attachment (@code{gnus-dired-attach}).
 You will be prompted for a message buffer.
 
--- a/man/widget.texi	Thu Oct 05 12:20:23 2006 +0000
+++ b/man/widget.texi	Sun Oct 15 02:54:13 2006 +0000
@@ -158,7 +158,7 @@
 @comment  node-name,  next,  previous,  up
 @section User Interface
 
-A form consist of read only text for documentation and some fields,
+A form consists of read only text for documentation and some fields,
 where each field contains two parts, a tag and a value.  The tags are
 used to identify the fields, so the documentation can refer to the
 @samp{foo field}, meaning the field tagged with @samp{Foo}. Here is an
@@ -195,7 +195,7 @@
 @b{[Apply Form]} @b{[Reset Form]}
 @end example
 
-The top level widgets in is example are tagged @samp{Name},
+The top level widgets in this example are tagged @samp{Name},
 @samp{Choose}, @samp{Address}, @samp{_other work_}, @samp{Numbers},
 @samp{Select multiple}, @samp{Select one}, @samp{[Apply Form]}, and
 @samp{[Reset Form]}.  There are basically two things the user can do
@@ -277,19 +277,19 @@
 @cindex embedded buttons
 @item Embedded Buttons
 The @samp{@b{_other work_}} is an example of an embedded
-button.  Embedded buttons are not associated with a fields, but can serve
+button.  Embedded buttons are not associated with any fields, but can serve
 any purpose, such as implementing hypertext references.  They are
 usually created by the @code{link} widget.
 @item The @samp{@b{[ ]}} and @samp{@b{[X]}} buttons
 Activating one of these will convert it to the other.  This is useful
-for implementing multiple-choice fields.  You can create it with the
+for implementing multiple-choice fields.  You can create them with the
 @code{checkbox} widget.
 @item The @samp{@b{( )}} and @samp{@b{(*)}} buttons
 Only one radio button in a @code{radio-button-choice} widget can be
 selected at any time.  When you invoke one of the unselected radio
 buttons, it will be selected and the previous selected radio button will
 become unselected.
-@item The @samp{@b{[Apply Form]}} @samp{@b{[Reset Form]}} buttons
+@item The @samp{@b{[Apply Form]}} and @samp{@b{[Reset Form]}} buttons
 These are explicit buttons made with the @code{push-button} widget.  The
 main difference from the @code{link} widget is that the buttons will be
 displayed as GUI buttons when possible.
@@ -492,7 +492,7 @@
 are interpreted in a widget specific way.
 
 @cindex keyword arguments
-The following keyword arguments that apply to all widgets:
+The following keyword arguments apply to all widgets:
 
 @table @code
 @vindex value@r{ keyword}
@@ -807,7 +807,7 @@
 @end example
 
 The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in
+property.  The value should be a string, which will be inserted in the
 field.  This widget will match all string values.
 
 The following extra properties are recognized:
@@ -1349,7 +1349,7 @@
 
 @deffn Widget list
 The value of a @code{list} widget is a list containing the value of
-each of its component.
+each of its components.
 @end deffn
 
 @deffn Widget vector
@@ -1359,11 +1359,11 @@
 
 The above suffice for specifying fixed size lists and vectors.  To get
 variable length lists and vectors, you can use a @code{choice},
-@code{set}, or @code{repeat} widgets together with the @code{:inline}
-keywords.  If any component of a composite widget has the @code{:inline}
+@code{set}, or @code{repeat} widget together with the @code{:inline}
+keyword.  If any component of a composite widget has the @code{:inline}
 keyword set, its value must be a list which will then be spliced into
 the composite.  For example, to specify a list whose first element must
-be a file name, and whose remaining arguments should either by the
+be a file name, and whose remaining arguments should either be the
 symbol @code{t} or two files, you can use the following widget
 specification:
 
@@ -1390,7 +1390,7 @@
 
 @deffn Widget set
 Allows you to specify a type which must be a list whose elements all
-belong to given set.  The elements of the list are not significant.
+belong to the given set.  The elements of the list are not significant.
 This is implemented on top of the @code{checklist} basic widget, and has
 a similar syntax.
 @end deffn
--- a/nt/INSTALL	Thu Oct 05 12:20:23 2006 +0000
+++ b/nt/INSTALL	Sun Oct 15 02:54:13 2006 +0000
@@ -103,7 +103,7 @@
   If you use the MinGW port of GCC and GNU Make to build Emacs, there
   are some compatibility issues wrt Make and the shell that is run by
   Make, either the standard COMMAND.COM/CMD.EXE supplied with Windows
-  or sh.exe., a port of a Unixy shell.  For reference, here is a list
+  or sh.exe., a port of a Unixy shell.  For reference, below is a list
   of which builds of GNU Make are known to work or not, and whether
   they work in the presence and/or absence of sh.exe, the Cygwin port
   of Bash. Note that any version of Make that is compiled with Cygwin
@@ -129,6 +129,8 @@
     cygwin compiled gmake 3.77:          fails[1, 5]   fails[2, 5]
     cygwin compiled make 3.78.1:         fails[5]      fails[2, 5]
     cygwin compiled make 3.79.1:         fails[3, 5]   fails[2?, 5]
+    cygwin compiled make 3.80:           fails?[6]     fails?[6]
+    cygwin compiled make 3.81:           fails         fails?[6]
     mingw32 compiled make 3.79.1:        okay          okay
     mingw32 compiled make 3.80:          okay          unknown[6]
     mingw32 compiled make 3.81:          okay          okay[7]
--- a/src/ChangeLog	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/ChangeLog	Sun Oct 15 02:54:13 2006 +0000
@@ -1,3 +1,91 @@
+2006-10-14  Richard Stallman  <rms@gnu.org>
+
+	* sysdep.c (init_sys_modes): Delete DEFVAR_LISP in the wrong place.
+
+2006-10-13  Chong Yidong  <cyd@stupidchicken.com>
+
+	* xdisp.c (decode_mode_spec): Ignore %c and %l constructs in frame
+	title.
+
+2006-10-12  Chong Yidong  <cyd@stupidchicken.com>
+
+	* keymap.c (Fkey_binding): Check Lisp_Object types before doing
+	XCAR and XINT.
+
+2006-10-12  Romain Francoise  <romain@orebokech.com>
+
+	* image.c (xbm_read_bitmap_data): Delete extra semicolon.
+
+2006-10-10  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* eval.c: Include xterm.h for x_fully_uncatch_errors and friends.
+
+	* dispextern.h: Declare x_create_bitmap_from_xpm_data.
+
+	* xterm.c (x_check_expected_move): Remove unused var `count'.
+
+	* xmenu.c (syms_of_xmenu): Use Ffset rather than Fdefalias, since
+	Fdefalias is not declared in any *.h file.
+
+2006-10-09  Chong Yidong  <cyd@stupidchicken.com>
+
+	* dispnew.c (sit_for): Sit forever if TIMEOUT is t.
+
+	* keyboard.c (command_loop_1): Handle non-number values of
+	`minibuffer-message-timeout'.
+	(Fexecute_extended_command): Fix typo.
+
+	* minibuf.c (temp_echo_area_glyphs): Sit for
+	`minibuffer-message-timeout' seconds.
+
+2006-10-08  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+	* macterm.c (mac_draw_image_string, mac_draw_image_string_16):
+	Add argument OVERSTRIKE_P.
+	(mac_draw_string_common, mac_draw_image_string_cg): Likewise.
+	Support overstrike.
+	(mac_draw_string, mac_draw_string_16): Remove functions.
+	(x_draw_glyph_string_foreground): Use overstrike when needed.
+	(x_draw_composite_glyph_string_foreground): Likewise.
+	Use mac_draw_image_string_16 instead of mac_draw_string_16.
+	(mac_load_query_font): Rename from XLoadQueryFont.  Take argument F
+	instead of DPY.  All uses changed.  Don't save/restore font.
+
+2006-10-07  Ralf Angeli  <angeli@caeruleus.net>
+
+	* w32fns.c (w32_createwindow): Honour left and top positions if
+	supplied explicitly.
+
+2006-10-06  Kim F. Storm  <storm@cua.dk>
+
+	* xdisp.c (pos_visible_p): Fix value when EOB is visible.
+
+2006-10-05  Chong Yidong  <cyd@stupidchicken.com>
+
+	* frame.c (Qinhibit_face_set_after_frame_default): New var.
+	(syms_of_frame): Initialize it.
+	(x_set_frame_parameters): Avoid resetting :font attributes to the
+	new-frame defaults.
+
+2006-10-03  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* lisp.h (clear_regexp_cache): Declare.
+
+	* search.c (compile_pattern): Only check `cp->syntax_table' if needed.
+	(compile_pattern_1): Remember `used_syntax' in `cp->syntax_table'.
+	(clear_regexp_cache): Only flush those regexps which depend on
+	a syntax-table.
+
+	* regex.c (regex_compile): Set the new `used_syntax' bit.
+
+	* regex.h: Remove file local variables.
+	(struct re_pattern_buffer): New field `used_syntax'.
+
+2006-10-03  Kim F. Storm  <storm@cua.dk>
+
+	* process.c (list_processes_1): Run sentinels before removing dead
+	processes.  Also remove `closed' network connections.
+
 2006-10-01  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* xdisp.c (handle_fontified_prop): Don't fontify at EOB.
@@ -52,8 +140,8 @@
 
 2006-09-24  Eli Zaretskii  <eliz@gnu.org>
 
-	* makefile.w32-in ($(BLD)/fns.$(O), $(BLD)/w32proc.$(O)): Depend
-	on nt/inc/langinfo.h and nt/inc/nl_types.h.
+	* makefile.w32-in ($(BLD)/fns.$(O), $(BLD)/w32proc.$(O)):
+	Depend on nt/inc/langinfo.h and nt/inc/nl_types.h.
 
 	* w32proc.c (nl_langinfo): New function.
 
@@ -235,8 +323,7 @@
 
 2006-09-15  David Kastrup  <dak@gnu.org>
 
-	* Makefile.in (keymap.o): Add "keymap.h" and "window.h"
-	dependencies.
+	* Makefile.in (keymap.o): Add "keymap.h" and "window.h" dependencies.
 
 	* keymap.c: include "window.h".
 	(Fcommand_remapping): New optional POSITION argument.
@@ -1477,7 +1564,7 @@
 	(x_set_offset, x_check_fullscreen): Extensive changes to make
 	frame positioning deterministic under X.
 
-	* xterm.h (x_output): Added members left_before_move and
+	* xterm.h (x_output): Add members left_before_move and
 	top_before_move.  Removed members expected_left and expected_top.
 
 2006-06-16  Kim F. Storm  <storm@cua.dk>
--- a/src/dispextern.h	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/dispextern.h	Sun Oct 15 02:54:13 2006 +0000
@@ -2794,6 +2794,9 @@
 extern int x_create_bitmap_from_data P_ ((struct frame *, char *,
 					  unsigned int, unsigned int));
 extern int x_create_bitmap_from_file P_ ((struct frame *, Lisp_Object));
+#if defined (HAVE_XPM) && defined (HAVE_X_WINDOWS)
+extern int x_create_bitmap_from_xpm_data P_ ((struct frame *f, char **bits));
+#endif
 #ifndef x_destroy_bitmap
 extern void x_destroy_bitmap P_ ((struct frame *, int));
 #endif
--- a/src/dispnew.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/dispnew.c	Sun Oct 15 02:54:13 2006 +0000
@@ -6488,7 +6488,8 @@
 /* This is just like wait_reading_process_output, except that
    it does redisplay.
 
-   TIMEOUT is number of seconds to wait (float or integer).
+   TIMEOUT is number of seconds to wait (float or integer),
+   or t to wait forever.
    READING is 1 if reading input.
    If DO_DISPLAY is >0 display process output while waiting.
    If DO_DISPLAY is >1 perform an initial redisplay before waiting.
@@ -6521,10 +6522,15 @@
       sec = (int) seconds;
       usec = (int) ((seconds - sec) * 1000000);
     }
+  else if (EQ (timeout, Qt))
+    {
+      sec = 0;
+      usec = 0;
+    }
   else
     wrong_type_argument (Qnumberp, timeout);
 
-  if (sec == 0 && usec == 0)
+  if (sec == 0 && usec == 0 && !EQ (timeout, Qt))
     return Qt;
 
 #ifdef SIGIO
--- a/src/eval.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/eval.c	Sun Oct 15 02:54:13 2006 +0000
@@ -28,6 +28,10 @@
 #include "dispextern.h"
 #include <setjmp.h>
 
+#if HAVE_X_WINDOWS
+#include "xterm.h"
+#endif
+
 /* This definition is duplicated in alloc.c and keyboard.c */
 /* Putting it in lisp.h makes cc bomb out! */
 
--- a/src/frame.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/frame.c	Sun Oct 15 02:54:13 2006 +0000
@@ -116,6 +116,7 @@
 Lisp_Object Qfont_backend;
 #endif	/* USE_FONT_BACKEND */
 
+Lisp_Object Qinhibit_face_set_after_frame_default;
 Lisp_Object Qface_set_after_frame_default;
 
 
@@ -2742,12 +2743,20 @@
           || EQ (prop, Qfullscreen))
 	{
 	  register Lisp_Object param_index, old_value;
+	  int count = SPECPDL_INDEX ();
 
 	  old_value = get_frame_param (f, prop);
  	  fullscreen_is_being_set |= EQ (prop, Qfullscreen);
 
 	  if (NILP (Fequal (val, old_value)))
 	    {
+	      /* For :font attributes, the frame_parm_handler
+		 x_set_font calls `face-set-after-frame-default'.
+		 Unless we bind inhibit-face-set-after-frame-default
+		 here, this would reset the :font attribute that we
+		 just applied to the default value for new faces.  */
+	      specbind (Qinhibit_face_set_after_frame_default, Qt);
+
 	      store_frame_param (f, prop, val);
 
 	      param_index = Fget (prop, Qx_frame_parameter);
@@ -2756,6 +2765,8 @@
 		      < sizeof (frame_parms)/sizeof (frame_parms[0]))
 		  && rif->frame_parm_handlers[XINT (param_index)])
 		(*(rif->frame_parm_handlers[XINT (param_index)])) (f, val, old_value);
+
+	      unbind_to (count, Qnil);
 	    }
 	}
     }
@@ -4112,6 +4123,10 @@
   Qface_set_after_frame_default = intern ("face-set-after-frame-default");
   staticpro (&Qface_set_after_frame_default);
 
+  Qinhibit_face_set_after_frame_default
+    = intern ("inhibit-face-set-after-frame-default");
+  staticpro (&Qinhibit_face_set_after_frame_default);
+
   Qfullwidth = intern ("fullwidth");
   staticpro (&Qfullwidth);
   Qfullheight = intern ("fullheight");
--- a/src/image.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/image.c	Sun Oct 15 02:54:13 2006 +0000
@@ -3151,7 +3151,7 @@
       expect_ident ("define");
       expect (XBM_TK_IDENT);
 
-      if (LA1 == XBM_TK_NUMBER);
+      if (LA1 == XBM_TK_NUMBER)
 	{
           char *p = strrchr (buffer, '_');
 	  p = p ? p + 1 : buffer;
--- a/src/keyboard.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/keyboard.c	Sun Oct 15 02:54:13 2006 +0000
@@ -1546,15 +1546,17 @@
 
       if (minibuf_level
 	  && !NILP (echo_area_buffer[0])
-	  && EQ (minibuf_window, echo_area_window)
-	  && NUMBERP (Vminibuffer_message_timeout))
+	  && EQ (minibuf_window, echo_area_window))
 	{
 	  /* Bind inhibit-quit to t so that C-g gets read in
 	     rather than quitting back to the minibuffer.  */
 	  int count = SPECPDL_INDEX ();
 	  specbind (Qinhibit_quit, Qt);
 
-	  sit_for (Vminibuffer_message_timeout, 0, 2);
+	  if (NUMBERP (Vminibuffer_message_timeout))
+	    sit_for (Vminibuffer_message_timeout, 0, 2);
+	  else
+	    sit_for (Qt, 0, 2);
 
 	  /* Clear the echo area.  */
 	  message2 (0, 0, 0);
@@ -9981,7 +9983,7 @@
       if (NILP (echo_area_buffer[0]))
 	waited = sit_for (make_number (0), 0, 2);
       else if (NUMBERP (Vsuggest_key_bindings))
-	waited = sit_for (Vminibuffer_message_timeout, 0, 2);
+	waited = sit_for (Vsuggest_key_bindings, 0, 2);
       else
 	waited = sit_for (make_number (2), 0, 2);
 
--- a/src/keymap.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/keymap.c	Sun Oct 15 02:54:13 2006 +0000
@@ -1643,13 +1643,12 @@
 
       /* We are not interested in locations without event data */
 
-      if (EVENT_HAS_PARAMETERS (event)) {
-	Lisp_Object kind;
-
-	kind = EVENT_HEAD_KIND (EVENT_HEAD (event));
-	if (EQ (kind, Qmouse_click))
-	  position = EVENT_START (event);
-      }
+      if (EVENT_HAS_PARAMETERS (event))
+	{
+	  Lisp_Object kind = EVENT_HEAD_KIND (EVENT_HEAD (event));
+	  if (CONSP (XCDR (event)) && EQ (kind, Qmouse_click))
+	    position = EVENT_START (event);
+	}
     }
 
   /* Key sequences beginning with mouse clicks
@@ -1742,7 +1741,8 @@
 	      
 	      pos = XCDR (string);
 	      string = XCAR (string);
-	      if (XINT (pos) >= 0
+	      if (INTEGERP (pos)
+		  && XINT (pos) >= 0
 		  && XINT (pos) < SCHARS (string))
 		{
 		  map = Fget_text_property (pos, Qlocal_map, string);
--- a/src/lisp.h	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/lisp.h	Sun Oct 15 02:54:13 2006 +0000
@@ -2957,6 +2957,7 @@
 extern int find_next_newline_no_quit P_ ((int, int));
 extern int find_before_next_newline P_ ((int, int, int));
 extern void syms_of_search P_ ((void));
+extern void clear_regexp_cache P_ ((void));
 
 /* defined in minibuf.c */
 
--- a/src/macterm.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/macterm.c	Sun Oct 15 02:54:13 2006 +0000
@@ -893,12 +893,13 @@
 
 
 static void
-mac_draw_string_common (f, gc, x, y, buf, nchars, bg_width, bytes_per_char)
+mac_draw_string_common (f, gc, x, y, buf, nchars, bg_width,
+			overstrike_p, bytes_per_char)
      struct frame *f;
      GC gc;
      int x, y;
      char *buf;
-     int nchars, bg_width, bytes_per_char;
+     int nchars, bg_width, overstrike_p, bytes_per_char;
 {
   SetPortWindowPort (FRAME_MAC_WINDOW (f));
 
@@ -948,6 +949,13 @@
 	  ATSUDrawText (text_layout,
 			kATSUFromTextBeginning, kATSUToTextEnd,
 			kATSUUseGrafPortPenLoc, kATSUUseGrafPortPenLoc);
+	  if (overstrike_p)
+	    {
+	      MoveTo (x + 1, y);
+	      ATSUDrawText (text_layout,
+			    kATSUFromTextBeginning, kATSUToTextEnd,
+			    kATSUUseGrafPortPenLoc, kATSUUseGrafPortPenLoc);
+	    }
 	  mac_end_clip (gc);
 #ifdef MAC_OSX
 	}
@@ -991,9 +999,15 @@
 				       sizeof (tags) / sizeof (tags[0]),
 				       tags, sizes, values);
 	  if (err == noErr)
-	    ATSUDrawText (text_layout,
-			  kATSUFromTextBeginning, kATSUToTextEnd,
-			  Long2Fix (x), Long2Fix (port_height - y));
+	    {
+	      ATSUDrawText (text_layout,
+			    kATSUFromTextBeginning, kATSUToTextEnd,
+			    Long2Fix (x), Long2Fix (port_height - y));
+	      if (overstrike_p)
+		ATSUDrawText (text_layout,
+			      kATSUFromTextBeginning, kATSUToTextEnd,
+			      Long2Fix (x + 1), Long2Fix (port_height - y));
+	    }
 #if USE_CG_DRAWING
 	  mac_end_cg_clip (f);
 	  context = NULL;
@@ -1059,6 +1073,12 @@
       TextFace (GC_FONT (gc)->mac_fontface);
       MoveTo (x, y);
       DrawText (buf, 0, nchars * bytes_per_char);
+      if (overstrike_p)
+	{
+	  TextMode (srcOr);
+	  MoveTo (x + 1, y);
+	  DrawText (buf, 0, nchars * bytes_per_char);
+	}
       if (bg_width)
 	RGBBackColor (GC_BACK_COLOR (FRAME_NORMAL_GC (f)));
       mac_end_clip (gc);
@@ -1071,59 +1091,33 @@
 }
 
 
-/* Mac replacement for XDrawString.  */
-
-static void
-mac_draw_string (f, gc, x, y, buf, nchars)
+/* Mac replacement for XDrawImageString.  */
+
+static void
+mac_draw_image_string (f, gc, x, y, buf, nchars, bg_width, overstrike_p)
      struct frame *f;
      GC gc;
      int x, y;
      char *buf;
-     int nchars;
-{
-  mac_draw_string_common (f, gc, x, y, buf, nchars, 0, 1);
-}
-
-
-/* Mac replacement for XDrawString16. */
-
-static void
-mac_draw_string_16 (f, gc, x, y, buf, nchars)
+     int nchars, bg_width, overstrike_p;
+{
+  mac_draw_string_common (f, gc, x, y, buf, nchars, bg_width,
+			  overstrike_p, 1);
+}
+
+
+/* Mac replacement for XDrawImageString16.  */
+
+static void
+mac_draw_image_string_16 (f, gc, x, y, buf, nchars, bg_width, overstrike_p)
      struct frame *f;
      GC gc;
      int x, y;
      XChar2b *buf;
-     int nchars;
-{
-  mac_draw_string_common (f, gc, x, y, (char *) buf, nchars, 0, 2);
-}
-
-
-/* Mac replacement for XDrawImageString.  */
-
-static void
-mac_draw_image_string (f, gc, x, y, buf, nchars, bg_width)
-     struct frame *f;
-     GC gc;
-     int x, y;
-     char *buf;
-     int nchars, bg_width;
-{
-  mac_draw_string_common (f, gc, x, y, buf, nchars, bg_width, 1);
-}
-
-
-/* Mac replacement for XDrawString16.  */
-
-static void
-mac_draw_image_string_16 (f, gc, x, y, buf, nchars, bg_width)
-     struct frame *f;
-     GC gc;
-     int x, y;
-     XChar2b *buf;
-     int nchars, bg_width;
-{
-  mac_draw_string_common (f, gc, x, y, (char *) buf, nchars, bg_width, 2);
+     int nchars, bg_width, overstrike_p;
+{
+  mac_draw_string_common (f, gc, x, y, (char *) buf, nchars, bg_width,
+			  overstrike_p, 2);
 }
 
 
@@ -1297,12 +1291,12 @@
 }
 
 static int
-mac_draw_image_string_cg (f, gc, x, y, buf, nchars, bg_width)
+mac_draw_image_string_cg (f, gc, x, y, buf, nchars, bg_width, overstrike_p)
      struct frame *f;
      GC gc;
      int x, y;
      XChar2b *buf;
-     int nchars, bg_width;
+     int nchars, bg_width, overstrike_p;
 {
   CGrafPtr port;
   float port_height, gx, gy;
@@ -1364,10 +1358,17 @@
 #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030
   CGContextSetTextPosition (context, gx, gy);
   CGContextShowGlyphsWithAdvances (context, glyphs, advances, nchars);
+  if (overstrike_p)
+    {
+      CGContextSetTextPosition (context, gx + 1.0f, gy);
+      CGContextShowGlyphsWithAdvances (context, glyphs, advances, nchars);
+    }
 #else
   for (i = 0; i < nchars; i++)
     {
       CGContextShowGlyphsAtPoint (context, gx, gy, glyphs + i, 1);
+      if (overstrike_p)
+	CGContextShowGlyphsAtPoint (context, gx + 1.0f, gy, glyphs + i, 1);
       gx += advances[i].width;
     }
 #endif
@@ -2773,15 +2774,18 @@
 #if USE_CG_TEXT_DRAWING
 	if (!s->two_byte_p
 	    && mac_draw_image_string_cg (s->f, s->gc, x, s->ybase - boff,
-					 s->char2b, s->nchars, bg_width))
+					 s->char2b, s->nchars, bg_width,
+					 s->face->overstrike))
 	  ;
 	else
 #endif
 	  mac_draw_image_string_16 (s->f, s->gc, x, s->ybase - boff,
-				    s->char2b, s->nchars, bg_width);
+				    s->char2b, s->nchars, bg_width,
+				    s->face->overstrike);
       else
 	mac_draw_image_string (s->f, s->gc, x, s->ybase - boff,
-			       char1b, s->nchars, bg_width);
+			       char1b, s->nchars, bg_width,
+			       s->face->overstrike);
     }
 }
 
@@ -2817,10 +2821,10 @@
   else
     {
       for (i = 0; i < s->nchars; i++, ++s->gidx)
-	mac_draw_string_16 (s->f, s->gc,
-			    x + s->cmp->offsets[s->gidx * 2],
-			    s->ybase - s->cmp->offsets[s->gidx * 2 + 1],
-			    s->char2b + i, 1);
+	mac_draw_image_string_16 (s->f, s->gc,
+				  x + s->cmp->offsets[s->gidx * 2],
+				  s->ybase - s->cmp->offsets[s->gidx * 2 + 1],
+				  s->char2b + i, 1, 0, s->face->overstrike);
     }
 }
 
@@ -7801,14 +7805,16 @@
 }
 
 
-/* XLoadQueryFont creates and returns an internal representation for a
-   font in a MacFontStruct struct.  There is really no concept
+/* mac_load_query_font creates and returns an internal representation
+   for a font in a MacFontStruct struct.  There is really no concept
    corresponding to "loading" a font on the Mac.  But we check its
    existence and find the font number and all other information for it
    and store them in the returned MacFontStruct.  */
 
 static MacFontStruct *
-XLoadQueryFont (Display *dpy, char *fontname)
+mac_load_query_font (f, fontname)
+     struct frame *f;
+     char *fontname;
 {
   int size;
   char *name;
@@ -8019,26 +8025,13 @@
   else
 #endif
     {
-      GrafPtr port;
-      SInt16 old_fontnum, old_fontsize;
-      Style old_fontface;
       FontInfo the_fontinfo;
       int is_two_byte_font;
 
 #if USE_CG_DRAWING
-      mac_prepare_for_quickdraw (NULL);
-#endif
-      /* Save the current font number used.  */
-      GetPort (&port);
-#if TARGET_API_MAC_CARBON
-      old_fontnum = GetPortTextFont (port);
-      old_fontsize = GetPortTextSize (port);
-      old_fontface = GetPortTextFace (port);
-#else
-      old_fontnum = port->txFont;
-      old_fontsize = port->txSize;
-      old_fontface = port->txFace;
-#endif
+      mac_prepare_for_quickdraw (f);
+#endif
+      SetPortWindowPort (FRAME_MAC_WINDOW (f));
 
       TextFont (fontnum);
       TextSize (size);
@@ -8120,11 +8113,6 @@
 	  for (c = 0x21, pcm = space_bounds + 1; c <= 0xff; c++, pcm++)
 	    mac_query_char_extents (NULL, c, NULL, NULL, pcm, NULL);
 	}
-
-      /* Restore previous font number, size and face.  */
-      TextFont (old_fontnum);
-      TextSize (old_fontsize);
-      TextFace (old_fontface);
     }
 
   if (space_bounds)
@@ -8264,7 +8252,7 @@
     fontname = (char *) SDATA (XCAR (font_names));
 
     BLOCK_INPUT;
-    font = (MacFontStruct *) XLoadQueryFont (FRAME_MAC_DISPLAY (f), fontname);
+    font = mac_load_query_font (f, fontname);
     UNBLOCK_INPUT;
     if (!font)
       return NULL;
--- a/src/minibuf.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/minibuf.c	Sun Oct 15 02:54:13 2006 +0000
@@ -2683,6 +2683,8 @@
    that has no possible completions, and other quick, unobtrusive
    messages.  */
 
+extern Lisp_Object Vminibuffer_message_timeout;
+
 void
 temp_echo_area_glyphs (string)
      Lisp_Object string;
@@ -2701,7 +2703,12 @@
   insert_from_string (string, 0, 0, SCHARS (string), SBYTES (string), 0);
   SET_PT_BOTH (opoint, opoint_byte);
   Vinhibit_quit = Qt;
-  sit_for (make_number (2), 0, 2);
+
+  if (NUMBERP (Vminibuffer_message_timeout))
+    sit_for (Vminibuffer_message_timeout, 0, 2);
+  else
+    sit_for (Qt, 0, 2);
+
   del_range_both (osize, osize_byte, ZV, ZV_BYTE, 1);
   SET_PT_BOTH (opoint, opoint_byte);
   if (!NILP (Vquit_flag))
--- a/src/process.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/process.c	Sun Oct 15 02:54:13 2006 +0000
@@ -1313,6 +1313,7 @@
   register struct Lisp_Process *p;
   char tembuf[300];
   int w_proc, w_buffer, w_tty;
+  int exited = 0;
   Lisp_Object i_status, i_buffer, i_tty, i_command;
 
   w_proc = 4;    /* Proc   */
@@ -1439,8 +1440,8 @@
 	    }
 	}
 
-      if (EQ (symbol, Qsignal) || EQ (symbol, Qexit))
-	remove_process (proc);
+      if (EQ (symbol, Qsignal) || EQ (symbol, Qexit) || EQ (symbol, Qclosed))
+	exited++;
 
       Findent_to (i_buffer, minspace);
       if (NILP (p->buffer))
@@ -1504,6 +1505,8 @@
 	  insert_string ("\n");
        }
     }
+  if (exited)
+    status_notify (NULL);
   return Qnil;
 }
 
--- a/src/regex.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/regex.c	Sun Oct 15 02:54:13 2006 +0000
@@ -2589,6 +2589,7 @@
   bufp->syntax = syntax;
   bufp->fastmap_accurate = 0;
   bufp->not_bol = bufp->not_eol = 0;
+  bufp->used_syntax = 0;
 
   /* Set `used' to zero, so that if we return an error, the pattern
      printer (for debugging) will think there's no pattern.  We reset it
@@ -3014,6 +3015,14 @@
 			      }
 			  }
 
+			/* In most cases the matching rule for char classes
+			   only uses the syntax table for multibyte chars,
+			   so that the content of the syntax-table it is not
+			   hardcoded in the range_table.  SPACE and WORD are
+			   the two exceptions.  */
+			if ((1 << cc) & ((1 << RECC_SPACE) | (1 << RECC_WORD)))
+			  bufp->used_syntax = 1;
+
 			/* Repeat the loop. */
 			continue;
 		      }
--- a/src/regex.h	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/regex.h	Sun Oct 15 02:54:13 2006 +0000
@@ -392,6 +392,10 @@
         /* Similarly for an end-of-line anchor.  */
   unsigned not_eol : 1;
 
+  /* If true, the compilation of the pattern had to look up the syntax table,
+     so the compiled pattern is only valid for the current syntax table.  */
+  unsigned used_syntax : 1;
+
 #ifdef emacs
   /* If true, multi-byte form in the regexp pattern should be
      recognized as a multibyte character.  When the pattern is
@@ -620,13 +624,5 @@
 
 #endif /* regex.h */
 
-/*
-Local variables:
-make-backup-files: t
-version-control: t
-trim-versions-without-asking: nil
-End:
-*/
-
 /* arch-tag: bda6e3ec-3c02-4237-a55a-01ad2e120083
    (do not change this comment) */
--- a/src/search.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/search.c	Sun Oct 15 02:54:13 2006 +0000
@@ -43,7 +43,8 @@
   struct regexp_cache *next;
   Lisp_Object regexp, whitespace_regexp;
   /* Syntax table for which the regexp applies.  We need this because
-     of character classes.  */
+     of character classes.  If this is t, then the compiled pattern is valid
+     for any syntax-table.  */
   Lisp_Object syntax_table;
   struct re_pattern_buffer buf;
   char fastmap[0400];
@@ -137,7 +138,6 @@
   cp->buf.multibyte = STRING_MULTIBYTE (pattern);
   cp->buf.target_multibyte = multibyte;
   cp->whitespace_regexp = Vsearch_spaces_regexp;
-  cp->syntax_table = current_buffer->syntax_table;
   /* rms: I think BLOCK_INPUT is not needed here any more,
      because regex.c defines malloc to call xmalloc.
      Using BLOCK_INPUT here means the debugger won't run if an error occurs.
@@ -151,6 +151,10 @@
   val = (char *) re_compile_pattern ((char *) SDATA (pattern),
 				     SBYTES (pattern), &cp->buf);
 
+  /* If the compiled pattern hard codes some of the contents of the
+     syntax-table, it can only be reused with *this* syntax table.  */
+  cp->syntax_table = cp->buf.used_syntax ? current_buffer->syntax_table : Qt;
+
   re_set_whitespace_regexp (NULL);
 
   re_set_syntax (old);
@@ -178,7 +182,8 @@
     }
 }
 
-/* Clear the regexp cache.
+/* Clear the regexp cache w.r.t. a particular syntax table,
+   because it was changed.
    There is no danger of memory leak here because re_compile_pattern
    automagically manages the memory in each re_pattern_buffer struct,
    based on its `allocated' and `buffer' values.  */
@@ -188,7 +193,11 @@
   int i;
 
   for (i = 0; i < REGEXP_CACHE_SIZE; ++i)
-    searchbufs[i].regexp = Qnil;
+    /* It's tempting to compare with the syntax-table we've actually changd,
+       but it's not sufficient because char-table inheritance mewans that
+       modifying one syntax-table can change others at the same time.  */
+    if (!EQ (searchbufs[i].syntax_table, Qt))
+      searchbufs[i].regexp = Qnil;
 }
 
 /* Compile a regexp if necessary, but first check to see if there's one in
@@ -227,10 +236,8 @@
 	  && EQ (cp->buf.translate, (! NILP (translate) ? translate : make_number (0)))
 	  && cp->posix == posix
 	  && cp->buf.target_multibyte == multibyte
-	  /* TODO: Strictly speaking, we only need to match syntax
-	     tables when a character class like [[:space:]] occurs in
-	     the pattern. -- cyd*/
-	  && EQ (cp->syntax_table, current_buffer->syntax_table)
+	  && (EQ (cp->syntax_table, Qt)
+	      || EQ (cp->syntax_table, current_buffer->syntax_table))
 	  && !NILP (Fequal (cp->whitespace_regexp, Vsearch_spaces_regexp)))
 	break;
 
--- a/src/sysdep.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/sysdep.c	Sun Oct 15 02:54:13 2006 +0000
@@ -1373,16 +1373,6 @@
 {
   struct emacs_tty tty;
 
-#ifdef MAC_OS8
-/* cus-start.el complains if delete-exited-processes is not defined */
-#ifndef subprocesses
-  DEFVAR_BOOL ("delete-exited-processes", &delete_exited_processes,
-	       doc: /* *Non-nil means delete processes immediately when they exit.
-nil means don't delete them until `list-processes' is run.  */);
-  delete_exited_processes = 0;
-#endif
-#endif /* MAC_OS8 */
-
 #ifdef VMS
 #if 0
   static int oob_chars[2] = {0, 1 << 7}; /* catch C-g's */
--- a/src/w32fns.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/w32fns.c	Sun Oct 15 02:54:13 2006 +0000
@@ -2109,7 +2109,12 @@
 	}
     }
 
-  if (EQ (left, Qunbound) && EQ (top, Qunbound))
+  if (f->size_hint_flags & USPosition || f->size_hint_flags & PPosition)
+    {
+      XSETINT (left, f->left_pos);
+      XSETINT (top, f->top_pos);
+    }
+  else if (EQ (left, Qunbound) && EQ (top, Qunbound))
     {
       /* When called with RES_TYPE_NUMBER, w32_get_arg will return zero
 	 for anything that is not a number and is not Qunbound.  */
--- a/src/xdisp.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/xdisp.c	Sun Oct 15 02:54:13 2006 +0000
@@ -1355,7 +1355,8 @@
       it2 = it;
       if (IT_CHARPOS (it) < ZV && FETCH_BYTE (IT_BYTEPOS (it)) != '\n')
 	move_it_by_lines (&it, 1, 0);
-      if (charpos < IT_CHARPOS (it))
+      if (charpos < IT_CHARPOS (it)
+	  || (it.what == IT_EOB && charpos == IT_CHARPOS (it)))
 	{
 	  visible_p = 1;
 	  move_it_to (&it2, charpos, -1, -1, -1, MOVE_TO_POS);
@@ -17823,12 +17824,20 @@
       break;
 
     case 'c':
-      {
-	int col = (int) current_column (); /* iftc */
-	w->column_number_displayed = make_number (col);
-	pint2str (decode_mode_spec_buf, field_width, col);
-	return decode_mode_spec_buf;
-      }
+      /* %c and %l are ignored in `frame-title-format'.
+         (In redisplay_internal, the frame title is drawn _before_ the
+         windows are updated, so the stuff which depends on actual
+         window contents (such as %l) may fail to render properly, or
+         even crash emacs.)  */
+      if (mode_line_target == MODE_LINE_TITLE)
+	return "";
+      else
+	{
+	  int col = (int) current_column (); /* iftc */
+	  w->column_number_displayed = make_number (col);
+	  pint2str (decode_mode_spec_buf, field_width, col);
+	  return decode_mode_spec_buf;
+	}
 
     case 'e':
 #ifndef SYSTEM_MALLOC
@@ -17870,11 +17879,16 @@
 
     case 'l':
       {
-	int startpos = XMARKER (w->start)->charpos;
-	int startpos_byte = marker_byte_position (w->start);
-	int line, linepos, linepos_byte, topline;
-	int nlines, junk;
-	int height = WINDOW_TOTAL_LINES (w);
+	int startpos, startpos_byte, line, linepos, linepos_byte;
+	int topline, nlines, junk, height;
+
+	/* %c and %l are ignored in `frame-title-format'.  */
+	if (mode_line_target == MODE_LINE_TITLE)
+	  return "";
+
+	startpos = XMARKER (w->start)->charpos;
+	startpos_byte = marker_byte_position (w->start);
+	height = WINDOW_TOTAL_LINES (w);
 
 	/* If we decided that this buffer isn't suitable for line numbers,
 	   don't forget that too fast.  */
@@ -24319,9 +24333,10 @@
   DEFVAR_LISP ("frame-title-format", &Vframe_title_format,
     doc: /* Template for displaying the title bar of visible frames.
 \(Assuming the window manager supports this feature.)
-This variable has the same structure as `mode-line-format' (which see),
-and is used only on frames for which no explicit name has been set
-\(see `modify-frame-parameters').  */);
+
+This variable has the same structure as `mode-line-format', except that
+the %c and %l constructs are ignored.  It is used only on frames for
+which no explicit name has been set \(see `modify-frame-parameters').  */);
 
   DEFVAR_LISP ("icon-title-format", &Vicon_title_format,
     doc: /* Template for displaying the title bar of an iconified frame.
--- a/src/xmenu.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/xmenu.c	Sun Oct 15 02:54:13 2006 +0000
@@ -3776,8 +3776,7 @@
 
 #if defined (USE_GTK) || defined (USE_X_TOOLKIT)
   defsubr (&Smenu_bar_open);
-  Fdefalias (intern ("accelerate-menu"), intern (Smenu_bar_open.symbol_name),
-             Qnil);
+  Ffset (intern ("accelerate-menu"), intern (Smenu_bar_open.symbol_name));
 #endif
 
 #ifdef HAVE_MENUS
--- a/src/xterm.c	Thu Oct 05 12:20:23 2006 +0000
+++ b/src/xterm.c	Sun Oct 15 02:54:13 2006 +0000
@@ -8638,7 +8638,7 @@
      int expected_left;
      int expected_top;
 {
-  int count = 0, current_left = 0, current_top = 0;
+  int current_left = 0, current_top = 0;
 
   /* x_real_positions returns the left and top offsets of the outermost
      window manager window around the frame.  */